2011-11-01 34 views
9

CẬP NHẬT: Vâng, có vẻ như đây chỉ là vấn đề khi tôi cố gỡ lỗi cục bộ. Khi được xuất bản trên Jetty (không phải cùng một máy), nó hoạt động rất tốt. Có thể cấu hình tệp jetty.xml được Run-Jetty-Run sử dụng khi gỡ lỗi cục bộ không?tra cứu JNDI không thành công (NameNotFoundException)

Tôi chỉ lãng phí một buổi chiều cố gắng để tìm ra nguyên nhân của việc này, nhưng không thành công ...

Tôi đang thiết lập một hồ bơi kết nối với C3P0 cho ứng dụng của tôi. Tôi đang sử dụng Jetty 7, nhân tiện. Vấn đề là khi tôi làm một context.lookup có được một nguồn dữ liệu, tôi nhận được ngoại lệ này:

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) 

Tôi có một jndi.properties tập tin cấu hình InitialContext của tôi (nằm trong thư mục src tài nguyên của tôi/main/nguồn lực)

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

tôi cũng có một cầu cảng-env.xml tập tin trong thư mục 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> 

Và tôi đã thêm những dòng trong web.xml của tôi file:

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

tôi dường như đã theo tất cả các bước cần thiết, nhưng tôi vẫn có được một javax.naming.NameNotFoundException khi thực hiện tra cứu ...

Bất kỳ gợi ý nào?

Cảm ơn!

EDIT: Tôi quên đặt cách tôi tra cứu.

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

Có lẽ tôi ngớ ngẩn, nhưng hãy thử "jdbc/DSTest" làm tên JNDI, không phải là "env/jdbc/DSTest". – DwB

+0

Chỉ cần thử nó, nhưng không có may mắn:/ – Mathieu

+0

Bạn đang sử dụng Jetty 7 hoặc Jetty 6? Có vẻ như org.mortbay đã được thay đổi thành org.eclipse trong Jetty 7, nhưng lớp defintion Resource của bạn vẫn là org.mortbay. Có thể đó là vấn đề? –

Trả lời

2

Câu hỏi ngu ngốc nhưng trang này http://docs.codehaus.org/display/JETTY/JNDI#JNDI-resref nói rằng sử dụng JNDI với cầu tàu là tính năng tùy chọn cần được bật.

Cụ thể là nó nói Lớp thực hiện điều này là org.mortbay.jetty.plus.webapp.Configuration và chúng tôi chỉ định tên của nó trong danh sách các cấu hình được áp dụng cho webapp khi chúng tôi xác định org.mortbay. jetty.webapp.WebAppContext cho nó.

+0

Vâng, Cầu tàu của tôi đã được định cấu hình. Cảm ơn mặc dù :) – Mathieu