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");
私は次のシナリオに直面しています:
挿入と更新にトランザクションを使用しようとする
em.getTransaction().begin()/commit()
と、JTA ケースではトランザクションを使用できないと表示されます。したがって、私の 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 を調査していますが、そのような場合の特定のリファレンスがあれば、それらも読んで調べたいと思います。