2011-10-14 141 views
5

我即將與我的數據庫建立連接,並使用EJB和JPA。我最近開始做這些技術,所以我現在有一些問題了解這一點:) 我知道,爲了使用JPA,需要persistence.xml。這是我配置如何連接到數據庫的文件,我知道。但是,似乎有多種方式來做到這一點。關於JDBC資源和JDBC連接池的一些疑惑Glassfish

在persistence.xml文件和GlassFish中定義諸如用戶名,數據庫,密碼等屬性會有什麼區別(或者什麼時候應該使用另一種替代方法?)?優點/缺點,如果有的話。

我發佈的映像下面有JDBC資源和JDBC連接池。我對這兩者的術語感到困惑。爲什麼我們不在JDBC資源中添加諸如用戶名,數據庫,密碼等屬性?有人可以解釋他們之間的區別,他們是什麼意思?

JDBC資源

JDBC資源(數據源)爲應用程序提供的 連接到數據庫的裝置。通常,管理員爲在 域中部署的應用程序訪問的每個數據庫創建一個JDBC 資源。 (然而,多個JDBC資源可以爲 數據庫中創建的。) http://download.oracle.com/docs/cd/E19316-01/820-4335/ablih/index.html

我覺得很奇怪,我們的游泳池,但不是在資源添加這樣的特性,但我可能誤解的概念。

enter image description here

回答

6

在「JDBC連接池」,您可以創建容器管理的JDBC數據源(帶連接池功能)。數據源至少需要了解JDBC驅動程序,JDBC URL,用戶名和密碼。

在「JDBC資源」中,可以將這些容器管理的JDBC數據源綁定到一個或多個JNDI名稱,以便它們可以通過JNDI對部署的Web應用程序可用。

persistence.xml中,您可以指定是使用本地數據源還是使用容器管理的數據源。如果你想使用容器管理的數據源,那麼你應該指定它的JNDI名稱。使用容器管理的數據源具有可以在多個Web應用程序之間共享單個數據源的優點。在JPA的情況下,它還具有可以利用JTA(容器管理事務)的優點,因此您無需在每種方法中調用transaction.begin()commit()rollback()等。

+0

那麼你什麼時候在persistence.xml中設置屬性?當你在Java SE中有一個應用程序時?但除此之外,它本質上是相同的屬性,你可以在persistence.xml中定義? – LuckyLuke

+0

是的,只有在普通的香草Java SE應用程序中才有意義(例如,當您想單元測試您的JPA項目時)。在一個Java EE容器中,您真的很想爲容器管理的數據源提供JTA,這樣您的EJB就可以在事務上下文中很好地完成他們的工作。通常,在Web項目中提供另一個'persistence.xml',它繼承JPA項目中的類,並將事務類型重寫爲JTA,同時指定一個指向容器的JNDI名稱的託管數據源。 – BalusC

+0

Okey,那麼我想我開始明白了:) – LuckyLuke