У меня проблема с настройкой конфигурации для JNDI с помощью Spring. Я проверил другие сообщения, но не смог решить свою проблему. Я использую Tomcat 6 в качестве контейнера. Насколько я понимаю, мне нужно настроить ресурс на сервере. Итак, в моем файле server.xml
у меня есть следующее:
<GlobalNamingResources>
<Resource auth="Container" driverClassName="org.postgresql.Driver"
maxActive="100" maxIdle="5" maxWait="10000"
minEvictableIdleTimeMillis="60000" name="jdbc/myTomcatPool"
password="password" testOnBorrow="true" testWhileIdle="true"
timeBetweenEvictionRunsMillis="10000" type="javax.sql.DataSource"
url="jdbc:postgresql://localhost:5432/postgis" username="postgres"
validationQuery="SELECT 1"/>
</GlobalNamingResources>
У меня есть следующее в моем spring-context.xml
(который находится в пути к классам):
<jee:jndi-lookup id="geoCodeData" jndi-name="java:comp/env/jdbc/myTomcatPool" />
<bean id="geoCodeService" class="com.sample.SampleImpl">
<property name="dataSource" ref="geoCodeData"/>
</bean>
Я затем иметь это в файле META-INF / context.xml
:
<Context path="/myApp" reloadable="true" cacheMaxSize="51200"
cacheObjectMaxSize="2560">
<ResourceLink global="jdbc/myTomcatPool" name="jdbc/myTomcatPool"
type="javax.sql.DataSource"/>
</Context>
Мой сервер запускается без ошибок.
Когда я пытаюсь запустить следующий тест (который работал до того, как я добавил код JNDI):
public class Test {
public static void main(String[] args) {
ApplicationContext ctx =
new ClassPathXmlApplicationContext("spring-context.xml");
}
}
Я получаю следующую ошибку:
Исключение в потоке "main" org.springframework.beans.factory.BeanCreationException: Ошибка при создании bean-компонента с именем 'geoCodeData': не удалось вызвать метод инициализации;
вложенное исключение - javax.naming.NoInitialContextException: необходимо указать имя класса в свойстве среды или системы, либо в качестве параметра апплета, либо в файле ресурсов приложения : java.naming.factory.initial
Моя конфигурация неправильная или я пытаюсь запустить тест неверно?