当前位置: 首页 > 知识库问答 >
问题:

Wildfly-9.0.2.final-EJB从远程服务器调用

申屠晟
2023-03-14

我正在从另一个WildFly服务器实例中查找并调用部署在WildFly服务器(目标服务器)实例上的EJB。为此,我使用链接--https://docs.jboss.org/author/display/wfly9/developer+guide#developerguide-ejbinvocationsFromaRemoteserver

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"

无状态session-bean已经部署在目标服务器上。

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 org.jboss.ejb.client.EJBClientInvocationContext@46e20ef9
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个答案

那安宁
2023-03-14

您的客户机(即试图调用服务的代码)在Wildfly实例1上,而您的服务器(即ejb部署的地方)在实例2上。假设实例1在默认端口8080上运行,而实例2在端口8180上运行。

您在问题中使用的链接有一个名为Create a security realm on The client Server的部分,该部分描述了创建“出站-套接字绑定”和“远程出站-连接”所需的各个步骤。我不确定你是否已经这样做了。如果没有此步骤,实例1上的应用程序将不知道如何连接到实例2上的服务。

如果您不想进行配置,可以在stackoverflow问题-wildfly-to-wildfly-ejb-client-noth-remote-outbound-connections上写一个很好的内容。这个技术对我很有用,可能对你找到自己的解决方案有帮助。使用这个解决方案,您可以指定连接到第二个Wildfly实例上托管的ejb所需的服务器地址、端口(在本例中是8180)、用户名和密码。

 类似资料:
  • enviornment-source server@wildlfy_9.0.2.final,destination_server@jboss5.x,ejb3.0,buildingtool@ant 1.没有远程出站连接的Wildfly到Wildfly EJB客户端 2.https://docs.jboss.org/author/display/wfly9/developer+guide#develo

  • 我目前的问题是,我的机器上运行了两个Wildfly 8.2.0最终实例。我知道,有类似的问题,但没有一个真正有助于我的问题。其中一个拥有一个宁静的应用程序,当它收到GET时,它会触发无状态会话Bean。之后,此无状态会话 Bean 应从远程无状态会话 Bean 调用方法该方法位于另一个 wildfly 实例上。 我将从解释我到目前为止所做的事情开始(也许我错过了一些东西,我对Java EE和Wil

  • 我试图调用一个安全的远程ejb,但我不能。我使用ejb-client-API。 应用程序部署在名为som的ear中。耳朵 我用的是Wildfly 8.2.0决赛 代码客户端: JBossEJB客户端。财产 EJB 独立的。xml 服务器日志 客户端日志 我可以看到,之所以使用安全域“som_security_domain”的配置,是因为它运行查询以获取密码和主体的角色,但在尝试执行安全域的Auth

  • 远程客户端的奇怪行为。当我调用ejb facade方法count时,它是work并返回用户计数。但当我传递对象时,它失败了!有错误 EJBCLIENT000025:没有EJB接收器可用于处理调用上下文的[appName: Writer-eard, moduleName: Writer-ejb-1.0, tntName:]组合org.jboss.ejb.client.EJBClientInvocat

  • 如果我在Wildfly中使用默认的安全域设置,我可以成功调用远程EJB。我访问此安全域根本没有检查任何用户凭据。在实现或使用检查数据库中用户名和密码的安全域后,我遇到了下面的异常。 我不知道我错过了什么。我希望这里有人能给我指出一个正确的方向。 例外情况: jboss-ejb3。xml: 独立。xml TestRemote。Java语言 谢谢,贝尔

  • 我不能从另一个ejb模块注入远程ejb。我把应用程序分成一个库和两个ejb模块。我尝试通过远程接口从一个ejb模块访问另一个模块,并获得javax.naming.NameNotFoundExc0019。我尝试从NewBean"@EJB私有CountryFacadeRemote"访问。我用了玻璃鱼。 我必须配置一些东西?谢谢。 下载源代码 MyAppTestEJB域名库: *国家: *Country