Ich habe eine SpringBoot
-Anwendung, die SpringData
verwendet, um Daten auf einer Oracle-DB zu persistieren, und spring-boot-starter-activemq
, um JMS-Warteschlangen zu verarbeiten.Wie die Hibernate-Sitzung der JmsListener-Methode zugeordnet wird
Ich belichte einen DELETE
Rest WebService, der eine Weile dauert. Und ich möchte nicht, dass meine Benutzer an der Antwort hängen bleiben.
Also habe ich eine Methode hinzugefügt, die mit @JmsListener
annotiert ist, die den Job erledigt und ich rufe es mit jmsTemplate.convertAndSend()
.
Aber wenn der findAll()
Teil meiner Behandlung funktioniert perfekt, sobald ich Daten versuchen zuzugreifen (einfach zum Beispiel der Anzeige) mit der findAll()
Methode abgerufen Ich LazyLoadingException
auf meinen faulen Sammlungen gegenüber, sagte, dass ich nicht haben Hibernate-Sitzung Hier org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: ..., could not initialize proxy - no Session
ist ein Ausschnitt aus meinem Code, ob das hilft:
public void myMethod(int batchSize) {
// Send a JMS message with a POJO
LOGGER.trace("Calling JMS method...");
final JmsTemplate jmsTemplate = context.getBean(JmsTemplate.class);
jmsTemplate.convertAndSend("runJob", batchSize);
}
@JmsListener(destination = "runJob")
private void runJob(final int batchSize) {
LOGGER.debug("Calling runJob with batchSize {}", batchSize);
List<MyEntity> myEntities = myRepository.findAll();
LOGGER.debug("{} entities retrieved from the DB", myEntities.size()); // Prints the actual number of entities in my DB
for(Entity entity : entities){
LOGGER.debug("Entity name {}", entity.getName()); // Prints entity name
LOGGER.debug("Entity first collection's value {}", entity.getMyList().get(0).toString()); // org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: ..., could not initialize proxy - no Session
}
}
// -----------------------
// Full code of my repository -> The implementation is generated by spring-data http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods.query-creation
public interface MyRepository extends org.springframework.data.jpa.repository.JpaRepository<MyEntity, Long>{}
Ich möchte nur wissen, wie meine Session meiner Jms Methode angebracht zu halten.
Cheers, Olivier
Beschreiben Sie nicht Ihren Code und Ihre Ausnahme. Veröffentlichen Sie sie. –
@JBNizet hat gerade ein Code-Snippet hinzugefügt. Übrigens wurde die Ausnahme in meinem ursprünglichen Post (LazyLoadingException auf meinen faulen Sammlungen) aufgelistet und der Code (Anzeigedaten) war auch da. Ich könnte mich aber auf das konzentrieren, was wirklich wichtig ist: das Problem und nicht reiner Code. Wie auch immer, hier ist es. – Olivier