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