TransactionRolledbackedException
Bonjour,
voila mon architecture, elements et <type de connections> :
Client (classe Java) <remote> SessionFacade (Session bean Stetefull) <local> SessionFacadeUser (session bean stateless) <local> User (entity bean)
J'ai un probleme lorsque je cree un ejb user avec une cle primaire deja existante ! (logique que ca ne passe pas :wink: )
En fait, Je m'attendant au niveau de ma SessionFacadeUser a recuperer une EJBException, une CreateException, ou quelque chose comme ca :!: mais en fait, pas du tout :roll: je ne recois aucune exception :?
par contre, au niveau de mon client, je recois une javax.transaction.TransactionRolledbackException
Cette exception encapsule une javax.ejb.DuplicateKeyException. (Je joints l'exception complete a la fin du post)
De plus, au niveau du server (weblogic), dans les logs et sur la console, je recupere ce petit bout d'exception qui, je pense, permet de comprendre un peu le phenomene :
Citation:
Exception occurred during commit of transaction Name=[EJB orchestra.AdminSessionFacadeBean.userNew(orchestra.TOrcUsersDto)],Xid=BEA1-003ED09F4921C5674FAB(11923400),Status=Rolledback. [Reason=weblogic.utils.NestedRuntimeException: Error writing from beforeCompletion - with nested exception:
:idea: je pense donc que l'exception est lancee au moment ou le server fait un commit de ses ejbs, et ce serait une raison pour laquelle je n'arrive pas a la catcher au niveau des SessionsBeans...
Par contre, comment ca se fait que je puisse la recuperer au niveau du client... ca c'est une autre question :? :!:
En tout cas, j'aimerai savoir comment je peux faire :
:arrow: forcer le commit dans ma SessionFacadeUser pour recuperer l'exception a ce moment la,
:arrow: tester manuellement si la cle primaire existe deja avant de creer mon User,
:arrow: ...
Si quelqu'un a deja eu le probleme, ou aurait une :idea: ca serait super cool :D :!:
je met la l'exception complete :
(a savoir : orchestra.AdminSessionFacade est ma SessionFacade, userNew une methode de cette classe qui ne fait que lancer la methode de creation d'un user sur la SessionFacadeUser, enfin orchestra.test.TestAdminByPortal est mon client java)
Citation:
javax.transaction.TransactionRolledbackException: Exception while commiting Tx : Name=[EJB orchestra.AdminSessionFacadeBean.userNew(orchestra.TOrcUsersDto)],Xid=BEA1-003ED09F4921C5674FAB(11923400),Status=Rolled back. [Reason=weblogic.utils.NestedRuntimeException: Error writing from beforeCompletion - with nested exception:
[javax.ejb.DuplicateKeyException: Bean with primary key: 'hvillalonga' already exists.]],numRepliesOwedMe=0,numRepliesOwedOthers=0,seconds since begin=0,seconds left=30,XAServerResourceInfo[weblogic.jdbc.wrapper.JTSXAResourceImpl]=(ServerResourceInfo[weblogic.jdbc.wrapper.JTSXAResourceImpl]=(state=rolledback,assigned=WLDEVADMIN),xar=weblogic.jdbc.wrapper.JTSXAResourceImpl@9139fc),SCInfo[ADA+WLDEVADMIN]=(state=rolledback),properties=({weblogic.transaction.name=[EJB orchestra.AdminSessionFacadeBean.userNew(orchestra.TOrcUsersDto)], weblogic.jdbc=t3://172.16.132.29:7001}),local properties=({modifiedListeners=[weblogic.ejb20.internal.TxManager$TxListener@1bf756b]}),OwnerTransactionManager=ServerTM[ServerCoordinatorDescriptor=(CoordinatorURL=WLDEVADMIN+172.16.132.29:7001+ADA+t3+, XAResources={},NonXAResources={})],CoordinatorURL=WLDEVADMIN+172.16.132.29:7001+ADA+t3+): javax.ejb.DuplicateKeyException: Bean with primary key: 'hvillalonga' already exists.
at weblogic.ejb20.manager.BaseEntityManager.executeInsertStmt(BaseEntityManager.java:584)
at weblogic.ejb20.manager.BaseEntityManager.executeDBOperations(BaseEntityManager.java:435)
at weblogic.ejb20.internal.TxManager$TxListener.executeDBOperations(TxManager.java:596)
at weblogic.ejb20.internal.TxManager$TxListener.executeDBOperationsDriver(TxManager.java:571)
at weblogic.ejb20.internal.TxManager$TxListener.beforeCompletion(TxManager.java:731)
at weblogic.transaction.internal.ServerSCInfo.callBeforeCompletions(ServerSCInfo.java:1010)
at weblogic.transaction.internal.ServerSCInfo.startPrePrepareAndChain(ServerSCInfo.java:115)
at weblogic.transaction.internal.ServerTransactionImpl.localPrePrepareAndChain(ServerTransactionImpl.java:1142)
at weblogic.transaction.internal.ServerTransactionImpl.globalPrePrepare(ServerTransactionImpl.java:1868)
at weblogic.transaction.internal.ServerTransactionImpl.internalCommit(ServerTransactionImpl.java:250)
at weblogic.transaction.internal.ServerTransactionImpl.commit(ServerTransactionImpl.java:221)
at weblogic.ejb20.internal.BaseEJBObject.postInvoke(BaseEJBObject.java:289)
at orchestra.AdminSessionFacade_xno66q_EOImpl.userNew(AdminSessionFacade_xno66q_EOImpl.java:520)
at orchestra.AdminSessionFacade_xno66q_EOImpl_WLSkel.invoke(Unknown Source)
at weblogic.rmi.internal.activation.ActivatableServerRef.invoke(ActivatableServerRef.java:87)
at weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.java:409)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:353)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:144)
at weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:404)
at weblogic.rmi.internal.BasicExecuteRequest.execute(BasicExecuteRequest.java:30)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)
--------------- nested within: ------------------
weblogic.utils.NestedRuntimeException: Error writing from beforeCompletion - with nested exception:
[javax.ejb.DuplicateKeyException: Bean with primary key: 'hvillalonga' already exists.]
at weblogic.ejb20.internal.TxManager$TxListener.beforeCompletion(TxManager.java:743)
at weblogic.transaction.internal.ServerSCInfo.callBeforeCompletions(ServerSCInfo.java:1010)
at weblogic.transaction.internal.ServerSCInfo.startPrePrepareAndChain(ServerSCInfo.java:115)
at weblogic.transaction.internal.ServerTransactionImpl.localPrePrepareAndChain(ServerTransactionImpl.java:1142)
at weblogic.transaction.internal.ServerTransactionImpl.globalPrePrepare(ServerTransactionImpl.java:1868)
at weblogic.transaction.internal.ServerTransactionImpl.internalCommit(ServerTransactionImpl.java:250)
at weblogic.transaction.internal.ServerTransactionImpl.commit(ServerTransactionImpl.java:221)
at weblogic.ejb20.internal.BaseEJBObject.postInvoke(BaseEJBObject.java:289)
at orchestra.AdminSessionFacade_xno66q_EOImpl.userNew(AdminSessionFacade_xno66q_EOImpl.java:520)
at orchestra.AdminSessionFacade_xno66q_EOImpl_WLSkel.invoke(Unknown Source)
at weblogic.rmi.internal.activation.ActivatableServerRef.invoke(ActivatableServerRef.java:87)
at weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.java:409)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:353)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:144)
at weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:404)
at weblogic.rmi.internal.BasicExecuteRequest.execute(BasicExecuteRequest.java:30)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)
; nested exception is:
weblogic.utils.NestedRuntimeException: Error writing from beforeCompletion - with nested exception:
[javax.ejb.DuplicateKeyException: Bean with primary key: 'hvillalonga' already exists.]
at weblogic.rjvm.BasicOutboundRequest.sendReceive(BasicOutboundRequest.java:108)
at weblogic.rmi.internal.activation.ActivatableRemoteRef.invoke(ActivatableRemoteRef.java:83)
at orchestra.AdminSessionFacade_xno66q_EOImpl_811_WLStub.userNew(Unknown Source)
at orchestra.test.TestAdminByPortal.main(TestAdminByPortal.java:213)
Caused by: weblogic.utils.NestedRuntimeException: Error writing from beforeCompletion - with nested exception:
[javax.ejb.DuplicateKeyException: Bean with primary key: 'hvillalonga' already exists.]
at weblogic.ejb20.internal.TxManager$TxListener.beforeCompletion(TxManager.java:743)
at weblogic.transaction.internal.ServerSCInfo.callBeforeCompletions(ServerSCInfo.java:1010)
at weblogic.transaction.internal.ServerSCInfo.startPrePrepareAndChain(ServerSCInfo.java:115)
at weblogic.transaction.internal.ServerTransactionImpl.localPrePrepareAndChain(ServerTransactionImpl.java:1142)
at weblogic.transaction.internal.ServerTransactionImpl.globalPrePrepare(ServerTransactionImpl.java:1868)
at weblogic.transaction.internal.ServerTransactionImpl.internalCommit(ServerTransactionImpl.java:250)
at weblogic.transaction.internal.ServerTransactionImpl.commit(ServerTransactionImpl.java:221)
at weblogic.ejb20.internal.BaseEJBObject.postInvoke(BaseEJBObject.java:289)
at orchestra.AdminSessionFacade_xno66q_EOImpl.userNew(AdminSessionFacade_xno66q_EOImpl.java:520)
at orchestra.AdminSessionFacade_xno66q_EOImpl_WLSkel.invoke(Unknown Source)
at weblogic.rmi.internal.activation.ActivatableServerRef.invoke(ActivatableServerRef.java:87)
at weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.java:409)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:353)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:144)
at weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:404)
at weblogic.rmi.internal.BasicExecuteRequest.execute(BasicExecuteRequest.java:30)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)