Java RMI, проблема Tomcat! - PullRequest
1 голос
/ 04 мая 2011

Я изучаю 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 (methodava.hoke.jref.jj.java: 623) at bluej.runtime.ExecServer $ 3.run (ExecServer.java:774) Вызвано: java.net.ConnectException: соединение отклонено: подключиться на java.net.DualStackPlainSocketImpl.connect0 (Native метод) в java.net.DualStackPlainSocketImpl.socketConnect (DualStackPlainSocketImpl.java:69) в java.net.AbstractPlainSocketImpl.doConnect (AbstractPlainSocketImpl.java:316) в java.net.AbstractPlainSocketAlIcketSlcketPlayOcketSamp.net.AbstractPlainSocketImpl.connect (AbstractPlainSocketImpl.java:164) на java.net.PlainSocketImpl.connect (PlainSocketImpl.java:154) на java.net.SocksSocketImpl.connect (SocksSocketImpl.oava: java35):подключиться (Socket.java:569) на java.net.Socket.connect (Socket.java:519) на java.net.Socket. (Socket.java:416) на java.net.Socket. (Socket.java:199) в sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket (RMIDirectSocketFactory.java:40) в sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket (RMIMasterSocketFactory.java:rmi.rans..CPT.CPT.newSocket (TCPEndpoint.java:613)

Ответы [ 3 ]

2 голосов
/ 04 мая 2011

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

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

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

2 голосов
/ 04 мая 2011

2 вещи:

  1. Измените имя удаленного объекта на что-то без пробела.
  2. Сначала запускаете код сервера?
1 голос
/ 05 мая 2011

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

...