2011-05-04 3 views
1

Java RMI에 대해 배우고 있으며 RMI를 사용하여 네트워크를 통해 다른 가상 머신에 객체를 전달하는 방법을 보여주는 예제 코드가 있습니다.Java RMI, Tomcat 문제!

다음은 현재 사용중인 클래스 및 코드입니다.

//interface 
    import java.rmi.*; 

public interface MyRemote extends Remote 
{ 
    public String sayHello() throws RemoteException; 

} 

//My Remote Implementation Class 
import java.rmi.*; 
import java.rmi.server.*; 

public class MyRemoteImpl extends UnicastRemoteObject implements MyRemote 
{ 
    public String sayHello() 
    { 
     return "Server says, 'Hey' "; 
    } 

    public MyRemoteImpl() throws RemoteException 
    { 

    } 

    public static void main (String[] args) 
    { 
     try 
     { 
      MyRemote service = new MyRemoteImpl(); 
      Naming.rebind("Remote Hello", service); 

     } 
     catch (Exception ex) 
     { 
      ex.printStackTrace(); 
     } 
    } 
} 

//My Remote Client Class 
import java.rmi.*; 

public class MyRemoteClient 
{ 
    public static void main (String [] args) 
    { 
     new MyRemoteClient().go(); 
    } 

    public void go() 
    { 
     try{ 
      MyRemote service = (MyRemote) Naming.lookup("rmi://127.0.0.1/Remote Hello"); 

      String s = service.sayHello(); 

      System.out.println(s); 
     } 
     catch(Exception ex) 
     { 
      ex.printStackTrace(); 
     } 
    } 
} 

나는 점점 java.net.MalformedURLException을 유지 : 유효하지 않은 URL 문자열을 : RMI : //127.0.0.1/Remote 안녕하세요 내가 알고있는이 '을 Naming.lookup ("RMI 때문이다 : //127.0.0.1를/Remote Hello ") '코드를 마지막 클래스에 추가합니다.

tomcat을 설치하고 파일을 디렉토리에 배치하려고 시도했지만 로컬 컴퓨터에서 실행하려고했지만 기쁨이 없었습니다.

내 프로젝트의 JAR 파일을 만들었고 디렉토리에 배치하려고했지만 여전히 운이 없다. 나는 전쟁 파일에 대해 들었지만, 현재 배운다는 책은 아직 나오지 않았다. ...

나는 예외가 발생하지 않고 어떻게이 문제를 해결할 수 있을지에 대한 조언을 구할 수있다. Tomcat에 파일을 잘못 배치 했습니까? C : \ Program Files \ Apache Software Foundation \ Tomcat 7.0 \ webapps 디렉토리에이 파일들을 넣었습니다.

도움이나 조언을 주시면 감사하겠습니다.

UPDATE 조언을

덕분에, 문자열 예외가 사라진 것 같습니다하지만 지금이 짐으로하고 있습니다.

java.rmi.ConnectException : 연결 거부 : 127.0.0.1; 중첩 예외 : java.net.ConnectException : 연결이 거부되었습니다. 을 sun.rmi.transport.tcp.TCPEndpoint.newSocket (TCPEndpoint.java:619)에 연결하십시오. at sun.rmi.transport.tcp.TCPChannel.createConnection (TCPChannel .java : 216) at sun.rmi.transport.tcp.TCPChannel.newConnection (TCPChannel.java:202) at sun.rmi.server.UnicastRef.newCall (UnicastRef.java:340) at sun.rmi.registry MyRemoteClient.go (MyRemoteClient.java:13)에서 java.rmi.Naming.lookup (Naming.java:101) 에서 .RegistryImpl_Stub.lookup (알 소스) 에서 _ SHELL57.run ( _SHELL57.java:10) at sun.reflect.NativeMethodAccessorImpl.invoke0 (네이티브 메서드)java.lang.reflect.Method.invoke에서 sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) 에서 sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:57) 에서 1,515,(Method.java:623) java.net.ConnectException :에 의한 bluej.runtime.ExecServer $ 3.run (ExecServer.java:774) 에서 연결이 거부 됨 : java.net에서 java.net.DualStackPlainSocketImpl.connect0 (기본 방법) 에서 을 연결합니다. java.net.AbstractPlainSocke에서 java.net.AbstractPlainSocketImpl.connectToAddress (AbstractPlainSocketImpl.java:177) 에서 java.net.AbstractPlainSocketImpl.doConnect (AbstractPlainSocketImpl.java:316) 에서 DualStackPlainSocketImpl.socketConnect (DualStackPlainSocketImpl.java:69) tImpl.connect (AbstractPlainSocketImpl.java:164) java.net.PlainSocketImpl.connect (PlainSocketImpl.java:154)에서 java.net.SocksSocketImpl.connect (SocksSocketImpl.java:352)에서 에서 java.net.Socket의 . connect (Socket.java:569) at java.net.Socket.connect (Socket.java:519) at java.net.Socket (Socket.java:416) at java.net.Socket (소켓.자바 :이 sun.rmi에서 sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket (RMIMasterSocketFactory.java:146) 에서 sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket (RMIDirectSocketFactory.java:40) 199) . transport.tcp.TCPEndpoint.newSocket (TCPEndpoint.java:613)

+0

'원격 Hello'에 공간을 넣지 않고 사용해 볼 수 있습니까? –

답변

1

2 일 :

  1. 변경 공백없이 뭔가를 원격 객체의 이름입니다.
  2. 서버 코드를 먼저 실행하고 있습니까?
2

톰캣과 RMI의 관계는 무엇입니까? Tomcat은 기본적으로 포트 8080에서 HTTP 요청을 수신하는 servlet/JSP 엔진입니다.

RMI는 HTTP와 아무런 관련이없는 완전히 다른 프로토콜입니다. RMI 데몬은 기본적으로 포트 1099를 사용합니다.

this을 살펴 보시기 바랍니다.

1

서버에서/etc/hosts 파일을 확인하십시오. localhost를 127.0.0.1로 매핑하고 실제 호스트 이름을 실제 IP 주소로 매핑해야합니다. 다른 방법이 필요한 구성이있는 경우, 원격 객체를 반출하기 전에 서버 JVM에서 시스템 특성 java.rmi.server.hostname을 올바른 IP 주소로 설정하십시오.