tomcat配置 oracle 连接池

用到tomcat连oracle数据库配连接池了,搞了一天,终于搞好了,其中也遇到了几个很棘手的问题,现在贴出来,以备后人学习,少走些弯路;(手工配置连接池)

环境:tomcat5.5,oracle9i;(tomcat5.5和tomcat5.0的在server.xml中的写法有些区别)

首先,在tomcat的xml文件中创建数据源;

%tomcat_root%/conf/server.xml 中:

在<host>...</host>中添加一下代码:

<!--pool-->  
   <Context path="/solarcn " docBase="solarcn " debug="5" reloadable="true" crossContext="true">
    <Resource name="solar_ds "
     auth="Container"
     type="javax.sql.DataSource"
     driverClassName="oracle.jdbc.OracleDriver"
     url="jdbc:oracle:thin:@192.168.0.25:1521:ora "
     username="solarcn "
     password="solarcn "
     maxActive="5"
     maxIdle="10"
     maxWait="5000"/>
    </Context>
<!--//pool-->

--红色部分是需要你怎么更改的,现在挨个来解释下:

1.path="/solarcn" :这个是你的工程名的访问路径;

2.docBase="solarcn ":工程名;

3.Resource name="solar_ds " :数据源的名;

4.url="jdbc:oracle:thin:@192.168.0.25:1521:ora ":数据库连接路径;

下面的数据库用户名密码就不用说了....

其次,在%tomcat_root%/conf/web.xml中引用数据源;

在最后的</webapp>前加入以下代码:

<resource-ref>
   <description>Oracle Datasource example</description>
   <res-ref-name>solar_ds </res-ref-name>
   <res-type>javax.sql.DataSource</res-type>
   <res-auth>Container</res-auth>
</resource-ref>

红色部分就是数据源的名称,和上面server.xml中的 Resource name="solar_ds " 相对应;

然后就是在程序中获得数据源了;

public static Connection getConn(){
   Connection conn = null;
   DataSource ds = null;
   try {
    Context ctx = new InitialContext();
    Context envCtx = (Context) ctx.lookup("java:comp/env");
    ds =(DataSource)envCtx.lookup("solar_ds ");    //获得数据源,红色名字与上面server.xml中的数据源名字对应
    conn = ds.getConnection();
   } catch (NamingException e) {
    e.printStackTrace();
   }catch (SQLException e) {
    e.printStackTrace();
   }  
   return conn;
}

这样就获得了Connection...

这里要注意一点,数据源的名字要统一了,我在server.xml、web.xml和程序中都是用的"solar_ds"作为我的数据源名称;

=================================================================================

下面说一下在配置过程中遇到的几个比较棘手的问题,这几个问题是在配置连接池时的主要拦路虎,我百度了大半天,终于一一搞定了```` ...

1. javax.naming.NameNotFoundException: Name java:comp is not bound in this Context

--这是在初始化context时(Context envCtx = (Context) ctx.lookup("java:comp/env");)抛出的异常;解决方法是把工程/WEB-INF/lib下面naming- common.jar,naming-factory.jar,naming-resources.jar三个jar包删除;

2。 org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Io 异常: Connection refused(DESCRIPTION=(TMP=)(VSNNUM=150999297)(ERR=12505)(ERROR_STACK=(ERROR=(CODE=12505)(EMFI=4)))))

--这是 在获得Connection的时候抛出的异常,前提是已经获得了数据源DataSource;出现这种情况是 无法创建连接池工厂对象,原因是连接被拒绝。

解决办法:检查建立数据源时(server.xml中) url 字符串,可能服务器地址、端口、数据库名或者数据库实例名等信息错误。修改。 尤其着重检查url中url="jdbc:oracle:thin:@192.168.0.25:1521:ora " 的ora,这个地方是数据库的实例名,而不是表空间的名字;

3。 Caused by: java.sql.SQLException: Io 异常: Connection refused(DESCRIPTION=(TMP=)(VSNNUM=150999297)(ERR=12505)(ERROR_STACK=(ERROR=(CODE=12505)(EMFI=4))))

--出现这种异常一般是和第2种关联一块出现的,按第2步的方法一般就能解决;

 

对了,还有别忘了把oracle数据库的驱动classes12.jar放到tomcat下去...

 

 

 

到此,应该就会成功的配置好连接池了,可以自己建个jsp测试一下拉...

你可能感兴趣的:(oracle)