TomEE: вызов удаленного EJB с разных машин - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть два экземпляра TomEE (в настоящее время разные контейнеры), и я хочу, чтобы между ними работал Remote EJB.Однако у меня возникают проблемы с этим.

Сначала я включил поддержку удаленного EJB на экземплярах TomEE.Я добавил следующее в файл system.properties.На основе этой темы Удаленный поиск EJB с использованием OpenEJB в Tomee

tomee.remote.support = true
tomee.serialization.class.blacklist = -
tomee.serialization.class.whitelist = *
openejb.system.apps = true
openejb.servicemanager.enabled = true

Мой сервер TomEE Ear успешно развернут, и я могу видеть имена JNDI моих удаленных Ejbs.

INFO: Extracting jar: /usr/local/tomee/apps/simpleEJB-ear-1.0.ear
INFO: Extracted path: /usr/local/tomee/apps/simpleEJB-ear-1.0
INFO: Found EjbModule in classpath: /usr/local/tomee/apps/simpleEJB-ear-1.0/simpleEJB-ejbs-1.0.jar
INFO: Configuring enterprise application: /usr/local/tomee/apps/simpleEJB-ear-1.0
INFO: Enterprise application "/usr/local/tomee/apps/simpleEJB-ear-1.0" loaded.
INFO: Creating dedicated application classloader for simpleEJB-ear-1.0
INFO: Assembling app: /usr/local/tomee/apps/simpleEJB-ear-1.0
INFO: Jndi(name=global/simpleEJB-ear-1.0/simpleEJB-ejbs-1.0/HelloImpl!com.wk.Hello) --> Ejb(deployment-id=HelloImpl)
INFO: Jndi(name=global/simpleEJB-ear-1.0/simpleEJB-ejbs-1.0/HelloImpl) --> Ejb(deployment-id=HelloImpl)
INFO: Deployed Application(path=/usr/local/tomee/apps/simpleEJB-ear-1.0)

Теперь, когда я выполняю поиск из другого экземпляра TomEE, я получаю исключения RemoteEJBException.Ниже приведен мой клиентский код, развернутый на TomEE, который ищет указанный Remote EJB:

@PostConstruct
public void init() {
Properties props = new Properties();
Properties p = new Properties();
p.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.client.RemoteInitialContextFactory");
p.put(Context.PROVIDER_URL, "http://172.17.0.2:8080/tomee/ejb");

InitialContext ic = new InitialContext(props);
//hello = (com.wk.Hello) ic.lookup("com.wk.Hello");
hello = (com.wk.Hello) ic.lookup("com.wk.Hello");
}

Однако поиск завершается неудачно со следующим исключением:

Caused by: javax.ejb.EJBException: javax.naming.NameNotFoundException: Name [com.wk.Hello] is not bound in this Context. Unable to find [com.wk.Hello].

Чего мне не хватает, чтобы получитьэто работает?Моя цель - переместить некоторые из наших приложений JavaEE с Glassfish на TomEE, поэтому я работаю над POC, чтобы посмотреть, как определенные функции JavaEE будут работать под TomEE.

Любая помощь будет принята с благодарностью.Спасибо!

1 Ответ

0 голосов
/ 15 февраля 2019

Я на самом деле понял, что сделал неправильно, и теперь у меня есть Remote EJB, разговаривающий друг с другом в разных экземплярах TomEE.Две вещи, одна у меня было неправильное имя JDNI.Кажется, что поиск имени JDNI в стиле com.wk.Hello - это специфический для Glassfish способ, а не настоящий стандарт JavaEE.Поэтому я изменил имя JDNI на HelloImplRemote.Если вы откроете журналы каталины для JNDI, вы увидите различные способы поиска ресурса JNDI.

Другая проблема заключается в том, что у меня было два разных экземпляра Properties.

Properties props = new Properties();
Properties p = new Properties();

Один - это реквизит, который пуст, а другой - это p, который задает фабрику контекста и URL-адрес провайдера, однако я ошибочно использовал пустые реквизиты при инициализации объекта InitialContext, а не тот экземпляр свойств, который правильно устанавливаетвсе.

В любом случае, после исправления этих двух вещей все работает!

...