Статьи

Ссылки на EJB вне вашего приложения с Oracle WebLogic

В предыдущих статьях мы рассмотрели EJB v. 3.0 и переносимые механизмы, которые он предоставляет вам для создания приложения Java EE. Поскольку спецификации Java EE полностью связаны с переносимостью, рискуя повториться, мы часто подчеркивали наиболее важный предел переносимости, который все еще присутствует в спецификациях EJB v. 3.0: не существует переносимого способа объявить и связать ссылку на EJB вне ваше приложение.

Хотя существуют и другие стандарты (такие как веб-службы), которые позволяют свободно объединять компоненты ваших приложений, удаленные EJB-компоненты по-прежнему являются идеальным средством для решения этой задачи благодаря своей простоте, стандартизации, хорошей поддержке разработки многих IDE и хорошей производительность они обеспечивают.

В этом сообщении мы сделаем обзор механизмов, предоставляемых одним из ведущих серверов приложений Java EE, Oracle WebLogic, для поддержки ссылок на EJB-компоненты вне области вашего приложения.

mappedName в Oracle WebLogic

Серверы приложений, совместимые с Java EE, предоставляют дополнительные непереносимые API, инструменты и механизмы, используемые для улучшения реализуемых ими стандартных функций Java EE. Одной из функций, о которых мы упоминали в первой части этой серии, был элемент mappedName @EJB .

Хотя в спецификации EJB v. 3.0 охотно неясно об этом элементе (который был заменен элементом поиска, представленным в спецификации EJB v. 3.1), многие поставщики серверов приложений реализовали его с интуитивно понятным поведением, предложенным его собственным именем: отображение EJB на глобальное имя JNDI .

Если вы хотите обменять переносимость на простоту, многие серверы приложений (такие как Oracle WebLogic или GlassFish) позволят вам определить глобальное имя JNDI бина со значением элемента mappedName (или его соответствующего элемента дескриптора развертывания.) Как уже говорилось, будьте осторожны что Oracle WebLogic будет назначать глобальные имена JNDI только для удаленных бизнес-интерфейсов. На самом деле это не ограничение, так как на локальные бизнес-интерфейсы всегда можно ссылаться с помощью API, описанных в предыдущих частях этой серии.

Соглашения об именовании Oracle WebLogic для удаленных бизнес-интерфейсов EJB

При наличии такого механизма связать ссылку на bean-компонент вне вашего приложения очень просто. Мастер EJB JDeveloper действительно установит для вас mappedName по умолчанию с интуитивно понятной схемой именования, которая чем-то напоминает новые переносимые глобальные имена JNDI, представленные в спецификации EJB v. 3.1, как показано на следующем снимке экрана:

Схема именования, предложенная JDeveloper, следующая:

mappedName = [имя-приложения] — [имя-модуля] — [имя-компонента]

В случае принятия эта схема именования позволяет легко назначить каждому бину уникальное имя в ваших приложениях. Я признаю, что такие имена немного неуклюжи, но, будучи непереносимой, схема именования так же хороша, как и любая другая.

Глобальные имена JNDI для удаленных интерфейсов EJB в Oracle WebLogic

Глобальные имена JNDI удаленных бизнес-интерфейсов EJB с mappedName в Oracle WebLogic Application Server будут:

mappedName # [интерфейс-FQN]

Использование этой схемы именования позволит вам создавать слабосвязанные приложения Java EE, которые повторно используют друг друга EJB. Если вы хотите проверить дерево JNDI вашего сервера и проверить фактические имена вашего развернутого EJB, вы можете использовать инспектор дерева JNDI WebLogic, который можно запустить, открыв консоль WebLogic, перейдя на страницу Environment / Servers / [your-server] и используя ссылку View JNDI Tree . На следующем снимке экрана вы можете проверить глобальную запись JNDI для bean-компонента, определенного следующим образом:

1
2
3
4
5
6
7
8
9
package es.reacts;
 
import ...;
 
@Stateless(name = "EJBByMappedName", mappedName = "Application1-EjbTest0-EJBByMappedName")
@Remote
public class EJBByMappedNameBean implements RemoteByMappedName {
  [...]
}

