2014-10-30 113 views
0

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

现在我想从另一个类调用业务方法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]"); 

我的豆:

0:

@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

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 


和异常的JNDI名称

回答

0

java:global/ejbproject1/hello!interfaces.HelloWorldRemote 

更改为

java:/ejbproject1/hello!interfaces.HelloWorldRemote 

,将工作。

+0

非常感谢,同时我尝试了不同的方式,我使用Maven构建。我将项目添加为依赖项,并直接在EJB注入中进行查找 – Benjamin 2014-11-21 10:09:17