我有两个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
数据库连接对象绑定到名为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(未知来源) `
你能告诉我的代码有什么问题以及为什么我无法检索连接对象
答案 0 :(得分:0)
在这里,您没有使用两个应用程序共有的任何特定上下文。 在JNDI中,所有应用程序都有单独的上下文,并且您在第一个应用程序中绑定的对象是第一个应用程序的上下文,这些上下文对任何其他应用程序初始上下文都不可用。
您可以按照link了解内幕