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.
Glassfish 4.1 ACLSingletonProvider store singletons in Map<ClassLoader, T>, where map key is Classloader and calculated as Thread.currentThread().getContextClassLoader().
As a result, WELD can not find their Container implementation, if not set the correct thread context classloader.
Thanks,
Dmitry