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。
- 编辑
$JETTY_HOME/start.ini
文件,如下所示: -
修改服务器
OPTIONS
以包含“加号”,例如:OPTIONS=Server,jsp,jmx,resources,websocket,ext,plus
-
在文件底部附近的配置文件部分,在
etc/jetty.xml
之后添加以下行:etc/jetty-plus.xml