As far as I have seen Orion behaves as per spec in regard to transactions. I
am not sure what the default transaction type Orion will assume if you do
not explicitly declare one in the ejb-jar.xml file but I imagine it defaults
to "supports". You should explicitly declare your transaction attribute to
"required" in order to ensure that the session beans join the transaction of
the entity beans. 

Like so:

<container-transaction>
  <method>
    <ejb-name>LogEntEJB</ejb-name>
    <method-name>*</method-name>
    <trans-attribute>Required</trans-attribute>
  </method>
  <method>
    <ejb-name>EntUtenteEJB</ejb-name>
    <method-name>*</method-name>
    <trans-attribute>Required</trans-attribute>
  </method>
</container-transaction>

Cheers,
-Jon


-----Original Message-----
From: Christian Bagnoli [mailto:[EMAIL PROTECTED]]
Sent: Friday, July 13, 2001 5:00 AM
To: Orion-Interest
Subject: Transaction problems


Hi,

we're implementing an entity bean with transactional (container managed)
methods. This bean is accessed by
a session statefull bean. We have transactional problem when a method fails
(that is throws an EJBException) because orion doesn't rollback the
transaction.
Does anybody figure out how to make orion rollback the transaction?
We have also tried with a session stateless/stateful having the same problem
.
Also implementing the SessionSycronization interface doesn't trap the
transaction
boundaries.

Our data-source.xml is:

<data-source
  class="com.evermind.sql.DriverManagerDataSource"
  name="SetmoveDS"
  location="jdbc/SetmoveDS"
  xa-location="jdbc/xa/MySetmoveDS"
  ejb-location="jdbc/myEJBDS"
  connection-driver="oracle.jdbc.OracleDriver"
  username="test"
  password="test"
  url="jdbc:oracle:thin:test/test@testsun:1521:test"
  inactivity-timeout="30"
 />

we use orion 1.5.2.

the ejb-jar.xml is:
.....
 <session>
   <display-name>LogEntJAR</display-name>
   <description>LogEntJAR</description>
   <ejb-name>MyLogEnt</ejb-name>
   <home>setmove.beans.logica.LogEntHome</home>
   <remote>setmove.beans.logica.LogEnt</remote>
   <ejb-class>setmove.beans.logica.LogEntEJB</ejb-class>
   <session-type>Stateful</session-type>
   <transaction-type>Container</transaction-type>
   <ejb-ref>
    <ejb-ref-name>MyEntUtente</ejb-ref-name>
    <ejb-ref-type>Entity</ejb-ref-type>
    <home>setmove.beans.logica.EntUtenteHome</home>
    <remote>setmove.beans.logica.EntUtente</remote>
   </ejb-ref>
  </session>
.....
  <entity>
   <display-name>EntUtenteJAR</display-name>
   <description>EntUtenteJAR</description>
   <ejb-name>MyEntUtente</ejb-name>
   <home>setmove.beans.logica.EntUtenteHome</home>
   <remote>setmove.beans.logica.EntUtente</remote>
   <ejb-class>setmove.beans.logica.EntUtenteEJB</ejb-class>
   <persistence-type>Bean</persistence-type>
   <prim-key-class>java.lang.String</prim-key-class>
   <reentrant>false</reentrant>
   <resource-ref>
    <description>description</description>
    <res-ref-name>jdbc/SetmoveDS</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
   </resource-ref>
  </entity>
.....
<container-transaction>
<method>
    <ejb-name>LogEntEJB</ejb-name>
    <method-name>*</method-name>
   </method>
   <method>
    <ejb-name>EntUtenteEJB</ejb-name>
    <method-name>*</method-name>
   </method>
  </container-transaction>

thanks a lot.

Christian


Reply via email to