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;
}
/**