Разница в конфигурации JNDI между Glassfish и TomEE?

Мы хотим перенести старое приложение с Glassfish на TomEE. Мы сталкиваемся с проблемой JNDI.

Когда я запускаю cmd для сервера Glassfish asadmin list-jndi-entries, я получаю несколько записей JNDI:

java:global: com.sun.enterprise.naming.impl.TransientContext
UserTransaction: com.sun.enterprise.transaction.TransactionNamingProxy$UserTransactionProxy
com: com.sun.enterprise.naming.impl.TransientContext
OURAPPSERVER-Q2: com.ourcompany.product.OurAppServer
com.sun.enterprise.container.common.spi.util.InjectionManager: com.sun.enterprise.container.common.impl.util.InjectionManagerImpl
ejb: com.sun.enterprise.naming.impl.TransientContext
jdbc: com.sun.enterprise.naming.impl.TransientContext
AppServer: com.sun.enterprise.naming.impl.TransientContext

Как видите, есть запись JNDI AppServer. Эта запись привязывается из нашего кода вручную.

        try {
            InitialContext context = new InitialContext();
            context.rebind("AppServer/facede", this);
        } catch (NamingException e) {
            e.printStackTrace();
            logger.severe("Unable to register the service facade bean, "
                    + "JPOS will not be able to access services");
        }

Этот код не работает в TomEE. Я получаю некоторую ошибку, например:

javax.naming.NameNotFoundException: Name [AppServer/facede] is not bound in this Context. Unable to find [AppServer].
    at org.apache.naming.NamingContext.bind(NamingContext.java:899)
    at org.apache.naming.NamingContext.rebind(NamingContext.java:225)

Похоже, что контейнер не может найти контекстную базу на AppServer.

Я не мастер JNDI. Затем я проверил некоторые документы. java:comp/env/ — это основное пространство имен. И "jdbc" для ссылок DBCTM DataSource, "jms" для фабрик соединений JMS, "mail" для фабрик соединений JavaMail, "url" для фабрик соединений URL.

Мы не хотим слишком сильно менять код нашего старого приложения. Он не использует какие-либо специальные функции Glassfish. Я хочу знать, как правильно определить JNDI.

Кто-нибудь может сказать мне, почему Glassfish может использовать AppServer в качестве пространства имен, а TomEE — нет.


person Chris    schedule 20.11.2014    source источник


Ответы (1)


Tomcat (тогда TomEE) не предназначен для изменения JNDI во время выполнения, как это. Просто сказать, что лучше всего использовать не этот шаблон, а контекстный ресурс. Введите ресурс, который вы хотите, и этот ресурс вы меняете вместо JNDI (что гораздо больше влияет, чем кажется)

person Romain Manni-Bucau    schedule 23.11.2014
comment
Ты прав. После проверки документа контекст TomEE JNDI готов только во время выполнения. Я должен сделать стандартное имя JNDI в файле конфигурации. - person Chris; 25.11.2014