开发者

Tomcat +jndi.properties

开发者 https://www.devze.com 2023-03-07 22:42 出处:网络
i have a problem with JNDI in Tomcat: without tomcat I have used JNDI as following: Context context = new InitialContext();

i have a problem with JNDI in Tomcat: without tomcat I have used JNDI as following:

  Context context = new InitialContext();   
  JVoiceXml jvxml = (JVoiceXml) context.lookup("JVoiceXml");

And 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

Now I want to use this code in my Web Application(deployed with Tomcat), I have changed the code to:

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

In web.xml:

<resource-env-ref>
  <resource-env-ref-name>
    JVoiceXml
  </resource-env-ref-name>
  <resource-env-ref-type>
    org.jvoicexml.JVoiceXml
  </resour开发者_运维技巧ce-env-ref-type>
</resource-env-ref>

And in context.xml:

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

What I have missed, because after lookup() my JVoiceXml is null


Your Tomcat code is not equivalent to what you wrote outside Tomcat. All you've done in the Tomcat case is name an RMI Registry context factory as JVoiceXML. That doesn't seem to make sense: the RMI Registry has nothing to do with XML. I suspect you don't need the java:comp/env stuff at all here. Presumably you have an RMI Registry running somewhere: just look it up with Naming.lookup(). If you want it to act as a Tomcat Resource, you need to define a factory that can create it. That needs to be an instance of javax.naming.spi.ObjectFactory (?). That may in turn do a Naming.lookup(), or a JNDI lookup, outside the java:comp/env namespace.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号