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
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?
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
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
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