There is NO mechanism for an Application Assembler to affect enterprise beans with bean-managed transaction (BMT) demarcation. The Application Assembler MUST NOT define transaction attributes for an enterprise bean with bean-managed transaction demarcation.
The Application Assembler can use the transaction attribute mechanism to manage transaction demarcation for enterprise beans using container-managed transaction demarcation. NOTE, the transaction attributes may be specified either by the Bean Provider or by the Application Assembler.
The Application Assembler uses the container-transaction elements to define the transaction attributes for the methods of session and entity bean home and component interfaces and for the onMessage methods of message-driven beans. Each container-transaction element consists of a list of one or MORE method elements, and the trans-attribute element. The container-transaction element specifies that all the listed methods are assigned the specified transaction attribute value. It is required that all the methods specified in a single container-transaction element be methods of the SAME enterprise bean.
</ejb-jar> ... <container-transaction> <method> <ejb-name>Employee</ejb-name> <method-intf>LocalHome</method-intf> <method-name>create</method-name> <method-params> <method-param>java.lang.String</method-param> </method-params> </method> <trans-attribute>Required</trans-attribute> </container-transaction> <container-transaction> <method> <ejb-name>Employee</ejb-name> <method-intf>LocalHome</method-intf> <method-name>findAll</method-name> <method-params /> </method> <trans-attribute>Supports</trans-attribute> </container-transaction> ... </ejb-jar>
The method element uses the ejb-name, method-name, and method-params elements to denote one or more methods of an enterprise bean's home and component interfaces. There are THREE legal styles of composing the method element:
<!-- Style 1 --> <method> <ejb-name>EJBName</ejb-name> <method-name>*</method-name> </method>
<!-- Style 2 --> <method> <ejb-name>EJBName</ejb-name> <method-name>MethodName</method-name> </method>
<!-- Style 3 --> <method> <ejb-name>EJBName</ejb-name> <method-name>MethodName</method-name> <method-params> <method-param>ParameterType_1</method-param> ... <method-param>ParameterType_N</method-param> </method-params> </method>Style 2 element takes precedence over Style 1 element. Style 3 element takes precedence over Style 2 and Style 1 elements.
The optional method-intf element can be used to differentiate between methods with the same name and signature that are multiply defined across the component and/or home interfaces (must be one of the following: Home, Remote, LocalHome, Local).
The following is an example of the specification of the transaction attributes in the deployment descriptor. The updatePhoneNumber method of the EmployeeRecord enterprise bean is assigned the transaction attribute Mandatory; all other methods of the EmployeeRecord bean are assigned the attribute Required. All the methods of the enterprise bean AardvarkPayroll are assigned the attribute RequiresNew.
<ejb-jar> ... <assembly-descriptor> ... <container-transaction> <method> <ejb-name>EmployeeRecord</ejb-name> <method-name>*</method-name> </method> <trans-attribute>Required</trans-attribute> </container-transaction> <container-transaction> <method> <ejb-name>EmployeeRecord</ejb-name> <method-name>updatePhoneNumber</method-name> </method> <trans-attribute>Mandatory</trans-attribute> </container-transaction> <container-transaction> <method> <ejb-name>AardvarkPayroll</ejb-name> <method-name>*</method-name> </method> <trans-attribute>RequiresNew</trans-attribute> </container-transaction> </assembly-descriptor> </ejb-jar>