Tomcat + jndi.properties

时间:2011-05-21 08:24:56

标签: 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
  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>

在context.xml中:

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

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

1 个答案:

答案 0 :(得分:2)

您的Tomcat代码与您在Tomcat外部编写的代码不同。您在Tomcat案例中所做的就是将RMI注册表上下文工厂命名为JVoiceXML。这似乎没有意义:RMI Registry与XML无关。我怀疑你在这里根本不需要java:comp / env的东西。据推测,你有一个RMI注册表在某处运行:只需用Naming.lookup()查找即可。如果您希望它充当Tomcat资源,则需要定义可以创建它的工厂。这需要是javax.naming.spi.ObjectFactory(?)的一个实例。这可能反过来在java:comp / env命名空间之外执行Naming.lookup()或JNDI查找。