1

Seam から CDI への移行に取り組んでいます。データベース トランザクションには、Deltaspike、Javaee6 を使用しています。Deltaspike with JTA ドキュメントに記載されている指示に従いました。

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

誰も同じ問題に直面していますか?この問題を解決する方法を教えてください。私が見逃した設定はありますか?

4

1 に答える 1