원격 메서드 액세스에 EJB 3 예제를 사용하려고합니다. 코드를 작성하고 항아리에 넣는 간단한 예제. 나는 C에서 JBoss 서버 내부의 항아리를 배포 한 : \ jboss-4.2.3.GA 서버 \ 기본 \ 를 배포하고 단지 이름은 01addproject.jar입니다 \EJB 원격 메서드 액세스
(EJB JAR 파일로 일식에서 내 보낸) 다른 프로젝트를 사용하여 클라이언트 코드 인 을 작성하여 서비스를 찾고 간단한 방법으로 원격 메소드를 사용합니다.
클래스가 PSVM 프로그램으로 클라이언트 코드를 실행할 때 NameNotFoundException을 제공하는 RMI 레지스트리에 등록되지 않는다고 생각합니다.
이
는 오류입니다 :javax.naming.NameNotFoundException: AddRemoteImpl not bound
at org.jnp.server.NamingServer.getBinding(NamingServer.java:529)
at org.jnp.server.NamingServer.getBinding(NamingServer.java:537)
at org.jnp.server.NamingServer.getObject(NamingServer.java:543)
at org.jnp.server.NamingServer.lookup(NamingServer.java:267)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:305)
패키지 구조 (공간 부족 감소) :
package com.cluster.remote; import javax.ejb.Remote; @Remote public interface AddRemote { void m1(); int add(int x, int y); }
,691 AddRemote.java 내부
코드 363,210
코드 AddRemoteImpl.java
package com.cluster.remote;
import javax.ejb.Stateless;
@Stateless
public class AdddRemoteImpl implements AddRemote {
@Override
public void m1() {
System.out.println("inside m1");
}
@Override
public int add(int x, int y) {
return x + y;
}
}
클라이언트 코드 (psvm 프로그램) 내부 Client.java
package clientcode;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import com.cluster.remote.AddRemote;
public class Client {
/**
* @param args
*/
public static void main(String[] args) {
try {
AddRemote remote = (AddRemote) getInitialContext().lookup("AddRemoteImpl/remote");
System.out.println("The alue form the session bean is " + remote.add(3, 5));
System.out.println("Added Successfully");
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@SuppressWarnings({ "rawtypes", "unchecked" })
public static Context getInitialContext() throws NamingException{
Hashtable hashtable = new Hashtable();
hashtable.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
hashtable.put(Context.PROVIDER_URL, "localhost:1099");
Context context = new InitialContext(hashtable);
return context;
}
}
죄송합니다 .. 그것은 금이갔습니다! 어리석은 실수. 클래스 이름은 "AdddRemoteImpl"(참조 패키지 구조) 그리고 클라이언트에 내가 "AddRemoteImpl/원격"을 요구하고있다 .. 싱글 'D'의 차이 .. 그건 내 일했다 ... @EJP입니다 ... 디버깅에 도움을 주셔서 감사합니다. – bali208