JDBC Поиск JNDI начал давать сбой в моем приложении после того, как оно стало известно Spring.
- Настройка источника данных JDBC на tomcat правильная, поскольку приложение без пружины может подключаться с такой же настройкой.
- Попытка инициализировать JNDIFactoryBean в конфигурации пружины приложения.
<beans>
<bean id="myDb" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/myDb"/>
<property name="lookupOnStartup" value="true"/>
<property name="proxyInterface" value="javax.sql.DataSource"/>
</bean>
</beans>
Также предпринята попытка добавить ресурс-ref в web.xml приложения.
<resource-ref>
<res-ref-name>jdbc/myDb</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
</web-app>
С момента публикации этой темы также пробовал 'jee: jndi-lookup' в весеннем config.xml.
<jee:jndi-lookup expected-type="javax.sql.DataSource" id="myDb" jndi-name="java:comp/env/jdbc/myDb"/>
JDBC JNDI Setup Datasource Setup
CATALINA_HOME / conf / server.xml
<GlobalNamingResources>
......
<Resource auth="Container" driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" maxIdle="5" maxTotal="25" name="jdbc/myDb" password="ABDC" type="javax.sql.DataSource" url="jdbc:sqlserver://myServer:1233;databaseName=myDBdbdev" username="myUser"/>
</GlobalNamingResources>
CATALINA_HOME / conf / context.xml
<context>
<ResourceLink global="jdbc/myDb" name="jdbc/myDb" type="javax.sql.DataSource"/>
...
</context>
Ошибка StackTrace
javax.naming.NameNotFoundException: имя [jdbc / myDb] не связано в этом контексте. Невозможно найти [jdbc]. в org.apache.naming.NamingContext.lookup (NamingContext.java:833) в org.apache.naming.NamingContext.lookup (NamingContext.java:174) в org.apache.naming.SelectorContext.lookup (SelectorContext.java:163) на javax.naming.InitialContext.lookup (неизвестный источник) на com.abc.myapp.db.DataSourceFactory.createPool (DataSourceFactory.java:126) на com.abc.myapp.db.DataSourceFactory.init (DataSourceFactory.jav * 1036). *
Код для извлечения источника данных
InitialContext ctx = new InitialContext();
ds = (DataSource)ctx.lookup("jdbc/myDb");