Why PushHandler does not set the right WebappClassLoader? CDI does not work

Hi,

Why
com.vaadin.server.communication.PushHandler.receiveCallback
does not set the right WebappClassLoader as current thread context classloader?

Because of this CDI injection (Glassfish 4.1) in event listeners does not work:

Severe:   java.lang.IllegalStateException: Singleton not set for org.glassfish.main.core.kernel [201]

    at org.glassfish.weld.ACLSingletonProvider$ACLSingleton.get(ACLSingletonProvider.java:112)
    at org.jboss.weld.Container.instance(Container.java:65)
    at org.jboss.weld.bean.proxy.ClientProxyProvider.createClientProxy(ClientProxyProvider.java:174)
    at org.jboss.weld.bean.proxy.ClientProxyProvider.createClientProxy(ClientProxyProvider.java:170)
    at org.jboss.weld.bean.proxy.ClientProxyProvider.access$100(ClientProxyProvider.java:45)
    at org.jboss.weld.bean.proxy.ClientProxyProvider$CreateClientProxy.load(ClientProxyProvider.java:56)
    at org.jboss.weld.bean.proxy.ClientProxyProvider$CreateClientProxy.load(ClientProxyProvider.java:52)
...

Weld looking for himself from Singleton get() method.


http://grepcode.com/file/repository.jboss.org/nexus/content/repositories/releases/org.jboss.weld/weld-core/2.2.9.Final/org/jboss/weld/Container.java/

Glassfish 4.1 ACLSingletonProvider store singletons in Map<ClassLoader, T>, where map key is Classloader and calculated as Thread.currentThread().getContextClassLoader().


http://grepcode.com/file/repo1.maven.org/maven2/org.glassfish.main.web/weld-integration/4.1/org/glassfish/weld/ACLSingletonProvider.java

As a result, WELD can not find their Container implementation, if not set the correct thread context classloader.

Thanks,
Dmitry