Могу ли я иметь несколько объявлений EJB для одних и тех же классов Home и Remote?
Можно ли объявить несколько бинов в ejb-jar.xml
(в EJB 1.1) дескриптор развертывания с разными именами, но теми же классами позади?
Например:
<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 ответ
Это нормально, как вы упомянули выше. Следует отметить, что в зависимости от контейнера AccountFacade
а также RestrictiveAccountFacade
будет два совершенно не связанных сессионных компонента.
тем не мение RestrictiveAccountFacade
имеет сериализуемый доступ к транзакции к тому же ресурсу jdbc, что и AccountFacade
поэтому они будут мешать друг другу только на уровне изоляции транзакций.
следовательно AccountFacade
может быть заблокирован, если ему нужен доступ к той же записи, что и участие в транзакции RestrictiveAccountFacade
,
так же RestrictiveAccountFacade
транзакция будет заблокирована на той же записи, что и используемая AccountFacade
в этой транзакции.