与客户端的EJB远程方法调用

时间:2014-10-30 18:08:33

标签: ejb client

我遇到了ejb remote method invocation的问题。
为了测试,我创建了一个带有无状态bean和一个简单方法的ejb项目,该方法在远程接口中声明。我在JBoss 7.1中部署了这个项目。

现在我想从另一个类调用我的bean中的业务方法hello,这个类不是项目的一部分,也没有部署在那个jboss服务器中。因此,如果我理解它是正确的,这是来自客户端的正常远程方法调用。

我编写了HelloWorldClient,声明了InitialContext()的属性。但是当我运行这个客户端时,我得到了一个N​​ameNotFoundException。对我来说,似乎异常是因为一个错误的jndi-name,但我尝试了很多来获得正确的名字。

在控制台上,我从我的服务器获取了该项目的jndi名称,但它不起作用。有人可以帮我解决这个问题吗?

有上下文的客户:

Properties jndiProps = new Properties();
         jndiProps.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory");
         jndiProps.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
         jndiProps.put(Context.PROVIDER_URL,"remote://localhost:4447");
         jndiProps.put(Context.SECURITY_PRINCIPAL, "testuser");
         jndiProps.put(Context.SECURITY_CREDENTIALS, "testpasswort");
         Context ctx = new InitialContext(jndiProps);
         HelloWorldRemote hello = (HelloWorldRemote) ctx.lookup("java:global[/ejbproject1]/ejbproject1/HelloWorldBean[/HelloWorldRemote]");

我的豆子:

@Stateless(name="hello")
public class HelloWorldBean implements HelloWorldRemote{

@Override
public String hello(String value) {
    System.out.println("Say hello to "+value);
    return "Hello " + value;
}

来自jboss的jndi名字

18:19:07,464 INFO  [org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploymentUnitProcessor] (MSC service thread 1-6) JNDI bindings for session bean named hello in deployment unit deployment "ejbproject1.jar" are as follows:

java:global/ejbproject1/hello!interfaces.HelloWorldRemote
java:app/ejbproject1/hello!interfaces.HelloWorldRemote
java:module/hello!interfaces.HelloWorldRemote
java:jboss/exported/ejbproject1/hello!interfaces.HelloWorldRemote
java:global/ejbproject1/hello
java:app/ejbproject1/hello
java:module/hello


例外:

javax.naming.NameNotFoundException: global[/ejbproject1]/ejbproject1/HelloWorldBean[/HelloWorldRemote] -- service jboss.naming.context.java.jboss.exported.global[.ejbproject1].ejbproject1.HelloWorldBean[.HelloWorldRemote]

1 个答案:

答案 0 :(得分:0)

改变
java:global/ejbproject1/hello!interfaces.HelloWorldRemote

java:/ejbproject1/hello!interfaces.HelloWorldRemote

这将有效。