David

Were there any more thoughts on this?  I'm using declaritive transaction
management, both session and bmp entity beans have Required as their
transaction attribute, and the originating session bean throws an ejb
exception to the container when the insert fails.  No luck on the integrity
of the transaction.

Also, if it is that a bean throwing an application exception does not have
the transaction marked for rollback (is this correct?) can't i get myself in
trouble if i'm in the middle of a transaction and an application error
occurs?  Or is it assumed that all application errors are generated before
any transactionality (ie beans are modified).

Any help with this would be appreciated.

Thanks

Eric

-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED]]On Behalf Of David Jencks
Sent: Tuesday, January 15, 2002 4:42 PM
To: [EMAIL PROTECTED]
Subject: Re: [JBoss-user] Help needed with transactions


Do you catch the exception in your session bean and call setRollbackOnly?

david jencks

On 2002.01.15 15:58:02 -0500 Eric Kaplan wrote:
> I have two entity beans that need to be updated within a transaction.  In
> my
> case, I have a session bean which updates bean A, then tries to create a
> new
> bean B.  If the creation of bean B fails (in this case, I violate a
> unique
> index restriction on the db), then I would expect that the modification
> of A
> would be rolled back.  In my ejb-jar.xml, I have transaction attribute
> "Required" for all session and entity methods.  The jboss log prints out:
>
> [Default] prepare insert
> [PortfolioEJB] TRANSACTION ROLLBACK EXCEPTION:null
> Embedded Exception
> ORA-00001: unique constraint (ABPDEV.NAME_INDEX) violated
> ; nested exception is:
>         javax.ejb.EJBException: null
> Embedded Exception
> ORA-00001: unique constraint (ABPDEV.NAME_INDEX) violated
>
> [PortfolioEJB] java.sql.SQLException: ORA-00001: unique constraint
> (ABPDEV.NAME_
> INDEX) violated
> [PortfolioEJB]
> [PortfolioEJB]  at
> oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:1
> 68)
> [PortfolioEJB]  at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:208)
> [PortfolioEJB]  at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:543)
> [PortfolioEJB]  at
> oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1405)
>
> [PortfolioEJB]  at
> oracle.jdbc.ttc7.TTC7Protocol.parseExecuteFetch(TTC7Protocol.
> java:822)
> [PortfolioEJB]  at
> oracle.jdbc.driver.OracleStatement.executeNonQuery(OracleStat
> ement.java:1446)
> [PortfolioEJB]  at
> oracle.jdbc.driver.OracleStatement.doExecuteOther(OracleState
> ment.java:1371)
> [PortfolioEJB]  at
> oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(Oracl
> eStatement.java:1900)
> [PortfolioEJB]  at
> oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(Orac
> lePreparedStatement.java:363)
> [PortfolioEJB]  at
> com.armanta.ejb.SimpleJDBCAbstraction.insert(SimpleJDBCAbstra
> ction.java:39)
> [PortfolioEJB]  at
> com.armanta.ejb.ValueContainerBean.create(ValueContainerBean.
> java:101)
> [PortfolioEJB]  at
> com.armanta.ejb.portfolio.PortfolioBean.ejbCreate(PortfolioBe
> an.java:26)
> [PortfolioEJB]  at java.lang.reflect.Method.invoke(Native Method)
> [PortfolioEJB]  at
> org.jboss.ejb.plugins.BMPPersistenceManager.createEntity(BMPP
> ersistenceManager.java:136)
> [PortfolioEJB]  at
> org.jboss.ejb.EntityContainer.createHome(EntityContainer.java
> :616)
> [PortfolioEJB]  at java.lang.reflect.Method.invoke(Native Method)
> [PortfolioEJB]  at
> org.jboss.ejb.EntityContainer$ContainerInterceptor.invokeHome
> (EntityContainer.java:843)
> [PortfolioEJB]  at
> org.jboss.ejb.plugins.EntitySynchronizationInterceptor.invoke
> Home(EntitySynchronizationInterceptor.java:231)
> [PortfolioEJB]  at
> org.jboss.ejb.plugins.EntityInstanceInterceptor.invokeHome(En
> tityInstanceInterceptor.java:154)
> [PortfolioEJB]  at
> org.jboss.ejb.plugins.EntityLockInterceptor.invokeHome(Entity
> LockInterceptor.java:108)
> [PortfolioEJB]  at
> org.jboss.ejb.plugins.TxInterceptorCMT.invokeNext(TxIntercept
> orCMT.java:135)
> [PortfolioEJB]  at
> org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(Tx
> InterceptorCMT.java:307)
> [PortfolioEJB]  at
> org.jboss.ejb.plugins.TxInterceptorCMT.invokeHome(TxIntercept
> orCMT.java:86)
> [PortfolioEJB]  at
> org.jboss.ejb.plugins.SecurityInterceptor.invokeHome(Security
> Interceptor.java:103)
> [PortfolioEJB]  at
> org.jboss.ejb.plugins.LogInterceptor.invokeHome(LogIntercepto
> r.java:106)
> [PortfolioEJB]  at
> org.jboss.ejb.EntityContainer.invokeHome(EntityContainer.java
> :420)
> [PortfolioEJB]  at
> org.jboss.ejb.plugins.jrmp.server.JRMPContainerInvoker.invoke
> Home(JRMPContainerInvoker.java:437)
> [PortfolioEJB]  at
> org.jboss.ejb.plugins.jrmp.interfaces.HomeProxy.invokeHome(Ho
> meProxy.java:237)
> [PortfolioEJB]  at
> org.jboss.ejb.plugins.jrmp.interfaces.HomeProxy.invoke(HomePr
> oxy.java:182)
> [PortfolioEJB]  at $Proxy59.create(Unknown Source)
> [PortfolioEJB]  at
> com.armanta.ejb.portfolio.PortfolioMasterBean.createNewPortfo
> lio(PortfolioMasterBean.java:28)
> [PortfolioEJB]  at java.lang.reflect.Method.invoke(Native Method)
> [PortfolioEJB]  at
> org.jboss.ejb.StatelessSessionContainer$ContainerInterceptor.
> invoke(StatelessSessionContainer.java:543)
> [PortfolioEJB]  at
> org.jboss.ejb.plugins.TxInterceptorBMT.invoke(TxInterceptorBM
> T.java:276)
> [PortfolioEJB]  at
> org.jboss.ejb.plugins.StatelessSessionInstanceInterceptor.inv
> oke(StatelessSessionInstanceInterceptor.java:87)
> [PortfolioEJB]  at
> org.jboss.ejb.plugins.SecurityInterceptor.invoke(SecurityInte
> rceptor.java:128)
> [PortfolioEJB]  at
> org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.ja
> va:195)
> [PortfolioEJB]  at
> org.jboss.ejb.StatelessSessionContainer.invoke(StatelessSessi
> onContainer.java:286)
> [PortfolioEJB]  at
> org.jboss.ejb.plugins.jrmp.server.JRMPContainerInvoker.invoke
> (JRMPContainerInvoker.java:393)
> [PortfolioEJB]  at java.lang.reflect.Method.invoke(Native Method)
> [PortfolioEJB]  at sun.rmi.server.UnicastServerRef.dispatch(Unknown
> Source)
> [PortfolioEJB]  at sun.rmi.transport.Transport$1.run(Unknown Source)
> [PortfolioEJB]  at java.security.AccessController.doPrivileged(Native
> Method)
> [PortfolioEJB]  at sun.rmi.transport.Transport.serviceCall(Unknown
> Source)
> [PortfolioEJB]  at
sun.rmi.transport.tcp.TCPTransport.handleMessages(Unknown
> Sou
> rce)
> [PortfolioEJB]  at
> sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(Unkn
> own Source)
> [PortfolioEJB]  at java.lang.Thread.run(Unknown Source)
>
> In jboss.jcml, I set
>
> <mbean code="org.jboss.tm.TransactionManagerService"
> name="DefaultDomain:service=TransactionManager">
>     <attribute name="TransactionTimeout">300</attribute>
>
>     <attribute name="XidClassName">oracle.jdbc.xa.OracleXid</attribute>
>   </mbean>
>
>  <mbean code="org.jboss.jdbc.JdbcProvider"
> name="DefaultDomain:service=JdbcProvider">
>      <attribute name="Drivers">oracle.jdbc.driver.OracleDriver</attribute>
>      <!--attribute
> name="Drivers">oracle.jdbc.xa.client.OracleXADataSource</attribute-->
>   </mbean>
>
>   <mbean code="org.jboss.jdbc.XADataSourceLoader"
> name="DefaultDomain:service=XADataSource,name=ArmantaDevLocalJDBCPool">
>   <attribute name="PoolName">ArmantaDevLocalJDBCPool</attribute>
>   <!--attribute
>
name="DataSourceClass">org.jboss.pool.jdbc.xa.wrapper.XADataSourceImpl</attr
> ibute-->
>   <attribute
>
name="DataSourceClass">oracle.jdbc.xa.client.OracleXADataSource</attribute>
>   <attribute
>
name="URL">jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(HOST=localhost)(PROTOCOL
> =tcp)(PORT=1521))(CONNECT_DATA=(SID=dev)))</attribute>
>   <attribute name="JDBCUser">abpdev</attribute>
>   <attribute name="Password">abpdev</attribute>
>   <attribute name="MinSize">2</attribute>
>   <attribute name="MaxSize">10</attribute>
>   <attribute name="IdleTimeoutEnabled">true</attribute>
>   </mbean>
>
> In jboss.properties, I set:
>
> jboss.xa.xidclass=oracle.jdbc.xa.OracleXid
>
> Any ideas?  It sure would be nice if transactions worked.
>
> Thanks
>
> --------------------------------------------------------------------------
--
> ----------
> Eric Kaplan
> Armanta, Inc.
> 55 Madison Ave.
> Morristown, NJ  07960
> Phone: (973) 326-9600
>
>

_______________________________________________
JBoss-user mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-user


_______________________________________________
JBoss-user mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-user

Reply via email to