PrimeFaces @PushEndpoint et @Inject problème
Bonjour,
J'ai un petit souci pour injecter un managed bean en @ApplicationScoped dans une ressource web socket de primefaces :
code XHTML :
Code:
1 2
|
<p:socket channel="/app/35"/> |
code du managedBean :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
package sav.twfjq.ejb.tool;
import java.io.Serializable;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Named;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Named
@ApplicationScoped
public class UserConnectionManager implements Serializable {
private final Logger logger = LoggerFactory.getLogger(UserConnectionManager.class);
@PostConstruct
public void postConstruct() {
logger.info("UserConnectionManager Create");
}
@PreDestroy
public void preDestroy() {
logger.info("UserConnectionManager Delete");
}
public void test(){
logger.info("ICIIIIIIII");
}
} |
Code de la resource web socket :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
|
package sav.twfjq.push;
import javax.inject.Inject;
import org.primefaces.push.EventBus;
import org.primefaces.push.RemoteEndpoint;
import org.primefaces.push.annotation.OnClose;
import org.primefaces.push.annotation.OnOpen;
import org.primefaces.push.annotation.PathParam;
import org.primefaces.push.annotation.PushEndpoint;
import org.primefaces.push.annotation.Singleton;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import sav.twfjq.ejb.tool.UserConnectionManager;
@PushEndpoint("/{app}/{user}")
@Singleton
public class MainResource {
private final Logger logger = LoggerFactory.getLogger(MainResource.class);
@PathParam("app")
private String app;
@PathParam("user")
private String user;
@Inject
private UserConnectionManager ucm;
@OnOpen
public void onOpen(RemoteEndpoint r, EventBus eventBus) {
logger.debug("Socket open : "+ user);
ucm.test();
}
@OnClose
public void onClose(RemoteEndpoint r, EventBus eventBus) {
logger.debug("Close");
}
} |
Tout se passe correctement jusqu'à l’exécution de la méthode "ucm.test();", (si j’enlève l'appel de cette méthode il n'y a plus de problème, j'ai l'impression qu'il n'arrive pas à injecter mon Managed Bean ) voici l'erreur :
INFO: twfjq - 2014-12-25 17:28:17 - DEBUG MainResource:37 - Socket open : 35
INFO: twfjq - 2014-12-25 17:28:17 - ERROR Invoker:54 -
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at org.atmosphere.config.managed.Invoker.invokeMethod(Invoker.java:49)
at org.primefaces.push.impl.PushEndpointHandlerProxy.invokeOpenOrClose(PushEndpointHandlerProxy.java:378)
at org.primefaces.push.impl.PushEndpointHandlerProxy$3.onSuspend(PushEndpointHandlerProxy.java:171)
at org.atmosphere.cpr.AtmosphereResourceImpl.onSuspend(AtmosphereResourceImpl.java:692)
at org.atmosphere.cpr.AtmosphereResourceImpl.notifyListeners(AtmosphereResourceImpl.java:625)
at org.atmosphere.cpr.AtmosphereResourceImpl.notifyListeners(AtmosphereResourceImpl.java:598)
at org.atmosphere.cpr.AtmosphereResourceImpl.suspend(AtmosphereResourceImpl.java:417)
at org.atmosphere.interceptor.AtmosphereResourceLifecycleInterceptor.postInspect(AtmosphereResourceLifecycleInterceptor.java:145)
at org.atmosphere.cpr.AsynchronousProcessor.postInterceptors(AsynchronousProcessor.java:344)
at org.atmosphere.cpr.AsynchronousProcessor.action(AsynchronousProcessor.java:213)
at org.atmosphere.cpr.AsynchronousProcessor.suspended(AsynchronousProcessor.java:104)
at org.atmosphere.container.GlassFishServ30WebSocketSupport.service(GlassFishServ30WebSocketSupport.java:60)
at org.atmosphere.cpr.AtmosphereFramework.doCometSupport(AtmosphereFramework.java:2079)
at org.atmosphere.websocket.DefaultWebSocketProcessor.dispatch(DefaultWebSocketProcessor.java:570)
at org.atmosphere.websocket.DefaultWebSocketProcessor.open(DefaultWebSocketProcessor.java:215)
at org.atmosphere.container.GlassFishServ30WebSocketSupport$Grizzly2WebSocketApplication.onConnect(GlassFishServ30WebSocketSupport.java:144)
at org.glassfish.grizzly.websockets.SimpleWebSocket.onConnect(SimpleWebSocket.java:135)
at org.glassfish.grizzly.websockets.WebSocketEngine.upgrade(WebSocketEngine.java:216)
at org.glassfish.grizzly.extras.addons.WebSocketAddOnProvider$GlassfishWebSocketFilter.doServerUpgrade(WebSocketAddOnProvider.java:118)
at org.glassfish.grizzly.websockets.WebSocketFilter.handleServerHandshake(WebSocketFilter.java:87)
at org.glassfish.grizzly.websockets.WebSocketFilter.handleHandshake(WebSocketFilter.java:68)
at org.glassfish.grizzly.websockets.BaseWebSocketFilter.handleRead(BaseWebSocketFilter.java:197)
at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112)
at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:561)
at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:565)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:545)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NullPointerException
at sav.twfjq.push.MainResource.onOpen(MainResource.java:38)
... 40 more
Merci d'avance pour vos solutions :)