Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Не удается запустить RMI сервер


Автор: access 16.6.2006, 12:05
Здравствуйте.
Написал вот сервер
Код

package common.rmiServers;
/*...*/
public class RMIServer  extends UnicastRemoteObject implements RMIServerIntf{

    public RMIServer() throws RemoteException
    {
        super();
    }

    public static void main(String[] args)
    {
        System.out.println("Starting.....");
        RMIServer rs = null;
        Registry r = null;
        try {rs = new RMIServer();}
        catch  (Exception e) {
            e.printStackTrace(); System.exit(-1);
        }

        try {
            Naming.rebind("rmi://localhost/RMIServer", rs);
        } catch (RemoteException e)
        {
            try
            {
                r = LocateRegistry.createRegistry(1099);
                Naming.rebind("rmi://localhost/RMIServer", rs);
            }
            catch (RemoteException e1) {e1.printStackTrace(); }
            catch (MalformedURLException e1) {e1.printStackTrace();  }
        } catch (MalformedURLException e) {
            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
        }

        System.out.println("Server is Running");
    }

    public void get() throws RemoteException {
    }
}

с интерфейсом
Код

package common.rmiServers;
/*...*/
public interface RMIServerIntf extends Remote {
    public void get() throws RemoteException;
}


, который никак не могу запустить (

Используемая IDE - IntelliJ IDEA. Позволяет генерить stub.  Заглушка создается. Далее запускаю сервер из под IDE - сервер запускается (пока к нему, правда, не пробовал коннектиться, но не в этом вопрос).
Пробую запустить через bat-файл
Код

java RMIServer

выдает
Exception in thread "main" java.lang.NoClassDefFoundError: RMIServer <wrong name: common/rmiServers/RMIServer>
...
Если в батнике пишу
Код

java common.rmiServers.RMIServer

то
Exception in thread "main" java.lang.NoClassDefFoundError: common/rmiServers/RMIServer
Пробовал заглушку вручную создать
Код

rmic RMIServer

ругается
error: Invalid class file format in .\RMIServer.class. The major\minor version '49.0' is too recent for this tool to understand
error: Class RMIServer not found

Все класс-файлы с батами - в одной директории. Блин, вроде всё просто должно быть, а в чём косяк - не въезжаю... Подскажите 

Автор: powerOn 16.6.2006, 12:33
Цитата(access @  16.6.2006,  13:05 Найти цитируемый пост)
Пробовал заглушку вручную создать
    
rmic RMIServer

ругается
error: Invalid class file format in .\RMIServer.class. The major\minor version '49.0' is too recent for this tool to understand
error: Class RMIServer not found


ты не учитываешь имя пакета. Компилировать по полному имени надо и чтоб RMIServerIntf тоже был виден в classpath. И не забывай, что если у тебя класс common.rmiServers.RMIServer, то класс-файл  должен находиться в соответствующих папках common/rmiServers/RMIServer.class,
а вызов будт примерно таким  rmic common.rmiServers.RMIServer

и еще, в папке common/rmiServers/  должен лежать и RMIServerIntf.class. 

Расположение папок, естественно, относительно той, в которой происходит компиляция.
 

Автор: access 16.6.2006, 14:55
Поподробнее, по возможности
Есть папка
E:\Projects\WorkVers\Reports\DataBase\classes\common\rmiServers
В ней файлы RMIServer.class и RMIServerIntf.class
В ней же батник с содержанием
Код

SET JAVA_HOME = c:\Program Files\Java\jdk1.5.0_04
SET CLASSPATH = %JAVA_HOME%;%JAVA_HOME%\bin;%JAVA_HOME%\lib;E:\Projects\WorkVers\Reports\DataBase\classes
rmic common.rmiServers.RMIServer


при запуске дает
error: Class common.rmiServers.RMIServer not found

если бат-файл с таким содержанием
Код

SET JAVA_HOME = c:\Program Files\Java\jdk1.5.0_04
SET CLASSPATH = %JAVA_HOME%;%JAVA_HOME%\bin;%JAVA_HOME%\lib;E:\Projects\WorkVers\Reports\DataBase\classes;E:\Projects\WorkVers\Reports\DataBase\classes\common\rmiServers

rmic common.rmiServers.RMIServer

дает ту же ошибку

Если rmic common.rmiServers.RMIServer заменить на 
        rmic RMIServer
то ошибки
error: Invalid class file format in .\RMIServer.class. The major/minor version '49.0' is too recent for this tool to understand
error: Class RMIServer not found


что не так делаю? 

Автор: powerOn 16.6.2006, 15:14
установи E:\Projects\WorkVers\Reports\DataBase\classes\ текущим каталогом.

(или вообще понаглому:
1) скопируй папку common со всем содержимым в c:\Program Files\Java\jdk1.5.0_04\bin
2) Открой консоль в этой папке (что бы  "c:\Program Files\Java\jdk1.5.0_04\bin" была текущей папкой)и сделай вызов: 
rmic common.rmiServers.RMIServer
)

 

Автор: access 16.6.2006, 16:58
спасибо, так
Цитата

(или вообще понаглому:
1) скопируй папку common со всем содержимым в c:\Program Files\Java\jdk1.5.0_04\bin
2) Открой консоль в этой папке (что бы  "c:\Program Files\Java\jdk1.5.0_04\bin" была текущей папкой)и сделай вызов: 
rmic common.rmiServers.RMIServer
)

с заглушкой получилось
А способ человечнее есть? Где б научиться... 

Автор: access 22.6.2006, 10:36
В общем, ерунда еще в том, что при запуске rmi сервера (или обращений к нему клиента) начинают вываливаться ошибки типа "не_могу_найти_такой-то_класс", причем не находит класс-файлы в jar архивах, прописанных в classpath батника, напримет не находит файл com.microsoft.jdbc.sqlserver.SQLServerDriver, хотя mssqlserver.jar в класспафе батника прописан. 
Проблема решилась, если прописать переменной среды окружения винды этот класспаф из батника, а в бат-файле его ваще заремить можно 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)