Hi all
I noticed that there's a potential gap with BeanManagerProvider. I was
able to generate the following output when running a ShrinkWrap test with
the BeanManagerProvider:
Retrieved bmi null with classloader
org.jboss.shrinkwrap.api.classloader.ShrinkWrapClassLoader@2ab4bc72
Putting a new bmi
org.apache.deltaspike.core.api.provider.BeanManagerProvider$BeanManagerInfo@3d829787
Sep 08, 2014 12:19:22 AM
org.apache.deltaspike.core.impl.config.EnvironmentPropertyConfigSourceProvider
<init>
INFO: Custom config found by DeltaSpike. Name: 'se-example.properties',
URL:
'file:/Users/johnament/src/restful-and-beyond-tut2184/code/target/test-classes/se-example.properties'
{org.jboss.shrinkwrap.api.classloader.ShrinkWrapClassLoader@2ab4bc72
=org.apache.deltaspike.core.api.provider.BeanManagerProvider$BeanManagerInfo@3d829787
}
Retrieved bmi null with classloader
sun.misc.Launcher$AppClassLoader@6e0be858
Putting a new bmi
org.apache.deltaspike.core.api.provider.BeanManagerProvider$BeanManagerInfo@7278640c
Getting parent classloader based bean manager
Retrieved bmi null with classloader sun.misc.Launcher$ExtClassLoader@9f7fc43
Putting a new bmi
Sep 08, 2014 12:19:23 AM
org.apache.deltaspike.core.api.provider.BeanManagerProvider getBeanManager
This line here is especially weird, it's happening as the first line of my
test, yet it looks like afterwards I'm getting more BeanManagerInfo's
loaded.
I was able to work around this issue by adding the following check when
loading the bean manager:
synchronized (this)
{
bmi = bmpSingleton.bmInfos.get(cl);
if (bmi == null && bmpSingleton.bmInfos.isEmpty())
{
bmi = new BeanManagerInfo();
bmpSingleton.bmInfos.put(cl, bmi);
}
else
{
ClassLoader classLoader =
bmpSingleton.bmInfos.keySet().iterator().next();
bmi = bmpSingleton.bmInfos.get(classLoader);
}
}