2015-01-08 2 views
0

이 문제는 매우 일반적입니다. 일부 기사를 읽었지만 문제를 찾을 수 없습니다. EJB 3.0에서 간단한 HelloWorld 프로그램을 만들고 싶습니다. luna, jboss 7.1.1 최종.EJB 3에 대한 JNDI 초기 컨텍스트 및 Lookup_problem

package com.tcs.HelloWorldClient; 

import java.util.Hashtable; 
import java.util.Properties; 

import com.tcs.HelloWorldPack.*; 

import javax.ejb.EJB; 
import javax.naming.Context; 
import javax.naming.InitialContext; 
import javax.naming.NamingException; 

public class HelloWorldClient { 


    public static void main(String[] args) throws NamingException { 


     final Hashtable jndiProperties = new Hashtable(); 
     jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming"); 
     jndiProperties.put(javax.naming.Context.SECURITY_PRINCIPAL, "myUser"); 
     jndiProperties.put(javax.naming.Context.SECURITY_CREDENTIALS, "myPass"); 
//  jndiProperties.put(javax.naming.Context.PROVIDER_URL, "jnp://localhost:1099"); 
//  jndiProperties.put(javax.naming.Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory"); 
     jndiProperties.put("jboss.naming.client.ejb.context", true); 

     final Context context = new InitialContext(jndiProperties); 

     final String appName= "HeloWorldEJBEAR"; 
     final String moduleName= ""; 
     final String distinctName =""; 
     final String beanName = "HeloWorld"; 
     final String viewClassName = "com.tcs.HelloWorldPack.HelloWorldRemote"; 
     HelloWorldRemote hello = (HelloWorldRemote) context.lookup("ejb:" + appName + "/" + moduleName + "/" + distinctName + "/" + beanName + "!" + viewClassName); 

     hello.displayMsg(); 


    } 

} 

이가 : 여기

package com.tcs.HelloWorldPack; 

import javax.ejb.Local; 
//import javax.ejb.Remote; 
import javax.ejb.Remote; 

@Remote 
public interface HelloWorldRemote { 

    void displayMsg(); 
} 

가 동일한 시스템에서 실행되는 내 클라이언트입니다 : 여기
package com.tcs.HelloWorldPack; 

import javax.ejb.Stateless; 

/** 
* Session Bean implementation class HelloWorld 
*/ 
@Stateless(mappedName="HelloWorldBean") 
public class HelloWorld implements HelloWorldRemote { 

    /** 
    * Default constructor. 
    */ 
    public HelloWorld() { 
     // TODO Auto-generated constructor stub 

    } 

    @Override 
    public void displayMsg() { 
     // TODO Auto-generated method stub 
     System.out.println("Hello World!!"); 

    } 

} 

내 원격 인터페이스 : 여기

내 콩입니다 내 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 

remote.connection.default.username=myUser 
remote.connection.default.password=myPass 

내가 넣어 가지고 속성 내가 그것을 실행하려고 할 때 이런 일이 also.But 클래스 경로에 파일 :

Exception in thread "main" java.lang.IllegalStateException: No EJB receiver available for handling [appName:HeloWorldEJBEAR,modulename:,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 com.sun.proxy.$Proxy0.displayMsg(Unknown Source) 
    at com.tcs.HelloWorldClient.HelloWorldClient.main(HelloWorldClient.java:71) 
Jan 08, 2015 3:34:44 PM org.jboss.ejb.client.remoting.ChannelAssociation$ResponseReceiver handleEnd 
INFO: Channel Channel ID de8d2aa6 (outbound) of Remoting connection 44477156 to localhost/127.0.0.1:4447 can no longer process messages 

나는 또한 내 디렉토리 구조를 업로드했습니다. 저는 EJB 개념을 처음 접했습니다. 문제가있는 곳을 찾도록 도와주세요. 미리 감사드립니다. enter image description here

+0

ejb 모듈을 ejb 클라이언트에 추가했습니다. –

+0

죄송합니다. 당신이 무엇을 요구하고 있는지 이해할 수 없습니다. 나는 ejbmodule을 내 세션 빈과 관련이 있고 다른 클라이언트는 @Manoj Sharma이다. – Ajit

답변

0

모듈 이름은 빈 문자열이지만 모듈 이름은 JNDI 이름의 빈 문자열 일 수 없습니다. 보기 here

.jar 확장자없이 ejb 모듈 .jar의 이름을 설정해야합니다.

final String moduleName = "HeloWorldEJB";

그런 다음 그것을 작동합니다.

+0

하지만 JAR을 사용하지 않는 EAR을 사용하여 EJB를 배치했다. 이것이 내가 moduleName을 비워 두었던 이유입니다. 어쨌든 당신이 제안한대로 모듈 이름을 변경했습니다. 그러나 여전히 문제가 있습니다. @ user3584190 – Ajit

+0

jndiProperties.put을 모두 사용하지 않고 jnp : // localhost : 1099 대신 remote : // localhost : 4447을 설정하면 작동합니까? AS7에서는 jnp : // – user3584190

+0

대신 remote : //를 사용합니다. 감사합니다! :) 예, 두 줄의 주석을 제거하고 URL을 변경하는 것이 트릭을 만들었습니다. 하지만 그 두 줄의 의미가 무엇인지 설명해 주시겠습니까? 나는 EJB를 처음 사용했다. – Ajit