5 Replies Latest reply on Aug 9, 2012 5:06 PM by gregdata

    a4j:push toomanyfiles

    gregdata

      Hello RichFaces experts,

       

      I am prototyping a website using RichFaces and the ajax push feature. It appears to be working ok, but I beleive I have a configuration issue with my combination of components. Each time a message is published two FIFO pipes are created. Eventually the number of pipes reaches the users open file limit. I think this should only use one set of pipes/resources for the connection, so I am suspecting the 'durablility' of my Topic. I was thinking of swapping application servers and/or message queue products, but I am running short on time. The combination of components are:

       

      GlassFish 3.1.2

      Open Message Queue 4.5.2

      java version "1.7.0"

      richfaces-4.1.0.Final

      CentOS 5.7 Linux 2.6.18-274.12.1.el5

       

       

      The relevent code fragements:

       

      Set up in the constructor:

       

      topicKey = new TopicKey(PUSH_TOPIC,pushName);

      topicsContext = TopicsContext.lookup();

      pushTopic = topicsContext.getOrCreateTopic(topicKey);

       

      Called from the test page:

       

      pushTopic.publish(topicKey, theMessage);

       

      Test page:

       

      <a4j:push

           address="#{TestPushTwo.pushName}@TestPushTopic"

           onerror="alert(event.rf.data)"

           ondataavailable="jQuery(#{rich:element('theMessage')}).text(event.rf.data)">

           <a4j:ajax event="dataavailable" render="thePanel" execute="@none"/>

      </a4j:push>

       

      # lsof -p 10075 | grep -E 'FIFO|COMMAND'

      COMMAND   PID USER   FD   TYPE             DEVICE     SIZE     NODE NAME

      .

      java    10075 greg  389u  FIFO                0,6            943806 pipe

      java    10075 greg  403w  FIFO                0,6            943806 pipe

       

      imqcmd list dst -b gregsworkstation:7676

      ------------------------------------------------------------------------------------------------

           Name       Type    State      Producers        Consumers                  Msgs              

                                      Total  Wildcard  Total  Wildcard  Count  Remote  UnAck  Avg Size

      ------------------------------------------------------------------------------------------------

      .

      TestPushTopic   Topic  RUNNING  0      0         1      0         0      0       0      0.0

      mq.sys.dmq      Queue  RUNNING  0      -         0      -         0      0       0      0.0

       

       

      Thanks in advance.

        • 1. Re: a4j:push toomanyfiles
          lfryc

          Greg, could you please try new version of RichFaces (4.2.1.Final), where Push was re-designed significantly?

          • 2. Re: a4j:push toomanyfiles
            gregdata

            Thank you Lukas, I have upgraded to 4.2.1.Final. I also upgraded to atmosphere-runtime-0.8.4.jar. Is this a compatible version? I beleive with Glassfish I also need the atmosphere*.8-SNAPSHOT.jar but after googling for 1/2 hour, have not found them. I'll look some more.

             

            My upgraded versions are now:

            Glassfish 3.1.2 b23

            with upgraded RichFaces and Atmosphere libraries:

             

            atmosphere-compat-jbossweb-0.9.0-SNAPSHOT.jar

            atmosphere-compat-jetty-0.9.0-SNAPSHOT.jar

            atmosphere-compat-tomcat-0.9.0-SNAPSHOT.jar

            atmosphere-compat-tomcat7-0.9.0-SNAPSHOT.jar

            atmosphere-compat-weblogic-0.9.0-SNAPSHOT.jar

            atmosphere-runtime-0.9.0-SNAPSHOT.jar

             

            richfaces-components-api-4.2.1.Final.jar

            richfaces-components-ui-4.2.1.Final.jar

            richfaces-core-api-4.2.1.Final.jar

            richfaces-core-impl-4.2.1.Final.jar

             

            I am now getting an error of No Servlet Defined in the Glassfish log file:

             

            TRACE AsynchronousProcessor:257 - Trying to map /[/a-zA-Z0-9-&=;\\?]+ to /__richfaces_push

            TRACE AsynchronousProcessor:257 - Trying to map /[/a-zA-Z0-9-&=;\\?]+ to /__richfaces_push/

            TRACE AsynchronousProcessor:257 - Trying to map /[/a-zA-Z0-9-&=;\\?]+ to /all

            TRACE AsynchronousProcessor:260 - Mapped /[/a-zA-Z0-9-&=;\\?]+ to AtmosphereHandlerWrapper{ atmosphereHandler=org.atmosphere.handler.ReflectorServletProcessor@2364643f, broadcaster=org.atmosphere.cpr.DefaultBroadcaster@334591552

             

                Name: /*

             

                Scope: APPLICATION

             

                BroasdcasterCache org.atmosphere.cpr.BroadcasterConfig$DefaultBroadcasterCache@518a6dfa

             

                AtmosphereResource: 0

            }

            ERROR ReflectorServletProcessor:171 - onRequest()

            javax.servlet.ServletException: No Servlet Defined

                at org.atmosphere.util.AtmosphereFilterChain.doFilter(AtmosphereFilterChain.java:172)

                at org.richfaces.webapp.PushHandlerFilter.doFilter(PushHandlerFilter.java:76)

                at org.atmosphere.util.AtmosphereFilterChain.doFilter(AtmosphereFilterChain.java:154)

                at org.atmosphere.util.AtmosphereFilterChain.invokeFilterChain(AtmosphereFilterChain.java:131)

                at org.atmosphere.handler.ReflectorServletProcessor$FilterChainServletWrapper.service(ReflectorServletProcessor.java:311)

                at org.atmosphere.handler.ReflectorServletProcessor.onRequest(ReflectorServletProcessor.java:169)

                at org.atmosphere.cpr.AsynchronousProcessor.action(AsynchronousProcessor.java:229)

                at org.atmosphere.cpr.AsynchronousProcessor.suspended(AsynchronousProcessor.java:165)

                at org.atmosphere.container.GrizzlyCometSupport.service(GrizzlyCometSupport.java:119)

                at org.atmosphere.container.GlassFishWebSocketSupport.service(GlassFishWebSocketSupport.java:120)

                at org.atmosphere.cpr.AtmosphereFramework.doCometSupport(AtmosphereFramework.java:1091)

                at org.atmosphere.cpr.AtmosphereServlet.doPost(AtmosphereServlet.java:297)

                at org.atmosphere.cpr.AtmosphereServlet.doGet(AtmosphereServlet.java:283)

                at javax.servlet.http.HttpServlet.service(HttpServlet.java:668)

                at javax.servlet.http.HttpServlet.service(HttpServlet.java:770)

                at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1542)

                at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)

                at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)

                at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)

                at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)

                at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161)

                at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331)

                at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)

                at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317)

                at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)

                at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:849)

                at com.sun.grizzly.comet.CometEngine.executeServlet(CometEngine.java:444)

                at com.sun.grizzly.comet.CometEngine.handle(CometEngine.java:308)

                at com.sun.grizzly.comet.CometAsyncFilter.doFilter(CometAsyncFilter.java:87)

                at com.sun.grizzly.arp.DefaultAsyncExecutor.invokeFilters(DefaultAsyncExecutor.java:171)

                at com.sun.grizzly.arp.DefaultAsyncExecutor.interrupt(DefaultAsyncExecutor.java:143)

                at com.sun.grizzly.arp.AsyncProcessorTask.doTask(AsyncProcessorTask.java:102)

                at com.sun.grizzly.http.TaskBase.run(TaskBase.java:193)

                at com.sun.grizzly.http.TaskBase.execute(TaskBase.java:175)

                at com.sun.grizzly.arp.DefaultAsyncHandler.handle(DefaultAsyncHandler.java:145)

                at com.sun.grizzly.arp.AsyncProtocolFilter.execute(AsyncProtocolFilter.java:210)

                at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)

                at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)

                at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)

                at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)

                at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)

                at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)

                at com.sun.grizzly.ContextTask.run(ContextTask.java:71)

                at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)

                at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)

                at java.lang.Thread.run(Thread.java:722)

            • 3. Re: a4j:push toomanyfiles
              lfryc

              Hi Greg, the version which should work is 0.8.4.

              • 4. Re: a4j:push toomanyfiles
                gregdata

                I replaced the atmosphere 9 libraries with:

                 

                atmosphere-compat-jbossweb-0.8.4.jar

                atmosphere-compat-jetty-0.8.4.jar

                atmosphere-compat-tomcat-0.8.4.jar

                atmosphere-compat-tomcat7-0.8.4.jar

                atmosphere-compat-weblogic-0.8.4.jar

                atmosphere-runtime-0.8.4.jar

                 

                behaviour and symptoms are back to the original post.

                • 5. Re: a4j:push toomanyfiles
                  gregdata

                  Hello,

                   

                  I revisited this problem and identified the area where the FIFO pipes are being created, which eventually leads to 'too many files open' error.

                   

                  1) I deployed Nick Belaevski's ChatBean example to JBoss to provide a functional base line. The example worked well with no FIFO pipe issues.

                  2) I deployed the same example to GlassFish and included the requried HornetQ jars. The example functioned the same as with JBoss but created a pair of FIFO pipes each time a chat message was sent.

                  3) So I ported my application from Glassfish to JBoss, learning lots about @Depends with @Startup as well as setContextClassLoader and getObject.

                   

                  In my case, the best solution was to drill down enough to identify how to avoid the problem.

                   

                  The environment my application runs on is now:

                   

                  JBoss AS 6.1.0.Final

                  HornetQ 2.2.5.Final

                  java version 1.7.0

                  richfaces-4.1.0.Final

                  CentOS 5.7 Linux 2.6.18-274.12.1.el5