Hi (again!)
Well, here's the jip, I don't know if I should report this here on in spring...so I'll do both :-)
Spring 2.5.2
Jetty 6.1.8
Java 1.5 update 6
JEE5
I have this jetty-env.xml in my WEB-INF dir (I've removed the tag braces since nabble fubars up the look)
Configure class="org.mortbay.jetty.webapp.WebAppContext"
New id="pmsDataSource" class="org.mortbay.jetty.plus.naming.Resource"
Arg jdbc/pmsDataSource Arg
Arg
New class="org.apache.commons.dbcp.BasicDataSource"
Set name="driverClassName">org.postgresql.Driver Set
Set name="url">jdbc:postgresql://production-db/reports Set
Set name="username">fu Set
Set name="password">bar Set
New
Arg
New
Configure
I've got this configured in my spring applicationContext.xml
jee:jndi-lookup id="pmsDataSource" jndi-name="jdbc/pmsDataSource"
If I switch on -DDEBUG for Jetty, I get these lines:
2008-03-14 11:54:15.595::DEBUG: parse: file:/C:/javastuff/jetty-6.1.8/webapps/root/WEB-INF/jetty-env.xml
2008-03-14 11:54:15.595::DEBUG: parsing: sid=file:/C:/javastuff/jetty-6.1.8/webapps/root/WEB-INF/jetty-env.xml,pid=null
So far so good (it's found the jetty-env.xml file), continuing onwards....more debug trace from jetty...
2008-03-14 11:54:15.626::DEBUG: >>> new root context requested
2008-03-14 11:54:15.626::DEBUG: Looking up name="comp/env"
2008-03-14 11:54:15.626::DEBUG: Looking up binding for comp for context=null
2008-03-14 11:54:15.626::DEBUG: Using classloader of current org.mortbay.jetty.handler.ContextHandler
2008-03-14 11:54:15.626::DEBUG: Looking up name="env"
2008-03-14 11:54:15.626::DEBUG: Looking up binding for env for context=comp
2008-03-14 11:54:15.626::DEBUG: Looking up name="org.mortbay.jetty.plus.naming.Resource"
2008-03-14 11:54:15.626::DEBUG: Looking up binding for org.mortbay.jetty.plus.naming.Resource for context=env
2008-03-14 11:54:15.626::DEBUG: Looking up binding for org.mortbay.jetty.plus.naming.Resource for context=env
2008-03-14 11:54:15.626::DEBUG: Adding binding with key=org.mortbay.jetty.plus.naming.Resource obj=org.mortbay.naming.NamingContext@10655dd for context=env
2008-03-14 11:54:15.626::DEBUG: Subcontext org.mortbay.jetty.plus.naming.Resource created
2008-03-14 11:54:15.626::DEBUG: Looking up name="jdbc"
2008-03-14 11:54:15.626::DEBUG: Looking up binding for jdbc for context=org.mortbay.jetty.plus.naming.Resource
2008-03-14 11:54:15.626::DEBUG: Looking up binding for jdbc for context=org.mortbay.jetty.plus.naming.Resource
2008-03-14 11:54:15.626::DEBUG: Adding binding with key=jdbc obj=org.mortbay.naming.NamingContext@ef5502 for context=org.mortbay.jetty.plus.naming.Resource
2008-03-14 11:54:15.641::DEBUG: Subcontext jdbc created
2008-03-14 11:54:15.641::DEBUG: Adding binding with key=pmsDataSource obj=org.mortbay.jetty.plus.naming.Resource@b61fd1 for context=jdbc
2008-03-14 11:54:15.641::DEBUG: Bound object to pmsDataSource
2008-03-14 11:54:15.641::DEBUG: Bound java:comp/env/org.mortbay.jetty.plus.naming.Resource/jdbc/pmsDataSource
2008-03-14 11:54:15.641::DEBUG: Looking up name="jdbc"
2008-03-14 11:54:15.641::DEBUG: Looking up binding for jdbc for context=env
2008-03-14 11:54:15.641::DEBUG: Looking up binding for jdbc for context=env
2008-03-14 11:54:15.641::DEBUG: Adding binding with key=jdbc obj=org.mortbay.naming.NamingContext@e2dae9 for context=env
2008-03-14 11:54:15.641::DEBUG: Subcontext jdbc created
2008-03-14 11:54:15.641::DEBUG: Adding binding with key=pmsDataSource obj=org.apache.commons.dbcp.BasicDataSource@13c1b02 for context=jdbc
2008-03-14 11:54:15.641::DEBUG: Bound object to pmsDataSource
2008-03-14 11:54:15.641::DEBUG: Bound java:comp/env/jdbc/pmsDataSource
2008-03-14 11:54:15.641::DEBUG: parse: file:/C:/javastuff/jetty-6.1.8/webapps/root/WEB-INF/web.xml
2008-03-14 11:54:15.641::DEBUG: parsing: sid=file:/C:/javastuff/jetty-6.1.8/webapps/root/WEB-INF/web.xml,pid=null
2008-03-14 11:54:16.720::DEBUG: loaded interface javax.servlet.ServletContextListener
Notice that according to Jetty, it's bound a JNDI reference jdbc/pmsDataSource, so, all good so far! However, shortly after Spring decides to complain when it tries to boot up:
2008-03-14 11:54:19,263 [main] ERROR (ContextLoader:214:initWebApplicationContext) - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'pmsDataSource': Invocation of init method failed; nested exception is
javax.naming.NameNotFoundException; remaining name 'jdbc/pmsDataSource'
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1302)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:463)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:404)
at java.security.AccessController.doPrivileged(Native Method)
You can see that Spring is upset. Note, that I've followed the example in the Spring docs, i.e:
http://static.springframework.org/spring/docs/2.5.x/reference/xsd-config.html#xsd-config-body-schemas-jee-jndi-lookupsection A.2.3.1. (look at the way the jdbc datasource is bound)
Now, If I change the spring applicationContext bean definition to:
jee:jndi-lookup id="pmsDataSource" jndi-name="java:comp/env/jdbc/pmsDataSource"
It works. It finds the JNDI reference.
Now, I don't know what is going on...is it spring or is it jetty?
TIA :)
-=david=-