Я пытаюсь внедрить сеанс Hibernate в слушатель, запрограммированный для работы в рабочем потоке.
Итак, у меня есть событие такого типа.
public class SomeEvent {
public long id;
public Double value;
}
И я выталкиваю его из службы.
import javax.inject.Singleton;
import io.micronaut.context.event.ApplicationEventPublisher;
@Singleton
public class SomeService {
public void createAndPublish(Create payload) {
Record record = this.create(payload);
Long id = record.getId();
record.setValue(10);
assert id != null;
SomeEvent event = new SomeEvent();
event.id = id;
event.value = 10;
publisher.publishEvent(event);
}
}
А это мой слушатель
import javax.persistence.EntityManager;
import javax.inject.Singleton;
import io.micronaut.runtime.event.annotation.EventListener;
import io.micronaut.scheduling.annotation.Async;
import io.micronaut.spring.tx.annotation.Transactional;
import io.micronaut.configuration.hibernate.jpa.scope.CurrentSession;
@Singleton
public class SomeEventListener {
protected EntityManager em;
public SomeEventListener(@CurrentSession EntityManager em) {
this.em = em;
}
@Transactional
@EventListener
@Async
onSomeEvent(SomeEvent event) {
// Do something with event..
}
}
Но микронавт не смог создать сеанс Hibernate.
01:10:05.017 [pool-1-thread-3] ERROR i.micronaut.scheduling.TaskExecutors - Error occurred executing @Async method [void onSomeEvent(SomeEvent event)]: Error instantiating bean of type [org.hibernate.Session]: Could not obtain transaction-synchronized Session for current thread