Как настроить соединение с БД в приложении JPA на основе сервлета - PullRequest
2 голосов
/ 05 июня 2010

По умолчанию соединения с БД приложений JPA настраиваются в META-INF / persistence.xml, когда приложение не развернуто на полном сервере приложений Java EE. На мой взгляд, не очень элегантно помещать такую ​​конфигурацию, специфичную для окружения, в файл, который находится внутри файла .war. Как настроить соединение с БД приложения JPA на основе сервлета более гибким (= вне .war-файла)?

Ответы [ 4 ]

2 голосов
/ 06 июня 2010

Вы не помещаете материал, специфичный для окружающей среды, в файл persistence.xml. Есть два уровня косвенности 1) В вашем файле persistence.xml будет что-то вроде ...

<persistence xmlns="http://java.sun.com/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
             version="2.0">
   <persistence-unit name="sample">
      <jta-data-source>java:comp/env/jdbc/DefaultDS</jta-data-source>
      <properties>
         <property name="hibernate.dialect" value="..."/>
         <property name="hibernate.hbm2ddl.auto" value="..."/>
      </properties>
   </persistence-unit>
</persistence>

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

2) В вашем файле CONTEXT.XML введите следующий код ...

<?xml version="1.0" encoding="UTF-8"?>

<Context>

  <Resource name="jdbc/DefaultDS" auth="Container"
            type="javax.sql.DataSource" username="wally" password="wally"
            driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" 
            url="jdbc:sqlserver://localhost;DatabaseName=mytest;SelectMethod=cursor;"
            maxActive="8" 
            />

</Context>
1 голос
/ 06 июня 2010

В контейнере сервлетов также используйте источник данных и не-JTA (RESOURCE_LOCAL) persistence.xml. Объявите ваш источник данных в элементе non-jta-data-source:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
 <persistence-unit name="myPU" transaction-type="RESOURCE_LOCAL">
   <non-jta-data-source>java:comp/env/ds/OracleDS</non-jta-data-source>
   <properties/>
 </persistence-unit>
0 голосов
/ 05 июня 2010

Не уверен, что это работает для вашего провайдера, это то, что я использую,

http://wiki.eclipse.org/EclipseLink/Examples/JPA/Tomcat_Web_Tutorial#JNDI_Datasource_Setup

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

Поместите имя поиска JNDI в файл persistence.xml вместо необработанных параметров соединения. Это экстернализует фактическую информацию о соединении, поэтому вы можете установить ее на сервере приложений, к которому она относится.

Другим способом сделать это может быть помещение параметров соединения в базу данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...