weblogic配置多个数据源,程序通过jndi连接不同数据源,数据源切换时出现的有关问题

weblogic配置多个数据源,程序通过jndi连接不同数据源,数据源切换时出现的问题。

Caused by: java.sql.SQLException: Connection has already been created in this tx context for pool named OracleDB. Illegal attempt to create connection from another pool: uptel_login
        at weblogic.jdbc.jts.Driver.getExistingConnection(Driver.java:473)
        at weblogic.jdbc.jts.Driver.connect(Driver.java:142)
        at weblogic.jdbc.common.internal.RmiDataSource.getConnection(RmiDataSource.java:305)
        at com.gsta.neva2.business.sqlclient.SqlClient.getConnection(SqlClient.java:135)
        at com.gsta.neva2.business.sqlclient.Session.getConnection(Session.java:67)
        at com.gsta.neva2.business.sqlclient.SqlClientSupport.select(SqlClientSupport.java:44)

 

 

当配置SqlConfig.xml下成“jndi”时,使用自身封装的sqlclient。在SqlClient.getConnection()时,程序报错:connection为刚访问完的一个数据源OracleDB,竟然不能创建另外一个连接uptel_login,

解决方法有二:

1、使用jdbc访问数据库,不会出现该情况,可能由于jdbc是每次执行完sql后就提交事务,所以前一个数据源已经“彻底关闭”。(其实封装的sqlclient在每次访问结束后都把session,con之类的关闭了(为null),就是不清楚为什么Connection 还是前一个数据源的连接)。

2、在weblogic控制台将uptel_login这个数据源配置:Honor Global Transactions为false (默认为true)。这个值不能修改,只能在新建数据源时配置。