1

Web アプリケーションを開発していますが、使用したことのない JTA を使用する必要があります。EntityManager を使い始めましたが、ここではうまくいかないようです。EntityManager を使用すると、次のメッセージが表示されます。

Only persistence units with transaction type JTA can be used as a container managed entity manager.

簡単に言うと、次のコードがあります。

@PersistenceContext(unitName = "zJSF2PU")
private EntityManager em;
em.getTransaction().begin();
//some code
em.getTransaction().commit();

EntityManagerなしでこれを行うにはどうすればよいですか?

4

3 に答える 3

1
  1. transaction-type="RESOURCE_LOCAL"persistence.xml から削除します。

  2. への呼び出しを削除しますem.getTransaction()。注入javax.transaction.UserTransaction(JTA) し、その begin/commit/rollback メソッドを使用します。または、代わりに EM をステートレス EJB に注入し、EJB コンテナーがトランザクションを自動的に管理できるようにします。

于 2013-03-16T20:10:30.383 に答える
1

ejb プロジェクトMETA-INF/persistence.xmlには、次のようなものが必要です。

<?xml version="1.0" encoding="UTF-8"?>
<persistence>
    <persistence-unit name="myPersistenceUnitNamePersonalised" transaction-type="JTA">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <jta-data-source>jdbc/MySQL</jta-data-source>
        <properties>
            <property name="eclipselink.ddl-generation" value="drop-and-create-tables" />
            <property name="eclipselink.ddl-generation.output-mode" value="database" />
        <property name="eclipselink.logging.level" value="FINE" />
        </properties>
    </persistence-unit>
</persistence>

Application Serverそして、これを(jboss、tomcat、glassfish) で宣言する必要があります。

データソースと永続化ユニットを追加する方法を検索する必要がありますApplication Server...

それだけです...彼らはjndiを介して通信します

于 2013-03-16T19:52:55.763 に答える
1

私はついに私の問題を解決することができました。たとえば、ManagedBeans 内で JTA を使用している場合、EntityManager を使用できないという結果になりました。ただし、ステートレス Bean で使用でき、このステートレス Bean を ManagedBean に注入して、そのメソッドを使用できます。手順は次のとおりです。

  • EJB (@Stateless アノテーションを持つ単純なクラス) を作成する

  • EntityManager を使用するメソッドを EJB に移動する

  • マネージド Bean に EJB を注入し (@EJB アノテーションを使用)、関連するメソッドを呼び出します。

詳細については、この別の投稿を参照してください: JTA & MySQL

于 2013-03-17T09:01:20.370 に答える