2013-05-01 4 views
0

У меня есть проект гостевой книги Google, созданный с использованием архетипа Maven com.google.appengine.archetypes:guestbook-archetype. Когда я запускаю его локально, используя mvn appengine:devserver, он работает нормально, проблемы возникают, когда я пытаюсь развернуть его в Google Apps. Я получаю следующее сообщение:GAE - ClassNotFoundException после развертывания на сервере Appspot

Error: Server Error 

The server encountered an error and could not complete your request. 
If the problem persists, please report your problem and mention this error message and the query that caused it. 

В журналах я вижу это:

2013-05-01 05:38:28.356/500 3166ms 0kb Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.63 Safari/537.31 
2001:6d8:10:a014:5176:bdbe:c152:53c0 - - [01/May/2013:05:38:28 -0700] "GET/HTTP/1.1" 500 0 - "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.63 Safari/537.31" "aghinzop.appspot.com" ms=3167 cpu_ms=2100 loading_request=1 app_engine_release=1.7.7 instance=00c61b117cdf51947e909cbfaf52e1739a7f4c 
W 2013-05-01 05:38:28.325 
EXCEPTION 
java.lang.ClassNotFoundException: ioserv.ioserv.SignGuestbookServlet 
    at com.google.appengine.runtime.Request.process-53e8711216f37199(Request.java) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:359) 
    at org.mortbay.util.Loader.loadClass(Loader.java:91) 
    at org.mortbay.util.Loader.loadClass(Loader.java:71) 
    at org.mortbay.jetty.servlet.Holder.doStart(Holder.java:73) 
    at org.mortbay.jetty.servlet.ServletHolder.doStart(ServletHolder.java:242) 
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) 
    at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:685) 
    at org.mortbay.jetty.servlet.Context.startContext(Context.java:140) 
    at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250) 
    at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517) 
    at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:467) 
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) 
    at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:480) 
    at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:487) 
    at com.google.tracing.TraceContext.runInContext(TraceContext.java:774) 
    at com.google.tracing.TraceContext$DoInTraceContext.runInContext(TraceContext.java:751) 
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:342) 
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:334) 
    at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:484) 
    at java.lang.Thread.run(Thread.java:722) 
E 2013-05-01 05:38:28.326 
javax.servlet.ServletContext log: unavailable 
javax.servlet.UnavailableException: ioserv.ioserv.SignGuestbookServlet 
    at org.mortbay.jetty.servlet.Holder.doStart(Holder.java:79) 
    at org.mortbay.jetty.servlet.ServletHolder.doStart(ServletHolder.java:242) 
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) 
    at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:685) 
    at org.mortbay.jetty.servlet.Context.startContext(Context.java:140) 
    at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250) 
    at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517) 
    at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:467) 
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) 
    at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.createHandler(AppVersionHandlerMap.java:219) 
    at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.getHandler(AppVersionHandlerMap.java:194) 
    at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:134) 
    at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.run(JavaRuntime.java:438) 
    at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:480) 
    at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:487) 
    at com.google.tracing.TraceContext.runInContext(TraceContext.java:774) 
    at com.google.tracing.TraceContext$DoInTraceContext.runInContext(TraceContext.java:751) 
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:342) 
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:334) 
    at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:484) 
    at com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:251) 
    at java.lang.Thread.run(Thread.java:722) 
W 2013-05-01 05:38:28.338 
Failed startup of context [email protected]11c3e97{/,/base/data/home/apps/s~aghinzop/1.367061823227494749} 
java.lang.NullPointerException 
    at java.lang.Class.isAssignableFrom(Native Method) 
    at org.mortbay.jetty.servlet.ServletHolder.doStart(ServletHolder.java:256) 
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) 
    at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:685) 
    at org.mortbay.jetty.servlet.Context.startContext(Context.java:140) 
    at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250) 
    at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517) 
    at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:467) 
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) 
    at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.createHandler(AppVersionHandlerMap.java:219) 
    at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.getHandler(AppVersionHandlerMap.java:194) 
    at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:134) 
    at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.run(JavaRuntime.java:438) 
    at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:480) 
    at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:487) 
    at com.google.tracing.TraceContext.runInContext(TraceContext.java:774) 
    at com.google.tracing.TraceContext$DoInTraceContext.runInContext(TraceContext.java:751) 
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:342) 
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:334) 
    at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:484) 
    at com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:251) 
    at java.lang.Thread.run(Thread.java:722) 
