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

Attachment: winmail.dat
Description: application/ms-tnef

Reply via email to