我正在使用PrimePush技术开发一个反例示例应用程序。我在Jboss 7.1.1下使用Promefaces 5.0和Atmosphere 2.1.6
我发现使用Primefaces 3.4.2和大气1.0.8 Push工作。但我必须使用primefaces 5.0
所以我使用官方Primefaces反例
@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));
}
}
这是我的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>
然后我已将Jboss配置为使用Advanced IO
<subsystem xmlns="urn:jboss:domain:web:1.1" default-virtual-server="default-host" native="true">
但是当我部署应用程序并单击计数按钮时,我会收到这些错误
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
我可以在这种配置下使用PrimePush吗? 如果我不能,是否有另一种方法将数据推送到jboss 7.1.1中的网页?
答案 0 :(得分:1)
我使用以下版本和配置运行:
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>
日志文件状态
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?
但它有效...如果有人设法摆脱这些消息,我会很高兴知道如何:)
答案 1 :(得分:0)
您确定JBoss是从使用本机库开始的吗?要在日志中进行验证,请尝试查找字符串org.apache.coyote.http11.Http11AprProtocol
,而不是org.apache.coyote.http11.Http11Protocol
。如果不确定如何修复JBoss配置here。
此外,您需要使用atmosphere-runtime-native
库而不是纯atmosphere-runtime
。
希望它会对你有所帮助。