Java Tomcat+;jndi.properties
我对Tomcat中的JNDI有一个问题: 没有tomcat,我使用JNDI如下: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
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查找