小编And*_*rés的帖子

ORA-02051:同一事务中的另一个会话或分支失败或最终确定

我的XA交易有问题.

在此输入图像描述

如果查看图片,则会对XA事务流程顺序进行编号.电话号码3是迄今为止我发现的解决问题的一半解决方法.我的意思是,如果我在访问ejb 2之前没有进行SELECT 1查询Database 2,则交易失败.

我说半解决问题,因为当我放置SELECT 1查询时,Servlet不会崩溃,我可以完成事务.但是这种解决方法不适用于其他情况,例如外部B2B客户端没有也不应该访问我们的内部Database 2,因此他们无法通过SELECT 1查询来修复它.

具体的例外点在于Hibernate beforeComplete Synchronization.它在Hibernate刷新缓存时崩溃,Database 2但Oracle抛出此错误:

ORA-02051:同一事务中的另一个会话或分支失败或最终确定

花了几天时间进行证明并阅读OMG"交易服务规范"和"掌握EJB"一书的第10章后,我无法理解为什么我的XA交易失败;)

如果有人能以任何方式帮助我,我将非常感激.

完整堆栈跟踪是这样的:

2014年11月11日18:27:27365 DEBUG [ORB.thread.pool:0] [LogicalConnectionImpl] [f59d55f3-8361-4c80-975c-8df36f89b7c3]获得JDBC连接2014年11月11日18:27:27428 DEBUG [ORB .thread.pool:0] [SqlExceptionHelper] [f59d55f3-8361-4c80-975c-8df36f89b7c3]无法执行语句[n/a] java.sql.SQLSyntaxErrorException:ORA-02051:otra sesi ?? bifurcaci ?? ha fallado o terminado en la misma transacci ?? 在oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:445)在oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:396)在oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:879 )在oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:450)在oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:192)在oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java: 531)在oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:207)在oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:1044)在oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java :1329)oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3584)at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3665)at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeUpdate(OraclePreparedStatementWrapper. java:1352)at com.ibm.ws.rsadapter.jdbc.WSJdbcPreparedStatement.pmiExecuteUpdate(WSJ dbcPreparedStatement.java:1185)在com.ibm.ws.rsadapter.jdbc.WSJdbcPreparedStatement.executeUpdate(WSJdbcPreparedStatement.java:802)在org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:186)在组织.hibernate.engine.jdbc.batch.internal.NonBatchingBatch.addToBatch(NonBatchingBatch.java:58)在org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3079)在org.hibernate.persister.entity.AbstractEntityPersister .insert(AbstractEntityPersister.java:3521)在org.hibernate.action.internal.EntityInsertAction.execute(EntityInsertAction.java:88)在org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:393)在有机hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:385)在org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:301)在org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener. java:349)at org.hibernate.event.internal.Def aultFlushEventListener.onFlush(DefaultFlushEventListener.java:56)在org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1159)在org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:404)在org.hibernate.engine .transaction.synchronization.internal.SynchronizationCallbackCoordinatorNonTrackingImpl.beforeCompletion(SynchronizationCallbackCoordinatorNonTrackingImpl.java:106)atg.hibernate.engine.transaction.synchronization.internal.RegisteredSynchronization.beforeCompletion(RegisteredSynchronization.java:53)at com.ibm.ws.uow.ComponentContextSynchronizationWrapper .beforeCompletion(ComponentContextSynchronizationWrapper.java:65)在com.ibm.tx.jta.impl.RegisteredSyncs.coreDistributeBefore(RegisteredSyncs.java:291)在com.ibm.ws.tx.jta.RegisteredSyncs.distributeBefore(RegisteredSyncs.java:153 )com.ibm.ws.tx.jta.TransactionImpl.prePrepare(TransactionImpl.java:2339)位于com.ibm.ws的com.ibm.tx.jta.impl.TransactionImpl.internalPrepare(TransactionImpl.java:1422).办理 ion.JTS.TransactionWrapper.prepare(TransactionWrapper.java:204)在com.ibm.ws.Transaction.JTS.WSCoordinatorImpl.prepare(WSCoordinatorImpl.java:144)在com.ibm.ws.Transaction.JTS._WSCoordinatorImplBase._invoke( _WSCoordinatorImplBase.java:50)在com.ibm.CORBA.iiop.ServerDelegate.dispatchInvokeHandler(ServerDelegate.java:669)在com.ibm.CORBA.iiop.ServerDelegate.dispatch(ServerDelegate.java:523)在com.ibm.rmi .iiop.ORB.process(ORB.java:523)at com.ibm.CORBA.iiop.ORB.process(ORB.java:1575)at com.ibm.rmi.iiop.Connection.doRequestWork(Connection.java:3039) )com.ibm.rmi.iiop.Connection.doWork(Connection.java:2922)at com.ibm.rmi.iiop.WorkUnitImpl.doWork(WorkUnitImpl.java:64)com.ibm.ejs.oa.pool. …

