Размещение тега Resource в файле conf/context.xml приводит к исключению, но это нормально, когда я помещаю его в META-INF/context.xml: почему это так?
Чтобы подключиться к базе данных derby, используя tomcat в качестве сервера, я добавил следующее conf/context.xml
Tomcat:
<Resource name="jdbc/PollDatasource" auth="Container" type="javax.sql.DataSource"
driverClassName="org.apache.derby.jdbc.ClientDriver"
url="jdbc:derby://localhost:1527/poll database;create=true"
username="suhail" password="suhail"
maxActive="20" maxIdle="10" maxWait="-1" />
и Resource-ref
тег в web.xml WEB-INF/web.xml
проекта.
<resource-ref>
<description>my connection</description>
<res-ref-name>jdbc/PollDatasource</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
Но когда я запустил сервлет, который должен был соединиться с базой данных, заявление:
connection = dataSource.getConnection();
вызвал исключение:
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'
Я еще не понял причину этого исключения.
После исключения я удалил Resource
тег из conf/context.xml
Tomcat и поместил его в META-INF/context.xml
моего проекта.
Когда я снова попробовал сервлет, он работал без каких-либо исключений!
Что может быть причиной того, что я получаю исключение, когда я помещаю Resource
тег внутри глобального файла context.xml (то есть внутри conf/context.xml), но не получаю исключение, когда я помещаю его в context.xml, специфичный для моего приложения? (т.е. внутри META-INF/context.xml)
1 ответ
Добавление <Resource>
в conf/context.xml
сделает копию этого ресурса доступной для каждого веб-приложения, которое вы развертываете на своем сервере - вероятно, не то, что вы хотите сделать. Если вы хотите <Resource>
чтобы быть глобально доступным, более уместно поместить его в conf/server.xml
под <GlobalNamiongResources>
,
Я ожидаю, что ошибка, которую вы получаете, заключается в том, что у вас нет нужного драйвера JDBC. Определение <Resource>
в conf/context.xml
может привести к использованию другого ClassLoader для загрузки вашего <Resource>
,