JBoss4.0.3 + Oracle 9i (JNDI)

原创 2007年09月27日 20:13:00

 

这个测试的这个例子中不含EJB内容,只是一个非常简单的数据库连接,因为其中一个细节纠缠了一整天所以记下来权做教训:).
试验的最终目的是这样:
  ......
    Context ctx = new InitialContext();   //具体jndi环境设置在jndi.properties中指定
    DataSource ds = (DataSource)ctx.lookup("Zqb Oracle Test"); //其中Zqb Oracle Test是我在oracle-ds.xml中指定的JNDI名
    
    Connection conn = ds.getConnection();
    PreparedStatement ps = conn.prepareStatement("select count(1) from css_emp_info");
    ResultSet rs = ps.executeQuery();
 ......

步骤如下:
   1,jndi.properties(使用jboss缺省的内容,不做修改):
          java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
          java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
   2,将jboss-4.0.1sp1/docs/examples/jca下的oracle-ds.xml拷贝到jboss-4.0.1sp1/server/default/deploy下,并做相应修改,主要内容如下:
<datasources>
  <local-tx-datasource>
    <jndi-name>Zqb Oracle Test</jndi-name>
    <use-java-context>false</use-java-context>
    <connection-url>jdbc:oracle:thin:@10.25.10.175:1521:pacesdev</connection-url>
    <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
    <user-name>cesbase</user-name>
    <password>voiture6</password>
    <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter</exception-sorter-class-name>
      <metadata>
         <type-mapping>Oracle9i</type-mapping>
      </metadata>
  </local-tx-datasource>
</datasources>
   3,OK,部署war,搞定!其中红色标注的是后面加上的,有了这句在jndi前可以不用加前缀;否则,需要加前缀java(即:lookup("Zqb Oracle Test") 和 lookup("java:Zqb Oracle Test")的区别).

补充: 发现在jboss官方网站有关于use-java-context这个属性的说明 http://wiki.jboss.org/wiki/Wiki.jsp?page=ConfigDataSources ,仔细看看!
 

--------------------------------------------------自己的例子--------------------------------------------

oracle-ds.xml

<?xml version="1.0" encoding="UTF-8"?>

<!-- ===================================================================== -->
<!--                                                                       -->
<!--  JBoss Server Configuration                                           -->
<!--                                                                       -->
<!-- ===================================================================== -->

<!-- $Id: oracle-ds.xml,v 1.6 2004/09/15 14:37:40 loubyansky Exp $ -->
<!-- ==================================================================== -->
<!--  Datasource config for Oracle originally from Steven Coy             -->
<!-- ==================================================================== -->


<datasources>
  
<local-tx-datasource>
 
<!--   <jndi-name>OracleDS</jndi-name>   -->
    
<jndi-name>ming</jndi-name>
    
<use-java-context>false</use-java-context>
    
<connection-url>jdbc:oracle:thin:@3.242.165.91:1521:GETEST</connection-url>
    
<!--

        Here are a couple of the possible OCI configurations.
        For more information, see http://otn.oracle.com/docs/products/oracle9i/doc_library/release2/java.920/a96654/toc.htm

    <connection-url>jdbc:oracle:oci:@youroracle-tns-name</connection-url>
        or
    <connection-url>jdbc:oracle:oci:@(description=(address=(host=youroraclehost)(protocol=tcp)(port=1521))(connect_data=(SERVICE_NAME=yourservicename)))</connection-url>

        Clearly, its better to have TNS set up properly.
     
-->
    
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
    
<user-name>ming</user-name>
    
<password>tata123</password>
    
<!-- Uses the pingDatabase method to check a connection is still valid before handing it out from the pool -->
    
<!--valid-connection-checker-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleValidConnectionChecker</valid-connection-checker-class-name-->
    
<!-- Checks the Oracle error codes and messages for fatal errors -->
    
<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter</exception-sorter-class-name>
        
<!-- sql to call when connection is created
        <new-connection-sql>some arbitrary sql</new-connection-sql>
        
