2012-05-06 3 views
3

Хорошо, поэтому я только что закончил свой первый проект JSF, и я хочу загрузить его в GAE. Я пробовал последние 4 часа и не могу заставить его работать.Как запустить JSF 2.0 в Google App Engine 1.6.5

Я использую JSF 2.0 и App Engine 1.6.5.

Я попробовал несколько учебников и все комбинации из следующих действий:

First tutorial

баночках - javax.faces-2.1.7-sources.jar эль-ри-1.0.jar

Setup - 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

Я пробовал все возможные комбинации учебников здесь на два разных SDKs приложения двигателя и два JDKs с 7 jar i теперь имеют: 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, однако плагин GAE для Netbeans больше не является функционирование.

Спасибо

+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 является retricted класса. Вам нужно будет посетить GAE-JSF javax.naming.InitialContext is a Restricted Class Source Code и получить копию исходного кода JSF и сделать копию класса WebConfiguration и перегрузить оригинал.

Белые списки GAE можно переопределить путем переименования пакетов или, в данном случае, избежать их вообще. Чтобы уточнить, что этот шаг просит вас сделать, это заменить WebConfiguration.java тем, который вы изменяете, когда все методы, использующие InitialContext, закомментированы. Это скрывает этот класс из белого списка Google, поэтому он не заставляет ClassNotFoundDefErrors.

+0

Большое спасибо за вашу помощь. Я нашел два файла, где кто-то уже сделал эту работу, однако, когда я использую эти файлы, появляется второе сообщение об ошибке в моем сообщении. Я думал переключиться на весну, всегда кажется, что в JSF есть работа вокруг. – EHarpham

+0

В конце концов, просто предупреждения. Не работает ли приложение даже с теми, кто находится на месте? Вы уверены, что подняли уровень ведения журнала на ВСЕ, чтобы убедиться, что все сообщения, которые могут иметь отношение к приложению, не работают? Возможно, вы можете связаться с парнем/девушкой, который написал статью, поскольку она была написана только в течение последних нескольких недель. – jmort253

+0

У меня такая же проблема для моего веб-приложения, работает ли это решение даже при развертывании в облаке Appengine, т. Е. В Appspot.com? – xybrek

Смежные вопросы