EJBCLIENT000409:不再有目的地

时间:2019-03-26 10:59:33

标签: java wildfly jndi ejb-3.1

我正在从jboss 5迁移到wildfly 12。 我陷入了我的例外之一 我在Java 8中使用带有jndi的wildfly 12进行ejb(3.1)调用 我已经在wildfly控制台上部署了.ear文件 之后,我得到这个例外。 我正在使用Java EE5。

这是针对Java 8的Wildfly 12服务器。我尝试更改jndi属性。

private final Properties config;

config = new Properties();

config.put(Context.INITIAL_CONTEXT_FACTORY, JNP_NAMING_CONTEXT_FACTORY);
config.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
config.put(Context.PROVIDER_URL, "http-remoting://127.0.0.1:8080/");
//config.put(Context.PROVIDER_URL,"remote+http://127.0.0.1:8080");
config.put("jboss.naming.client.connect.options.org.xnio.Options.SASL_POLICY_NOPLAINTEXT", "false");

config.put("jboss.naming.client.ejb.context", "true"); 
config.put(Context.SECURITY_PRINCIPAL, "wixxxxxx");
config.put(Context.SECURITY_CREDENTIALS, "xxxxxx123");

Context ctx = new InitialContext(config);

我期望迁移并成功运行项目的输出,但是实际输出是

org.jboss.ejb.client.RequestSendFailedException: EJBCLIENT000409: No more destinations are available
    at org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:567)
    at org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:503)
    at org.jboss.ejb.protocol.remote.RemotingEJBClientInterceptor.handleInvocationResult(RemotingEJBClientInterceptor.java:56)
    at org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:569)
    at org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:503)
    at org.jboss.ejb.client.TransactionPostDiscoveryInterceptor.handleInvocationResult(TransactionPostDiscoveryInterceptor.java:133)
    at org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:569)
    at org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:503)
    at org.jboss.ejb.client.DiscoveryEJBClientInterceptor.handleInvocationResult(DiscoveryEJBClientInterceptor.java:108)
    at org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:569)
    at org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:503)
    at org.jboss.ejb.client.NamingEJBClientInterceptor.handleInvocationResult(NamingEJBClientInterceptor.java:78)
    at org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:569)
    at org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:503)
    at org.jboss.ejb.client.TransactionInterceptor.handleInvocationResult(TransactionInterceptor.java:172)
    at org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:569)
    at org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:503)
    at org.jboss.ejb.client.EJBClientInvocationContext.awaitResponse(EJBClientInvocationContext.java:913)
    at org.jboss.ejb.client.EJBInvocationHandler.invoke(EJBInvocationHandler.java:177)
    at org.jboss.ejb.client.EJBInvocationHandler.invoke(EJBInvocationHandler.java:112)
    at com.sun.proxy.$Proxy15.getServerInfo(Unknown Source)
    at com.verizon.delphi.hyperion.cli.CommLine$Info.cmdProc(CommLine.java:741)
    at tcl.lang.Parser.evalObjv(Parser.java)
    at tcl.lang.Parser.eval2(Parser.java)
    at tcl.lang.Interp.eval(Interp.java)
    at tcl.lang.Interp.eval(Interp.java)
    at com.verizon.delphi.hyperion.cli.CommLine.startInterpreter(CommLine.java:5638)
    at com.verizon.delphi.hyperion.cli.App.main(App.java:133)
    Suppressed: org.jboss.ejb.client.RequestSendFailedException: org.jboss.remoting3.ServiceOpenException: Unknown service name@http-remoting://127.0.0.1:8080
        at org.jboss.ejb.protocol.remote.RemoteEJBReceiver$1.lambda$handleDone$0(RemoteEJBReceiver.java:83)
        at org.xnio.AbstractIoFuture$NotifierRunnable.run(AbstractIoFuture.java:720)
        at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
        at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1985)
        at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1487)
        at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1378)
        at java.lang.Thread.run(Thread.java:748)
Failed to get sys infoEJBCLIENT000409: No more destinations are available

3 个答案:

答案 0 :(得分:0)

您最初的上下文工厂可能是错误的,您没有显示它的值,但是该常量的名称暗示仍然是唯一的jnp协议

答案 1 :(得分:0)

使用org.jboss.ejb.client.naming时,通常在名为jboss-ejb-client.properties的文件中定义连接。您在地图中为jndi.properties提供了它。 jboss-ejb-client.properties看起来像这样:

remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false
remote.connections=default
remote.connection.default.host=localhost
remote.connection.default.port = 8080
remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
remote.connection.two.host=localhost
remote.connection.two.port = 8080
remote.connection.two.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false

如果这可行,但是您不想使用文件作为连接属性,则可以查看https://developer.jboss.org/thread/202008

答案 2 :(得分:0)

问题可能不是InitialContext配置,似乎正确。

尝试使用以下格式进行查找:

ctx.lookup("ejb:EJBWildFly-1.0-SNAPSHOT/TextProcessorBean!com.gct.interfaces.TextProcessorRemote");

格式为:

context.lookup("ejb:" + appName + "/" + moduleName + "/" + distinctName + "/" + beanName + "!" + viewClassName);

查看此文档示例以获取更多信息: https://docs.jboss.org/author/display/WFLY8/EJB+invocations+from+a+remote+client+using+JNDI