2016-04-22 10 views
1

SeamからCDIへの移行に取り組んでいます。データベーストランザクションの場合、私はDeltaspike、Javaee6を使用しています。私はJTAの文書でDeltaspikeで与えられた指示に従った。Deltaspike @トランザクションが動作していません

Deltaspike with JTA

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()); 
} 

誰でも同じ問題に直面しましたか?あなたはこの問題を解決するために私を導くことができますか?私が逃した構成はありますか?

+0

でそれを有効にしてみてください。値がデータベースに格納されていない場合は、期待どおりのメソッドが呼び出されているかどうかを調べます。 EntityManagerは注入されていますか?例外をキャッチしてスケルチしていますか? CDIではなくEJBを使用すると(アノテーションを変更するだけで)動作しますか? – DavidS

+0

David、あなたの回答よりも。私は質問にメソッドの詳細を追加して、コンソールに値を出力します。だから私はこのメソッドが呼び出されたと確信しています。アノテーションの場合、Deltaspike Transactionalを使用しています。インポートorg.apache.deltaspike.jpa.api.transaction.Transactional; – Sudha

+0

良い更新ですが、 'saveAccountComment'で' entityManager'を使ったことはありません。正常に注入されましたか(ヌルではありません)?どこから 'acctInfo'を取得していますか?あなたは 'EntityManager'の使い方に慣れていますか? – DavidS

答えて

1

ディディは、あなたはこの質問に十分な情報がありませんbeans.xmlの

<?xml version="1.0" encoding="UTF-8"?> 
<beans bean-discovery-mode="all" version="1.1" 
    xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"> 
    <interceptors> 
     <class>org.apache.deltaspike.jpa.impl.transaction.TransactionalInterceptor</class> 
    </interceptors> 
</beans> 
関連する問題