Я пытаюсь настроить веб-приложения пула соединений 2 с использованием дескриптора контекста XML для двух отдельных путей и баз данных, но с тем же логическим кодом. Проблема заключается в том, что при использовании JNDI для поиска источника данных ресурсы переопределяются, когда причал загружает контекст, а приложения в конечном итоге используют одну и ту же базу данных. Вот моя конфигурация и код:Jetty - пул соединений для разных контекстов и базы данных, но тот же код поиска
Конфигурация для MyApp1.xml:
<New id="myDataBase" class="org.eclipse.jetty.plus.jndi.Resource">
<Arg></Arg>
<Arg>jdbc/myDataBase</Arg>
<Arg>
<New class="com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource">
<Set name="Url">jdbc:mysql://host:3306/mydb</Set>
<Set name="User">...</Set>
<Set name="Password">...</Set>
</New>
</Arg>
</New>
Конфигурация для MyApp2.xml
<New id="myDataBase" class="org.eclipse.jetty.plus.jndi.Resource">
<Arg></Arg>
<Arg>jdbc/myDataBase</Arg>
<Arg>
<New class="com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource">
<Set name="Url">jdbc:mysql://host:3306/mydb-test2</Set>
<Set name="User">...</Set>
<Set name="Password">...</Set>
</New>
</Arg>
</New>
код, используемый в приложениях:
public class MyDb {
...
static {
try {
datasource = (DataSource) new InitialContext().lookup("jdbc/myDataBase");
} catch (NamingException e) {
// ...
}
...
}
Так , контекст загрузочных нагрузок для MyApp1.xml, а затем MyApp2.xml. Когда я пытаюсь получить доступ к приложениям, они используют одну и ту же базу данных: mydb-test2.
Как я могу правильно решить эту проблему?
EDIT:
Я попытался добавить аргумент в конфигурации, но он не работает; странно, что теперь контексты оба используют первые сконфигурированные базы данных: MYDB
Это XML для каждого приложения:
<Configure id='wac1' class="org.eclipse.jetty.webapp.WebAppContext">
...
<New id="myDataBase" class="org.eclipse.jetty.plus.jndi.Resource">
<Arg><Ref refid='wac1'/></Arg>
<Arg>jdbc/myDataBase</Arg>
<Arg>
<New class="com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource">
<Set name="Url">jdbc:mysql://host:3306/mydb</Set>
<Set name="User">...</Set>
<Set name="Password">...</Set>
</New>
</Arg>
</New>
...
<Configure id='wac2' class="org.eclipse.jetty.webapp.WebAppContext">
...
<New id="myDataBase" class="org.eclipse.jetty.plus.jndi.Resource">
<Arg><Ref refid='wac2'/></Arg>
<Arg>jdbc/myDataBase</Arg>
<Arg>
<New class="com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource">
<Set name="Url">jdbc:mysql://host:3306/mydb-test2</Set>
<Set name="User">...</Set>
<Set name="Password">...</Set>
</New>
</Arg>
</New>
...
Что мне не хватает? Должен ли я изменить код (способ, которым я делаю поиск)?
Я попытался
datasource = (DataSource) new InitialContext().lookup("java:comp/env/jdbc/myDataBase");
, но я получаю javax.naming.NameNotFoundException - вероятно, потому, что я не использую ENV переменные, но я не думаю, что мне нужно, только в контексте поиска областей видимости)
EDIT 2:
Хорошо, так что я был на самом деле отсутствует web.xml конфигурации, которая решается вопрос (см http://www.eclipse.org/jetty/documentation/current/jndi-configuration.html#configuring-datasources)
<resource-ref>
<res-ref-name>jdbc/HugaDataBase</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
Спасибо за ваш ответ, но я не могу шов, чтобы он работал. Я прочитал документы относительно ссылки, и она должна работать, но я до сих пор не могу заставить приложения подключаться к различным базам данных. Я редактировал свой пост и добавил еще несколько данных. –
Думаю, вам действительно нужно добавить ресурс-ref в ваш web.xml. Вы пробовали это? Тогда java: comp/env кажется правильным и является тем, который вы должны использовать. – Roberg
Да, я пробовал это через несколько часов, и это сработало, я забыл опубликовать. Эта ссылка помогла: http://www.eclipse.org/jetty/documentation/current/jndi-configuration.html#configuring-datasources –