Проблема совместимости с Wildfly 13 и EJB 2.1 и проблема с RelativeContext Classcast - PullRequest
0 голосов
/ 12 сентября 2018

Может ли кто-нибудь помочь решить следующую проблему:

Я пытаюсь обновить сервер приложений с JBOSS 6 до Wildfly 12/13.

Моя заявка основана на EJB. Когда я использую Jboss 6, я использовал Jdk 1.7

Теперь для Wildfly я использую jdk 1.8.

И, при обновлении до Wildfly предыдущие jndi настройки не работали, поэтому я обновил jndi configurations с

файл конфигурации:

INITIAL_CONTEXT_FACTORY = org.jnp.interfaces.NamingContextFactory

PROVIDER_URL = jnp://localhost:1099

URL_PKG_PREFIXES = org.jboss.naming:org.jnp.interfaces

JNDI_VOOR_DS=java:/VOORSDB

до:

INITIAL_CONTEXT_FACTORY = org.wildfly.naming.client.WildFlyInitialContextFactory

PROVIDER_URL = remote+http://localhost:8080

URL_PKG_PREFIXES = org.jboss.ejb.client.naming

JNDI_VOOR_DS=java:/VOORSDB

Теперь я получаю сообщение об ошибке:

ERROR [com.aithent.voor.service.ServiceLocator] (ServerService ThreadPool -- 79) Exception whichle retrieving the home object for the EJB :UserServiceEJB 

ERROR [com.aithent.voor.service.ServiceLocator] (ServerService Thread Pool -- 79) org.wildfly.naming.client.store.RelativeContext cannot be cast to javax.ejb.EJBHome 

ERROR [com.aithent.voor.service.ServiceFactory] (ServerService Thread Pool -- 79) java.lang.ClassCastException: org.wildfly.naming.client.store.RelativeContext cannot be cast to javax.ejb.EJBHome

Это мой класс ServiceLocator:

    private ServiceLocator() throws Exception{
        createContext();
    }

    public void createContext() throws Exception{
        Hashtable env = new Hashtable();
        cachedObject=new HashMap(10,0.8f);
        env.put(Context.INITIAL_CONTEXT_FACTORY, ConfigurationManager.getInstance().getPropertyValue(WebConstants.INITIAL_CONTEXT_FACTORY));
        System.out.println(ConfigurationManager.getInstance().getPropertyValue(WebConstants.INITIAL_CONTEXT_FACTORY));

        env.put(Context.PROVIDER_URL, ConfigurationManager.getInstance().getPropertyValue(WebConstants.PROVIDER_URL));
        env.put(Context.URL_PKG_PREFIXES, ConfigurationManager.getInstance().getPropertyValue(WebConstants.URL_PKG_PREFIXES));
        env.put("jboss.naming.client.ejb.context", true);
        context = new WildFlyInitialContext(env);
        System.out.println("context: "+context);
        log.debug("ServiceLocator createContext method ends ");

    }    

    public EJBHome getHome(String ejbName) throws Exception{
        EJBHome ejbHome = null;
        log.debug("ServiceLocator getHome() starts ");
        try{
            System.out.println("Context: "+context);
            if(context != null){
                Object home = context.lookup("ejb:/"+ejbName);
                System.out.println(home);
                ejbHome = (EJBHome) home;
                System.out.println(ejbHome);
            }
        }catch(Exception e){
            log.error("Exception whichle retrieving the home object for the EJB : " + ejbName);
            log.error(e.getMessage());
            throw new Exception(e);
        }
        log.debug("ServiceLocator getHome() ends ");
        return ejbHome;
    }

Я даже добавил jboss-client из wildfly-13 - папка bin / client. Я почти всегда пытался опубликовать другие вопросы и ответы, но ничего не получалось.

Я не понимал, как прикреплять файлы, если кто-нибудь мне поможет, я приложу server.log и standalone-full.xml для проверки.

Заранее спасибо за помощь!

1 Ответ

0 голосов
/ 21 декабря 2018

Я столкнулся с той же проблемой в базовом проекте HelloWorld для EJB.Я использую wildfly 14.0.1.

Он волшебным образом начал работать, когда я удалил "ejb:" из строки JNDI "ejb: ejbsample-1.0-SNAPSHOT / HelloWorld! Com.ejbsample.HelloWorld"

Если это поможет, проверьте сервер и клиент код.

...