В EJB 2.1 требуется ли объявление ссылок на ресурсы в ejb-jar.xml? - PullRequest
2 голосов
/ 28 октября 2009

Я использую Weblogic 9.2 с большим количеством MDB. Эти MDB обращаются к источникам данных JDBC и выполняют запись как в локальные, так и во внешние управляемые пункты назначения JMS с использованием локальных и внешних XAConnectionFactorys соответственно. Каждый MDB разграничивает управляемую контейнером JTA-транзакцию, которая должна быть распределена среди всех этих ресурсов.

Ниже приведен отрывок из моего файла ejb-jar.xml для MDB, который использует локальную очередь с именем "MyDestination" и создает для очереди IBM Websphere MQ с именем "MyOtherDestination". Эти логические имена связаны с физическими объектами в моем файле weblogic-ejb-jar.xml.

Обязательно ли использовать теги и для представления ConnectionFactory и Queue для MDB? Если это так, требуется ли это Weblogic или это требуется спецификацией J2EE? И с какой целью? Например, требуется ли поддерживать транзакционность XA?

Я уже знаю о преимуществах отделения администрируемых объектов от моего MDB с помощью имен, отображаемых в контексте именования MDB. Это единственное добавленное значение при указании этих тегов? Другими словами, допустимо ли просто ссылаться на эти объекты из моего MDB, используя InitialContext и полные имена объектов?

<enterprise-bean>
    <message-driven>
        <ejb-name>MyMDB</ejb-name>
        <ejb-class>com.mycompany.MyMessageDrivenBean</ejb-class>
        <transaction-type>Container</transaction-type>
        <message-destination-type>javax.jms.Queue</message-destination>
        <message-destination-link>MyDestination</message-destination-link>
        <resource-ref>
            <res-ref-name>jms/myQCF</res-ref-name>
            <res-type>javax.jms.XAConnectionFactory</res-type>
            <res-auth>Container</res-auth>
        </resource-ref>
        <message-destination-ref>
            <message-destination-ref-name>jms/myOtherDestination</message-destination-ref-name>
            <message-destination-type>javax.jms.Queue</message-destination-type>
            <message-destination-usage>Produces</message-destination-usage>
            <message-destination-link>MyOtherDestination</message-destination-link>
        </message-destination-ref>
    </message-driven>
<enterprise-bean>

1 Ответ

2 голосов
/ 28 октября 2009

Я пролил на Weblogic / J2EE документацию в течение дня, опубликовал вышеуказанный вопрос, а затем, как и ожидалось, сразу же наткнулся на документацию, которую искал.

Как минимум Мне нужно объявить для удаленной ConnectionFactory (в моем случае, IBM Websphere MQ), чтобы включить его соединения в транзакцию JTA.

Соответствующий для удаленного пункта назначения добавлен для согласованности, и здесь нет реальной добавленной стоимости с точки зрения Weblogic. Кроме того, при указании ссылок на локально управляемые пункты назначения, ConnectionFactorys и источники данных добавление стоимости не добавляется.

Из часто задаваемых вопросов Weblogic: интеграция удаленных JMS-провайдеров :

Q. Какие преимущества дает ресурс JMS ссылки предоставляют?

A. Ссылки на ресурсы JMS обеспечивают следующие преимущества:

  • Они обеспечивают переносимость приложений сервлетов и EJB: их можно использовать изменить JMS приложения ресурс без перекомпиляции исходный код приложения.
  • Они обеспечивают автоматическое объединение JMS-соединений, сеансов и СообщениеПроизводитель объектов .
  • Они обеспечивают автоматическое зачисление транзакций для не-WebLogic JMS провайдеры . Это требует поддержки XA в провайдер JMS. Если ресурс ссылки не используются, затем зачисление не-WebLogic JMS-провайдер с текущая транзакция требует дополнительного программные шаги.

Подробности этой функции описаны в Расширенная поддержка J2EE для использования WebLogic JMS с EJB и сервлетами .

...