2016-09-06 26 views
1

我想我的JSF應用程序轉換爲OSGi包(WAB),但我一直得到,當我將WAR文件部署到下面的GlassFish錯誤/ autodeploy/bundles,我不確定它是什麼意思。JSF的Web應用程序作爲OSGi包 - 收到錯誤的FacesContextFactory沒有正確配置

[#|2016-09-06T11:35:05.402+0200|SEVERE|glassfish3.1.2|org.apache.catalina.core.ContainerBase|_ThreadID=61;_ThreadName=pool-5-thread-1;|ContainerBase.addChild: start: 
org.apache.catalina.LifecycleException: java.lang.RuntimeException: com.sun.faces.config.ConfigurationException: Factory 'javax.faces.context.FacesContextFactory' was not configured properly. 
     at org.apache.catalina.core.StandardContext.start(StandardContext.java:5389) 
     at com.sun.enterprise.web.WebModule.start(WebModule.java:498) 
     at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:917) 
     at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:901) 
     at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:733) 
     at com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:2018) 
     at com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:1669) 
     at com.sun.enterprise.web.WebApplication.start(WebApplication.java:109) 
     at org.glassfish.internal.data.EngineRef.start(EngineRef.java:130) 
     at org.glassfish.internal.data.ModuleInfo.start(ModuleInfo.java:269) 
     at org.glassfish.internal.data.ApplicationInfo.start(ApplicationInfo.java:301) 
     at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:461) 
     at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:240) 
     at org.glassfish.osgijavaeebase.OSGiDeploymentRequest.deploy(OSGiDeploymentRequest.java:183) 
     at org.glassfish.osgijavaeebase.OSGiDeploymentRequest.execute(OSGiDeploymentRequest.java:118) 
     at org.glassfish.osgijavaeebase.AbstractOSGiDeployer.deploy(AbstractOSGiDeployer.java:121) 
     at org.glassfish.osgijavaeebase.OSGiContainer.deploy(OSGiContainer.java:154) 
     at org.glassfish.osgijavaeebase.JavaEEExtender.deploy(JavaEEExtender.java:107) 
     at org.glassfish.osgijavaeebase.JavaEEExtender.access$200(JavaEEExtender.java:61) 
     at org.glassfish.osgijavaeebase.JavaEEExtender$HybridBundleTrackerCustomizer$1.call(JavaEEExtender.java:151) 
     at org.glassfish.osgijavaeebase.JavaEEExtender$HybridBundleTrackerCustomizer$1.call(JavaEEExtender.java:148) 
     at java.util.concurrent.FutureTask.run(FutureTask.java:262) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
     at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.RuntimeException: com.sun.faces.config.ConfigurationException: Factory 'javax.faces.context.FacesContextFactory' was not configured properly. 
     at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:292) 
     at org.apache.catalina.core.StandardContext.contextListenerStart(StandardContext.java:4750) 
     at com.sun.enterprise.web.WebModule.contextListenerStart(WebModule.java:550) 
     at org.apache.catalina.core.StandardContext.start(StandardContext.java:5366) 
     ... 24 more 
Caused by: com.sun.faces.config.ConfigurationException: Factory 'javax.faces.context.FacesContextFactory' was not configured properly. 
     at com.sun.faces.config.processor.FactoryConfigProcessor.verifyFactoriesExist(FactoryConfigProcessor.java:305) 
     at com.sun.faces.config.processor.FactoryConfigProcessor.process(FactoryConfigProcessor.java:219) 
     at com.sun.faces.config.ConfigManager.initialize(ConfigManager.java:360) 
     at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:225) 
     ... 27 more 
