3

JDBC で EJB 3 を使用することは可能ですか。許可されているとどこかで読みました。

しかし、EJB 3 の実装はデフォルトで JTA を使用していると聞きました。これは JDBC にとって何を意味するのでしょうか? トランザクションサポートのみですか?JDBCコードを使用する場合、JTAがトランザクションに使用されるということですか? ローカル トランザクションでさえグローバル トランザクションとして実装されるということですか?

EJB 3 で JDBC を使用するのは得策ではないということですか? 多くの人が私に JPA を勧めますが、それは ORM です。SQLを使いたい。

助言がありますか?

4

3 に答える 3

3

JDBCコードを使用する場合、JTAがトランザクションに使用されることを意味しますか?

ローカル トランザクションでさえグローバル トランザクションとして実装されるということですか?

EJB コンテナーは、分散トランザクションが不要なエンタープライズ Bean の最適化手法として、リソース マネージャーのローカル トランザクションを使用できます。

宣言型またはプログラムによるトランザクション境界を使用する場合は、次のことを行うことをお勧めします。

  • エンタープライズ Bean クラスで Resource アノテーションを使用するか、エンタープライズ Bean のデプロイメント記述子で resource-ref 要素を使用して、リソースを宣言します。

(セッターメソッドまたはメンバーフィールド)のようなもの

// mappedName points to a global mapping name
@Resource(mappedName="java:/DefaultDS") 
private javax.sql.DataSource ds;

そして、ビジネスロジックメソッド内

  • 宣言型トランザクションを使用している場合

    接続 conn = ds.getConnection();

  • プログラムによるトランザクションを使用している場合

セッターまたはメンバー フィールドの UserTransaction を宣言する

@Resource 
private UserTransaction ut;

ut.beginTransaction();

Connection conn = ds.getConnection();

ut.commit();

次のことに注意してください

ステートフル セッション Bean を使用している場合は、PrePassivate コールバック メソッドで次の操作を行います。

  • PrePassivate メソッドですべての JDBC 接続を閉じ、接続を格納するインスタンスのフィールドを null に割り当てます。

よろしく、

于 2009-09-27T07:20:07.903 に答える
1

このページを見ると、EJB3 と JDBC を組み合わせることができるようです。

http://www.java2s.com/Tutorial/Java/0415__EJB3/UseJDBCInEJB.htm

于 2009-09-27T03:52:34.963 に答える