Hi guys,

just saw how javax.enterprise.inject.se.SeContainerInitializer#newInstance
has been implemented. I'm not sure it was based on the ref implementation
but - ignoring for now the OSGi issues - I don't think it works:

long exactSize = serviceLoader.spliterator().getExactSizeIfKnown();
if(exactSize == 0)
{
    throw new IllegalStateException("No valid implementation of
SeContainerInitializer found via ServiceLoader");
}
else if(exactSize > 1)
{
    throw new IllegalStateException("Multiple implementations
("+exactSize+") of SeContainerInitializer found via ServiceLoader");
}
return serviceLoader.iterator().next();


exactSize will be -1 since the splititerator doesnt have the size as a
characteristic so we'll always be not deterministic which seems not
intended.

Am I missing anything?

Do we want to use the old instance = next(); if (hasNext()) fail(); pattern?

Romain Manni-Bucau
@rmannibucau <https://twitter.com/rmannibucau> |  Blog
<https://blog-rmannibucau.rhcloud.com> | Old Blog
<http://rmannibucau.wordpress.com> | Github <https://github.com/rmannibucau> |
LinkedIn <https://www.linkedin.com/in/rmannibucau> | JavaEE Factory
<https://javaeefactory-rmannibucau.rhcloud.com>

Reply via email to