Я ищу и запускаю 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)
почему была эта ошибка?
Вместо использования пространства имен * 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
@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 " –
Не могли бы вы обновить свой вопрос с помощью свойств, которые вы использовали для установления этого последнего поиска? – aribeiro