2012-05-06 113 views
3

好了,所以我剛完成了我的第一個JSF項目,我想將它上傳到GAE。我一直在嘗試過去4個小時,但無法完成工作。如何在谷歌應用程序引擎運行JSF 2.0 1.6.5

我使用JSF 2.0和App Engine的1.6.5。

我曾嘗試幾個教程和下面的所有組合:

First tutorial

罐 - javax.faces-2.1.7-sources.jar EL-RI-1.0.jar

設置 - GAE 1.6.5,JDK 1.7

錯誤:

java.lang.NoClassDefFoundError: javax.naming.InitialContext is a restricted class.  Please see the Google App Engine developer's guide for more details. 
at com.google.appengine.tools.development.agent.runtime.Runtime.reject(Runtime.java:51) 

我以爲這是因爲我使用不同的配置,所以我改變了使用確切的設置。降級到GAE 1.6.3.1,並在教程中使用了精確的罐子,但沒有什麼不同。

所以,我想這說明修正列出其中涉及更換JSF-impl.jar中使用JSF-IMPL-gae.jar但是這並沒有幫助的第二個教程。

我這樣做後,我得到的錯誤:

WARNING: failed c[email protected]1678d71{/,C:\Users\TOSHIBA\Documents\NetBeansProjects\Google AppEngine JSF 2.0 Template\war}: java.lang.VerifyError: Expecting a stackmap frame at branch target 36 in method com.sun.faces.config.WebConfiguration.getServletContextName()Ljava/lang/String; at offset 10 
May 07, 2012 5:07:17 AM com.google.apphosting.utils.jetty.JettyLogger warn 
WARNING: failed [email protected]: java.lang.VerifyError: Expecting a stackmap frame at branch target 36 in method com.sun.faces.config.WebConfiguration.getServletContextName()Ljava/lang/String; at offset 10 
May 07, 2012 5:07:17 AM com.google.apphosting.utils.jetty.JettyLogger warn 
WARNING: Error starting handlers 
java.lang.VerifyError: Expecting a stackmap frame at branch target 36 in method com.sun.faces.config.WebConfiguration.getServletContextName()Ljava/lang/String; at offset 10 
at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:163) 

我也試圖引導listed here

我在這裏嘗試了兩種不同的應用程序引擎的SDK和兩個版本的JDK與教程的所有可能的組合7罐子我現在有:EL-API-2.2.1-b04.jar,EL-IMPL-2.2.1-b05.jar,EL-RI-1.0.jar,javax.faces-2.1.7.jar,使用javax .faces-2.1.7-sources.jar,jsf-api-2.1.7.jar,jsf-impl-gae.jar。

任何幫助將不勝感激我想我會尋找一種不同的方式來上傳我的項目明天,因爲我什麼都沒有,但JSF和Eclipse的麻煩,爲什麼我總是使用Netbeans,但是Netbeans的GAE插件不再運行。

謝謝

+0

你必須使用未在AppEngine上支持技術的習慣。首先,使用NetBeans插件;其次,與JSF。如果您使用受支持且不受限制的東西,您可能會有更好的運氣,因爲一旦Google發佈SDK 1.7.0或未來版本,您可能不得不再次遇到同樣的問題。說着,祝你好運找到你的答案。我最好的建議是打開日誌記錄級別,以便可以看到SDK和框架中正在發生的一切,以便可以解決問題。如果你能縮小問題的範圍,你也可能有更好的運氣。 – jmort253

+0

受限制的課程很可能是您最大的問題。您需要找到重命名該庫的人員,以便包名稱與GAE未列入白名單的類別列表不匹配。 – jmort253

+0

你能否澄清「支持的事物」。切換到不同的框架? – EHarpham

回答

4

the tutorial

3.3 Create a new WebConfiguration.java.

JSF 2 is using 「javax.naming.InitialContext」 that’s not support in GAE.

To solve this, you need to get a copy of the JSF’s source code, clone the WebConfiguration.java, comment methods that are using 「javax.naming.InitialContext」 class, put it in 「src/com/sun/faces/comfig/WebConfiguration.java「. Now, your newly created WebConfiguration.java class will overload the original WebConfiguration.java.

按照教程,就是扔你ClassDefNotFoundError類是類衆說紛紜。您需要訪問GAE-JSF javax.naming.InitialContext is a Restricted Class Source Code並檢索JSF源代碼的副本並製作WebConfiguration類的副本並重載原件。

GAE的白名單可以通過重命名包,或者在這種情況下,避免他們被完全overrided。爲了澄清,這一步要求你做的是將WebConfiguration.java替換爲你修改了使用InitialContext的所有方法被註釋掉的地方。這隱藏了Google白名單中的該類,因此不會強制ClassNotFoundDefErrors。

+0

非常感謝您的幫助。我找到了兩個文件,其中有人已經完成了這項工作,但是當我使用這些文件時,出現了我的文章中的第二條錯誤消息。我一直在考慮切換到Spring,似乎JSF需要解決方法。 – EHarpham

+0

這些畢竟只是警告。該應用程序即使在這些應用程序中也不起作用嗎?您確定您已將日誌記錄級別設置爲「全部」,以確保您可以看到所有可能與該應用程序相關的消息無效嗎?也許你可以聯繫寫這篇文章的人/ gal,因爲它只是在過去幾周內寫的。 – jmort253

+0

我對我的網絡應用程序有同樣的問題,即使部署在Appengine雲中,即Appspot.com,該解決方案是否也能正常工作? – xybrek