java - Jetty mysql 连接池配置错误 : javax. naming.NameNotFoundException;剩余名称'env/jdbc/---(mysql 5.0+jetty 7.0.1)

标签 java mysql jdbc jetty connection-pooling

我的配置文件

项目/WEB-INF/web.xml:

<resource-ref>
    <description>ConnectionPool DataSource Reference</description>
    <res-ref-name>jdbc/mysql</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>

项目/WEB-INF/jetty-env.xml:

<New id="mysql" class="org.eclipse.jetty.plus.jndi.Resource">
    <Arg></Arg>
<Arg>jdbc/mysql</Arg>
    <Arg>
        <New class="org.apache.commons.dbcp.BasicDataSource">
            <Set name="driverClassName">com.mysql.jdbc.Driver</Set>
            <Set name="url">jdbc:mysql://localhost:3306/db</Set>
            <Set name="username">user</Set>
            <Set name="password">pwd</Set>
            <Set name="maxActive">50</Set>
        </New>
    </Arg>
</New>

调用代码:

ctx = new InitialContext();
ds = (DataSource) ctx.lookup("java:comp/env/jdbc/mysql");
con=ds.getConnection();

启动 jetty 的脚本:

java -DOPTIONS=plus -jar start.jar

java -jar start.jar

无论哪种方式启动 jetty ,我都得到以下错误:


javax.naming.NameNotFoundException; remaining name 'env/jdbc/mysql'
        at org.eclipse.jetty.jndi.NamingContext.lookup(NamingContext.java:632)
        at org.eclipse.jetty.jndi.NamingContext.lookup(NamingContext.java:663)
        at org.eclipse.jetty.jndi.NamingContext.lookup(NamingContext.java:678)
        at org.eclipse.jetty.jndi.java.javaRootURLContext.lookup(javaRootURLContext.java:110)
        at javax.naming.InitialContext.lookup(Unknown Source)

问题是:

  • 这里有什么问题?
  • 需要任何其他配置吗?
  • 将以下 jar 文件放在哪里:
    • commons-dbcp-1.2.2.jar
    • mysql-connector-java-5.1.10-bin.jar

谢谢!

最佳答案

注意:以下假设您使用的是 Jetty 7.2.2+(可能适用于任何 Jetty 7.0+)。

问题是您缺少一个额外的间接层。即使您已经在 Web 应用程序中配置了 Jetty,您仍然需要告诉 Jetty 容器它需要在您的 Web 应用程序中查找 jetty-env.xml。为此,请将以下内容添加到您的 jetty.xml(在 ${JETTY_INSTALL_DIR}/etc 下):

<Call name="setAttribute">
  <Arg>org.eclipse.jetty.webapp.configuration</Arg>
  <Arg>
      <Array type="java.lang.String">
          <Item>org.eclipse.jetty.webapp.WebInfConfiguration</Item>
          <Item>org.eclipse.jetty.webapp.WebXmlConfiguration</Item>
          <Item>org.eclipse.jetty.webapp.MetaInfConfiguration</Item>
          <Item>org.eclipse.jetty.webapp.FragmentConfiguration</Item>
          <Item>org.eclipse.jetty.plus.webapp.EnvConfiguration</Item>
          <Item>org.eclipse.jetty.plus.webapp.PlusConfiguration</Item>
          <Item>org.eclipse.jetty.webapp.JettyWebXmlConfiguration</Item>
          <Item>org.eclipse.jetty.webapp.TagLibConfiguration</Item>
      </Array>
  </Arg>
</Call>

现在 Jetty 将知道解析您创建的 jetty-env.xml。

关于java - Jetty mysql 连接池配置错误 : javax. naming.NameNotFoundException;剩余名称'env/jdbc/---(mysql 5.0+jetty 7.0.1),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2131798/

相关文章:

java - 可以说服 JDBC + MySQL 忽略时区吗?

java - Android: Yahoo Weather App Horizo​​ntal Scroll-view Effect?

java - JAX-WS SOAP 返回类型

mysql - phpmyadmin:不能通过本地主机进行数据库连接

mysql - 从表的列中查找最大值

database - 具有数据库链接的 Oracle JDBC 连接池

jdbc - 数据库对乐观并发的支持

java - 如何在arduino上接收多个字节java形式

php - 如何显示大于或等于mysql表列月份的数据?

java - 迭代 ResultSet 时更新行需要花费大量时间