2016-04-22 17 views
1

Ich arbeite an Seam zu CDI-Migration. Für die Datenbanktransaktion verwende ich Deltaspike, Javaee6. Ich habe die Anweisung in der Deltaspike mit JTA Dokument gefolgt.Deltaspike @Transactional funktioniert nicht

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

Ich versuche, Speichern Sie den Wert in der Datenbank mit @Transactional Annotation in Deltaspike. Ich habe keine Fehler gesehen, aber der Wert ist nicht in der Datenbank gespeichert.

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

Wer hat das gleiche Problem? Können Sie mir bitte helfen, dieses Problem zu beheben? Gibt es irgendeine Konfiguration, die ich verpasst habe?

+0

Es gibt in dieser Frage nicht genügend Informationen. Wenn der Wert nicht in der Datenbank gespeichert ist, haben Sie zurückverfolgt, um zu sehen, ob die erwarteten Methoden aufgerufen werden? Wird der EntityManager injiziert? Fangen Sie und quetschen Ausnahmen? Funktioniert es, wenn Sie EJB anstelle von CDI verwenden (nur Anmerkungen ändern)? – DavidS

+0

David, als Sie für die Antwort. Ich habe die Methodendetails in der Frage hinzugefügt und auch den Wert in der Konsole ausgegeben. Ich bin mir sicher, dass die Methode aufgerufen wurde. Für die Annotation, die ich Deltaspike Transactional verwende, importiere org.apache.deltaspike.jpa.api.transaction.Transactional; – Sudha

+0

Gutes Update, aber ich sehe nicht, dass Sie jemals Ihren 'entityManager' in' saveAccountComment' verwenden. Wurde es erfolgreich injiziert (nicht null)? Woher bekommst du 'acctInfo'? Kennen Sie die Verwendung von 'EntityManager'? – DavidS

Antwort

1

Didi Sie versuchen, es zu ermöglichen, in 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>