Hi all,

I'm trying to get my understanding/control of declarative transactions in EJB up
to speed, and I'm puzzled by the following:

Context: The Product EJB that comes with the ejb/demos with Orion.

Action: I set the value of "trans-attribute" ejb-jar.xml for the "Product" bean
that comes with the ejb demos in orion to "Mandatory" for all methods in the
Product bean (this is just for illustrative purposes).

Expected Result: Since the ProductClient in the ejb demos does _not_ explicitly
start a UserTransaction, its first invocation of a method on the Product bean is
outside of any transaction context, and so should cause a
TransactionRequiredException to be thrown, should it not?

Actual Result: In fact, after Orion redeploys the Product bean, and the
ProductClient runs just fine.

Can someone please tell me what I'm missing? I've included the ejb-jar.xml and
the ProductClient code below. As an aside, if someone could point me to a good
example system with non-trivial transactions controlled declaratively in orion,
I'd be grateful.

Here's the ejb-jar.xml -
<ejb-jar>
     <description>
     </description>
     <enterprise-beans>
          <entity>
               <description>
               </description>
               <ejb-name>MyProduct</ejb-name>
               <home>ProductHome</home>
               <remote>Product</remote>
               <ejb-class>ProductEJB</ejb-class>
               <primkey-class>java.lang.Integer</primkey-class>
               <reentrant>True</reentrant>
               <persistence-type>Container</persistence-type>
               <cmp-field><field-name>id</field-name></cmp-field>
               <cmp-field><field-name>name</field-name></cmp-field>
               <cmp-field><field-name>description</field-name></cmp-field>
               <cmp-field><field-name>price</field-name></cmp-field>
               <primkey-field>id</primkey-field>
          </entity>
     </enterprise-beans>
     <assembly-descriptor>
          <container-transaction>
               <method>
                    <ejb-name>Product</ejb-name>
                    <method-name>*</method-name>
               </method>
               <trans-attribute>Mandatory</trans-attribute>
          </container-transaction>
     </assembly-descriptor>
</ejb-jar>

And here's the relevant code on the ProductClient -

// Create a new Product and narrow the reference.
Product product = (Product)PortableRemoteObject.narrow(home.create(id),
Product.class);
product.setName(name);
product.setPrice(cost);

Thanks,

Vivek



Reply via email to