2014-10-30 94 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