2016-03-15 4 views
0

При попытке загрузить файл в приложение приложения Google App Engine, работающее в среде совместимого управления Java 8/Jetty 9, я получаю следующую трассировку стека, потому что класс org.eclipse.jetty.util.MultiPartInputStreamParser$MultiPart НЕ реализует интерфейс java.io.Serializable.java.io.NotSerializableException С средой App Engine для Java 8/Jetty 9

я получаю следующее исключение:

[INFO] java.io.NotSerializableException: org.eclipse.jetty.util.MultiPartInputStreamParser$MultiPart 
[INFO] at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184) 
[INFO] at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548) 
[INFO] at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509) 
[INFO] at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432) 
[INFO] at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178) 
[INFO] at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348) 
[INFO] at java.util.HashMap.internalWriteEntries(HashMap.java:1777) 
[INFO] at java.util.HashMap.writeObject(HashMap.java:1354) 
[INFO] at sun.reflect.GeneratedMethodAccessor24.invoke(Unknown Source) 
[INFO] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
[INFO] at java.lang.reflect.Method.invoke(Method.java:498) 
[INFO] at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:1028) 
[INFO] at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1496) 
[INFO] at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432) 
[INFO] at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178) 
[INFO] at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348) 
[INFO] at java.util.LinkedHashMap.internalWriteEntries(LinkedHashMap.java:333) 
[INFO] at java.util.HashMap.writeObject(HashMap.java:1354) 
[INFO] at sun.reflect.GeneratedMethodAccessor24.invoke(Unknown Source) 
[INFO] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
[INFO] at java.lang.reflect.Method.invoke(Method.java:498) 
[INFO] at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:1028) 
[INFO] at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1496) 
[INFO] at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432) 
[INFO] at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178) 
[INFO] at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548) 
[INFO] at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:441) 
[INFO] at java.util.Collections$SynchronizedMap.writeObject(Collections.java:2691) 
[INFO] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
[INFO] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
[INFO] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
[INFO] at java.lang.reflect.Method.invoke(Method.java:498) 
[INFO] at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:1028) 
[INFO] at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1496) 
[INFO] at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432) 
[INFO] at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178) 
[INFO] at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348) 
[INFO] at java.util.HashMap.internalWriteEntries(HashMap.java:1777) 
[INFO] at java.util.HashMap.writeObject(HashMap.java:1354) 
[INFO] at sun.reflect.GeneratedMethodAccessor24.invoke(Unknown Source) 
[INFO] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
[INFO] at java.lang.reflect.Method.invoke(Method.java:498) 
[INFO] at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:1028) 
[INFO] at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1496) 
[INFO] at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432) 
[INFO] at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178) 
[INFO] at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348) 
[INFO] at com.google.apphosting.runtime.SessionManagerUtil.serialize(SessionManagerUtil.java:28) 
[INFO] at com.google.apphosting.runtime.DatastoreSessionStore.createEntityForSession(DatastoreSessionStore.java:73) 
[INFO] at com.google.apphosting.runtime.DatastoreSessionStore.saveSession(DatastoreSessionStore.java:112) 
[INFO] at com.google.apphosting.runtime.jetty9.SessionManager$AppEngineSession.save(SessionManager.java:145) 
[INFO] at com.google.apphosting.runtime.jetty9.SaveSessionFilter.doFilter(SaveSessionFilter.java:43) 
[INFO] at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) 
[INFO] at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43) 
[INFO] at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) 
[INFO] at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:585) 
[INFO] at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) 
[INFO] at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:553) 
[INFO] at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:223) 
[INFO] at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127) 
[INFO] at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515) 
[INFO] at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185) 
[INFO] at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061) 
[INFO] at com.google.apphosting.vmruntime.jetty9.VmRuntimeWebAppContext.doScope(VmRuntimeWebAppContext.java:299) 
[INFO] at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) 
[INFO] at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:215) 
[INFO] at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:110) 
[INFO] at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) 
[INFO] at org.eclipse.jetty.server.Server.handle(Server.java:497) 
[INFO] at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:310) 
[INFO] at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257) 
[INFO] at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:540) 
[INFO] at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635) 
[INFO] at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555) 
[INFO] at java.lang.Thread.run(Thread.java:745) 

ответ

1

Как вы там видите:

[INFO] at com.google.apphosting.runtime.SessionManagerUtil.serialize(SessionManagerUtil.java:28) 
[INFO] at com.google.apphosting.runtime.DatastoreSessionStore.createEntityForSession(DatastoreSessionStore.java:73) 
[INFO] at com.google.apphosting.runtime.DatastoreSessionStore.saveSession(DatastoreSessionStore.java:112) 
[INFO] at com.google.apphosting.runtime.jetty9.SessionManager$AppEngineSession.save(SessionManager.java:145) 
[INFO] at com.google.apphosting.runtime.jetty9.SaveSessionFilter.doFilter(SaveSessionFilter.java:43) 

сервер пытается поставить MultiPartInputStreamParser в пользовательской сессии (и сохранить в базе данных). Вы не должны этого делать.

+0

Приношу свои извинения. Я знаю, почему проблема возникает - среда выполнения App Engine ставит ВСЕ переменные сеанса в хранилище данных. Я не думаю, что это _unreasonable_ предположить, что javax.servlet.http.Part _should not_ будет храниться в памяти. У меня есть управляемый bean-компонент, который является '@ ViewScoped', поэтому содержимое компонента останется в памяти _ до тех пор, пока клиент будет обращаться к странице. –

+0

каждый экземпляр двигателя приложения не имеет гражданства. для создания состояния он должен совместно использовать состояние с каждым другим экземпляром кластера, поэтому все, что связано с состоянием/сеансом пользователя, должно храниться в базе данных. в основном вы не должны хранить что-либо в памяти на движке приложения, так как это не работает –

+0

Структура приложения Google App Engine предоставляет параметр свойства < true "в' appengine-web .xml'. 'Javax.servlet.http.Part' является стандартным аспектом API сервлета, а структура JSF 2.2, наконец, содержит тег' '. Платформа App Engine - это фантастика, и главная причина, по которой я публикую этот вопрос, заключается в том, чтобы люди, которые пытались сделать то же самое, смогли найти решение. В конечном счете, ответ должен содержать жизнеспособную рабочую среду, которая позволит кому-то использовать JSF-тег 'h: inputFile' в приложениях App Engine. –

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