GERONIMO-6570 fixing SeContainerInitializer#newInstance to ensure we fail with multiple implementations

git-svn-id: https://svn.apache.org/repos/asf/geronimo/specs/trunk@1800562 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/geronimo-jcdi_2.0_spec/src/main/java/javax/enterprise/inject/se/SeContainerInitializer.java b/geronimo-jcdi_2.0_spec/src/main/java/javax/enterprise/inject/se/SeContainerInitializer.java
index 6504061..2c2976d 100644
--- a/geronimo-jcdi_2.0_spec/src/main/java/javax/enterprise/inject/se/SeContainerInitializer.java
+++ b/geronimo-jcdi_2.0_spec/src/main/java/javax/enterprise/inject/se/SeContainerInitializer.java
@@ -21,6 +21,7 @@
 
 
 import java.lang.annotation.Annotation;
+import java.util.Iterator;
 import java.util.Map;
 import java.util.ServiceLoader;
 
@@ -43,18 +44,23 @@
      */
     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;
     }
 
     /**