Как настроить ejb как локальный, так и удаленный на Websphere - PullRequest
3 голосов
/ 26 октября 2010

У меня есть EJB SessionBean без состояния с аннотациями bith @local и @remote. Код отлично работает на сервере weblogic. Однако при развертывании в Websphere это дает следующее исключение.

bm.ejs.container.EJBConfigurationException: BUSINESS_INTERFACE_DESIGNATED_AS_BOTH_REMOTE_AND_LOCAL: 'oracle.odc.session.ODCSession'

Класс бизнес-интерфейса oracle.odc.session.ODCSession не может быть удаленным и локальным.

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

Ответы [ 3 ]

2 голосов
/ 08 августа 2012

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

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

@Local
public interface MyEJBLocal extends MyEJBBase {}

@Remote
public interface MyEJBRemote extends MyEJBBase {}
1 голос
/ 11 декабря 2010

Из раздела 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 { /* ... */ }

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

1 голос
/ 04 ноября 2010

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

...