NameNotFoundException Jetty 9 JNDI查找

NameNotFoundException Jetty 9 JNDI查找,jetty,jndi,embedded-jetty,Jetty,Jndi,Embedded Jetty,我需要使用C3p0连接池为Jetty 9.0.3 web server for H2数据库实现JNDI,我在Jetty-HOME目录的lib/ext中放置了H2和C3p0 JAR,并在web-INF中创建了一个Jetty-env.xml文件 WEB-INF/jetty env.xml jdbc/testDS org.h2.Driver jdbc:h2:/C:/data/test sa 我正在通过以下类的主要方法创建jetty server实例,实现启用plus配置的嵌入式jetty: Web

我需要使用C3p0连接池为Jetty 9.0.3 web server for H2数据库实现JNDI,我在Jetty-HOME目录的lib/ext中放置了H2和C3p0 JAR,并在web-INF中创建了一个Jetty-env.xml文件

WEB-INF/jetty env.xml


jdbc/testDS
org.h2.Driver
jdbc:h2:/C:/data/test
sa
我正在通过以下类的主要方法创建jetty server实例,实现启用plus配置的嵌入式jetty:

WebServer.java

导入java.io.File;
导入javax.naming.Context;
导入javax.naming.InitialContext;
导入javax.sql.DataSource;
导入org.eclipse.jetty.server.server;
导入org.eclipse.jetty.util.resource.ResourceCollection;
导入org.eclipse.jetty.webapp.WebAppContext;
公共类Web服务器
{
公共静态void main(字符串[]args)
{
//在端口8080上创建Jetty服务器
服务器webServer=新服务器(8080);
org.eclipse.jetty.webapp.Configuration.ClassList ClassList=org.eclipse.jetty.webapp.Configuration.ClassList.setServerDefault(webServer);
classlist.addAfter(“org.eclipse.jetty.webapp.FragmentConfiguration”,“org.eclipse.jetty.plus.webapp.EnvConfiguration”,
“org.eclipse.jetty.plus.webapp.PlusConfiguration”);
WebAppContext wac=新的WebAppContext();
//从磁盘将WAR路径设置为WebAppcontext
File warPath=新文件(“C:/Users/XXXX/src/com/UI”);
wac.setWar(warPath.getAbsolutePath());
wac.setContextPath(“/”);
setBaseResource(新的ResourceCollection(新字符串[]{“../WebContent”,“build/classes”}));
setHandler(wac);
尝试
{
InitialContext ic=新的InitialContext();
datasourcemyds=(DataSource)ic.lookup(“java:comp/env/jdbc/testDS”);
System.out.println(“参数:”+myDS);
start();
join();
}
捕获(例外e)
{
e、 printStackTrace();
}
}
}
如果出现以下错误,如何解决此问题

javax.naming.NameNotFoundException; remaining name 'env/jdbc/testDS'
    at org.eclipse.jetty.jndi.NamingContext.lookup(NamingContext.java:505)
    at org.eclipse.jetty.jndi.NamingContext.lookup(NamingContext.java:536)
    at org.eclipse.jetty.jndi.NamingContext.lookup(NamingContext.java:551)
    at org.eclipse.jetty.jndi.java.javaRootURLContext.lookup(javaRootURLContext.java:117)
    at javax.naming.InitialContext.lookup(InitialContext.java:411)
    at com.server.WebServer.main(WebServer.java:37)

您是否尝试过将字符串“java:comp/env/jdbc/testDS”改为“jdbc/testDS”?我认为这是jetty 9的一个“功能”。

我也有同样的问题。我使用了
java:comp/env/jdbc/testdb
而不是
jdbc/testdb
,它工作了

<New id="JndiResource" class="org.eclipse.jetty.plus.jndi.Resource">
 <Arg></Arg>
 <Arg>java:comp/env/jdbc/testdb</Arg>
 <Arg>
  <New class="com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource">
   <Set name="Url">jdbc:mysql://127.0.0.1:3306/mydb</Set>
   <Set name="User">user</Set>
   <Set name="Password"></Set>
  </New>
 </Arg>
</New>

java:comp/env/jdbc/testdb
jdbc:mysql://127.0.0.1:3306/mydb
用户

当然,在我的查找过程中,我使用了
java:comp/env/jdbc/bratedb

这可能是因为您在
语句中将id设置为
DStest
吗?查看更多信息,我发现我之前的评论不正确。我没有理解您!当我使用name查找JNDI资源时,为什么id会引起问题?在jetty.xml中将java:comp/env/jdbc/bratedb配置为java:comp/env/jdbc/testdb时,它是如何工作的