Мы хотим перенести старое приложение с 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 — нет.