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 > > >
