1
SeamからCDIへの移行に取り組んでいます。データベーストランザクションの場合、私はDeltaspike、Javaee6を使用しています。私はJTAの文書でDeltaspikeで与えられた指示に従った。Deltaspike @トランザクションが動作していません
persistence.xmlの
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">
<persistence-unit name="XXXX" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>java:jboss/datasources/jdbc/XXXX</jta-data-source>
<properties>
<!-- property name="hibernate.hbm2ddl.auto" value="validate"/ -->
<property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider"/>
<property name="hibernate.cache.use_query_cache" value="false"/>
<!-- property name="hibernate.cache.use_second_level_cache" value="false"/-->
<property name="hibernate.show_sql" value="false"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/>
</properties>
ResourceProducer.java
@PersistenceUnit(unitName="XXXX")
private EntityManagerFactory entityManagerFactory;
@Produces
@Default
@RequestScoped
public EntityManager create()
{
return this.entityManagerFactory.createEntityManager();
}
public void dispose(@Disposes @Default EntityManager entityManager)
{
if (entityManager.isOpen())
{
entityManager.close();
}
}
私がしようとしていますDeltaspikeで@Transactionalアノテーションを使用して値をデータベースに格納します。エラーは見られませんでしたが、値はデータベースに保存されません。
@Named("accountDetailsAction")
@ConversationScoped
public class AccountDetailsAction implements Serializable {
@Inject
private EntityManager entityManager;
...
@Transactional
public void saveAccountComment() throws SystemException {
System.out.println("Entered into saveAccountComments method...");
Account acct = acctInfo.getAccount();
acct.setComment(accountForm.getCommentText());
Date lastEdited = new Date();
acct.setCommentLastEdited(lastEdited);
Officer lastEditor = utils.getOfficer();
acct.setCommentLastEditorEmployeeId(lastEditor.getEmployeeId());
accountForm.setLastEditDate(lastEdited);
accountForm.setLastEditor(lastEditor.getEmpIdAndFullName());
}
誰でも同じ問題に直面しましたか?あなたはこの問題を解決するために私を導くことができますか?私が逃した構成はありますか?
でそれを有効にしてみてください。値がデータベースに格納されていない場合は、期待どおりのメソッドが呼び出されているかどうかを調べます。 EntityManagerは注入されていますか?例外をキャッチしてスケルチしていますか? CDIではなくEJBを使用すると(アノテーションを変更するだけで)動作しますか? – DavidS
David、あなたの回答よりも。私は質問にメソッドの詳細を追加して、コンソールに値を出力します。だから私はこのメソッドが呼び出されたと確信しています。アノテーションの場合、Deltaspike Transactionalを使用しています。インポートorg.apache.deltaspike.jpa.api.transaction.Transactional; – Sudha
良い更新ですが、 'saveAccountComment'で' entityManager'を使ったことはありません。正常に注入されましたか(ヌルではありません)?どこから 'acctInfo'を取得していますか?あなたは 'EntityManager'の使い方に慣れていますか? – DavidS