2011-11-01 26 views
9

ACTUALIZACIÓN: Bueno, parece que esto es un problema solo cuando trato de depurar localmente. Cuando se publica en Jetty (no en la misma máquina) funciona muy bien. ¿Es posible configurar el archivo jetty.xml utilizado por Run-Jetty-Run cuando se depura localmente?búsqueda JNDI fallida (NameNotFoundException)

que acaba de perder una tarde tratando de encontrar la causa de esto, pero sin éxito ...

Soy la creación de un pool de conexiones con c3p0 para mi aplicación. Estoy usando Jetty 7, por cierto. El problema es que cuando hago un Context.lookup obtener una fuente de datos, me sale esta excepción:

javax.naming.NameNotFoundException; remaining name 'env/jdbc/DSTest' 
at org.eclipse.jetty.jndi.NamingContext.lookup(NamingContext.java:634) 
at org.eclipse.jetty.jndi.NamingContext.lookup(NamingContext.java:665) 
at org.eclipse.jetty.jndi.NamingContext.lookup(NamingContext.java:680) 
at org.eclipse.jetty.jndi.java.javaRootURLContext.lookup(javaRootURLContext.java:113) 
at javax.naming.InitialContext.lookup(InitialContext.java:392) 
at com.see.metrics.SqlHelper.Initialize(SqlHelper.java:68) 
at com.see.metrics.Metrics.Initialize(Metrics.java:45) 
at com.see.game.GameProducer.generateMetadata(GameProducer.java:223) 
at org.odata4j.producer.mongodb.MongoProducer.initMongo(MongoProducer.java:98) 
at org.odata4j.producer.mongodb.MongoProducerFactory.create(MongoProducerFactory.java:55) 
at org.odata4j.producer.resources.ODataProducerProvider.newProducerFromFactory(ODataProducerProvider.java:66) 
at org.odata4j.producer.resources.ODataProducerProvider.getInstance(ODataProducerProvider.java:48) 
at org.odata4j.producer.resources.ODataProducerProvider.getInstance(ODataProducerProvider.java:1) 
at com.sun.jersey.core.impl.provider.xml.LazySingletonContextProvider.get(LazySingletonContextProvider.java:80) 
at com.sun.jersey.core.impl.provider.xml.LazySingletonContextProvider.access$000(LazySingletonContextProvider.java:52) 
at com.sun.jersey.core.impl.provider.xml.LazySingletonContextProvider$1.getValue(LazySingletonContextProvider.java:69) 
at com.sun.jersey.server.impl.inject.AbstractHttpContextInjectable$1.getValue(AbstractHttpContextInjectable.java:100) 
at com.sun.jersey.server.impl.inject.InjectableValuesProvider.getInjectableValues(InjectableValuesProvider.java:43) 
at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$EntityParamInInvoker.getParams(AbstractResourceMethodDispatchProvider.java:119) 
at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$ResponseOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:166) 
at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:67) 
at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:259) 
at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:83) 
at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:133) 
at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:71) 
at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:990) 
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:941) 
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:932) 
at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:384) 
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:451) 
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:632) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) 
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:538) 
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:478) 
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119) 
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:517) 
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:225) 
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:937) 
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:406) 
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:183) 
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:871) 
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117) 
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:110) 
at org.eclipse.jetty.server.Server.handle(Server.java:346) 
at org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:589) 
at org.eclipse.jetty.server.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:1048) 
at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:601) 
at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:214) 
at org.eclipse.jetty.server.HttpConnection.handle(HttpConnection.java:411) 
at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:535) 
at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:40) 
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:529) 
at java.lang.Thread.run(Thread.java:662) 

Tengo jndi.properties archivo para configurar mi InitialContext (que se encuentra en mi carpeta de recursos src/main/recursos)

java.naming.factory.url.pkgs=org.eclipse.jetty.jndi 
java.naming.factory.initial=org.eclipse.jetty.jndi.InitialContextFactory 

que también tienen un archivo muelle de una env.xml en la carpeta webapp/WEB-INF:

<Configure class="org.mortbay.jetty.webapp.WebAppContext"> 

<!--<Set name="ConfigurationClasses"> 
    <Ref id="plusConfig"/> 
</Set> --> 

<!-- MySql datasource org.eclipse.jetty.plus.jndi.Resource Factory--> 
<New id="DSTest" class="org.mortbay.jetty.plus.naming.Resource"> 
    <Arg></Arg> 
    <Arg>jdbc/DSTest</Arg> 
    <Arg> 
    <New class="com.mchange.v2.c3p0.ComboPooledDataSource"> 
     <Set name="driverClassName">com.mysql.jdbc.Driver</Set> 
     <Set name="url">jdbc:mysql://host/</Set> 
     <Set name="username">username</Set> 
     <Set name="password">password</Set> 
     <Set name="checkoutTimeout">5000</Set> 
     <Set name="initialPoolSize">10</Set> 
     <Set name="maxIdleTime">30</Set> 
     <Set name="maxPoolSize">160</Set> 
     <Set name="minPoolSize">10</Set> 
     <Set name="maxStatements">200</Set> 
     <Set name="maxConnectionAge">0</Set> 
     <Set name="acquireIncrement">15</Set> 
    </New> 
    </Arg> 
</New> 
</Configure> 

Y añadí estas líneas en mi Web.xml archivo:

<resource-ref> 
    <description>DB Connection</description> 
    <res-ref-name>jdbc/DSTest</res-ref-name> 
    <res-type>javax.sql.DataSource</res-type> 
    <res-auth>Container</res-auth> 
</resource-ref> 

me parece que han seguido todos los pasos necesarios, pero sigo teniendo un javax.naming.NameNotFoundException cuando se hace la búsqueda ...

¿Algún consejo?

Gracias!

EDIT: Olvidé poner cómo hago mi búsqueda.

InitialContext ctx = new InitialContext(); 
DataSource dataSource = (DataSource)ctx.lookup("java:comp/env/jdbc/DSTest"); 
+1

Quizás soy tonto, pero pruebe "jdbc/DSTest" como el nombre JNDI, no "env/jdbc/DSTest". – DwB

+0

Acabo de intentarlo, pero no tuve suerte:/ – Mathieu

+0

¿Estás utilizando Jetty 7 o Jetty 6? Parece que org.mortbay se cambió a org.eclipse en Jetty 7, pero tu clase de definición de recursos sigue siendo org.mortbay. ¿Podría ese ser el problema? –

Respuesta

2

pregunta estúpida, pero esta página http://docs.codehaus.org/display/JETTY/JNDI#JNDI-resref estados que utilizando JNDI con embarcadero es una característica opcional que necesita ser activado.

Específicamente, dice La clase que hace esto es org.mortbay.jetty.plus.webapp.Configuration, y especificamos su nombre en la lista de configuraciones que se aplicará a la aplicación web cuando definamos la org.mortbay. jetty.webapp.WebAppContext para ello.

+0

Sí, mi Jetty como se ha configurado. Gracias, sin embargo :) – Mathieu

Cuestiones relacionadas