有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java tomcat上下文异常与jdbc池

我有一个使用Tomcat服务器部署的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。命名。NameNotFoundException:Le Nom jdbc/_userrightn'est pas liéce Contexte 在org。阿帕奇。命名。NamingContext。查找(NamingContext.java:820) 在org。阿帕奇。命名。NamingContext。查找(NamingContext.java:168) 在org。阿帕奇。命名。选择或上下文。查找(SelectorContext.java:158) 在javax。命名。初始化上下文。查找(InitialContext.java:411) 在洛杉矶神父。联系ConnectionPoolSQL。getConnection(ConnectionPoolSQL.java:30) 在洛杉矶神父。jproductbase。刀。连接池。getConnection(ConnectionPool.java:67) 在洛杉矶神父。朱塞利特。刀。是的。getCnx(ConnectionUserRight.java:23) 在洛杉矶神父。朱塞利特。刀。UserDAO。readAll(UserDAO.java:74) 在洛杉矶神父。朱塞利特。服务用户模块。getAllUser(UserModule.java:31) 在洛杉矶神父。朱塞利特。服务ServiceUserRight。getAllUser(ServiceUserRight.java:281) 在洛杉矶神父。朱塞利特。managedbean。阿泰伯安。refreshuserList(利用Turbean.java:53) 在洛杉矶神父。朱塞利特。managedbean。阿泰伯安。(java:49) 在太阳下。反映国家结构附件MPL。newInstance0(本机方法) 在太阳下。反映国家结构附件MPL。newInstance(NativeConstructorAccessorImpl.java:57) 在太阳下。反映删除构造函数或AccessorImpl。newInstance(DelegatingConstructorAccessorImpl.java:45) 在爪哇。朗。反思。构造器。newInstance(Constructor.java:525) 在爪哇。朗朗,上课。newInstance0(Class.java:372) 在爪哇。朗朗,上课。newInstance(Class.java:325) 在com。太阳面孔。mgbean。造豆工。newBeanInstance(BeanBuilder.java:188) 在com。太阳面孔。mgbean。造豆工。构建(BeanBuilder.java:102) 在com。太阳面孔。mgbean。豆管员。createAndPush(BeanManager.java:409) 在com。太阳面孔。mgbean。豆管员。创建(BeanManager.java:269) 在com。太阳面孔。埃尔。ManagedBeanELResolver。resolveBean(ManagedBeanELResolver.java:244) 在com。太阳面孔。埃尔。ManagedBeanELResolver。getValue(ManagedBeanELResolver.java:116) 在com。太阳面孔。埃尔。解复合解算器_getValue(DemuxCompositeELResolver.java:176) 在com。太阳面孔。埃尔。解复合解算器。getValue(DemuxCompositeELResolver.java:203) 在org。阿帕奇。埃尔。解析器。验光器。getValue(astiIdentifier.java:72) 在org。阿帕奇。埃尔。解析器。价值观。getTarget(AstValue.java:94) 在org。阿帕奇。埃尔。解析器。价值观。getType(AstValue.java:82) 在org。阿帕奇。埃尔。ValueExpressionImpl。getType(ValueExpressionImpl.java:172) 在com。太阳面孔。小脸蛋。埃尔。TagValueExpression。getType(TagValueExpression.java:98) 在org。素面。组成部分数据表。数据表。isLazy(DataTable.java:968) 在org。素面。组成部分数据表。DataTableRenderer。encodeMarkup(DataTableRenderer.java:191) 在org。素面。组成部分数据表。DataTableRenderer。encodeEnd(DataTableRenderer.java:108) 在javax。面孔。组成部分UIComponentBase。encodeEnd(UIComponentBase.java:875) 在javax。面孔。组成部分UIC组件。encodeAll(UIComponent.java:1764) 在javax。面孔。提供渲染器。encodechildrender(Renderer.java:168) 在javax。面孔。组成部分UIComponentBase。encodeChildren(UIComponentBase.java:845) 在org。素面。renderkit。核心渲染器。renderChild(CoreRenderer.java:57) 在org。素面。renderkit。核心渲染器。renderChildren(CoreRenderer.java:45) 在org。素面。组成部分布局布局单元渲染器。encodeEnd(LayoutUnitRenderer.java:51) 在javax。面孔。组成部分UIComponentBase。encodeEnd(UIComponentBase.java:875) 在javax。面孔。组成部分UIC组件。encodeAll(UIComponent.java:1764) 在javax。面孔。组成部分UIC组件。encodeAll(UIComponent.java:1760) 在javax。面孔。组成部分UIC组件。encodeAll(UIComponent.java:1760) 在javax。面孔。有限公司重要的。UIC组件。encodeAll(UIComponent.java:1760) 在javax。面孔。组成部分UIC组件。encodeAll(UIComponent.java:1760) 在com。太阳面孔。应用看法FaceletViewHandlingStrategy。renderView(FaceletViewHandlingStrategy.java:402) 在com。太阳面孔。应用看法多视图处理程序。renderView(MultiViewHandler.java:131) 在com。太阳面孔。生命周期。渲染响应阶段。执行(RenderResponsePhase.java:121) 在com。太阳面孔。生命周期。阶段doPhase(Phase.java:101) 在com。太阳面孔。生命周期。生命周期。render(LifecycleImpl.java:139) 在javax。面孔。网络应用。FacesServlet。服务(FacesServlet.java:594) 在org。阿帕奇。卡塔琳娜。果心ApplicationFilterChain。internalDoFilter(ApplicationFilterChain.java:305) 在org。阿帕奇。卡塔琳娜。果心ApplicationFilterChain。doFilter(ApplicationFilterChain.java:210) 在org。阿帕奇。卡塔琳娜。果心标准包装阀。调用(StandardWrapperValve.java:222) 在org。阿帕奇。卡塔琳娜。果心标准连接阀。调用(StandardContextValve.java:123) 在org。阿帕奇。卡塔琳娜。验证者。AuthenticatorBase。调用(AuthenticatorBase.java:472) 在org。阿帕奇。卡塔琳娜。果心标准阀门。调用(StandardHostValve.java:171) 在org。阿帕奇。卡塔琳娜。阀门。错误报告阀。调用(ErrorReportValve.java:99) 在org。阿帕奇。卡塔琳娜。阀门。检修阀。调用(AccessLogValve.java:936) 在org。阿帕奇。卡塔琳娜。果心标准引擎版本。调用(StandardEngineValve.java:118) 在org。阿帕奇。卡塔琳娜。连接器。郊狼适应者。服务(CoyoteAdapter.java:407) 在org。阿帕奇。郊狼。http11。抽象http11处理器。进程(AbstractHttp11Processor.java:1004) 在org。阿帕奇。郊狼。AbstractProtocol$AbstractConnectionHandler。进程(AbstractProtocol.java:589) 在org。阿帕奇。公猫util。网JIoEndpoint$SocketProcessor。run(JIoEndpoint.java:310) 在爪哇。util。同时发生的线程池执行器。runWorker(ThreadPoolExecutor.java:1110) 在爪哇。util。同时发生的线程池执行器$Worker。运行(ThreadPoolExecutor.java:603) 在爪哇。朗。丝线。运行(Thread.java:722)


共 (2) 个答案

  1. # 1 楼答案

    看起来您的连接池只是在没有上下文的情况下创建的。试着做些类似-

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

    我解决了它:

    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;
    }