当我们在一个项目中绑定对象并从第二个查找时,JNDI查找不会发生

时间:2014-07-27 15:32:49

标签: java jndi

我有两个java项目Test1Test2,在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数据库连接对象绑定到名为JNDI的{​​{1}},然后从conn项目我尝试检索连接对象。 Test2还有一个带有以下代码的servlet

Test2

但是我的异常是堆栈跟踪低于

  

javax.naming.NameNotFoundException:名称[conn]未绑定在此Context中。无法找到[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:154)       在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(未知来源)       在com.lnt.TestServlet.doGet(TestServlet.java:19)       在javax.servlet.http.HttpServlet.service(HttpServlet.java:621)       在javax.servlet.http.HttpServlet.service(HttpServlet.java:722)       在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)       在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)       在org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)       在org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)       在org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)       在org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)       在org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)       在org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)       在org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)       在org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)       在org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002)       at org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:585)       at org.apache.tomcat.util.net.JIoEndpoint $ SocketProcessor.run(JIoEndpoint.java:312)       at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)       at java.util.concurrent.ThreadPoolExecutor $ Worker.run(Unknown Source)       在java.lang.Thread.run(未知来源)   `

你能告诉我的代码有什么问题以及为什么我无法检索连接对象

1 个答案:

答案 0 :(得分:0)

在这里,您没有使用两个应用程序共有的任何特定上下文。 在JNDI中,所有应用程序都有单独的上下文,并且您在第一个应用程序中绑定的对象是第一个应用程序的上下文,这些上下文对任何其他应用程序初始上下文都不可用。

您可以按照link了解内幕