Hello,
I want to initialize a list from a database whenever an item is added/updated or removed.
In my Service Class I have the method below:
private static final List<MyClass> MY_LIST = new ArrayList<>();
@Inject
private Persistence persistence;
@Transactional
@Override
public void initMyClasses() {
log.info("Initialize MY_LIST");
EntityManager entityManager = persistence.getEntityManager();
List<MyClass> myClasses = entityManager.createQuery("select b from ash_MyClass b ").getResultList();
MY_LIST.addAll(myClasses);
}
Then I added a Changed Listener on MyClass entity to call initMyClasses everytime there is update/create/delete.
@Inject
private MyClassService myClassService;
@TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT)
public void afterCompletion(EntityChangedEvent<MyClass, UUID> event) {
myClassService.initMyClasses();
}
When I run the application and do any update on UI, I get this error.
java.lang.IllegalStateException: No active transaction for MAIN database
at com.haulmont.cuba.core.sys.PersistenceImpl.getEntityManager(PersistenceImpl.java:184) ~[cuba-core-7.2.4.jar:7.2.4]
at com.haulmont.cuba.core.sys.PersistenceImpl.getEntityManager(PersistenceImpl.java:164) ~[cuba-core-7.2.4.jar:7.2.4]