На снимке экрана вы можете оценить запись, соответствующую бизнес-интерфейсу e s.reacts.RemoteByMappedName .

Настройка имени JNDI удаленного интерфейса EJB

Oracle WebLogic предоставляет вам необходимые инструменты для настройки и переопределения соглашений об именах по умолчанию для удаленных интерфейсов EJB. Чтобы назначить или переопределить глобальное имя JNDI удаленного интерфейса EJB, вы можете использовать специальные дескрипторы развертывания WebLogic. Например, в случае модуля EJB вы можете использовать JDeveloper для быстрого добавления файла по умолчанию weblogic-ejb-jar.xml или, если вы используете другую IDE, например NetBeans, вы можете создать новый файл XML с именем weblogic-ejb-jar .xml в каталоге META-INF вашего модуля. Пустой файл weblogic-ejb-jar.xml выглядит следующим образом (по состоянию на Oracle WebLogic 10.3):

1
2
3
4
5

Чтобы назначить или переопределить глобальное имя JNDI для данного удаленного интерфейса EJB, вы можете использовать следующие элементы:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
<?xml version = '1.0' encoding = 'UTF-8'?>
<weblogic-ejb-jar xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  <weblogic-enterprise-bean>
    <ejb-name>SessionTest0</ejb-name>
    <stateless-session-descriptor>
      <business-interface-jndi-name-map>
        <business-remote>es.reacts.SessionTest0</business-remote>
        <jndi-name>global-jndi-name</jndi-name>
      </business-interface-jndi-name-map>
    </stateless-session-descriptor>
  </weblogic-enterprise-bean>
</weblogic-ejb-jar>

Если вы используете JDeveloper, он предоставляет вам простой графический интерфейс для редактирования файла weblogic-ejb-jar.xml :

Графический интерфейс JDeveloper позволит вам легко настроить дескриптор развертывания WebLogic и настроить другие непереносимые функции сервера приложений WebLogic, такие как кластеризация EJB.

Связывание ссылки EJB с глобальным именем JNDI

В предыдущем разделе мы рассмотрели инструменты, которые Oracle WebLogic Application Server предоставляет для настройки среды выполнения и установки глобального имени JNDI для удаленного интерфейса EJB. Таким же образом Oracle WebLogic предоставляет вам другие инструменты для связи ссылки EJB с конкретным целевым EJB с использованием глобального имени JNDI.

В приведенных выше примерах мы всегда связывали ссылку EJB с целью, используя переносимые механизмы, предоставляемые спецификацией EJB v. 3.0. Если вам нужно установить цель для удаленного EJB-компонента вне области вашего приложения, вы можете использовать специфичный для WebLogic дескриптор развертывания модуля, который действует как EJB-клиент. В случае модуля Java EE, который мы использовали до сих пор, вы можете использовать JDeveloper, чтобы добавить специфичный для WebLogic дескриптор развертывания, называемый weblogic.xml. Если вы используете другие IDE, скелет этого файла следующий (по состоянию на Oracle WebLogic 10.3):

1
2
3
4
5
6
7
8
9
<?xml version = '1.0' encoding = 'UTF-8'?>
<weblogic-web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  <ejb-reference-description>
    <ejb-ref-name>ejb/myGlobalRef</ejb-ref-name>
    <jndi-name>global-jndi-name</jndi-name>
  </ejb-reference-description>
</weblogic-web-app>

Этот дескриптор развертывания weblogic.xml связывает ссылку EJB ejb / myGlobalRef с объектом, хранящимся под глобальным именем JNDI global-jndi-name , которое мы указали в файле weblogic-ejb-jar.xml, описанном в предыдущем раздел. Эта ссылка будет объявлена ​​как обычно с аннотацией @EJB или в стандартном дескрипторе развертывания (в данном случае, в файле web.xml ).

Если вы используете JDeveloper, графический интерфейс поможет вам создать дескриптор развертывания для WebLogic. Графический интерфейс хорошо сделан, он также может сканировать ссылки на EJB вашего модуля и позволяет им выбирать из списка при настройке.

Ссылка: ссылки на EJB вне вашего приложения С Oracle WebLogic от нашего партнера JCG Грея в The Grey Blog .

Статьи по Теме :