gt;
</container-transaction>
<container-transaction>
<method>
<ejb-name>Coverage</ejb-name>
<method-name>*</method-name>
</method>
<trans-attribute>RequiresNew</trans-attribute>
</container-transaction>
...
</assembly-descriptor>
...
</ejb-jar>
Geronimo 配置
既然您明白了在 EJB 部署描述符中指定事务属性的通用格式,那么可以考虑一下如何在 Geronimo 中使用 OpenEJB 实现这一点。在 Geronimo 中开发 EJB 时,可以通过使用 XDoclet 生成所需的大部分单调的 EJB 编程工件 (artifact) 来节省时间。作为这些工件的一部分,XDoclet 生成了 EJB 部署描述符。
作为正常开发过程的一部分,可以在企业 bean 中指定 JavaDoc-style 标识标签。通过在企业 bean 中声明标识标签,XDoclet 可生成 ejbjar.xml。这包括属性定义的任何事务。您不用自己直接编译部署描述符 (ejb-jar.xml)。
在 XDoclet 中使用 @ejb.transaction 标识指定事务属性。在需要使用它时,可以在企业 bean 的方法之上声明它。
XDoclet 配置示例和 ejbjar.xml 生成
下面的代码片断显示了一个简洁的会话 bean 和实体 bean 示例,然后由 XDoclet 生成最终的 ejbjar.xml 文件。首先,清单 3 显示了一个名为 SampleSession 的无状态会话 bean。只需要注意与事务相关的部分即可(用粗体显示)。
清单 3. 会话 bean
package org.my.package.ejb;
/**
* Sample session bean.
* Declare all my XDoclet tags here
* ...
* ...
* @ejb.bean name="SampleSession"
* type="Stateless"
* local-jndi-name="java:comp/env/ejb/SampleSessionLocal"
* jndi-name="org.my.package.ejb/SampleSessionLocal/Home"
* view-type="both"
*
* @ejb.permission unchecked="true"
*
* @ejb.interface generate="local,remote"
* remote-class="org.my.package.ejb.SampleSession"
* local-class=" org.my.package.ejb. SampleSession Local"
* @ejb.home generate="local, remote"
* remote-class="org.my.package.ejb.SampleSession Home"
* local-class="org.my.package.SampleSession LocalHome"
* @ejb.util generate="physical"
* ...
* ...
*/
public abstract class SampleSessionBean implements javax.ejb.SessionBean {
/**
* Perform a business operation. Add something
* @param someParam the value
* @ejb.interface-method view-type="both"
* @ejb.transaction type="Required"
*/
public void doSomething(java.lang.String someParam)) {
...
}
/*
* Perform another business operation. Add something
* @param someParam the value
* @ejb.interface-method view-type="both"
* @ejb.transaction type="RequiresNew"
*/
public void doSomethingElse(java.lang.String someParam)) {
...
}
/**
* @ejb.create-method
* @ejb.transaction type="Required"
*/
public void ejbCreate ()
throws javax.ejb.CreateException
{
}
public void ejbPostCreate ()
throws javax.ejb.CreateException
{
}
protected javax.ejb.SessionContext _ctx = null;
|