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
atweblogic.jdbc.jts.Driver.getExistingConnection(Driver.java:473)
atweblogic.jdbc.jts.Driver.connect(Driver.java:142)
atweblogic.jdbc.common.internal.RmiDataSource.getConnection(RmiDataSource.java:305)
atcom.gsta.neva2.business.sqlclient.SqlClient.getConnection(SqlClient.java:135)
atcom.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)。这个值不能修改,只能在新建数据源时配置。