C 2013-05-01 05:38:28.342 
Uncaught exception from servlet 
javax.servlet.UnavailableException: Initialization failed. 
    at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.createHandler(AppVersionHandlerMap.java:228) 
    at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.getHandler(AppVersionHandlerMap.java:194) 
    at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:134) 
    at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.run(JavaRuntime.java:438) 
    at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:480) 
    at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:487) 
    at com.google.tracing.TraceContext.runInContext(TraceContext.java:774) 
    at com.google.tracing.TraceContext$DoInTraceContext.runInContext(TraceContext.java:751) 
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:342) 
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:334) 
    at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:484) 
    at com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:251) 
    at java.lang.Thread.run(Thread.java:722) 
I 2013-05-01 05:38:28.355 
This request caused a new process to be started for your application, and thus caused your application code to be loaded for the first time. This request may thus take longer and use more CPU than a typical request for your application. 

Вот основные настройки, которые я имею в Eclipse, и журнал развертывания (я использую App Engine Eclipse Plugin).

enter image description here

Я не уверен, что «отключен, поскольку это проект Maven» означает здесь. Могли бы вы объяснить? И я должен проверить этот флажок?

enter image description here

Приложение Engine SDK выбранный здесь является один обеспечивается Eclipse Plugin.

enter image description here

Вот ЛИЭС предоставляемые плагин. Есть также некоторые Maven libs, добавленные архетипом.

enter image description here

А вот ЛИЭС в WEB-INF/Lib. Я вижу, что их очень мало, и я понимаю, что что-то может отсутствовать. Проблема в том, что когда я пытаюсь скопировать библиотеки в эту папку, я получаю Cannot paste the clipboard contents into the selected elements. Как я могу это сделать? В обычном динамическом веб-проекте (с использованием этого аспекта) это так же просто, как Properties>Deployment Assembly>Add, но здесь я понятия не имею, как это сделать.

Я очень благодарен за вашу помощь! Спасибо!

ответ

1

Я не уверен, что «отключено, потому что это проект Maven» означает здесь. Могли бы вы объяснить? И я должен проверить этот флажок?

Существует два способа управления вашим приложением (в частности, веб-папка), один из которых позволяет maven сделать это, а другой позволяет плагину Google eclipse сделать это. Поскольку ваше приложение создано maven, по умолчанию предполагается, что ваше управление веб-приложениями выполняется самим maven, поэтому плагин google eclipse отключил его по умолчанию. , если вы не удаляете maven, это должно быть как есть.

Приходит к ошибке, полагаю, что, хотя вы строите и тестируете через maven, возможно, вы пытаетесь развернуть через eclipse, попробуйте mvn appengine: update и он должен работать.

надеюсь, что это поможет.

+0

Благодарим за ответ! После почти дневной борьбы с этим я попробовал еще одно решение, описанное здесь: http://javanto.com/blog/2012/01/11/gae-eclipse-maven-2-0/ С этим я пошел довольно далеко, но полностью отказался от App Engine, когда узнал, что он предлагает только очень ограниченную поддержку Hibernate и не поддерживает JPA2. Теперь я разрабатываю на cloudbees.com, он поддерживает весь мой стек с Tomcat/Spring/Hibernate/Maven, и я встал и работал примерно через час. Мы посмотрим, не позаботятся ли они после этого, но пока говорится, что он должен быть бесплатным. – Wojtek

+0

Хорошо, что вы наконец смогли добиться прогресса, и надеемся, что вы сможете делать добро с облаками. Просто для добавления App Engine поддерживает [JPA 2] (https://developers.google.com/appengine/docs/java/datastore/jpa/) – skywalker

+0

Спасибо, что указали это, я, должно быть, неправильно понял что-то. Вчера немного устала. Но все-таки я считаю, что App Engine слишком ограничен, как сейчас, или, может быть, другими словами - наложение слишком большого количества ограничений. – Wojtek

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