2013-01-02 15 views
0

我的應用服務器是Glassfish 3.1.1,使用Mojarra 2.0.3 FCS(據我所知)。我希望我的應用程序使用JSF 2.1.2。我已經在我的maven版本中找到了正確的工件。如何使用POM中指定的JSF版本(而不是應用服務器之一)?

現在,我該如何確保JSF類是從這個工件加載的,而不是遵循Glassfish libvrary classloader的「古典」委派(它將加載JSF 2.0.3併爲我的omnifaces/richfaces附加組件生成ClassNotFoundException) ?

回答

2

一般而言,如何從存檔覆蓋特定的Java EE工件是特定於應用程序服務器的。在GlassFish中的情況下,如果我沒有記錯,您可以使用下面的WEB-INF/GlassFish實現-web.xml中:

<glassfish-web-app error-url=""> 
    <class-loader delegate="false" /> 
    <property name="useBundledJsf" value="true" /> 
</glassfish-web-app> 

什麼也工作是替換[GlassFish的家]罐子/ GlassFish的/模塊。這正是JSF構建腳本所做的,因此應該保證能夠正常工作。

請注意,如果您從最低2.0.3的版本轉換到當前版本,您會發現從2個jar改爲1個jar。所以在這種情況下,在[glassfish home] /glassfish/domains/domain1/config/default-web.xml[glassfish home] /glassfish/lib/templates/default-web.xml刪除條目jsf-api .jar和jsf-impl.jar,並用一個javax.faces.jar替換它們。

也許更容易的選擇是download最新版本的GlassFish(3.1.2.2)。

+0

從2個JAR到1個JAR的變化在Mojarra 2.1.6開始。 OP正在嘗試使用Mojarra 2.1.2,它仍然是2個JAR(已經有1.5年了,所以我想知道爲什麼要這麼老的版本)。 – BalusC

+0

確實很好。 OP確實讓人費解。 GlassFish 3.1.1,然後希望專門去Mojarra 2.1.2。嗯...... –

+0

@BalusC事實上,我不是該應用程序部分的官方開發人員,因此我也對這樣的要求感到困惑(我將在稍後調查)。爲了補充Arjan的答案,[這篇博客文章](http://blog.eisele.net/2012/07/upgrading-mojarra-in-glassfish.html)給出了一些很好的解釋,說明這種修改的後果。 – Riduidel

相關問題