2

我有一个使用 Tomcat 服务器部署的 Web 应用程序,但我有一个例外。

名称 jdbc/_UserRight 与 Context 无关

这是我的背景:

<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 n'est pas lié à ce org.apache.naming.NamingContext.lookup(NamingContext.java:820) at org.apache.naming.NamingContext.lookup(NamingContext.java :168) 在 org.apache.naming.SelectorContext.lookup(SelectorContext.java:158) 在 javax.naming.InitialContext.lookup(InitialContext.java:411) 在 fr.la.connection.ConnectionPoolSQL.getConnection(ConnectionPoolSQL.java: 30) 在 fr.la.juserright.dao.ConnectionUserRight.getCnx(ConnectionUserRight.java:23) 在 fr.la.juserright.dao.UserDAO 的 fr.la.jproductbase.dao.ConnectionPool.getConnection(ConnectionPool.java:67) .readAll(UserDAO.java:74) 在 fr.la.juserright.service.UserModule.getAllUser(UserModule.java:31) 在 fr.la.juserright.service.ServiceUserRight.getAllUser(ServiceUserRight.java:281) 在 fr。拉juserright.managedbean.utilisateurBean.refreshuserList(utilisateurBean.java:53) 在 sun.reflect.NativeConstructorAccessorImpl 在 sun.reflect.NativeConstructorAccessorImpl 在 fr.la.juserright.managedbean.utilisateurBean.(utilisateurBean.java:49) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) .newInstance(NativeConstructorAccessorImpl.java:57) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 在 java.lang.reflect.Constructor.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(ManagedBeanELResolver.java:244) 在 com.sun.faces.el.ManagedBeanELResolver.getValue(ManagedBeanELResolver.java:116)在 com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176) 在 com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.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.UIComponent.encodeAll(UIComponent.java:1764) 在 javax.faces.render.Renderer.encodeChildren(Renderer.java:168) 在 javax.faces.component.UIComponentBase。 org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:45) at org.primefaces.renderkit.coreRenderer.renderChildren(CoreRenderer.java:45) at org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:57) 上的 encodeChildren(UIComponentBase.java:845) .LayoutUnitRenderer.encodeEnd(LayoutUnitRenderer.java:51) 在 javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875) 在 javax.faces.component.UIComponent.encodeAll(UIComponent.java:1764) 在 javax.faces.component.UIComponent.encodeAll(UIComponent.java:1760) 在 javax.faces.component.UIComponent.encodeAll(UIComponent.java) :1760) 在 javax.faces.component.UIComponent.encodeAll(UIComponent.java:1760) 在 javax.faces.component.UIComponent.encodeAll(UIComponent.java:1760) 在 com.sun.faces.application.view.FaceletViewHandlingStrategy。 renderView(FaceletViewHandlingStrategy.java:402) at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131) at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121) at com .sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 在 com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139) 在 javax.faces.webapp.FacesServlet。org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 的服务(FacesServlet.java:594) 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.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) 在 org.apache.catalina.valves 的 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)。 AccessLogValve.invoke(AccessLogValve.java:936) 在 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:1004) 在 org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol. java:589) 在 org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) 在 java.util.concurrent .ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) 在 java.lang.Thread.run(Thread.java:722)589) 在 org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) 在 java.util.concurrent.ThreadPoolExecutor $Worker.run(ThreadPoolExecutor.java:603) 在 java.lang.Thread.run(Thread.java:722)589) 在 org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) 在 java.util.concurrent.ThreadPoolExecutor $Worker.run(ThreadPoolExecutor.java:603) 在 java.lang.Thread.run(Thread.java:722)

4

2 回答 2

2

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

Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
this.cnx = (DataSource) envCtx.lookup("jdbc/_UserRight").getConnection();
于 2013-01-07T13:48:08.610 回答
0

我解决了:

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;
}
于 2013-01-07T16:02:01.503 回答