2015-01-22 3 views
1

Поэтому я настраиваю два удаленных приложения WebLogic для использования RMI для связи друг с другом.WebLogic ClassCastException во время RMI

Файл LocalServiceAPI.java находится в том же пакете на клиенте & хоста.

Тот же код работает на моей локальной машине на тестовом сервере, но не на сервере unix моей компании.

Обе версии сервера являются 12.1.3.0.0

Самое любопытное: узкая успешна, но бросок бросает ClassCastException.

Hashtable<String,String> env = new Hashtable<String,String>(); 
    env.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory"); 
    env.put(Context.PROVIDER_URL, "t3://" + address + ":" + port); 

    Object obj = PortableRemoteObject.narrow(new InitialContext(env).lookup("LocalServiceAPI"), LocalServiceAPI.class); 
    return (LocalServiceAPI) obj; 

Исключение:

java.lang.ClassCastException: com.cleargoals.service.LocalServiceAPIImpl_12130_WLStub cannot be cast to com.cleargoals.service.LocalServiceAPI 
+0

Это звучит довольно похоже на эти вопросы, возможно, один из них поможет: http://stackoverflow.com/questions/10393824/remote-interface-cannot-be-cast-to-ejb-container http: // stackoverflow.com/questions/6816996/class-cast-exception-in-narrow-a-jndi-reffrence-in-ejb –

ответ

0

Поскольку ваша версия сервера 12.1.3. Поэтому я предполагаю, что это совместимый с EJB3 сервер. Для EJb3 метод context.lookup call предполагает, что переданный параметр является глобальным именем JDNI удаленного класса ... Поэтому убедитесь, что ur передаёт глобальное имя JNDI удаленного класса в обратном вызове ... Прочитайте link, если вы не уверены, что подразумевается под глобальным слово в имени JNDI ... Во-вторых, с EJB2 вам не требуется использовать метод PortableRemoteObject.narrow, сам вызов поиска делает работу для вас ... его объяснение также в той же связи.