An interesting issue with the atmos library. I put the webSocket code in my Layout component and there are no issues when I navigate about between pages that wrap themselves in this layout. I do encounter a NullPointer when this Layout contains another Layout and then the page. To be more clear: MainPagesLayout -> MemberHomePage: works nicely. MainPagesLayout -> EmailLayout -> EmailInboxPage: throws NullPointer exception.
Stack below in case anyone has the time to look at it: 2014-May-28 16:31:36 internal.services.DefaultRequestExceptionHandler java.lang.NullPointerException at org.apache.tapestry5.json.JSONObject.printValue(JSONObject.java:887) at org.apache.tapestry5.json.JSONArray.print(JSONArray.java:436) at org.apache.tapestry5.json.JSONObject.printValue(JSONObject.java:859) at org.apache.tapestry5.json.JSONObject.print(JSONObject.java:830) at org.apache.tapestry5.json.JSONObject.printValue(JSONObject.java:853) at org.apache.tapestry5.json.JSONArray.print(JSONArray.java:436) at org.apache.tapestry5.json.JSONObject.printValue(JSONObject.java:859) at org.apache.tapestry5.json.JSONObject.print(JSONObject.java:830) at org.apache.tapestry5.json.JSONCollection.toString(JSONCollection.java:47) at org.apache.tapestry5.json.JSONCollection.toString(JSONCollection.java:63) at org.apache.tapestry5.internal.services.DocumentLinkerImpl.add(DocumentLinkerImpl.java:228) at org.apache.tapestry5.internal.services.DocumentLinkerImpl.add(DocumentLinkerImpl.java:219) at org.apache.tapestry5.internal.services.DocumentLinkerImpl.addDynamicScriptBlock(DocumentLinkerImpl.java:204) at org.apache.tapestry5.internal.services.DocumentLinkerImpl.addScriptElements(DocumentLinkerImpl.java:158) at org.apache.tapestry5.internal.services.DocumentLinkerImpl.updateDocument(DocumentLinkerImpl.java:123) at org.apache.tapestry5.services.TapestryModule$25.renderMarkup(TapestryModule.java:1898) at $MarkupRenderer_7643a5097d2.renderMarkup(Unknown Source) at $MarkupRenderer_7643a5097cd.renderMarkup(Unknown Source) at org.apache.tapestry5.internal.services.PageMarkupRendererImpl.renderPageMarkup(PageMarkupRendererImpl.java:47) at $PageMarkupRenderer_7643a5097cb.renderPageMarkup(Unknown Source) at org.apache.tapestry5.internal.services.PageResponseRendererImpl.renderPageResponse(PageResponseRendererImpl.java:67) at $PageResponseRenderer_7643a5097c7.renderPageResponse(Unknown Source) at org.apache.tapestry5.internal.services.PageRenderRequestHandlerImpl.handle(PageRenderRequestHandlerImpl.java:64) at org.apache.tapestry5.services.TapestryModule$38.handle(TapestryModule.java:2222) at $PageRenderRequestHandler_7643a5097c9.handle(Unknown Source) at $PageRenderRequestHandler_7643a509765.handle(Unknown Source) at org.apache.tapestry5.internal.services.ComponentRequestHandlerTerminator.handlePageRender(ComponentRequestHandlerTerminator.java:48) at org.apache.tapestry5.services.InitializeActivePageName.handlePageRender(InitializeActivePageName.java:47) at $ComponentRequestHandler_7643a509766.handlePageRender(Unknown Source) at com.ar.model.security.AdminProtectionFilter.handlePageRender(AdminProtectionFilter.java:54) at $ComponentRequestFilter_7643a509763.handlePageRender(Unknown Source) at $ComponentRequestHandler_7643a509766.handlePageRender(Unknown Source) at com.ar.model.security.PageProtectionFilter.handlePageRender(PageProtectionFilter.java:53) at $ComponentRequestFilter_7643a509762.handlePageRender(Unknown Source) at $ComponentRequestHandler_7643a509766.handlePageRender(Unknown Source) at org.lazan.t5.atmosphere.services.internal.PageGlobalsComponentRequestFilter.handlePageRender(PageGlobalsComponentRequestFilter.java:28) at $ComponentRequestHandler_7643a509766.handlePageRender(Unknown Source) at $ComponentRequestHandler_7643a50972c.handlePageRender(Unknown Source) at org.apache.tapestry5.internal.services.PageRenderDispatcher.dispatch(PageRenderDispatcher.java:45) at $Dispatcher_7643a50972f.dispatch(Unknown Source) at $Dispatcher_7643a509729.dispatch(Unknown Source) at org.apache.tapestry5.services.TapestryModule$RequestHandlerTerminator.service(TapestryModule.java:302) at org.apache.tapestry5.internal.services.RequestErrorFilter.service(RequestErrorFilter.java:26) at $RequestHandler_7643a50972a.service(Unknown Source) at org.apache.tapestry5.services.TapestryModule$3.service(TapestryModule.java:902) at $RequestHandler_7643a50972a.service(Unknown Source) at org.apache.tapestry5.services.TapestryModule$2.service(TapestryModule.java:892) at $RequestHandler_7643a50972a.service(Unknown Source) at org.apache.tapestry5.internal.services.StaticFilesFilter.service(StaticFilesFilter.java:90) at $RequestHandler_7643a50972a.service(Unknown Source) at com.ar.services.AppModule$1.service(AppModule.java:137) at $RequestFilter_7643a509724.service(Unknown Source) at $RequestHandler_7643a50972a.service(Unknown Source) at org.apache.tapestry5.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:105) at org.apache.tapestry5.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:95) at org.apache.tapestry5.ioc.internal.util.ConcurrentBarrier.withRead(ConcurrentBarrier.java:85) at org.apache.tapestry5.internal.services.CheckForUpdatesFilter.service(CheckForUpdatesFilter.java:119) at $RequestHandler_7643a50972a.service(Unknown Source) at $RequestHandler_7643a50971d.service(Unknown Source) at org.apache.tapestry5.services.TapestryModule$HttpServletRequestHandlerTerminator.service(TapestryModule.java:253) at org.apache.tapestry5.internal.gzip.GZipFilter.service(GZipFilter.java:53) at $HttpServletRequestHandler_7643a50971f.service(Unknown Source) at org.apache.tapestry5.upload.internal.services.MultipartServletRequestFilter.service(MultipartServletRequestFilter.java:44) at $HttpServletRequestHandler_7643a50971f.service(Unknown Source) at org.apache.tapestry5.internal.services.IgnoredPathsFilter.service(IgnoredPathsFilter.java:62) at $HttpServletRequestFilter_7643a50971b.service(Unknown Source) at $HttpServletRequestHandler_7643a50971f.service(Unknown Source) at org.lazan.t5.atmosphere.services.internal.HttpServletHttpServletRequestFilter.service(HttpServletHttpServletRequestFilter.java:72) at org.lazan.t5.atmosphere.services.internal.AtmosphereHttpServletRequestFilter.service(AtmosphereHttpServletRequestFilter.java:50) at $HttpServletRequestHandler_7643a50971f.service(Unknown Source) at org.apache.tapestry5.services.TapestryModule$1.service(TapestryModule.java:852) at $HttpServletRequestHandler_7643a50971f.service(Unknown Source) at $HttpServletRequestHandler_7643a509719.service(Unknown Source) at org.apache.tapestry5.TapestryFilter.doFilter(TapestryFilter.java:171) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1212) at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:399) at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:766) at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:450) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) at org.mortbay.jetty.Server.handle(Server.java:326) at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:928) at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:549) at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212) at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:410) at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582) Bogdan. On Wed, May 21, 2014 at 3:33 AM, Lance Java <lance.j...@googlemail.com>wrote: > I've implemented this feature in tapestry-cometd but it's not been > implemented in tapestry-atmosphere yet. I think it's only a couple of lines > of javascript. > > I have just updated the outstanding issue with a possible solution here: > https://github.com/uklance/tapestry-atmosphere/issues/5 > > Pull requests welcomed!! > On 21 May 2014 04:21, "Bogdan Ivascu" <ivascu.bogdan...@gmail.com> wrote: > > > I ended up using your atmosphere implementation and it works like a > charm, > > so many thanks for that. I have an additional questions though. When > > returning the block to the client, basically your ChatDemo class > > ( > > > > > https://github.com/uklance/tapestry-atmosphere/blob/master/tapestry-atmosphere-demo/src/main/java/org/lazan/t5/atmosphere/demo/pages/ChatDemo.java#L65 > > ) > > ->onChatMessage method, I want to be able to execute some client > > javascript > > that will parse a Long number and make it into a date using momentjs. > Where > > can I patch in this piece of code? I tried changing the return type of > the > > method to void and using AjaxRespRenderer to display the block and then > > call the javascript without much success. What would be a good solution > > here, listen on the client side for some event to be triggered or somehow > > make an ajax addScript() call from the server. > > > > Thanks, > > Bogdan. > > > > > > On Tue, May 13, 2014 at 12:15 PM, Bogdan Ivascu > > <ivascu.bogdan...@gmail.com>wrote: > > > > > Hi Lance, > > > I did see numerous discussions around your implementation. My goal > here > > > is to try and get a better understanding of where and how this > framework > > > can be extended. I am however pressed for time and if I cannot get it > to > > > work, I will most likely end up using your implementation. > > > > > > Thanks, > > > Bogdan. > > > > > > > > > On Tue, May 13, 2014 at 3:34 AM, Lance Java <lance.j...@googlemail.com > > >wrote: > > > > > >> Take a look at tapestry-atmosphere [1] and tapestry-cometd [2] > > >> > > >> [1] https://github.com/uklance/tapestry-atmosphere > > >> [2] https://github.com/uklance/tapestry-cometd > > >> On 13 May 2014 02:10, "Bogdan Ivascu" <ivascu.bogdan...@gmail.com> > > wrote: > > >> > > >> > Hi everyone, > > >> > I want to add webSocket support for my tapestry project and need a > > few > > >> > pointers. What I have is a dead simple Servlet, implementing the > java > > >> > WebSocket api. I would like to bring this servlet into my tapestry > > >> project > > >> > and have it managed by tapestry itself. To be more clear, I don't > want > > >> to > > >> > use the ignore path functionality to expose it, but rather have > > >> tapestry's > > >> > filter control the access to this servlet. > > >> > > > >> > The biggest problem that I have right now is that I don't have a > clear > > >> > understanding of what I need to do to make this happen. Will this > > >> servlet > > >> > be a service or a page with no tml, where would it sit, how do I > > >> configure > > >> > tapestry so that it knows to create a new instance for each request. > > >> > > > >> > A nudge of where I could document myself regarding this type of > > >> integration > > >> > would be most welcome. > > >> > > > >> > Thank you, > > >> > Bogdan. > > >> > > > >> > > > > > > > > >