2014-07-17 35 views
1

我在eclipse上創建了一個使用glassfish 4.0推送primefaces 5的例子。我複製primefaces的推送代碼(http://www.primefaces.org/showcase/push/chat.xhtml)。我在pom.xml中配置像波紋管:如何在GlassFish 4.0中使用Primefaces 5?

的pom.xml

<build> 
    <sourceDirectory>src</sourceDirectory> 
    <plugins> 
     <plugin> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.1</version> 
      <configuration> 
       <source>1.6</source> 
       <target>1.6</target> 
      </configuration> 
     </plugin> 
     <plugin> 
      <artifactId>maven-war-plugin</artifactId> 
      <version>2.3</version> 
      <configuration> 
       <warSourceDirectory>webapp</warSourceDirectory> 
       <failOnMissingWebXml>false</failOnMissingWebXml> 
      </configuration> 
     </plugin> 
    </plugins> 
    <finalName>${project.artifactId}</finalName> 
</build> 

<repositories> 
    <repository> 
     <id>prime-repo</id> 
     <name>PrimeFaces Maven Repository</name> 
     <url>http://repository.primefaces.org</url> 
     <layout>default</layout> 
    </repository> 
</repositories> 
<dependencies> 
    <!-- Servlet --> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>servlet-api</artifactId> 
     <version>2.5</version> 
     <scope>provided</scope> 
    </dependency> 
    <!-- Faces Implementation --> 
    <dependency> 
     <groupId>com.sun.faces</groupId> 
     <artifactId>jsf-impl</artifactId> 
     <version>2.2.4</version> 
    </dependency> 
    <!-- Faces Library --> 
    <dependency> 
     <groupId>com.sun.faces</groupId> 
     <artifactId>jsf-api</artifactId> 
     <version>2.2.4</version> 
    </dependency> 
    <!-- Primefaces Version 5 --> 
    <dependency> 
     <groupId>org.primefaces</groupId> 
     <artifactId>primefaces</artifactId> 
     <version>5.0</version> 
    </dependency> 

    <!-- Atmosphere --> 
    <dependency> 
     <groupId>org.atmosphere</groupId> 
     <artifactId>atmosphere-runtime</artifactId> 
     <version>2.1.3</version> 
    </dependency>   
    <dependency> 
     <groupId>javax.inject</groupId> 
     <artifactId>javax.inject</artifactId> 
     <version>1</version> 
     </dependency> 

    <!-- Logging --> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-simple</artifactId> 
     <version>1.6.1</version> 
    </dependency> 

<!-- File Upload --> 
    <dependency> 
     <groupId>commons-fileupload</groupId> 
     <artifactId>commons-fileupload</artifactId> 
     <version>1.3</version> 
    </dependency> 
    <dependency> 
     <groupId>commons-io</groupId> 
     <artifactId>commons-io</artifactId> 
     <version>2.2</version> 
    </dependency> 

    <!-- JSP Library --> 
    <dependency> 
     <groupId>javax.servlet.jsp</groupId> 
     <artifactId>javax.servlet.jsp-api</artifactId> 
     <version>2.3.1</version> 
    </dependency> 
    <!-- JSTL Library --> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>jstl</artifactId> 
     <version>1.1.2</version> 
    </dependency> 
</dependencies> 

和web.xml文件:

<context-param> 
     <param-name>javax.faces.DEFAULT_SUFFIX</param-name> 
     <param-value>.xhtml</param-value> 
    </context-param> 
    <servlet> 
     <servlet-name>Faces Servlet</servlet-name> 
     <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
     <async-supported>true</async-supported> 
    </servlet> 



<servlet-mapping> 
     <servlet-name>Faces Servlet</servlet-name> 
     <url-pattern>*.xhtml</url-pattern> 
    </servlet-mapping> 

<servlet> 
    <servlet-name>Push Servlet</servlet-name> 
    <servlet-class>org.primefaces.push.PushServlet</servlet-class> 
    <async-supported>true</async-supported> 
</servlet> 

<servlet-mapping> 
    <servlet-name>Push Servlet</servlet-name> 
    <url-pattern>/primepush/*</url-pattern> 
</servlet-mapping> 

<!-- Following param only needed for MyFaces (TomEE, etc) --> 
<context-param> 
    <description>State saving method: 'client' or 'server' (=default). See JSF Specification 2.5.2</description> 
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name> 
    <param-value>client</param-value> 
</context-param> 

<context-param> 
    <param-name>org.apache.myfaces.SERIALIZE_STATE_IN_SESSION</param-name> 
    <param-value>false</param-value> 
</context-param> 
<context-param> 
    <param-name>javax.faces.PROJECT_STAGE</param-name> 
    <param-value>Development</param-value> 
</context-param> 

<listener> 
    <listener-class>com.sun.faces.config.ConfigureListener</listener-class> 
</listener> 

後,我完成像primefaces的推動和部署的所有代碼直接從eclipse到glassfish 4並且有如下錯誤:

Exception while loading the app : java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: java.lang.RuntimeException: java.lang.NoClassDefFoundError: Lorg/primefaces/push/EventBus;. 

請幫我找出問題並部署成功。

回答

0

我是PFP/Atmosphere中的新手,但對我來說,它似乎缺少API的氛圍。而且,由於我已經努力了很多讓Primefaces 5.1推送爲Glassfish 4工作,我願與社會各界分享:)我的設置

<?xml version="1.0" encoding="UTF-8"?> 
 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> 
 
    
 
\t <display-name>MyProject</display-name> 
 
    
 
\t <context-param> 
 
\t  <param-name>javax.faces.PROJECT_STAGE</param-name> 
 
\t  <param-value>Development</param-value> 
 
\t </context-param> 
 
\t 
 
\t 
 
\t <welcome-file-list> 
 
\t \t <welcome-file>login.html</welcome-file> 
 
\t </welcome-file-list> 
 
\t 
 
\t <!-- **************** FACES CONFIGURATION ******************** --> 
 
\t <servlet> 
 
\t \t <servlet-name>Faces Servlet</servlet-name> 
 
\t \t <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
 
\t \t <async-supported>true</async-supported> 
 
\t </servlet> 
 
\t <servlet-mapping> 
 
\t \t <servlet-name>Faces Servlet</servlet-name> 
 
\t \t <url-pattern>*.xhtml</url-pattern> 
 
\t </servlet-mapping> 
 
    
 
    \t <!-- **************** Primefaces PUSH (Athmosphere based) ******************** --> 
 
\t <servlet> 
 
\t  <servlet-name>Push Servlet</servlet-name> 
 
\t  <servlet-class>org.primefaces.push.PushServlet</servlet-class> 
 
\t  <load-on-startup>1</load-on-startup> 
 
\t  <async-supported>true</async-supported> 
 
\t </servlet> 
 
\t <servlet-mapping> 
 
\t  <servlet-name>Push Servlet</servlet-name> 
 
\t  <url-pattern>/primepush/*</url-pattern> 
 
\t </servlet-mapping> 
 

 
\t <!-- **************** Primefaces FILE UPLOAD ******************** --> 
 
\t <filter> 
 
\t <filter-name>PrimeFaces FileUpload Filter</filter-name> 
 
\t <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class> 
 
\t </filter> 
 
\t <filter-mapping> 
 
\t <filter-name>PrimeFaces FileUpload Filter</filter-name> 
 
\t <servlet-name>Faces Servlet</servlet-name> 
 
\t </filter-mapping> 
 
\t 
 
\t 
 
\t 
 
\t 
 
\t <!-- ********* PARTIAL SUBMIT <ENABLED> ********* --> 
 
\t <context-param> 
 
\t <param-name>primefaces.SUBMIT</param-name> 
 
\t <param-value>partial</param-value> 
 
\t </context-param> 
 
\t 
 
\t <!-- ********* CLIENT_SIDE_VALIDATION <ENABLED> ********* --> 
 
\t <context-param> 
 
\t <param-name>primefaces.CLIENT_SIDE_VALIDATION</param-name> 
 
\t <param-value>true</param-value> 
 
\t </context-param> 
 
\t 
 
\t <!-- ********* FACELETS_SKIP_COMMENTS <ENABLED> ********* --> 
 
\t <context-param> 
 
\t <param-name>javax.faces.FACELETS_SKIP_COMMENTS</param-name> 
 
\t <param-value>true</param-value> 
 
\t </context-param> 
 
\t 
 
\t <context-param> 
 
\t <param-name>primefaces.UPLOADER</param-name> 
 
\t <param-value>auto</param-value> 
 
\t </context-param> 
 
\t 
 
\t <context-param> 
 
\t  <param-name>javax.faces.STATE_SAVING_METHOD</param-name> 
 
\t  <param-value>client</param-value> 
 
\t </context-param> 
 
    
 
</web-app>

我的圖書館設置如下: WEB-INF/LIB/

-primefaces-5.1.jar
-vaadin-SLF4J-jdk14-1.6.1.jar -atmosphere-運行時2.2.4.vaadin5.jar
-slf4j-API- 1.7.10.jar -commons-fileupload-1.3.1.jar

注意:我使用Luna服務版本1a(4.4.1),我發現當我更改我的設置時,我必須從服務器中刪除我的應用程序,重新啓動服務器,重新部署和Project-> clean以使其工作。 希望這篇文章能提供幫助。