Updated Branches:
  refs/heads/master 4a3da4053 -> f724794a4

DELTASPIKE-434 fixed RepositoryComponent


Project: http://git-wip-us.apache.org/repos/asf/deltaspike/repo
Commit: http://git-wip-us.apache.org/repos/asf/deltaspike/commit/f724794a
Tree: http://git-wip-us.apache.org/repos/asf/deltaspike/tree/f724794a
Diff: http://git-wip-us.apache.org/repos/asf/deltaspike/diff/f724794a

Branch: refs/heads/master
Commit: f724794a4d7e918c009f2d3282c4dd3282467c03
Parents: 4a3da40
Author: gpetracek <gpetra...@apache.org>
Authored: Fri Nov 1 22:15:00 2013 +0100
Committer: gpetracek <gpetra...@apache.org>
Committed: Fri Nov 1 22:15:37 2013 +0100

----------------------------------------------------------------------
 .../data/impl/RepositoryExtension.java          |  4 ++--
 .../data/impl/meta/RepositoryComponent.java     | 25 ++++++++++++++++++--
 .../data/impl/meta/RepositoryComponents.java    |  5 ++--
 .../data/impl/builder/part/QueryRootTest.java   |  4 ++--
 4 files changed, 29 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/deltaspike/blob/f724794a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/RepositoryExtension.java
----------------------------------------------------------------------
diff --git 
a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/RepositoryExtension.java
 
b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/RepositoryExtension.java
index 8ba0dca..ef098fd 100755
--- 
a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/RepositoryExtension.java
+++ 
b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/RepositoryExtension.java
@@ -63,7 +63,7 @@ public class RepositoryExtension implements Extension
         PersistenceUnits.instance().init();
     }
 