Caused by: javax.faces.FacesException: com.sun.faces.context.InjectionFacesContextFactory 
     at javax.faces.FactoryFinder.getImplGivenPreviousImpl(FactoryFinder.java:630) 
     at javax.faces.FactoryFinder.getImplementationInstance(FactoryFinder.java:509) 
     at javax.faces.FactoryFinder.access$400(FactoryFinder.java:139) 
     at javax.faces.FactoryFinder$FactoryManager.getFactory(FactoryFinder.java:993) 
     at javax.faces.FactoryFinder.getFactory(FactoryFinder.java:343) 
     at com.sun.faces.config.processor.FactoryConfigProcessor.verifyFactoriesExist(FactoryConfigProcessor.java:303) 
     ... 30 more 
Caused by: java.lang.IllegalArgumentException: argument type mismatch 
     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
     at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 
     at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
     at java.lang.reflect.Constructor.newInstance(Constructor.java:526) 
     at javax.faces.FactoryFinder.getImplGivenPreviousImpl(FactoryFinder.java:623) 
     ... 35 more 
|#] 

war文件的結構如下:

testWab.war 
| 
- img/ 
- META-INF/ 
    | 
    - MANIFEST.MF 
- WEB-INF/ 
    | 
    - classes/ 
    | 
    - lib/ 
     | 
     - primefaces-5.3.jar 
     | 
     - javax.servlet.jsp-api-2.2.1.jar 
     | 
     - and other jar files 
    | 
    - web.xml 
    | 
    - faces-config.xml 
    | 
    - web.xml 
    | 
    - glassfish-web.xml 
- views/ 
    | 
    - all *.xhtml 

web.xml看起來是這樣的:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 
    <context-param> 
     <param-name>javax.faces.PROJECT_STAGE</param-name> 
     <param-value>Production</param-value> 
    </context-param> 
    <context-param> 
     <param-name>primefaces.FONT_AWESOME</param-name> 
     <param-value>true</param-value> 
    </context-param> 

    <welcome-file-list> 
     <welcome-file>faces/index.xhtml</welcome-file> 
    </welcome-file-list> 

    <!-- Servlet Config --> 
    <servlet> 
     <servlet-name>Faces Servlet</servlet-name> 
     <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>Faces Servlet</servlet-name> 
     <url-pattern>*.xhtml</url-pattern> 
    </servlet-mapping> 
</web-app> 

而且我glassfish-web.xml看起來是這樣的:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd"> 
<glassfish-web-app error-url=""> 
    <context-root>/testWAB</context-root> 
    <class-loader delegate="false"/> 
    <property name="useBundledJsf" value="true"/> 
</glassfish-web-app> 

MANIFEST.MF是這樣的:

Manifest-Verion: 1.0 
Bundle-ManifestVersion: 2 
Bundle-SymbolicName: TestWAB 
Bundle-Version: 0.1.0.SNAPSHOT 
Bundle-Name: Simulation Vis 
Import-Package: javax.servlet, 
javax.servlet.http, 
javax.ws.rs, 
javax.ws.rs.core, 
org.osgi.framework;version="1.3.0" 
Bundle-ClassPath: WEB-INF/classes, 
WEB-INF/lib/commons-fileupload-1.3.jar, 
WEB-INF/lib/commons-io-2.2.jar, 
WEB-INF/lib/el-api-2.2.jar, 
WEB-INF/lib/el-impl-2.2.jar, 
WEB-INF/lib/javax.faces-api-2.2.jar, 
WEB-INF/lib/javax.servlet.jsp-api-2.2.1.jar, 
WEB-INF/lib/javax.servlet-api-3.1.0.jar, 
WEB-INF/lib/primefaces-5.3.jar 
Web-ContextPath: /testWAB 
Bundle-RequiredExecutionEnvironment: JavaSE-1.7 
Bundle-Activator: test.Activator 
Require-Bundle: myBundle0;bundle-version="0.1.0";visibility:=reexport, 
myBundle1;bundle-version="0.1.0";visibility:=reexport, 
myBundle2;bundle-version="0.1.0" 
Bundle-Vendor: FooBar 

回答

1

確定。所以經過大量的頭髮拉動和鍵盤敲擊之後,我終於得到了這些框架一起工作。

