jdbc池出现tomcat上下文异常



我在Tomcat Server中部署了一个web应用程序,但我有一个异常。

名称jdbc/_UserRight与上下文无关

这是我的背景:

<Resource name="jdbc/_UserRight" auth="Container"
type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000"
username="XXXXX" password="XXXXX" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/userright" />

这是我的连接类:

public class ConnectionUserRight {
private Connection cnx;
private ConnectionPool connectionPool;
public ConnectionUserRight() throws ConfigFileReaderException, IOException,
SQLException {
connectionPool = new ConnectionPool();
}
public Connection getCnx() throws SQLException, NamingException {
if (null == this.cnx) {
this.cnx = connectionPool.getConnection("jdbc/_UserRight");
} else {
// Connexion already open
}
return cnx;
}
public void closeCnx() {
connectionPool.closeConnection(this.cnx);
this.cnx = null;
}
}

编辑:

这是我的日志(第一行例外是法语):

javax.naming.NameNotFoundException:Le Nom jdbc/_UserRight不是上下文网址:org.apache.naming.NamingContext.ulookup(NamingContext.java:820)网址:org.apache.naming.NamingContext.ulookup(NamingContext.java:168)网址:org.apache.namening.SelectorContext.ulookup(SelectorContext.java:158)在javax.nameming.InitialContext.ulookup(InitialContext.java:411)位于fr.la.connection.ConnectionPoolSQL.getConnection(ConnectionPoolSQL.java:30)位于fr.la.jproductbase.dao.ConnectionPool.getConnection(ConnectionPool.java:67)位于fr.la.juserright.dao.ConnectionUserRight.getCnx(ConnectionUserRight.java:23)位于fr.la.juserright.dao.UserDAO.readAll(UserDAO.java:74)位于fr.la.juserright.service.UserModule.getAllUser(UserModule.java:31)位于fr.la.juserright.ServiceUserRight.getAllUser(ServiceUserRight.java:281)位于fr.la.juserright.managedbean.utilisateurBean.refreshuserList(utilisateurBean.java:53)网址:fr.la.juserright.managedbean.utilisateurBean。(utilisateurBean.java:49)在sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)在sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessor Impl.java:57)在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessor Impl.java:45)位于java.lang.reflect.Constructure.newInstance(Constructor.java:525)位于java.lang.Class.newInstance0(Class.java:372)位于java.lang.Class.newInstance(Class.java:325)网址:com.sun.faces.mgbean.BeanBuilder.newBeanInstance(BeanBuilder.java:188)网址:com.sun.faces.mgbean.BeanBuilder.build(BeanBuilder.java:102)网址:com.sun.faces.mgbean.BeanManager.createAndPush(BeanManager.java:409)网址:com.sun.faces.mgbean.BeanManager.create(BeanManager.java:269)网址:com.sun.faces.el.ManagedBeanELResolver.resolveBean(ManagedBeanELSolutionr.java:244)网址:com.sun.faces.el.ManagedBeanELResolver.getValue(ManagedBeanELSolutionr.java:116)网址:com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompatiteELResolver.java:176)在com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompatiteELResolver.java:203)网址:org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:72)网址:org.apache.el.parser.AstValue.getTarget(AstValue.java:94)网址:org.apache.el.parser.AstValue.getType(AstValue.java:82)网址:org.apache.el.ValueExpressionImpl.getType(ValueExpressionImpl.java:172)网址:com.sun.faces.facelets.el.TagValueExpression.getType(TagValueExpression.java:98)网址:org.primefaces.component.datatable.datatable.isLazy(datatable.java:968)位于org.primefaces.component.datatable.DataTableRenderer.encodeMarkup(DataTableRenderer.java:191)位于org.primefaces.component.datatable.DataTableRenderer.encodeEnd(DataTableRenderer.java:108)位于javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)在javax.faces.component.UIComponentAll(UIComponent.java:1764)位于javax.faces.render.render.encodeChildren(Renderer.java:168)位于javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845)网址:org.primefaces.renderkit.CoreRenderer.renderChild(CoreRender.java:57)网址:org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRender.java:45)位于org.primefaces.component.layout.LayoutUnitRenderer.encodeEnd(LayoutUnitRenderer.java:51)位于javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)在javax.faces.component.UIComponentAll(UIComponent.java:1764)位于javax.faces.component.UIComponentAll(UIComponent.java:1760)位于javax.faces.component.UIComponentAll(UIComponent.java:1760)位于javax.faces.component.UIComponentAll(UIComponent.java:1760)位于javax.faces.component.UIComponentAll(UIComponent.java:1760)网址:com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandingStrategy.java:402)网址:com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)在com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResonsePhase.java:121)在com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)网址:com.sun.faces.lifecycle.Impl.render(LifecycleImpl.java:139)位于javax.faces.webapp.FacesServlet.service(FacesServlet.java:594)网址:org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)网址:org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)网址:org.apache.catalina.core.StandardWrapperValv.invoke(StandardWrapperValve.java:222)网址:org.apache.catalina.core.StandardContextValv.invoke(StandardContextValv.java:123)网址:org.apache.catalina.authenticator.AuthenticatorBase.ioke(AuthenticatorBase.java:472)网址:org.apache.catalina.core.StandardHostValv.invoke(StandardHostValv.java:171)网址:org.apache.catalina.vals.ErrorReportValve.ioke(ErrorReportValve.java:99)网址:org.apache.catalina.vals.AccessLogValve.ioke(AccessLogValve.java:936)网址:org.apache.catalina.core.StandardEngineValv.invoke(StandardEngineValv.java:118)网址:org.apache.catalina.connecter.CoyoteAdapter.service(Coyotedapter.java:407)网址:org.apache.coyote.http11.AbstractHttp11Processor.procedure(AbstractHttp11Processer.java:1004)网址:org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)网址:org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)位于java.util.concurrent.ThreadPoolExecutiator.runWorker(ThreadPoolExecutiator.java:1110)位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)在java.lang.Thread.run(Thread.java:722)

看起来您的connectionPool只是在没有上下文的情况下创建的。试试类似的东西

Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
this.cnx = (DataSource) envCtx.lookup("jdbc/_UserRight").getConnection();

我解决了它:

public Connection getCnx() throws SQLException, NamingException {
if (null == this.cnx) {
this.cnx = connectionPool.getConnection("java:comp/env/jdbc/_UserRight");
} else {
// Connexion already open
}
return cnx;
}