You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by rm...@apache.org on 2017/07/02 13:12:31 UTC

svn commit: r1800562 - /geronimo/specs/trunk/geronimo-jcdi_2.0_spec/src/main/java/javax/enterprise/inject/se/SeContainerInitializer.java

Author: rmannibucau
Date: Sun Jul  2 13:12:31 2017
New Revision: 1800562

URL: http://svn.apache.org/viewvc?rev=1800562&view=rev
Log:
GERONIMO-6570 fixing SeContainerInitializer#newInstance to ensure we fail with multiple implementations

Modified:
    geronimo/specs/trunk/geronimo-jcdi_2.0_spec/src/main/java/javax/enterprise/inject/se/SeContainerInitializer.java

Modified: geronimo/specs/trunk/geronimo-jcdi_2.0_spec/src/main/java/javax/enterprise/inject/se/SeContainerInitializer.java
URL: http://svn.apache.org/viewvc/geronimo/specs/trunk/geronimo-jcdi_2.0_spec/src/main/java/javax/enterprise/inject/se/SeContainerInitializer.java?rev=1800562&r1=1800561&r2=1800562&view=diff
==============================================================================
--- geronimo/specs/trunk/geronimo-jcdi_2.0_spec/src/main/java/javax/enterprise/inject/se/SeContainerInitializer.java (original)
+++ geronimo/specs/trunk/geronimo-jcdi_2.0_spec/src/main/java/javax/enterprise/inject/se/SeContainerInitializer.java Sun Jul  2 13:12:31 2017
@@ -21,6 +21,7 @@ package javax.enterprise.inject.se;
 
 
 import java.lang.annotation.Annotation;
+import java.util.Iterator;
 import java.util.Map;
 import java.util.ServiceLoader;
 
@@ -43,18 +44,23 @@ public abstract class SeContainerInitial
      */
     public static SeContainerInitializer newInstance()
     {
-        ServiceLoader<SeContainerInitializer> serviceLoader =
-                ServiceLoader.load(SeContainerInitializer.class, SeContainerInitializer.class.getClassLoader());
-        long exactSize = serviceLoader.spliterator().getExactSizeIfKnown();
-        if(exactSize == 0)
+        // TODO: OSGi support -> ProviderLocator or is there something better these days?
+        final Iterator<SeContainerInitializer> serviceLoader =
+                ServiceLoader.load(SeContainerInitializer.class, SeContainerInitializer.class.getClassLoader())
+                .iterator();
+
+        if (!serviceLoader.hasNext())
         {
             throw new IllegalStateException("No valid implementation of SeContainerInitializer found via ServiceLoader");
         }
-        else if(exactSize > 1)
+
+        final SeContainerInitializer initializer = serviceLoader.next();
+        if (serviceLoader.hasNext())
         {
-            throw new IllegalStateException("Multiple implementations ("+exactSize+") of SeContainerInitializer found via ServiceLoader");
+            throw new IllegalStateException("Multiple implementations of SeContainerInitializer found via ServiceLoader");
         }
-        return serviceLoader.iterator().next();
+
+        return initializer;
     }
 
     /**