При попытке загрузить файл в приложение приложения 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)
Приношу свои извинения. Я знаю, почему проблема возникает - среда выполнения App Engine ставит ВСЕ переменные сеанса в хранилище данных. Я не думаю, что это _unreasonable_ предположить, что javax.servlet.http.Part _should not_ будет храниться в памяти. У меня есть управляемый bean-компонент, который является '@ ViewScoped', поэтому содержимое компонента останется в памяти _ до тех пор, пока клиент будет обращаться к странице. –
каждый экземпляр двигателя приложения не имеет гражданства. для создания состояния он должен совместно использовать состояние с каждым другим экземпляром кластера, поэтому все, что связано с состоянием/сеансом пользователя, должно храниться в базе данных. в основном вы не должны хранить что-либо в памяти на движке приложения, так как это не работает –
Структура приложения Google App Engine предоставляет параметр свойства < true session-enabled> "в' appengine-web .xml'. 'Javax.servlet.http.Part' является стандартным аспектом API сервлета, а структура JSF 2.2, наконец, содержит тег' '. Платформа App Engine - это фантастика, и главная причина, по которой я публикую этот вопрос, заключается в том, чтобы люди, которые пытались сделать то же самое, смогли найти решение. В конечном счете, ответ должен содержать жизнеспособную рабочую среду, которая позволит кому-то использовать JSF-тег 'h: inputFile' в приложениях App Engine. –