2016-04-12 4 views
0

Я ищу и запускаю EJB, развернутые на экземпляре сервера WildFly (целевого сервера) из другого экземпляра сервера WildFly. Для этого я следую ссылке - 'https://docs.jboss.org/author/display/WFLY9/Developer+Guide#DeveloperGuide-EJBinvocationsfromaremoteserver'wildfly-9.0.2.Final - вызовы EJB с удаленного сервера

test.jar был развернут на целевом сервере. Ниже приведены журналы развертывания.

16:34:46,545 INFO [org.jboss.weld.deployer] (MSC service thread 1-6) WFLYWELD0010: Stopping weld service for deployment test.jar 
16:34:46,569 INFO [org.jboss.as.server.deployment] (MSC service thread 1-7) WFLYSRV0028: Stopped deployment test.jar (runtime-name: test.jar) in 40ms 
16:34:46,573 INFO [org.jboss.as.server.deployment] (MSC service thread 1-3) WFLYSRV0027: Starting deployment of "test.jar" (runtime-name: "test.jar") 
16:34:46,588 INFO [org.jboss.weld.deployer] (MSC service thread 1-5) WFLYWELD0003: Processing weld deployment test.jar 
16:34:46,595 INFO [org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploymentUnitProcessor] (MSC service thread 1-5) JNDI bindings for session bean named TestHelperBean in deployment unit deployment "test.jar" are as follows: 

java:global/test/TestHelperBean!moc.test.ejb.session.TestHelperLocal 
java:app/test/TestHelperBean!moc.test.ejb.session.TestHelperLocal 
java:module/TestHelperBean!moc.test.ejb.session.TestHelperLocal 
java:global/test/TestHelperBean!moc.test.ejb.session.TestHelperRemote 
java:app/test/TestHelperBean!moc.test.ejb.session.TestHelperRemote 
java:module/TestHelperBean!moc.test.ejb.session.TestHelperRemote 
java:jboss/exported/test/TestHelperBean!moc.test.ejb.session.TestHelperRemote 

16:34:46,610 INFO [org.jboss.weld.deployer] (MSC service thread 1-5) WFLYWELD0006: Starting Services for CDI deployment: test.jar 
16:34:46,614 INFO [org.jboss.weld.deployer] (MSC service thread 1-1) WFLYWELD0009: Starting weld service for deployment test.jar 
16:34:46,834 INFO [org.jboss.as.server] (XNIO-1 task-3) WFLYSRV0016: Replaced deployment "test.jar" with deployment "test.jar" 

Бесполезный сеансовый компонент был развернут на целевом сервере.

package moc.test.ejb.session; 
import javax.ejb.Remote; 
import javax.ejb.Stateless; 
import javax.ejb.Local; 
@Stateless 
@Remote (TestHelperRemote.class) 
@Local(TestHelperLocal.class) 
public class TestHelperBean implements TestHelperRemote,TestHelperLocal 
{ 
public boolean testFunction() throws Exception 
{ 
    try 
    { 
     System.out.println("[TestHelperBean][testFunction]"); 
    }catch(Exception e) 
    {} 
    return false; 
} 
} 

Ниже приведен код клиента, вызывающий экземпляр test.jarbean.

package com.testmodule.pojo; 
import java.util.Hashtable; 
import javax.naming.Context; 
import moc.test.ejb.session.TestHelperRemote; 
public class Test { 
public void getDbConnection(){ 
    try{ 
     final Hashtable<String, String> props = new Hashtable<String, String>();    
     props.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming"); // setup the ejb: namespace URL factory   
     final Context context = new javax.naming.InitialContext(props); // create the InitialContext 
     final TestHelperRemote bean = (TestHelperRemote) context.lookup("ejb:" + "" + "/" + "test" + "/" 
       + "" + "/" + "TestHelperBean" + "!" + moc.test.ejb.session.TestHelperRemote.class.getName()); 
     bean.testFunction();       
    } 
    catch(Exception e){e.printStackTrace();} 

Но во время выполнения следующих ошибок произошла

15:58:48,972 ERROR [stderr] (default task-1) java.lang.IllegalStateException: EJBCLIENT000025: No EJB receiver available for handling [appName:, moduleName:test, distinctName:] combination for invocation context [email protected] 
15:58:48,973 ERROR [stderr] (default task-1) at org.jboss.ejb.client.EJBClientContext.requireEJBReceiver(EJBClientContext.java:774) 
15:58:48,974 ERROR [stderr] (default task-1) at org.jboss.ejb.client.ReceiverInterceptor.handleInvocation(ReceiverInterceptor.java:116) 
15:58:48,974 ERROR [stderr] (default task-1) at org.jboss.ejb.client.EJBClientInvocationContext.sendRequest(EJBClientInvocationContext.java:186) 
15:58:48,975 ERROR [stderr] (default task-1) at org.jboss.ejb.client.EJBInvocationHandler.sendRequestWithPossibleRetries(EJBInvocationHandler.java:255) 
15:58:48,975 ERROR [stderr] (default task-1) at org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:200) 
15:58:48,976 ERROR [stderr] (default task-1) at org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:183) 

почему была эта ошибка?

+1

Вместо использования пространства имен * ejb: * попробуйте использовать пространство имен * remote *, как описано в [Remote JNDI Reference] WildFly (https://docs.jboss.org/author/display/WFLY9/Remote+JNDI+ Reference + Update + Draft). Обратите внимание, что клиент * http-remoting * предполагает, что имена JNDI в удаленных поисковых системах относятся к ** пространству имен java: jboss/exported **, поиск абсолютного имени JNDI не удастся. Поэтому вы должны выполнить поиск на 'test/TestHelperBean! Moc.test.ejb.session.TestHelperRemote'. – aribeiro

+0

@aribeiro ... После использования удаленного поиска пространства имен JNDI произошло событие NameNotFoundException .... javax.naming.NameNotFoundException: test/TestHelperBean! Moc.test.ejb.session.TestHelperRemote - service jboss.naming.context.java.test . TestHelperBean! Moc.test.ejb.session.TestHelperRemote " –

+1

Не могли бы вы обновить свой вопрос с помощью свойств, которые вы использовали для установления этого последнего поиска? – aribeiro

ответ

1

Ваш клиент (т. Е. Код, пытающийся вызвать службу) находится на экземпляре Wildfly 1, где ваш сервер (т. Е. Где ваш ejb развернут) находится на экземпляре 2. Предположим, что экземпляр 1 работает на порту 8080 по умолчанию экземпляр 2 работает на порт 8180.

The link you used in your question, есть раздел под названием Создать область безопасности на сервере клиента, который описывает различные шаги, необходимые для создания «исходящий сокет привязки» и «удаленного-outbound- подключение «. Я не уверен, что вы уже это сделали или нет. Без этого шага приложение в экземпляре 1 не знает, как подключиться к службе по экземпляру 2.

Если вы не хотите идти по маршруту конфигурации, есть хорошая запись на stackoverflow question - wildfly-to-wildfly-ejb-client-without-remote-outbound-connections. Этот метод работает для меня и может помочь вам найти собственное решение. С помощью этого решения вы можете указать адрес сервера, порт (в этом примере - 8180), имя пользователя и пароль, необходимые для подключения к ejb, размещенному на втором экземпляре Wildfly.

 Смежные вопросы

  • Нет связанных вопросов^_^