Могу ли я иметь несколько объявлений EJB для одних и тех же классов Home и Remote? - PullRequest
0 голосов
/ 01 сентября 2009

Можно ли объявить несколько бинов в дескрипторе развертывания 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 Ответ

0 голосов
/ 15 января 2010

Это нормально, как вы упомянули выше. Следует отметить, что для каждого контейнера AccountFacade и RestrictiveAccountFacade будут двумя совершенно не связанными сессионными компонентами.

Однако RestrictiveAccountFacade имеет сериализуемый доступ транзакции к тому же ресурсу jdbc, что и AccountFacade, поэтому они будут мешать друг другу только на уровне изоляции транзакции.

Следовательно, AccountFacade может быть заблокировано, если ему необходим доступ к той же записи, что и в транзакции RestrictiveAccountFacade.

Аналогично, транзакция RestrictiveAccountFacade будет заблокирована для той же записи, которая используется AccountFacade в ее транзакции.

...