JAVA: как загрузить URL базы данных из web.xml? - PullRequest
3 голосов
/ 03 июня 2010

Я использую постоянный API и хочу загрузить jdbc URL из web.xml.URL должен быть контекстным параметром сервлета.Я не могу найти, как построить EntityManagerFactory, не используя persistence.xml.Может быть, я должен создать PersistenceUnit в сервлете и установить некоторые параметры?Не могли бы вы привести небольшой пример?

Спасибо

Ответы [ 5 ]

3 голосов
/ 03 июня 2010

Вы можете использовать метод createEntityManagerFactory(String persistenceUnitName, Map properties) класса javax.persistence.Persistence. и вставьте все свои параметры в карту

1 голос
/ 03 июня 2010

Независимо от того, используете ли вы источник данных или нет, конфигурация JPA указывается в persistence.xml, а не в web.xml. Если вы хотите использовать JPA, укажите persistence.xml.

1 голос
/ 03 июня 2010

Лично я считаю, что это самый чистый способ определения источника данных в контейнере сервлета с помощью JNDI и ссылки на него из файла persistence.xml.

Это также решает одну проблему конфигурации при переносе из test-uat-prod, поскольку я могу использовать одно и то же имя источника данных на машинах.

Да, я знаю, что JNDI не пользуется популярностью, но это хорошо работает, и в нем не нужно манипулировать hte web.xml, который также используется в войне.

0 голосов
/ 03 июня 2010

Определите init-param в вашем файле web.xml, который указывает на URL вашей базы данных. Например, для MySQL это будет примерно так:

<init-param>
    <param-name>DB_URL</param-name>
    <param-value>jdbc:mysql:///MY_DB</param-value>
</init-param>

Затем получите это значение в своем веб-приложении (в сервлете), используя что-то вроде этого:

String myDbUrl = getServletConfig().getInitParameter("DB_URL");

В файлах JSP вы можете получить значение следующим образом:

String myDbUrl  = config.getInitParameter("DB_URL");
0 голосов
/ 03 июня 2010

Вы можете получить любое значение из файла web.xml, используя env-entry

<env-entry>
    <env-entry-name>dbUrl</env-entry-name>
    <env-entry-type>java.lang.String</env-entry-type>
    <env-entry-value>jdbc:url:goes:here</env-entry-value>
</env-entry>

а в яве

try {
    Context ctx = new InitialContext();
    String dbUrl= (String) ctx.lookup("java:comp/env/dbUrl");

    //... create your connection
} catch (Exception e ) {

}
...