[英]JNDI lookup is not happening when we bind object in one project and look up from second
我有两个Java项目Test1
和Test2
,在Test1
项目中我有一个带有以下代码的servlet
InitialContext initialContext=new InitialContext();
Class.forName("com.mysql.jdbc.Driver");
Connection connection=DriverManager.getConnection("jdbc:mysql://localhost:3306/lntdb","root","root");
initialContext.bind("conn", connection);
response.getWriter().println("Bound to JNDI "+initialContext.lookup("conn"));`
上面的代码将MYSQL
数据库连接对象绑定到名称为conn
JNDI
上,然后从Test2
项目中尝试检索该连接对象。 Test2
也有一个带有以下代码的servlet
InitialContext initialContext=new InitialContext();
response.getWriter().println(initialContext.lookup("java:comp/env/conn"));
但是我在堆栈跟踪下面是异常
javax.naming.NameNotFoundException:在此上下文中未绑定名称[conn]。 找不到[conn]。 在org.apache.naming.NamingContext.lookup(NamingContext.java:820)在org.apache.naming.NamingContext.lookup(NamingContext.java:154)在org.apache.naming.NamingContext.lookup(NamingContext.java:831) )在org.apache.naming.NamingContext.lookup(NamingContext.java:831)在org.apache.naming.NamingContext.lookup(NamingContext.java:831)在org.apache.naming.NamingContext.lookup(NamingContext.java: 168)在org.apache.naming.SelectorContext.lookup(SelectorContext.java:158)在javax.naming.InitialContext.lookup(Unknown Source)在com.lnt.TestServlet.doGet(TestServlet.java:19)在javax.servlet org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)处的javax.servlet.http.HttpServlet.service(HttpServlet.java:722)处的.http.HttpServlet.service(HttpServlet.java:621)位于org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)的org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java :)上的org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)上的a.core.StandardContextValve.invoke(StandardContextValve.java:123) 168)在org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)在org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)在org.apache.catalina.core.StandardEngineValve org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)的org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002)的.invoke(StandardEngineValve.java:118) org.apache.tomcat.util.net.JIoEndpoint $ SocketProcessor.run(JIoEndpoint.java:312)处的apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:585)在java.util.concurrent.ThreadPoolExecutor.runWorker( java.util.concurrent.ThreadPoolExecutor $ Worker.run(U上的未知源)(U.java.lang.Thread.run(U上的未知源) 未知来源)
您能否告诉我代码中有什么问题以及为什么我无法检索连接对象
在这里,您没有使用两个应用程序都通用的特定上下文。 在JNDI中,所有应用程序都有单独的上下文,并且在第一个应用程序中绑定的对象被吹到第一个应用程序的上下文中,而其他任何应用程序的初始上下文都无法使用这些对象。
您可以点击链接了解内部信息
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.