-->

        
<!-- sql to call on an existing pooled connection when it is obtained from pool - the OracleValidConnectionChecker is prefered
        <check-valid-connection-sql>some arbitrary sql</check-valid-connection-sql>
        
-->

      
<!-- corresponding type-mapping in the standardjbosscmp-jdbc.xml (optional) -->
      
<metadata>
         
<type-mapping>Oracle9i</type-mapping>
      
</metadata>
  
</local-tx-datasource>
  
<local-tx-datasource>
 
<!--   <jndi-name>OracleDS</jndi-name>   -->
    
<jndi-name>mingtest</jndi-name>
    
<use-java-context>false</use-java-context>
    
<connection-url>jdbc:oracle:thin:@3.242.164.53:1521:ora</connection-url>
    
<!--

        Here are a couple of the possible OCI configurations.
        For more information, see http://otn.oracle.com/docs/products/oracle9i/doc_library/release2/java.920/a96654/toc.htm

    <connection-url>jdbc:oracle:oci:@youroracle-tns-name</connection-url>
        or
    <connection-url>jdbc:oracle:oci:@(description=(address=(host=youroraclehost)(protocol=tcp)(port=1521))(connect_data=(SERVICE_NAME=yourservicename)))</connection-url>

        Clearly, its better to have TNS set up properly.
     
-->
    
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
    
<user-name>ming</user-name>
    
<password>tata123</password>
    
<!-- Uses the pingDatabase method to check a connection is still valid before handing it out from the pool -->
    
<!--valid-connection-checker-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleValidConnectionChecker</valid-connection-checker-class-name-->
    
<!-- Checks the Oracle error codes and messages for fatal errors -->
    
<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter</exception-sorter-class-name>
        
<!-- sql to call when connection is created
        <new-connection-sql>some arbitrary sql</new-connection-sql>
        
-->

        
<!-- sql to call on an existing pooled connection when it is obtained from pool - the OracleValidConnectionChecker is prefered
        <check-valid-connection-sql>some arbitrary sql</check-valid-connection-sql>
        
-->

      
<!-- corresponding type-mapping in the standardjbosscmp-jdbc.xml (optional) -->
      
<metadata>
         
<type-mapping>Oracle9i</type-mapping>
      
</metadata>
  
</local-tx-datasource>

</datasources>

jsp page ------------welcome.jsp

<%@ page contentType="text/html; charset=gbk" language="java" %>
<%@ page import="javax.naming.Context"%>
<%@ page import="javax.sql.DataSource"%>
<%@ page import="javax.naming.InitialContext"%>
<%@ page import="java.sql.*"%>


<%
    DataSource ds 
= null;
      Context initCtx 
= new InitialContext();
//      Context envCtx = (Context) initCtx.lookup("java:comp/env");
//      ds = (DataSource)envCtx.lookup("java:jdbc/BSTxDataSource");
    ds = (DataSource)initCtx.lookup("ming");
      
if(ds!=null)...{
        out.println(
"Connection is OK!");
        Connection cn
=ds.getConnection();
            
if(cn!=null)...{
                       out.println(
"cn is Ok!");
                       Statement stmt 
= cn.createStatement();
                       ResultSet rst 
= stmt.executeQuery("select * from log_users");
                       out.println(
"<p>rst is Ok!" + rst.next());
                       
while(rst.next())...{
                                         out.println(
"<P>username:" + rst.getString(2));
                                       }

                                       cn.close();
                 }
else...{
                       out.println(
"rst Fail!");
                     }

               }

               
else 
                 out.println(
"Fail!");
%>
<hr color="red">
-----------------------------------------------
<%
    DataSource ds2 
= null ;
    Context initCox 
= new InitialContext();
    ds2 
= (DataSource)initCox.lookup("mingtest");
    String sql 
= "select U_NAME from log_users";
    
if(ds2!= null)
    
