hmm, can you test in a simple war please (== not an ear)?
*Romain Manni-Bucau* *Twitter: @rmannibucau* *Blog: **http://rmannibucau.wordpress.com/*<http://rmannibucau.wordpress.com/> *LinkedIn: **http://fr.linkedin.com/in/rmannibucau* 2012/9/25 Luca Merolla <[email protected]> > Here is the sample: > > * > > http://www.fileconvoy.com/dfl.php?id=g9c64757621dc468115011126f019deb361277a > * > * > * > Deployed under apps/Test.ear it should give the following errors: > > On Deployment I get this exception: which however I have already noticed in > other web app, but it doesn't seems to effect the CDI injection later when > the app is running. In the other web app I get similar exception but it's > only on deployment and then the @Inject works. > > http://pastebin.com/qvqn3WsD > > After deployment, If I try to establish the websocket connection and I get: > > Sep 25, 2012 4:36:42 PM > org.pokernuvola.galaxy.gametable.WebSocketGametableServlet > createWebSocketInbound > INFO: CREATE connection...FAIL > Sep 25, 2012 4:36:42 PM > org.pokernuvola.galaxy.gametable.GametableMessageInbound onOpen > INFO: Opening the connection |1| > Sep 25, 2012 4:36:42 PM > org.pokernuvola.galaxy.gametable.WebSocketGametableServlet > addGametableConnection > INFO: add connection...FAIL > Sep 25, 2012 4:36:52 PM > org.pokernuvola.galaxy.gametable.GametableMessageInbound onTextMessage > INFO: Got a message text! |Ping| > Sep 25, 2012 4:36:52 PM > org.apache.coyote.AbstractProtocol$AbstractConnectionHandler process > SEVERE: Error reading request, ignored > java.lang.NullPointerException > at > > org.pokernuvola.galaxy.gametable.WebSocketGametableServlet.processTextCommand(WebSocketGametableServlet.java:74) > at > > org.pokernuvola.galaxy.gametable.GametableMessageInbound.onTextMessage(GametableMessageInbound.java:35) > at > > org.apache.catalina.websocket.MessageInbound.onTextData(MessageInbound.java:74) > at > > org.apache.catalina.websocket.StreamInbound.doOnTextData(StreamInbound.java:186) > at > org.apache.catalina.websocket.StreamInbound.onData(StreamInbound.java:134) > at > > org.apache.coyote.http11.upgrade.UpgradeProcessor.upgradeDispatch(UpgradeProcessor.java:83) > at > > org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:583) > at > > org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310) > at > > java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) > at > > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) > at java.lang.Thread.run(Thread.java:662) > > > > On Tue, Sep 25, 2012 at 3:43 PM, Romain Manni-Bucau > <[email protected]>wrote: > > > can you share the sample please? > > > > *Romain Manni-Bucau* > > *Twitter: @rmannibucau* > > *Blog: **http://rmannibucau.wordpress.com/*< > > http://rmannibucau.wordpress.com/> > > *LinkedIn: **http://fr.linkedin.com/in/rmannibucau* > > > > > > > > > > 2012/9/25 Luca Merolla <[email protected]> > > > > > Hi everyone, > > > > > > I have noticed this blog entry > > > > > > > > > http://rmannibucau.wordpress.com/2012/05/15/tomee-or-how-to-use-websocket-with-cdi/ > > > and > > > I have compared to my solution which is very similar but on my case > since > > > CDI was not working I had to put some code in the init() method of my > > > servlet to retrieve the Beans, like this: > > > > > > jsonProvider = (JsonProviderBean) getServletContext().getAttribute( > > > GalaxyConstants.JSON_PROVIDER_BEAN); > > > processor = WebSocketConnectionProcessor.getInstance(jsonProvider); > > > > > > the jsonProvider was created in my ServletContextListener class and the > > > servlet was simply retrieving it. For the WebSocketConnectionProcessor > I > > > opted to make the class singleton and in this way it was working. > > > > > > Despite this solution, I have tried to follow the example from the blog > > of > > > Romain because I would like to inject the processor. > > > > > > @WebServlet(urlPatterns = "/gametable", asyncSupported = true, > > > loadOnStartup = 1) > > > public class WebSocketGametableServlet extends WebSocketServlet > > implements > > > IWebSocketServlet { > > > > > > private static final long serialVersionUID = -6573757123424131706L; > > > > > > protected final Logger LOGGER = LoggerFactory.getLogger(getClass() > > > .getName()); > > > > > > @Inject > > > private WebSocketGametableProcessor processor; > > > private JsonProviderBean jsonProvider; > > > > > > public void init() throws ServletException { > > > LOGGER.info("Initialize Lobby WebSocket servlet"); > > > super.init(); > > > > > > initializeWebSocketProcessor(); > > > LOGGER.info("Web Socket connection processor initialized"); > > > } > > > > > > /** > > > * Get the JSON provider bean from the servlet context and retrieve the > > > * {@link WebSocketGametableProcessor} instance > > > */ > > > private void initializeWebSocketProcessor() { > > > LOGGER.info("Getting the json provider bean"); > > > jsonProvider = (JsonProviderBean) getServletContext().getAttribute( > > > GalaxyConstants.JSON_PROVIDER_BEAN); > > > > > > // LOGGER.info("Getting the websocker processor instance"); > > > // processor = WebSocketGametableProcessor.getInstance(jsonProvider); > > > } > > > > > > /* > > > * (non-Javadoc) > > > * > > > * @see > > > * > org.apache.catalina.websocket.WebSocketServlet#createWebSocketInbound > > > * (java.lang.String, javax.servlet.http.HttpServletRequest) > > > */ > > > @Override > > > protected StreamInbound createWebSocketInbound(String arg0, > > > HttpServletRequest request) { > > > return new GametableMessageInbound(this, > > > (Long) request.getAttribute(WebSocketConstants.SESSION_ID)); > > > } > > > > > > @Override > > > public void addConnection(LobbyKey lobbyKey, > > > AbstractMessageInbound lobbyConnection) { > > > if (processor == null) > > > LOGGER.info("add connection...FAIL"); > > > else > > > LOGGER.info("add connection..."); > > > } > > > > > > @Override > > > public void removeConnection(LobbyKey lobbyKey, > > > AbstractMessageInbound lobbyConnection) { > > > if (processor == null) > > > LOGGER.info("remove connection...FAIL"); > > > else > > > LOGGER.info("remove connection..."); > > > } > > > > > > @Override > > > public void processTextCommand(String jsonCommand) { > > > processor.processWebsocketCommand(jsonCommand); > > > } > > > } > > > > > > The WebSocketGametableProcessor has no other dependencies > > > > > > public class WebSocketGametableProcessor { > > > > > > private static final Logger LOGGER = LoggerFactory > > > .getLogger(WebSocketGametableProcessor.class); > > > > > > private WebSocketGametableProcessor() { > > > > > > } > > > > > > public void processWebsocketCommand(String jsonCommand) { > > > LOGGER.info("Received json command |{}|", jsonCommand); > > > } > > > } > > > > > > And as result I have that the WebSocketGametableProcessor is null in > the > > > servlet. I was using the snapshot from last week, I have just run the > > > latest 1.5.1-SNAPSHOT and the issue persist. > > > > > > Luca > > > > > >
