我可以为同一个Home和Remote类提供多个EJB声明吗?

时间:2009-09-01 13:20:15

标签: ejb oc4j deployment-descriptor

可以在ejb-jar.xml(EJB 1.1 中的)部署描述符中使用不同的名称但后面的相同类声明多个bean吗?

例如:

<session>
    <ejb-name>AccountFacade</ejb-name>
    <home>com.something.ejb.AccountFacadeHome</home>
    <remote>com.something.ejb.AccountFacadeRemote</remote>
    <ejb-class>com.something.ejb.AccountFacadeBean</ejb-class>
    <session-type>Stateless</session-type>
    <transaction-type>Bean</transaction-type>
</session>

<session>
    <ejb-name>RestrictiveAccountFacade</ejb-name>
    <home>com.something.ejb.AccountFacadeHome</home>
    <remote>com.something.ejb.AccountFacadeRemote</remote>
    <ejb-class>com.something.ejb.AccountFacadeBean</ejb-class>
    <session-type>Stateless</session-type>
    <transaction-type>Bean</transaction-type>
</session>

对于RestrictiveAccountFacade我想在orion-ejb-jar.xml文件中设置更高的隔离级别,例如:

<entity-deployment name="AccountFacade" location="AccountFacade">
    <resource-ref-mapping location="..." name="jdbc/..."/>
</entity-deployment>

<entity-deployment name="RestrictiveAccountFacade" location="RestrictiveAccountFacade" isolation="serializable">
    <resource-ref-mapping location="..." name="jdbc/..."/>
</entity-deployment>

这样做是否存在风险,任何副作用或未指明的行为?

1 个答案:

答案 0 :(得分:0)

如上所述,这是完全可以的。应该注意的是,就容器而言,AccountFacadeRestrictiveAccountFacade将是两个完全不相关的会话bean。

但是RestrictiveAccountFacade具有与AccountFacade相同的jdbc资源的事务可序列化访问权限,因此它们仅在事务隔离级别上相互干扰。

因此,如果AccountFacade需要访问与参与RestrictiveAccountFacade的交易相同的记录,则可能会阻止RestrictiveAccountFacade

同样,AccountFacade交易将被阻止在{{1}}在其交易中使用的同一记录上。