Deltaspike @Transactional не работает

Я работаю над переходом Seam на CDI. Для транзакций с базой данных я использую Deltaspike, Javaee6. Я следовал инструкциям, данным в документе Deltaspike with JTA.

Deltaspike с JTA

постоянство.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
@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();
    }
}
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();
    }
}

Я пытаюсь сохранить значение в базе данных, используя аннотацию @Transactional в Deltaspike. Я не видел никаких ошибок, но значение не сохраняется в базе данных.

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

Кто-нибудь сталкивался с такой же проблемой? Не могли бы вы помочь мне решить эту проблему? Есть ли какая-либо конфигурация, которую я пропустил.


person Sudha    schedule 22.04.2016    source источник
comment
В этом вопросе недостаточно информации. Если значение не хранится в базе данных, проследили ли вы, вызываются ли ожидаемые методы? Вводится ли EntityManager? Вы ловите и подавляете исключения? Работает ли это, если вы используете EJB вместо CDI (просто измените аннотации)?   -  person DavidS    schedule 22.04.2016
comment
Давид, Спасибо за ответ. Я добавил детали метода в вопрос, и он печатает значение в консоли. Поэтому я уверен, что метод был вызван. Для аннотации я использую Deltaspike Transactional, import org.apache.deltaspike.jpa.api.transaction.Transactional;   -  person Sudha    schedule 22.04.2016
comment
Хорошее обновление, но я не вижу, чтобы вы использовали entityManager в saveAccountComment. Был ли он успешно введен (не нуль)? Откуда вы получаете acctInfo? Вы знакомы с использованием EntityManager?   -  person DavidS    schedule 22.04.2016
comment
Давид, Спасибо за вашу помощь и правильный ответ. Класс, в котором я тестировал, очень большой. Я проверил в другом месте, он работает нормально. @Transactional работает. Спасибо еще раз !!!   -  person Sudha    schedule 22.04.2016
comment
Не беспокойтесь, рад, что вы поняли это. Спасибо, что дали мне знать.   -  person DavidS    schedule 22.04.2016


Ответы (1)


Didi Вы пытаетесь включить его в 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>
person Igor Vuković    schedule 15.12.2016