java.sql.SQLException:无法在全局事务中使用本地事务提交
我们有两个oracle实例(两台物理机器)和一个应用程序模式。 我们正在使用weblogic应用服务器。应用程序使用为其启用XA事务的数据源 我有一个bean管理的EJB,我在那里-java.sql.SQLException:无法在全局事务中使用本地事务提交,java,transactions,sqlexception,distributed-transactions,xa,Java,Transactions,Sqlexception,Distributed Transactions,Xa,我们有两个oracle实例(两台物理机器)和一个应用程序模式。 我们正在使用weblogic应用服务器。应用程序使用为其启用XA事务的数据源 我有一个bean管理的EJB,我在那里- 更新表中的一些数据,然后提交 提交oracle作业 再次更新表中的一些数据,然后提交 这里我得到一个错误-java.sql.SQLException:无法在全局事务中使用本地事务提交 奇怪的是,这个错误并不是每次执行都提交,而是在7-8次执行中提交1次 现在我的问题是 若我使用启用XA的事务,bean管理的事务的意
DataObject.updateDataAndReturnCount(" UPDATE EOD_Trn_BatchProcess SET iJobNo = ?, szParameters = ? WHERE iProcessSeqNo = ? ", conn, new String[]{null, strParameters, (String)mapParameters.get("__PROCESS_SEQ_NO")});
conn.commit();
String strStatement = "{? = call submitProcAsJob(?, ?)}";
//String strStatement = "begin ? := submitProcAsJob(?, ?); end;";
CallableStatement pStmt = conn.prepareCall(strStatement);
pStmt.registerOutParameter(1, OracleTypes.NUMBER);
pStmt.setObject(2, strJobName);
pStmt.setObject(3, strInstanceNo);
pStmt.execute();
vString strJobNo = pStmt.getString(1);
vpStmt.close();
DataObject.updateData(" UPDATE EOD_Trn_BatchProcess SET iJobNo = ?, szParameters = ? WHERE iProcessSeqNo = ? ", conn, new String[]{strJobNo, strParameters, (String)mapParameters.get("__PROCESS_SEQ_NO")});
conn.commit();
这里需要第一次提交,因为我想保存调用过程中使用的参数,即使作业提交失败。(或前面的任何事情)。我遇到了同样的问题,当我将本地事务设置为“自动提交错误”时,解决了这个问题
Connection.setAutoCommit(false)
我猜您使用的是两阶段事务,如果您在第一步中没有提交该怎么办?我遇到了相同的问题,当我将本地事务设置为“自动提交错误”时,解决了该问题
Connection.setAutoCommit(false)
我猜您正在使用一个两阶段的事务,如果您在第一步中没有提交怎么办?出现异常的原因是您不能在全局事务下手动调用commit()/rollback,您只能将其标记为回滚。您有三个选项:
我希望我的回答能有所帮助,祝你好运 出现异常的原因是您不能在全局事务下手动调用commit()/rollback,您只能将其标记为rollback。您有三个选项:
我希望我的回答能有所帮助,祝你好运 事务属性是什么?您在代码中调用了提交/回滚吗?提供您的代码,这应该是更清晰的代码添加,“事务属性”这里的“事务属性”是指XA数据源配置吗?不,在ejb-jar.xml中,容器事务->事务属性什么?您在代码中调用了提交/回滚吗?提供您的代码,这应该是更清晰的代码添加,“事务属性”你是指XA数据源配置吗?不,在ejb-jar.xml容器事务->trans AttributeThaks中,我将尝试这个,但你知道为什么它不会在每次执行中发生吗。此外,我还需要使用commit,因为无论接下来发生什么,我都必须保存一些数据。(检查点)。谢谢,我会尝试这个,但是您知道为什么它不会在每次执行中都发生吗。我还需要使用commit,b