Java RMI, проблема Tomcat!

Я изучаю Java RMI и имею пример кода, чтобы показать, как RMI можно использовать для передачи объектов другим виртуальным машинам по сети.

Вот классы и код, который я использую;

//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.

Любая помощь или советы будут с благодарностью.

ОБНОВИТЬ

Спасибо за совет, исключение String, кажется, ушло, но теперь я с этим не согласен.

java.rmi.ConnectException: соединение с хостом отказано: 127.0.0.1; Вложенное исключение: java.net.ConnectException: в соединении отказано: соединение в sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:619) в sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:216) в sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:202) в sun.rmi.server.UnicastRef.newCall(UnicastRef.java:340) в sun.rmi.registry.RegistryImpl_Stub.lookup(неизвестно) Источник) в java.rmi.Naming.lookup(Naming.java:101) в MyRemoteClient.go(MyRemoteClient.java:13) в _SHELL57.run (_SHELL57.java:10) в sun.reflect.NativeMethodAccessorImpl.invoke0(родной Метод) в sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) в sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) в java.lankeet.jpg.hoke.reflect bluej.runtime.ExecServer$3.run(ExecServer.java:774) Вызвано: java.net.ConnectException: соединение отклонено: подключиться по адресу java.net.DualStackPlainSocketImpl.connect0(собственный метод) в java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:69) в java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:316) в java.net.AbstractPlainSocketImpl.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:164) в java.net.PlainSocketImpl.connect(PlainSocketImpl.java:154) в java.net.SocksSocketImpl.connect(SocksSocketImpl.java:352Socket.java:352) в java.net.java:569) на java.net.Socket.connect(Socket.java:519) на java.net.Socket.(Socket.java:416) на java.net.Socket.(Socket.java:199) на солнце.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:40) в sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:14.point.tport.t..java:613)

3 ответа

Какое отношение имеет Tomcat к RMI? Tomcat - это механизм сервлетов /JSP, который по умолчанию прослушивает HTTP-запросы на порту 8080.

RMI - это совершенно другой протокол, который не имеет ничего общего с HTTP. Демон RMI использует порт 1099 по умолчанию.

Я бы порекомендовал посмотреть на это.

2 вещи:

  1. Измените имя удаленного объекта на что-то без пробела.
  2. Вы запускаете серверный код первым?

Проверьте файл /etc/hosts на сервере. Он должен отобразить localhost на 127.0.0.1 и ваше реальное имя хоста на ваш реальный IP-адрес. Если у вас есть конфигурация, в которой вам нужно наоборот, установите системное свойство java.rmi.server.hostname на правильный IP-адрес на JVM сервера перед экспортом удаленного объекта.

Другие вопросы по тегам