這裏,供大家參考。


Framework版本:

  • Glassfish的3.1.2
  • Primefaces 5.3.0
  • 的OSGi 1.3.0

  1. 的Primefaces罐子不應該在你的西澳R的WEB-INF/lib文件夾。它應該被部署爲OSGi Bundle。這是因爲下降的jar到glassfish/autodeploy/bundles目錄一樣簡單。

  2. 複製從Primefaces罐子的META-INF到您的網頁捆綁後續的資源文件和目錄:primefaces-p.taglib.xmlfaces-config.xmlresources

我的包已經有自己的faces-config.xml,所以我改名爲從Primefaces primefaces-config.xml的一個,並把它放在我的包下的WEB-INF。然後添加以下到我web.xml使用兩個文件:

<context-param> 
    <param-name>javax.faces.CONFIG_FILES</param-name> 
    <param-value> 
     /WEB-INF/faces-config.xml, 
     /WEB-INF/primefaces-config.xml 
    </param-value> 
</context-param> 
  • 最後,我的WAB具有以下結構:

    testWab。戰爭

    • IMG/
    • 資源/(從Primefaces JAR)
    • META-INF/

      • MANIFEST.MF

      • primefaces-p.taglib.xml(來自Primefaces jar)

    • WEB-INF/

      • 類/

      • 的lib/

        • 一些jar文件排除primefaces罐子
      • 的web.xml

      • 面向-config.xml中

      • primefaces-config.xml中

      • 的web.xml

      • 的glassfish-web.xml中

    • 視圖/

      • 全部* .xhtml

  • 的毛刺?

    1. 您的Primefaces版本可能不喜歡Glassfish附帶的jsf版本。我建議你拒絕包含你自己的jsf jar並且告訴Glassfish到useBundledJsf的衝動。我試過了。浪費無數個小時,沒有任何工作。

    理想情況下,您可以將您的框架升級到任何版本,以便它們能夠很好地協同工作,但在我的情況下,不允許這樣做。

    我有GlassFish 3.1.2,它附帶JSF 2.1,它不適用於Primefaces 5.3。 我用我的javax.faces-2.2.jar替換了原來的glassfish\modules\javax.faces.jar

    glassfish-web.xml看起來是這樣的:

    <glassfish-web-app error-url=""> 
        <context-root>/testWAB</context-root> 
        <class-loader delegate="true" /> 
    </glassfish-web-app> 
    
  • 你的WAB突然找不到任何在Java的面向類。
  • 確保捆綁類路徑正確,javax.faces.*列在Import-Package下。

    MANIFEST.MF看起來是這樣的:

    Manifest-Verion: 1.0 
    Bundle-ManifestVersion: 2 
    Bundle-SymbolicName: testWAB 
    Bundle-Version: 0.1.0.SNAPSHOT 
    Bundle-Name: Simulation Vis 
    Import-Package: javax.faces;version="2.2.0", 
    javax.faces.application;version="2.2.0", 
    javax.faces.bean, 
    javax.faces.component;version="2.2.0", 
    javax.faces.context;version="2.2.0", 
    javax.faces.event;version="2.2.0", 
    javax.servlet, 
    javax.servlet.http, 
    javax.ws.rs, 
    javax.ws.rs.core, 
    org.osgi.framework;version="1.3.0" 
    Bundle-ClassPath: WEB-INF/classes, 
    WEB-INF/lib/jar1.jar, 
    WEB-INF/lib/jar2.jar 
    Web-ContextPath: /testWAB 
    Bundle-RequiredExecutionEnvironment: JavaSE-1.7 
    Bundle-Activator: test.Activator 
    Require-Bundle: myBundle1;bundle-version="0.1.0";visibility:=reexport, 
    myBundle1;bundle-version="0.1.0";visibility:=reexport, 
    org.primefaces;bundle-version="5.3.0" 
    Bundle-Vendor: Me 
    
    相關問題