NameNotFoundException Jetty 9 JNDI Search

I need to implement JNDI for the Jetty 9.0.3 web server for the H2 database using the C3p0 connection pool, I placed both the H2 and C3p0 boxes in the lib / ext directory from the JETTY-HOME directory, and I created jetty-env.xml in my WEB-INF.

WEB-INF / berth-env.xml

<?xml version="1.0"?> <!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd"> <Configure class="org.eclipse.jetty.webapp.WebAppContext"> <New id="DSTest" class="org.eclipse.jetty.plus.jndi.Resource"> <Arg>jdbc/testDS</Arg> <Arg> <New class="com.mchange.v2.c3p0.ComboPooledDataSource"> <Set name="driverClass">org.h2.Driver</Set> <Set name="jdbcUrl">jdbc:h2:/C:/data/test</Set> <Set name="user">sa</Set> <Set name="password"></Set> </New> </Arg> </New> </Configure> 

I implement a built-in jetty with plus support enabled by creating an instance of the Jetty server from the main method below the class:

WebServer.java

 import java.io.File; import javax.naming.Context; import javax.naming.InitialContext; import javax.sql.DataSource; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.util.resource.ResourceCollection; import org.eclipse.jetty.webapp.WebAppContext; public class WebServer { public static void main(String[] args) { // Creating Jetty Server on port 8080 Server webServer = new Server(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 = new WebAppContext(); // Set WAR Path to WebAppcontext from disk File warPath = new File("C:/Users/XXXX/src/com/UI"); wac.setWar(warPath.getAbsolutePath()); wac.setContextPath("/"); wac.setBaseResource(new ResourceCollection(new String[] { "./WebContent", "build/classes" })); webServer.setHandler(wac); try { InitialContext ic = new InitialContext(); DataSource myDS = (DataSource)ic.lookup("java:comp/env/jdbc/testDS"); System.out.println("param ::: "+myDS); webServer.start(); webServer.join(); } catch (Exception e) { e.printStackTrace(); } } } 

I get the following error, how can I solve it?

 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) 
+4
source share
2 answers

Have you tried changing the line "java: comp / env / jdbc / testDS" only with "jdbc / testDS"? I think this is a berth 9 'feature'.

+3
source

I had the same problem. I used <Arg>java:comp/env/jdbc/testdb</Arg> instead of <Arg>jdbc/testdb</Arg> and it worked

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

and of course in my search I used java:comp/env/jdbc/bratedb

0
source

Source: https://habr.com/ru/post/1494121/


All Articles