diff -ruN orig/JpaSagaRepository.java new/JpaSagaRepository.java
--- orig/JpaSagaRepository.java 2011-09-21 07:48:47.000000000 -0700
+++ new/JpaSagaRepository.java 2011-09-21 07:45:35.000000000 -0700
@@ -17,9 +17,21 @@
package org.axonframework.saga.repository.jpa;
import java.util.List;
+import java.util.Set;
-import javax.annotation.PostConstruct;
import javax.annotation.Resource;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+import org.axonframework.saga.AssociationValue;
+import org.axonframework.saga.NoSuchSagaException;
+import org.axonframework.saga.ResourceInjector;
+import org.axonframework.saga.Saga;
+import org.axonframework.saga.repository.AbstractSagaRepository;
+import org.axonframework.saga.repository.JavaSagaSerializer;
+import org.axonframework.saga.repository.SagaSerializer;
+import org.axonframework.saga.repository.jpa.AssociationValueEntry;
+import org.axonframework.saga.repository.jpa.SagaEntry;
/**
* JPA implementation of the Saga Repository. It uses an {@link EntityManager}
@@ -38,6 +50,7 @@
private ResourceInjector injector;
private SagaSerializer serializer;
private volatile boolean useExplicitFlush = true;
+ private boolean initialised = false;
/**
* Initializes a Saga Repository with a JavaSagaSerializer
.
@@ -46,13 +59,28 @@
this.serializer = new JavaSagaSerializer();
}
+ @Override
+ public void add(Saga saga) {
+ if (!this.initialised) {
+ initialize();
+ }
+ super.add(saga);
+ }
+
+ @Override
+ public Set find(Class type, Set associationValues) {
+ if (!this.initialised) {
+ initialize();
+ }
+ return super.find(type, associationValues);
+ }
+
/**
* Initializes the repository by loading all AssociationValues in memory.
* Failure to initialize properly might result in Saga instance not being
* found based on their AssociationValue
s.
*/
@SuppressWarnings({ "unchecked" })
- @PostConstruct
public void initialize() {
List entries = this.entityManager.createQuery(
"SELECT ae FROM AssociationValueEntry ae").getResultList();
@@ -61,6 +89,7 @@
AssociationValue associationValue = entry.getAssociationValue(this.serializer);
getAssociationValueMap().add(associationValue, entry.getSagaIdentifier());
}
+ this.initialised = true;
}
@Override