Исключение приведения класса Weblogic,EJB, $Proxy99

Ниже приведены модули в моем проекте,
1. Модуль EJB (версия 3): мы готовим ejb jar этого модуля и размещаем на сервере Weblogic11g. Это касается работы с базой данных. У него есть @local, интерфейс @Remote и классы @stateless, реализующие @local, @Remote-интерфейсы.
2. Веб-приложение: это веб-приложение принимает входные данные (пользователь загружает файл) от пользователей, проверяет файл и вставляет данные в базу данных. Он использует RMI.

Проблема: На производстве (сервер weblogic 11g) иногда мы наблюдаем исключение, говорящее, что $Proxy99 не может быть приведен к "имени удаленного интерфейса" (для разных классов), например com.xyz.fileProcessSetting.FileProcessSttgFacadeRemote. Но через некоторое время, когда мы снова загружаем файл, он загружается успешно без каких-либо ошибок.

Теперь я не понимаю, почему эти удаленные объекты становятся временно недоступными? Никогда не сталкивался с этой проблемой в среде разработки /UAT. Также не знаю, как воспроизвести и исправить это.
Пожалуйста помоги. Заранее спасибо.

@Remote
public interface FileProcessSttgFacadeRemote {
//methods
}

@Local
public interface FileProcessSttgFacadeLocal {
//methods
}

@Stateless
public class FileProcessSttgFacade implements FileProcessSttgFacadeLocal, FileProcessSttgFacadeRemote {
//methods
}


в weblogic-ejb-jar.xml

<weblogic-enterprise-bean>
    <ejb-name>FileProcessSttgFacade</ejb-name>
    <stateless-session-descriptor>
        <business-interface-jndi-name-map>
            <business-remote>com.xyz.fileProcessSetting.FileProcessSttgFacadeRemote</business-remote>
            <jndi-name>FileProcessSttgFacade</jndi-name>
        </business-interface-jndi-name-map>
    </stateless-session-descriptor>
</weblogic-enterprise-bean>


В веб-приложении также в модуле ejb всякий раз, когда мы хотим вызвать методы, мы используем следующий метод поиска для получения удаленного объекта:

public class someclass extends EjbLocator {
    public void someMethod(){

        FileProcessSttgFacadeRemote fpfr = (FileProcessSttgFacadeRemote) getService("FileProcessSttgFacade");
        //other code
    }
}


Ниже приведен класс, используемый для поиска JNDI:

public class EjbLocator {

    public Object getService(final String jndiName) throws Exception {
        try {
            obj = getDefaultContext().lookup(jndiName);
        } catch (final Exception exp) {
            exp.printStackTrace();
        }
        return obj;
    }

    protected Context getDefaultContext() {
        try {
            final Hashtable<String, String> env = new Hashtable<String, String>();
            env.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
            env.put(Context.SECURITY_PRINCIPAL,"weblogic");
            env.put(Context.SECURITY_CREDENTIALS, "password");
            env.put(Context.PROVIDER_URL, "t3://<ip>:<port>");
            defaultContext = new InitialContext(env);
            return defaultContext;
        } catch (final NamingException nExp) {
            nExp.printStackTrace();
        }
        return null;
    }
}

0 ответов

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