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

我的配置文件

project / WEB-INF / web.xml

 ConnectionPool DataSource Reference jdbc/mysql javax.sql.DataSource Container  

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

   jdbc/mysql   com.mysql.jdbc.Driver jdbc:mysql://localhost:3306/db user pwd 50    

要调用的代码:

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

启动docker的脚本:

 java -DOPTIONS=plus -jar start.jar java -jar start.jar 

无论哪种方式开始docker,我都有以下错误:


 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文件的位置:
    • 公地DBCP-1.2.2.jar
    • MySQL的连接器的Java-5.1.10-bin.jar

谢谢!

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

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

  org.eclipse.jetty.webapp.configuration   org.eclipse.jetty.webapp.WebInfConfiguration org.eclipse.jetty.webapp.WebXmlConfiguration org.eclipse.jetty.webapp.MetaInfConfiguration org.eclipse.jetty.webapp.FragmentConfiguration org.eclipse.jetty.plus.webapp.EnvConfiguration org.eclipse.jetty.plus.webapp.PlusConfiguration org.eclipse.jetty.webapp.JettyWebXmlConfiguration org.eclipse.jetty.webapp.TagLibConfiguration    

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

这让我整天都疯了。 仅供参考,我正在使用Jetty 6.1.22。 对第一篇文章的评论正在进行中 – 我在WEB-INF中有一个文件名jetty-env.xml,它被忽略了。 我将它重命名为jetty-web.xml 为New指令的第二个参数指定了数据源的全名(即java:comp / env / jdbc / mydatasource)并且它有效。

面对同样的问题。 我的项目/ WEB-INF / jetty-env.xml是:

   jdbc/DS   jdbc:mysql://localhost:3306/students root root    

并且发生了同样的错误。 我试图切换jndi范围 – 没有用。 当我试图查看java时的事件:comp /查看可用的jndi条目,它什么都不返回。 使用的jndi列表代码:

 Context t = (Context)new InitialContext().lookup("java:comp"); listContext(t, ""); private static final void listContext(Context ctx, String indent) { try { NamingEnumeration list = ctx.listBindings(""); while (list.hasMore()) { Binding item = (Binding) list.next(); String className = item.getClassName(); String name = item.getName(); System.out.println(indent + className + " " + name); Object o = item.getObject(); if (o instanceof javax.naming.Context) { listContext((Context) o, indent + " "); } } } catch (NamingException ex) { System.out.println(ex); } } 

我确定已经加载了jetty-web.xml – 我添加了:

 Starting my super test application 

jetty-web.xml之上,它在服务器启动时输出。

然后,我决定从非便携式jetty-web.xml转移到context.xml文件,将其放入$ JETTY_HOME / contexts ,将MySQL连接器jar放入$ JETTY_HOME / lib / ext并开始工作。

看起来Jetty如果从jetty-web.xml加载了JNDI条目就有问题。

Jetty文档指示使用JNDI资源(如数据库) 的三个步骤 。 这些说明应适用于Jetty 7和Jetty 8。

  1. 编辑$JETTY_HOME/start.ini文件,如下所示:
  2. 修改服务器OPTIONS以包含“加号”,例如:

    OPTIONS=Server,jsp,jmx,resources,websocket,ext,plus

  3. 在文件底部附近的配置文件部分,在etc/jetty.xml之后添加以下行:

    etc/jetty-plus.xml