...{    
        out.print(
"ds2 isn't null!<br>");
        Connection conn2 
= ds2.getConnection();
        Statement st 
= conn2.createStatement();
        ResultSet rs2 
= null ;
        rs2 
= st.executeQuery(sql);
        
while(rs2.next())
        
...{
            String name 
= rs2.getString("U_name");
            out.print(
"UserName:"+name+"<br>");
        }

        conn2.close();
    }

    
else
    out.println(
"ds2 is null! ");
%>

Oracle 9i+PLSQL客户端安装教程

大家在安装像ORACLE这样的大型数据库的时候总是会觉得安装很费劲,3张安装盘就要2G了,安装过程中还要创建配置数据库那花的时间就更长了。 所以除非是要在服务器端建数据库,一般都选择更加方便快速的Or...
  • Tllrry
  • Tllrry
  • 2015年06月19日 13:51
  • 2423

Oracle9i升级到oracle10g

一、升级环境及目的: 目的:一般是由于业务规划,现有oracle9i的版本不能满足需求,需要跨大版本升级。 环境:我实验的环境如下:     升级前 升级后...
  • lichangzai
  • lichangzai
  • 2012年10月23日 11:11
  • 3081

C#连接不上Oracle9i数据库

C#连接不上Oracle 9i数据库(连接Oracle11g没问题。)     问题描述:用PLSQL Developer可以登录,客户端不能登录,报错“ORA-12154:TNS:无法处理服务名”...
  • u014696025
  • u014696025
  • 2014年04月13日 22:33
  • 1200

ORACLE9I DATAGUARD 部署

ORACLE9I DATAGUARD部署文档   服务器环境 HOST IP DB  release SID DG ROLE 192.168.32.29 ora...
  • plwsab6000
  • plwsab6000
  • 2012年08月28日 15:29
  • 1694

手工创建Oracle9i数据库

手工创建数据库的步骤如下:1.确定全局数据库名与实例名     全局数据库名用于在网络中唯一表示一个数据库,而SID用于在网络中唯一表示一个实例。在windows环境下,数据库的SID通过初始化参数文...
  • junli0310
  • junli0310
  • 2007年07月05日 20:56
  • 1311

window7 下oracle 9i客户端安装与pl/sql developer

最近内存升级到4G,但可怜的xp只能利用到3G左右,为了充分利用内存,狠心将xp系统换成了win7.  oracle客户端之前在xp下安装在D盘,安装win7时只格式化了C盘,oracle客户端的相...
  • qshpeng
  • qshpeng
  • 2014年03月23日 16:49
  • 4765

oracle 9i,10G,11G,各版本下载资源

现在11,10,9i的介质在官网都无法下载了,但是我们有神奇的迅雷,用下面这些地址,直接用迅雷下载。这里包括了10.2.0.5的patch还有11.2.0.3的patch 安装介质 Oracle9i ...
  • rivarola
  • rivarola
  • 2014年12月31日 16:19
  • 4824

Oracle 9i所有版本的最新下载地址(已验证!)

偶多年前在学校时曾安装过Oracle 9i的win版本,后来没用到Oracle就没接触了。现在想学习下Oracle的Linux版本数据库。听使用Oracle的前辈说,现在国内应用得最多的还是Oracl...
  • woswod
  • woswod
  • 2017年03月18日 13:23
  • 3893

spring+hibernate工程使用JNDI连接部署至websphere,报错Caused by: java.lang.ClassNotFoundException: oracle.sql.BLO

spring+hibernate工程使用JNDI连接部署至websphere,保存oracle大字段报错Caused by: java.lang.ClassNotFoundException: ora...
  • java_freshman01
  • java_freshman01
  • 2015年11月12日 13:28
  • 1402

ORALE11G数据导入ORACLE9i方法

情景介绍: 在某公司开发一个子系统,给了一个数据库(数据库版本为9i),给了个可以连接数据库的远程桌面地址,远程主机用的plsql版本为7.x; 我的机器上oracle是11g,plsql版本为1...
  • w596486918
  • w596486918
  • 2016年01月08日 15:38
  • 1249
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JBoss4.0.3 + Oracle 9i (JNDI)
举报原因:
原因补充:

(最多只允许输入30个字)