如何在基于Servlet的JPA应用程序中配置数据库连接

时间:2010-06-05 15:33:22

标签: java database deployment jpa java-ee

默认情况下,当应用程序未部署到完整的Java EE应用程序服务器时,JPA应用程序的DB连接在META-INF / persistence.xml中配置。在我看来,将这种特定于环境的配置放在.war文件中的文件中并不是很优雅。如何更加灵活地配置基于Servlet的JPA应用程序的数据库连接(= .war文件之外)?

4 个答案:

答案 0 :(得分:2)

您不会在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中定义DataSource,这是您实际的DataSource配置所在的位置。

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 :(得分:1)

在Servlet容器中,还使用数据源和非JTA(RESOURCE_LOCALpersistence.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>

答案 2 :(得分:0)

在persistence.xml中放置JNDI查找名称而不是原始连接参数。这会将实际的连接信息外部化,以便您可以在它所属的应用服务器中进行设置。

另一种方法可能是将连接参数放在数据库中。

答案 3 :(得分:0)

不确定它是否适用于您的提供商,这就是我使用的,

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