我在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为空
答案 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查找。