2013-07-29 2 views
4

Мне нужно реализовать JNDI для веб-сервера Jetty 9.0.3 для базы данных H2, используя пул соединений C3p0, я разместил как банки H2 и C3p0 в каталоге lib/ext каталога JETTY-HOME, так и в моем WEB-INF создан файл jetty-env.xml.NameNotFoundException Jetty 9 JNDI lookup

WEB-INF/причал-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> 

Я реализует встроенный причал с конфигурацией плюс включен, путем создания экземпляра сервера Jetty от основного метода ниже класса:

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(); 
     } 

    } 

} 

Я получаю следующее сообщение об ошибке, как может Я разрешаю это?

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) 
+0

Может быть, потому что у вас есть набор идентификатора 'DStest' в вашем' <Нового ид = «DSTest» class = "org.eclipse.jetty.plus.jndi.Resource"> 'statement? – HeatfanJohn

+0

Глядя на [настройка источников данных в Jetty] (http://www.eclipse.org/jetty/documentation/current/jndi-configuration.html#configuring-datasources) больше. Я вижу, что мой предыдущий комментарий неверен. – HeatfanJohn

+0

Я тебя не понял! почему id вызовет проблему, когда я ищу JNDI Resouce, используя имя? – FiendFyre

ответ

3

Вы пытались изменить строку "Java: комп/ENV/JDBC/testDS" только с "JDBC/testDS"? Я думаю, что это причал 9 'feature'.

0

У меня была та же проблема. я использовал <Arg>java:comp/env/jdbc/testdb</Arg> вместо <Arg>jdbc/testdb</Arg> и работал

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

Смежные вопросы