0

I am developing a counter example application with PrimePush technology. I'm using Promefaces 5.0 and Atmosphere 2.1.6 under Jboss 7.1.1

I discovered that with Primefaces 3.4.2 and atmosphere 1.0.8 Push works. But i must use primefaces 5.0

So I'm using official Primefaces counter example

@ManagedBean
@ApplicationScoped
public class GlobalCounterView implements Serializable{

    private volatile int count;

    public int getCount() {
        return count;
    }

    public void setCount(int count) {
        this.count = count;
    }

    public void increment() {
        count++;

        EventBus eventBus = EventBusFactory.getDefault().eventBus();
        eventBus.publish("/counter", String.valueOf(count));
    }
}

Here's my web.xml

<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
    <async-supported>true</async-supported>
</servlet>
<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.jsf</url-pattern>
</servlet-mapping>
<servlet>
    <servlet-name>Push Servlet</servlet-name>
    <servlet-class>org.primefaces.push.PushServlet</servlet-class>
    <init-param>
        <param-name>org.atmosphere.useWebSocket</param-name>
        <param-value>false</param-value>
    </init-param>
    <init-param>
        <param-name>org.atmosphere.cpr.sessionSupport</param-name>
        <param-value>true</param-value>
    </init-param>
    <init-param>
        <param-name>org.atmosphere.useNative</param-name>
        <param-value>true</param-value>
    </init-param>
    <init-param>
        <param-name>org.atmosphere.cpr.broadcasterCacheClass</param-name>
        <param-value>org.atmosphere.cache.HeaderBroadcasterCache</param-value>
    </init-param>
    <init-param>
        <param-name>org.atmosphere.cpr.broadcastFilterClasses</param-name>
        <param-value>org.atmosphere.client.TrackMessageSizeFilter</param-value>
    </init-param>
    <init-param>
        <param-name>org.atmosphere.resumeOnBroadcast</param-name>
        <param-value>true</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
    <async-supported>true</async-supported>
</servlet>
<servlet-mapping>
    <servlet-name>Push Servlet</servlet-name>
    <url-pattern>/primepush/*</url-pattern>
</servlet-mapping>

then I've configured Jboss to use the Advanced IO

<subsystem xmlns="urn:jboss:domain:web:1.1" default-virtual-server="default-host" native="true">

But when I deploy the application and click on count button I get these errors

10:31:50,019 INFO  [org.atmosphere.cpr.AtmosphereFramework] (MSC service thread 1-8) Installed     AtmosphereInterceptor @PushEndpoint Interceptor with priority AFTER_DEFAULT 
10:31:50,031 INFO  [org.jboss.web] (MSC service thread 1-8) JBAS018210: Registering web context:      /pushcomment
10:31:51,515 INFO  [org.atmosphere.cpr.AtmosphereFramework] (Thread-71) Latest version of Atmosphere's JavaScript Client 2.2.2
10:33:03,976 INFO  [org.hibernate.validator.util.Version] (http-localhost-127.0.0.1-8080-2) Hibernate Validator 4.2.0.Final
10:33:05,594 ERROR [org.atmosphere.container.JBossWebCometSupport] (http-localhost-127.0.0.1-8080-1) HttpEvent is null, JBoss APR Not Properly installed
10:33:05,595 WARN  [org.atmosphere.cpr.AtmosphereFramework] (http-localhost-127.0.0.1-8080-1) Failed using comet support: org.atmosphere.container.JBossWebCometSupport, error: JBoss failed to detect this is a Comet application because the APR Connector is not enabled. 
Make sure atmosphere-compat-jboss.jar is not under your WEB-INF/lib and You must use the  atmosphere- native-runtime dependency in order to use native Comet Support
there is no context.xml under WEB-INF Is the NIO or APR Connector enabled?
10:33:05,598 ERROR [org.atmosphere.cpr.AtmosphereFramework] (http-localhost-127.0.0.1-8080-1) If   you have more than one Connector enabled, make sure they both use the same protocol, e.g NIO/APR or   HTTP for all. If not, org.atmosphere.container.BlockingIOCometSupport will be used and cannot be   changed.
10:33:05,601 WARN  [org.atmosphere.cpr.AtmosphereFramework] (http-localhost-127.0.0.1-8080-1) Using org.atmosphere.container.BlockingIOCometSupport
10:33:05,603 ERROR [org.atmosphere.cpr.AsynchronousProcessor] (http-localhost-127.0.0.1-8080-1) Invalid request state. Websocket protocol not supported

Can I use PrimePush with this configuration? If I can't, is there another way to push data to a web page in jboss 7.1.1?

ROMANIA_engineer
  • 54,432
  • 29
  • 203
  • 199
Antonio Foglia
  • 77
  • 2
  • 10

2 Answers2

1

I got this running with following versions and configuration:

Primefaces 5.0, JBoss 7.1, Atmosphere 2.1.3

web.xml

<servlet>
    <servlet-name>PrimePushServlet</servlet-name>
    <servlet-class>org.primefaces.push.PushServlet</servlet-class>
    <async-supported>true</async-supported>
    <init-param>
        <param-name>org.atmosphere.cpr.broadcasterCacheClass</param-name>
        <param-value>org.atmosphere.cache.UUIDBroadcasterCache</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>PrimePushServlet</servlet-name>
    <url-pattern>/primepush/*</url-pattern>
</servlet-mapping>

Logfile states

08:57:36,055 INFO  [org.atmosphere.cpr.AtmosphereFramework] (http--0.0.0.0-8080-2) Atmosphere Framework 2.1.3 started.
08:57:36,055 INFO  [org.atmosphere.cpr.AtmosphereFramework] (http--0.0.0.0-8080-2) 
For Atmosphere Framework Commercial Support, visit 
http://www.async-io.org/ or send an email to support@async-io.org
08:57:36,056 INFO  [org.atmosphere.cpr.AtmosphereFramework] (http--0.0.0.0-8080-2) Installed AtmosphereInterceptor @PushEndpoint Interceptor with priority AFTER_DEFAULT 
08:57:36,057 ERROR [org.atmosphere.container.JBossWebCometSupport] (http--0.0.0.0-8080-2) HttpEvent is null, JBoss APR Not Properly installed
08:57:36,057 WARN  [org.atmosphere.cpr.AtmosphereFramework] (http--0.0.0.0-8080-2) Failed using comet support: org.atmosphere.container.JBossWebCometSupport, error: JBoss failed to detect this is a Comet application because the APR Connector is not enabled. 
Make sure atmosphere-compat-jboss.jar is not under your WEB-INF/lib and You must use the atmosphere-native-runtime dependency in order to use native Comet Support there is no context.xml under WEB-INF Is the NIO or APR Connector enabled?

But it works... If someone does manage to get rid of these messages I would be happy to know how :)

Ishkafel
  • 333
  • 1
  • 10
0

Did you ensure that your JBoss started with usage native libraries? For verification in logs try to find string org.apache.coyote.http11.Http11AprProtocol instead of org.apache.coyote.http11.Http11Protocol. If it is not true that see how to fix JBoss configuration here.

Also you need to use atmosphere-runtime-native library instead of pure atmosphere-runtime.

Hope it will help you.

Community
  • 1
  • 1
dmaidaniuk
  • 111
  • 1
  • 11