Публикация локального интерфейса EJB в weblogic - PullRequest
2 голосов
/ 22 июня 2010

есть ли способ поиска EJB в weblogic, если он реализует только локальный интерфейс?

Если я использую это

@Remote public interface TestSessionRemote { 
    public void businessMethod();
}

@Stateless(mappedName = "A")
public class TestSessionBean implements TestSessionRemote 
{
    public void businessMethod() 
    {

    }
}

, EJB можно искать, используя это имя:

"A#" + TestSessionRemote.class.getName()

Если я поменяю аннотацию для TestSessionRemote с @Remote на @Local, EJB исчезнет из JNDI.Это можно обойти?

РЕДАКТИРОВАТЬ: В то время я работал с Weblogic 10.3.x (он же 11g).

Ответы [ 3 ]

7 голосов
/ 16 апреля 2013

Нет, это невозможно. Я работал над той же проблемой, в контексте развертывания приложения EJB 3.0 в WebLogic 10.3.x.

Приложение работает на сервере приложений Oracle 10.1.3 и GlassFish 3.x.

  • Oracle AS (OC4J) имеет собственный механизм поиска локального интерфейса EJB с использованием JNDI.
  • GlassFish 3.x реализует EJB 3.1 с переносимым синтаксисом имени JNDI.

Наше приложение использует механизм поиска для текущего сервера приложений, который определяется во время выполнения.

В WebLogic Server 10.3, локальный интерфейс EJB:

  • может быть внедрен в управляемые классы в контейнере сервлетов (сервлеты, фильтры и т. Д.) И другие EJB-компоненты с использованием @EJB аннотаций
  • доступен только для поиска из JNDI, когда он был объявлен в элементе ejb-local-ref в web.xml или ejb-jar.xml

Для нас не практично объявлять все EJB, которые ищутся. У нас есть 192 EJB без сохранения состояния, в основном инъецированные, но многие смотрят на них из JNDI, потому что они нужны нам неуправляемым классам.

Мой источник этой информации, кроме проб и ошибок, Пример локального поиска WebLogic 10.3 EJB3 . Почти все остальное, что я нашел, включая документацию по Oracle, описывает синтаксис поиска JNDI с mappedName#fullInterface, но не дает понять, что в дереве JNDI находится только имя удаленного интерфейса.

Обновление: Мы пошли с объявлениями в web.xml и ejb-jar.xml (да, есть EJB, которые используют служебные классы, которые ищут другие EJB в JNDI). Начал со скрипта для генерации их из источников, затем вручную редактировал их, пока они не были правильными. Не красиво, но необходимо.

1 голос
/ 12 ноября 2013

Еще немного, проверьте проверку в Ejb3SessionBinder # bindToJNDI (), чтобы пропустить привязку кода с интерфейсом jndi и Home, это означает: никакие локальные компоненты не могут быть вызваны из дерева jndi, потому что они не были зарегистрированы. Как уже было сказано, он доступен только для поиска из JNDI, когда он был объявлен в элементе ejb-local-ref в web.xml или ejb-jar.xml.

(эта информация относится к wls 10.3.5).

0 голосов
/ 22 июня 2010

Это все еще должно быть в пространстве имен java: comp / env.

...