EJBは終わってる
■ このスレッドは過去ログ倉庫に格納されています
0390デフォルトの名無しさん
NGNGjava.sql.Connection オブジェクトの取得方法を勘違いしているんじゃないかな。
決して DriverManager.getConnection() でデータベース接続を取得してはだめ。
次のものの区別をつけて理解しよう。
・データベース接続(Connectionオブジェクト)
・データベースのコネクションプール
・データソース
・トランザクション
J2EE環境では、DriverManager.getConnection()で取得するわけじゃなくて、
次の順序で取得する。
(1) javax.sql.DataSource を JNDI で検索
(2) DataSource#getConnection() を呼ぶ
事前にDataSourceをJNDI上に公開しておく必要がある。
DataSourceにはデータベース接続を関連付けておく。
この関連付けられた接続が、一般的にコネクションプールとして設定される。
トランザクションは、JTAというAPIで管理される。
SessionBeanのメソッドにトランザクション境界を設定しておき、
例外時のロールバックなどはJ2EEコンテナに任せるのがいちばん楽チン。
入れ子のトランザクションを作成したい場合には、
SessionBeanのメソッド内で EJBContext から UserTransaction を取得して、
UserTransaction#begin()メソッドで開始する。
もちろん、このUserTransactionオブジェクト単位で commit/rollback できる。
J2EEに関する日本語の文献も山のようにあるから、理解できるまで何度も何度も読みましょう。
このトピックに限れば、JDBC、EJB、JTA、JTS あたりを読めばいいと思う。
■ このスレッドは過去ログ倉庫に格納されています