oracle websphere hibernate ejb xa

7
推荐指数
0
解决办法
8083
查看次数

EJB 无状态初始化模式

我有一个 EJB 无状态会话 Bean。我有这些要求:

  1. 这个无状态 EJB 应该在启动时初始化
  2. 初始化代码应该对数据库进行事务性访问

问题是:

  1. @Startup 仅适用于 @Singleton EJB
  2. @PostConstruct 注释(至少在 Websphere 上)此时没有事务上下文,因此初始化代码在这里爆炸!

可能的解决方案?

  1. 使用 Java EE Timer 但它似乎是为定期执行而设计的。我只想在零时间执行一次。
  2. 仅出于初始化目的使用@Singleton + @Startup EJB,并将此单例 EJB 注入到依赖的无状态 EJB。

题:

  1. 有人能解释一下应该如何初始化无状态 EJB 吗?还是没有意义?(我的意思是,无状态 EJB 应该没有初始化状态?)
  2. 是否有任何模式表明将辅助 EJB @Singleton 与 @Startup 一起使用是个好主意?

architecture design-patterns ejb-3.1 jakarta-ee

6
推荐指数
1
解决办法
7079
查看次数

用于初始化依赖于另一个应用程序EJB的EJB的模式

当EJB依赖于另一个仍未启动的集群中的应用程序时,应如何初始化EJB?

我该怎么办?

  • @PostConstruct:也许我可以循环,直到依赖EJB可用,但我担心它会超时或阻止服务器加载过程.
  • @Schedule:也许安排初始化过程以避免服务器上的块,然后仅在init完成时才服务请求,否则抛出错误.

你觉得我该怎么办?你能推荐我一些模式吗?

java architecture design-patterns java-ee ejb-3.1

5
推荐指数
1
解决办法
267
查看次数

禁用重新部署时如何maven释放多个配置文件项目

问题:在Nexus上禁用重新部署时,如何发布具有2个独占配置文件的maven项目?

示例(已编辑):我有一个maven项目MyArtifact,其中有两个配置文件pom.xml(P1和P2),它们会生成2个不同的耳朵.每个配置文件配置maven-ear-plugin包括不同的模块并自动生成application.xml.生成的工件是MyArtifact-1.0-P1.ear(2个战争模块)和MyArtifact-1.0-P2.ear(3个战争模块).

问题1(重新部署到nexus):

  1. 当我执行" mvn deploy -P P1"一切顺利(战争和pom部署到Nexus)
  2. 当我执行" mvn deploy -P P2"错误!Nexus抱怨重新部署pom.xml.

问题2(maven-release-plugin):

当使用maven-release-pluginto发布多个配置文件时,maven会做很多事情(签出和标记CSM,更新pom版本,转向标记,提交CSM等等).至少为每个配置文件执行重新发布/重新标记是不高效也不实际的.

maven-2 nexus maven-3 maven

1
推荐指数
1
解决办法
4089
查看次数