我在WebLogic服务器上使用带有容器管理事务(JTA)的EJB 2。出于调试目的,我试图从JNDI检索到的Connection
中获取DataSource
对象,执行更新并提交。但是,我在尝试提交时遇到以下异常。
java.sql.SQLException: Cannot call commit when using distributed transactions
我使用的DataSource
类型属于weblogic.jdbc.common.internal.RmiDataSource
类型,Connection
对象属于weblogic.jdbc.wrapper.JTAConnection_weblogic_jdbc_wrapper_XAConnection_oracle_jdbc_driver_LogicalConnection-OracleDS-187
类型。
显然,我正在检索的Connection
对象正在尝试参与JTA事务,这不是我想要的。如何从DataSource
?
以下是我目前检索连接的方式
Connection connection = null;
PreparedStatement ps = null;
try {
DataSource ds = ConnectionFactory.getDataSourceFromJNDI("jdbc/OracleDS");
connection = ds.getConnection();
ps = connection.prepareStatement(...);
ps.setString(1, msg);
ps.executeUpdate();
connection.commit();
}
catch (Exception e) {
if (connection != null)
connection.rollback();
}
}