2012-05-06 60 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