1

JPA を使用して単純な JSP ベースの Web アプリケーションを開発しようとしていますが、それを開発するための正しい使用法を知りたいです。

サンプル アプリケーションには、データベース操作を実行するための 2 つの JSP ページと単純な Java クラスがあります。どちらの JSP ファイルも、この Java クラスを使用して DB 操作を実行します。

このクラスに注釈を付け@Stateless、次のようにエンティティ マネージャーを挿入しました。

@PersistenceContext(unitName = "myjpa") 
EntityManager em;

persistence.xmlは次のプロパティを設定しました:

<property 
    name="hibernate.transaction.jta.platform"
    value="org.hibernate.service.jta.platform.internal.JBossAppServerJtaPlatform"
/>

次のように、JNDI を使用して JSP でクラスを呼び出しています (クラスにはステートレス セッション Bean のアノテーションが付けられているため)。

InitialContext ic = new InitialContext();

Sample sample = (Sample) ic.lookup("java:app/" + application.getContextPath() + "/Sample");

私は次のシナリオに直面しています:

  1. 挿入と更新にトランザクションを使用しようとするem.getTransaction().begin()/commit()と、JTA ケースではトランザクションを使用できないと表示されます。

  2. したがって、私の Java クラスのコンストラクター コードでは、次のコードを使用します。

Properties properties = new Properties();

properties.put("javax.persistence.transactionType", "RESOURCE_LOCAL");

emf = Persistence.createEntityManagerFactory("myjpa",properties);

em = emf.createEntityManager();

のようなトランザクションを使用しようとしましたem.getTransaction().begin()/commit()。ただし、この場合、2 ~ 3 回のデータベース更新およびロード操作の後、ページが非常に遅くなります。例外はありませんが。私のテーブル全体では、25 未満のレコードしかありません。

私には、何らかの操作が完了するのを内部的に待っているように見えます。

同時に、JPA の使用方法が間違っていると感じているため、JSP と JPA を使用して単純な Web アプリケーションを実行するための正しいアプローチについてアドバイスを求めています。

私はまだ Java EE を調査していますが、そのような場合の特定のリファレンスがあれば、それらも読んで調べたいと思います。

4

2 に答える 2

1

コンテナがトランザクション境界を処理することを意味する JTA トランザクションを使用するよう常に努力する必要があります。あなたの場合、自分でトランザクションを処理したい場合は、Bean 管理のトランザクションとして定義する必要があります。したがって、EJB クラスでは、@Stateless アノテーションの後に、次のアノテーションを定義する必要があります。

@TransactionManagement(TransactionManagementType.BEAN)  

通常のベスト プラクティスは、Bean 管理のトランザクションを使用する明確な理由がない限り、コンテナーにトランザクションを処理させることです。

于 2013-04-16T10:58:38.583 に答える