Java Tomcat+;jndi.properties

Java Tomcat+;jndi.properties,java,web-services,tomcat,jndi,Java,Web Services,Tomcat,Jndi,我对Tomcat中的JNDI有一个问题: 没有tomcat,我使用JNDI如下: Context context = new InitialContext(); JVoiceXml jvxml = (JVoiceXml) context.lookup("JVoiceXml"); 和jndi.properties: java.naming.factory.initial=com.sun.jndi.rmi.registry.RegistryContextFactory jav

我对Tomcat中的JNDI有一个问题: 没有tomcat,我使用JNDI如下:

  Context context = new InitialContext();   
  JVoiceXml jvxml = (JVoiceXml) context.lookup("JVoiceXml");
和jndi.properties:

  java.naming.factory.initial=com.sun.jndi.rmi.registry.RegistryContextFactory
  java.naming.provider.url=rmi://localhost:1099
  java.naming.rmi.security.manager=true
现在我想在我的Web应用程序(与Tomcat一起部署)中使用此代码,我已将代码更改为:

 Context context = new InitialContext();
 Context envCtx = (Context) context.lookup("java:comp/env");
 JVoiceXml jvxml = (JVoiceXml) envCtx.lookup("JVoiceXml");
在web.xml中:

<resource-env-ref>
  <resource-env-ref-name>
    JVoiceXml
  </resource-env-ref-name>
  <resource-env-ref-type>
    org.jvoicexml.JVoiceXml
  </resource-env-ref-type>
</resource-env-ref>

JVoiceXml
org.jvoicexml.jvoicexml
在context.xml中:

<Resource name="JVoiceXml" auth="Container"
            type="org.jvoicexml.JVoiceXml"
            factory="com.sun.jndi.rmi.registry.RegistryContextFactory"
            url="rmi://localhost:1099"/>


我错过了什么,因为在lookup()之后,我的JVoiceXml是空的

您的Tomcat代码与您在Tomcat外部编写的代码不相等。在Tomcat案例中,您只需将RMI注册表上下文工厂命名为JVoiceXML。这似乎没有道理:RMI注册表与XML无关。我怀疑您根本不需要java:comp/env之类的东西。您可能在某个地方运行了一个RMI注册表:只需使用Naming.lookup()进行查找即可。如果希望它充当Tomcat资源,则需要定义一个可以创建它的工厂。这需要是javax.naming.spi.ObjectFactory(?)的一个实例。这又可能在java:comp/env命名空间之外执行Naming.lookup()或JNDI查找