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);
    }
}

Reply via email to