-    <X> void processAnnotatedType(@Observes ProcessAnnotatedType<X> event, 
BeanManager beanManager)
+    <X> void processAnnotatedType(@Observes ProcessAnnotatedType<X> event)
     {
         if (isRepository(event.getAnnotatedType()))
         {
@@ -72,7 +72,7 @@ public class RepositoryExtension implements Extension
             {
                 log.log(Level.FINER, "getHandlerClass: Repository annotation 
detected on {0}",
                         event.getAnnotatedType());
-                RepositoryComponentsFactory.instance().add(repoClass, 
beanManager);
+                RepositoryComponentsFactory.instance().add(repoClass);
             }
             catch (RepositoryDefinitionException e)
             {

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/f724794a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/RepositoryComponent.java
----------------------------------------------------------------------
diff --git 
a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/RepositoryComponent.java
 
b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/RepositoryComponent.java
index 5acee4e..2943555 100644
--- 
a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/RepositoryComponent.java
+++ 
b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/RepositoryComponent.java
@@ -34,6 +34,7 @@ import javax.enterprise.inject.spi.Bean;
 import javax.enterprise.inject.spi.BeanManager;
 import javax.persistence.FlushModeType;
 
+import org.apache.deltaspike.core.api.provider.BeanManagerProvider;
 import org.apache.deltaspike.data.api.EntityManagerConfig;
 import org.apache.deltaspike.data.api.EntityManagerResolver;
 import org.apache.deltaspike.data.api.Repository;
@@ -53,15 +54,16 @@ public class RepositoryComponent
 
     private static final Logger log = 
Logger.getLogger(RepositoryComponent.class.getName());
 
+    private volatile Boolean entityManagerResolverIsNormalScope;
+
     private final Class<?> repoClass;
     private final RepositoryEntity entityClass;
     private final Class<? extends EntityManagerResolver> entityManagerResolver;
-    private final boolean entityManagerResolverIsNormalScope;
     private final FlushModeType entityManagerFlushMode;
 
     private final Map<Method, RepositoryMethod> methods = new HashMap<Method, 
RepositoryMethod>();
 
-    public RepositoryComponent(Class<?> repoClass, RepositoryEntity 
entityClass, BeanManager beanManager)
+    public RepositoryComponent(Class<?> repoClass, RepositoryEntity 
entityClass)
     {
         if (entityClass == null)
         {
@@ -71,6 +73,23 @@ public class RepositoryComponent
         this.entityClass = entityClass;
         this.entityManagerResolver = extractEntityManagerResolver(repoClass);
         this.entityManagerFlushMode = extractEntityManagerFlushMode(repoClass);
+    }
+
+    //don't trigger this lookup during ProcessAnnotatedType
+    private void lazyInit()
+    {
+        if (entityManagerResolverIsNormalScope == null)
+        {
+            init(BeanManagerProvider.getInstance().getBeanManager());
+        }
+    }
+
+    private synchronized void init(BeanManager beanManager)
+    {
+        if (entityManagerResolverIsNormalScope != null)
+        {
+            return;
+        }
 
         if (entityManagerResolver != null && beanManager != null)
         {
@@ -88,6 +107,7 @@ public class RepositoryComponent
 
     public boolean isEntityManagerResolverIsNormalScope()
     {
+        lazyInit();
         return entityManagerResolverIsNormalScope;
     }
 
@@ -104,6 +124,7 @@ public class RepositoryComponent
      */
     public RepositoryMethod lookupMethod(Method method)
     {
+        lazyInit();
         return methods.get(method);
     }
 

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/f724794a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/RepositoryComponents.java
----------------------------------------------------------------------
diff --git 
a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/RepositoryComponents.java
 
b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/RepositoryComponents.java
index 1bc12db..1686e31 100644
--- 
a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/RepositoryComponents.java
+++ 
b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/RepositoryComponents.java
@@ -23,7 +23,6 @@ import 
org.apache.deltaspike.data.impl.meta.extractor.AnnotationMetadataExtracto
 import org.apache.deltaspike.data.impl.meta.extractor.MetadataExtractor;
 import org.apache.deltaspike.data.impl.meta.extractor.TypeMetadataExtractor;
 
-import javax.enterprise.inject.spi.BeanManager;
 import java.io.Serializable;
 import java.lang.reflect.Method;
 import java.util.Arrays;
@@ -52,10 +51,10 @@ public class RepositoryComponents implements Serializable
      * @param repoClass  The repo class.
      * @return {@code true} if Repository class has been added, {@code false} 
otherwise.
      */
-    public void add(Class<?> repoClass, BeanManager bm)
+    public void add(Class<?> repoClass)
     {
         RepositoryEntity entityClass = extractEntityMetaData(repoClass);
-        RepositoryComponent repo = new RepositoryComponent(repoClass, 
entityClass, bm);
+        RepositoryComponent repo = new RepositoryComponent(repoClass, 
entityClass);
         repos.put(repoClass, repo);
     }
 

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/f724794a/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/impl/builder/part/QueryRootTest.java
----------------------------------------------------------------------
diff --git 
a/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/impl/builder/part/QueryRootTest.java
 
b/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/impl/builder/part/QueryRootTest.java
index 1c70466..4279e62 100644
--- 
a/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/impl/builder/part/QueryRootTest.java
+++ 
b/deltaspike/modules/data/impl/src/test/java/org/apache/deltaspike/data/impl/builder/part/QueryRootTest.java
@@ -30,8 +30,8 @@ import org.junit.Test;
 
 public class QueryRootTest
 {
-    private final RepositoryComponent repo = new 
RepositoryComponent(SimpleRepository.class, new RepositoryEntity(Simple.class, 
Long.class), null);
-    private final RepositoryComponent repoFetchBy = new 
RepositoryComponent(SimpleFetchRepository.class, new 
RepositoryEntity(Simple.class, Long.class), null);
+    private final RepositoryComponent repo = new 
RepositoryComponent(SimpleRepository.class, new RepositoryEntity(Simple.class, 
Long.class));
+    private final RepositoryComponent repoFetchBy = new 
RepositoryComponent(SimpleFetchRepository.class, new 
RepositoryEntity(Simple.class, Long.class));
 
     @Test
     public void should_create_simple_query()

Reply via email to