Как настроить EJB как локальный, так и удаленный на WebSphere

StackOverflow https://stackoverflow.com/questions/4024060

  •  26-09-2019
  •  | 
  •  

Вопрос

У меня есть сессия EJB без гражданства с битным аннотациями @Local и @Remote. Код работает нормально на сервере Weblogic. Однако при развертывании его в WebSphere это дает следующее исключение.

bm.ejs.Container.ejbconfigurationException: business_interface_designated_as_both_remote_and_local: 'Oracle.odc.session.odcsession'

Класс Business интерфейса Oracle.odc.session.odcsessionsions не может быть как удаленными, так и локальными.

Доступно ли обходной путь, чтобы сделать его работать без написания отдельной EJBS для удаленного и локального вызова?

Это было полезно?

Решение

Один обходной путь состоит в том, чтобы иметь базовый интерфейс с декларациями метода, а затем иметь локальный интерфейс и удаленный интенсив, который расширяет базовый интерфейс, например,

public interface MyEJBBase {
    public void foo();
    public void bar();
}

@Local
public interface MyEJBLocal extends MyEJBBase {}

@Remote
public interface MyEJBRemote extends MyEJBBase {}

Другие советы

AFAIK Нет никакого способа, ошибка кажется довольно описательной.

Из раздела 4.9.7 Спецификации EJB 3.2:

Та же бизнес-интерфейс не может быть как локальным, так и удаленным бизнес-интерфейсом бона.

Вы можете использовать подинтерзасы как обходной путь:

public interface MyInterface { /* all the methods */ }
public interface MyRemoteInterface extends MyInterface { /* empty */ }

@Stateless
@Remote(MyRemoteInterface.class)
@Local(MyInterface.class)
public class MyBean { /* ... */ }

Обратите внимание, что параметры и значения возврата методов на удаленном интерфейсе будут переданы по-значению, но параметры и значения возврата методов на локальном интерфейсе будут переданы передачу.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top