2013-01-15 5 views
6

JBoss 7.1.1에서 실행되는 상태 비 저장 EJB에 원격 액세스했습니다. 사용하여 속성 개체 : 그래서 이 잘 작동JBoss 7 : JNDI 조회

Properties jndiProps = new Properties(); 
jndiProps.put(Context.INITIAL_CONTEXT_FACTORY, 
    "org.jboss.naming.remote.client.InitialContextFactory"); 
jndiProps.put(Context.PROVIDER_URL,"remote://localhost:4447"); 
jndiProps.put(Context.SECURITY_PRINCIPAL, "remote"); 
jndiProps.put(Context.SECURITY_CREDENTIALS, "remotepwd"); 
jndiProps.put("jboss.naming.client.ejb.context", true); 
Context ctx = new InitialContext(jndiProps); 

String lookupString = "//HelloWorld/HelloWorldBean!org.acme.test.HelloWorld"; 
HelloWorld hw = (HelloWorld) ctx.lookup(lookupString); 
System.out.println("Response: "+ hw.sayHello("Hi there")); 

을하지만 지금은 jndi.properties 파일에 JNDI 일을 데려 가고 싶다는했지만 실패,이 파일이 모습입니다 같은 :

java.naming.factory.initial=org.jboss.naming.remote.client.InitialContextFactory 
java.naming.factory.url.pkgs=org.jboss.ejb.client.naming 
java.naming.provider.url=remote://localhost:4447 
java.naming.security.principal=remote 
java.naming.security.credentials=remotepwd 

예외 :

Exception in thread "main" java.lang.IllegalStateException: No EJB receiver available for handling [appName:,modulename:HelloWorld,distinctname:] combination for invocation context [email protected] 
at org.jboss.ejb.client.EJBClientContext.requireEJBReceiver(EJBClientContext.java:584) 
at org.jboss.ejb.client.ReceiverInterceptor.handleInvocation(ReceiverInterceptor.java:119) 
at org.jboss.ejb.client.EJBClientInvocationContext.sendRequest(EJBClientInvocationContext.java:181) 
at org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:136) 
at org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:121) 
at org.jboss.ejb.client.EJBInvocationHandler.invoke(EJBInvocationHandler.java:104) 
at $Proxy0.sayHello(Unknown Source) 
at de.brockhaus.test.client.TestClient.main(TestClient.java:35) 

이미 여러 개의 doco를 통과했지만 실패 했으므로 어떻게 보이게 되었습니까?

답변

7
OK

, 그래서 나는 대답 나 자신을 발견 ...

먼저 당신이 특성 파일 jndi.properties 플러스 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 = 4447 
remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false 

:

# 
# jndi.properties 
# 
java.naming.factory.initial=org.jboss.naming.remote.client.InitialContextFactory 
java.naming.factory.url.pkgs=org.jboss.ejb.client.naming 
java.naming.provider.url=remote://localhost:4447 
java.naming.security.principal=remote 
java.naming.security.credentials=remotepwd 

jboss-ejb-client.properties 코드 내에서. 아직

혼란은

+0

검색 문자열의 건설을 위해, 당신은 여기에 참조 할 수 있습니다 ... 조회 문자열의 구조입니다 : https://docs.jboss.org/author/display/AS72/Remote+EJB+ + JNDI + - + EJB + 클라이언트 + API + 또는 + 원격 명명 + 프로젝트를 통한 호출. jboss 서버가 시작될 때 원격 링크의 경우 조회 문자열은 일반적으로 "java : jboss/exported /"다음에옵니다. – dellgg