Tomcat + jndi.properties - PullRequest
       4

Tomcat + jndi.properties

2 голосов
/ 21 мая 2011

У меня проблема с JNDI в Tomcat: без 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

Теперь я хочу использовать этокод в моем веб-приложении (развернутом с 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"/>

Что я пропустил, потому что после lookup () мой JVoiceXml имеет значение null

1 Ответ

2 голосов
/ 23 мая 2011

Ваш код Tomcat не эквивалентен тому, что вы написали вне Tomcat.Все, что вы сделали в случае с Tomcat, назвали фабрику контекста RMI Registry как JVoiceXML.Это не имеет смысла: реестр RMI не имеет ничего общего с XML.Я подозреваю, что вам вообще не нужен java: comp / env.Предположительно, у вас где-то работает реестр RMI: просто посмотрите его с помощью Naming.lookup ().Если вы хотите, чтобы он выступал в качестве ресурса Tomcat, вам нужно определить фабрику, которая может его создать.Это должен быть экземпляр javax.naming.spi.ObjectFactory (?).Это, в свою очередь, может выполнять поиск Naming.lookup () или JNDI вне пространства имен java: comp / env.

...