Glassfish和TomEE之间的JNDI配置差异?

Glassfish和TomEE之间的JNDI配置差异?,glassfish,jndi,apache-tomee,Glassfish,Jndi,Apache Tomee,我们希望将一个旧应用程序从Glassfish迁移到TomEE。我们遇到了一个关于JNDI的问题 当我运行Glassfish服务器的cmdasadmin list jndi条目时,我得到一些jndi条目: java:global: com.sun.enterprise.naming.impl.TransientContext UserTransaction: com.sun.enterprise.transaction.TransactionNamingProxy$UserTransactionP

我们希望将一个旧应用程序从Glassfish迁移到TomEE。我们遇到了一个关于JNDI的问题

当我运行Glassfish服务器的cmd
asadmin list jndi条目时,我得到一些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
如您所见,有AppServerJNDI条目。此条目是从我们的代码手动绑定的

        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/是基本名称空间。DBCTM数据源引用的“jdbc”,jms连接工厂的“jms”,JavaMail连接工厂的“mail”,url连接工厂的“url”

我们不想对旧的应用程序代码做太多更改。它没有使用玻璃鱼的任何特殊功能。我想知道如何以正确的方式定义JNDI


有人能告诉我为什么Glassfish可以使用AppServer作为名称空间,而TomEE不能。Tomcat(然后是TomEE)并不像它那样在运行时更改JNDI。简单地说,最好不要使用这种模式,而是使用上下文资源。注入您想要的资源,而这正是您更改的资源,而不是JNDI(它似乎影响更大)

您是正确的。检查文档后,TomEE JNDI上下文仅在运行时准备就绪。我必须在配置文件中创建一个标准JNDI名称。