Источник данных JNDI с Tomcat 6 и Eclipse

Я не могу получить свой источник данных, работающий с JNDI и Tomcat 6, при запуске его из Eclipse. Я добавил контекст.xml для my / META-INF со следующим содержимым:

<Context>

<Resource name="jdbc/myDB" auth="Container" type="javax.sql.DataSource"
     username="root"
     password="root"
     driverClassName="com.mysql.jdbc.Driver"
     url="jdbc:mysql://localhost/database"
     maxActive="15"
     maxIdle="7"
     validationQuery="Select 1" />
</Context>

и настроил мой Spring Bean следующим образом:

<bean id="UserDatabase" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="jdbc/myDB"></property>
    <property name="lookupOnStartup" value="true"></property>
    <property name="cache" value="true"></property>
    <property name="proxyInterface" value="javax.sql.DataSource"></property>
</bean>

Я также добавил Эти строки в свою сеть.XML-код:

<resource-ref>
    <description>Connection Pool</description>
    <res-ref-name>jdbc/myDB</res-ref-name>
    <res-type>javax.sql.Datasource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>

но по какой-то причине я все еще получаю эту ошибку:

javax.naming.NameNotFoundException: The name jdbc is not associated to this context
at org.apache.naming.NamingContext.lookup(NamingContext.java:770)
at org.apache.naming.NamingContext.lookup(NamingContext.java:153)
at org.apache.naming.SelectorContext.lookup(SelectorContext.java:152)

Я не могу понять, почему это не работает... Есть идеи?

3 ответов


Я изменил следующее И теперь она работает:

в моем контексте.в XML завершено Context тег:

<Context docBase="myApp" path="/myApp" reloadable="true" source="org.eclipse.jst.jee.server:app">

и в URL соединения символ & причинил Cannot create resource ошибка, не знаю почему, поэтому мой URL теперь похож:

jdbc:mysql://localhost/database?useUnicode=true&amp;characterEncoding=utf-8

обратите внимание:&amp; int URL...


Если я правильно помню, вы должны получить к нему доступ как

<property name="jndiName" value="java:comp/env/jdbc/myDB"/>

в Spring appcontext замените свое определение на:

<bean id="dataSource" 
      class="org.springframework.jndi.JndiObjectFactoryBean">
      <property name="jndiName" 
                  value="java:comp/env/jdbc/myDB"/>    
      <property name="resourceRef" 
                  value="true" /> 
</bean>