2010-06-05 93 views
1

默認情況下,當應用程序未部署到完整Java EE應用程序服務器時,JPA應用程序的數據庫連接在META-INF/persistence.xml中配置。在我看來,將這種特定於環境的配置放置在.war文件內的文件中並不是很優雅。如何將基於Servlet的JPA應用程序的數據庫連接配置得更加靈活(= .war文件之外)?如何在基於Servlet的JPA應用程序中配置數據庫連接

回答

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中的數據源,這是你的地方實際的數據源配置將發生。

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> 
0

將JNDI查找名稱放入persistence.xml中,而不是原始連接參數。這將實際連接信息外部化,因此您可以將它設置在應用程序服務器中,它屬於哪個位置。

另一種方法可能是將連接參數放入數據庫中。

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> 
相關問題