Как я называю удаленный EJB в EAR от другого?

В Weblogic 10.3, как я ввожу удаленный EJB от одного EAR в боб Не сохраняющий состояние другого, оба УХА, развертываемые в том же контейнере? Идеально я хотел бы сделать как можно больше с аннотациями.

Поэтому предположите, что у меня есть следующий интерфейс:

public interface HelloService {
  public String hello();
}

реализованный следующим EJB:

@Stateless
@Remote
public class HelloServiceBean implements HelloService {
  public String hello() {
      return "hello";
  }
}

Предположим, что они упаковываются и развертываются в server.ear. Теперь в client.ear, У меня есть следующее:

@Stateless
public class HelloClientBean {
    @EJB
    HelloService helloService;

// other methods...
}

Что делает я должен добавить так, чтобы Weblogic выяснил проводное соединение правильно между HelloClientBean в client.ear и HelloServiceBean в server.ear? Указатели на официальную документацию и/или книги горячо приветствуют.

6
задан BalusC 7 April 2010 в 17:49
поделиться

1 ответ

Самое простое решение, которое я нашел до сих пор, заключается в следующем.

Во-первых, аннотируйте компонент без состояния с помощью атрибута mappedName :

@Stateless(mappedName="HelloService")
@Remote
public class HelloServiceBean implements HelloService {
  public String hello() {
      return "hello";
  }
}

Согласно http://forums.oracle.com/forums/thread.jspa?threadID=800314&tstart=1 , Weblogic никогда не создаст запись JNDI для EJB, если имя JNDI не указано как атрибут mappedName (или в дескрипторе развертывания, или в частной аннотации).

Затем теперь вы можете аннотировать свое клиентское поле с помощью @EJB с атрибутом mappedName , который должен быть таким же, как атрибут в серверном компоненте . (Я искренне озадачен этим. NameNotFoundException при вызове EJB в Weblogic 10.3 предполагает, что я должен иметь возможность использовать синтаксис mappedName # interfaceName , но в моих тестах этого не произошло. work.):

@Stateless
public class HelloClientBean {
    @EJB(mappedName="HelloService")
    HelloService helloService;

// other methods...
}

Теперь это работает, если оба EAR развернуты в одном контейнере. Далее я попытаюсь выяснить правильный синтаксис, когда они будут развернуты на разных машинах.

4
ответ дан 17 December 2019 в 07:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: