2011-10-14 20 views
5

私は自分のデータベースに接続しようとしており、EJBとJPAを使用しています。私は最近、これらの技術をやっているので、私はいくつかの問題をこの時点ですべて理解しています:) JPAを使うためにはpersistence.xmlが必要であることは知っています。それは私が知っているデータベースに接続する方法を設定するファイルです。しかし、それを行う方法は複数あるようです。JDBCリソースとJDBC接続プールを取り巻く混乱Glassfish

usernameやdatabase、passwordなどのプロパティをpersistence.xmlファイルやGlassfishに定義するのはどういう違いがありますか?もしあれば利点/欠点。

私が投稿した画像の下に、JDBCリソースとJDBC接続プールがあります。私は両者の用語について混乱している。なぜJDBCリソースにユーザー名、データベース、パスワードなどのプロパティを追加しないのですか?誰かがその違いとその意味を説明できますか?

JDBCリソース

A JDBCリソース(データソース)データベースに接続 の手段をアプリケーションに提供します。通常、管理者は ドメインにデプロイされたアプリケーションによってアクセスされるデータベースごとにJDBC リソースを作成します。 (ただし、複数のJDBCリソースが データベース用に作成することができます。) http://download.oracle.com/docs/cd/E19316-01/820-4335/ablih/index.html

私はそれが奇妙な私たちはプールではなく、リソースで、このような性質を追加すると思いますが、私はおそらく概念を誤解します。あなたは、コンテナを作成することができ、「JDBC接続プール」で

enter image description here

答えて

6

は(接続プーリング機能を備えた)JDBCデータソースを管理していました。データソースは、少なくともJDBCドライバ、JDBC URL、ユーザー名、およびパスワードについて知る必要があります。

「JDBCリソース」では、これらのコンテナ管理JDBCデータソースを1つ以上のJNDI名にバインドして、デプロイされたWebアプリケーションでJNDIを使用できるようにすることができます。

persistence.xmlでは、ローカルデータソースを使用するか、コンテナ管理データソースを使用するかを指定できます。コンテナ管理のデータソースを使用する場合は、そのJNDI名を指定する必要があります。コンテナ管理のデータソースを使用すると、複数のWebアプリケーション間で単一のデータソースを共有できるという利点があります。 JPAの場合は、すべてのメソッドでtransaction.begin()commit()rollback()などを呼び出す必要がないように、JTA(コンテナ管理のトランザクション)を使用できるという利点もあります。

+0

したがって、いつpersistence.xmlにプロパティを設定しますか? Java SEでアプリケーションを使用しているときは?しかしそれ以外の場合は本質的に同じプロパティなので、persistence.xmlで定義できますか? – LuckyLuke

+0

はい、プレーンなバニラJava SEアプリケーションでのみ意味があります(たとえば、JPAプロジェクトの単体テストを行う場合など)。 Java EEコンテナでは、コンテナ管理のデータソースを使用してJTAを実際に使いたいので、EJBがトランザクションコンテキストでうまく機能できるようにします。通常、JPAプロジェクトからクラスを継承し、JTAになるようにトランザクションタイプをオーバーライドする、コンテナのJNDI名を指し示す ''と一緒にWebプロジェクトに別の 'persistence.xml'を提供します管理されたデータソース。 – BalusC

+0

Okey、それから私はそれを理解し始めると思う:) – LuckyLuke