1. ホーム
  2. java

[解決済み] 永続記憶装置からの例外的なセッションのロード

2022-02-16 21:02:56

質問内容

に多くの変更を加えました。 春のペットクリニックアプリケーション . 現在、eclipseのrun as...run on serverを使用して、tomcatサーバーの新しいインスタンスでアプリケーションを起動すると、次のようなエラーメッセージが表示されるようになっています。

SEVERE: Exception loading sessions from persistent storage  

その後、サーバーとアプリケーションは正常に起動できるようになりましたが、エラーメッセージの原因となっているものを修正したいのです。 どなたか、このエラーメッセージを回避する方法を教えていただけませんか?

スタックトレースには、アプリケーションからのファイルが記載されていないため、アプリケーションコードのどこを見れば問題が解決するのかわかりません。 以下の場所を見ることができます。 githubにあるpetclinicのコード をクリックすると、アプリケーションの構造を見ることができますので、問題を見つけるためにどこを見ればいいのかがわかると思います。 以下はスタックトレースです。

INFO  EhCacheManagerFactoryBean - Initializing EhCache CacheManager
INFO  ContextLoader - Root WebApplicationContext: initialization completed in 4376 ms
Dec 16, 2013 2:51:56 PM org.apache.catalina.session.StandardManager doLoad
SEVERE: IOException while loading persisted sessions: java.io.EOFException  
java.io.EOFException
    at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2280)
    at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2749)
    at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:779)
    at java.io.ObjectInputStream.<init>(ObjectInputStream.java:279)
    at org.apache.catalina.util.CustomObjectInputStream.<init>(CustomObjectInputStream.java:58)
    at org.apache.catalina.session.StandardManager.doLoad(StandardManager.java:246)
    at org.apache.catalina.session.StandardManager.load(StandardManager.java:204)
    at org.apache.catalina.session.StandardManager.startInternal(StandardManager.java:491)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5443)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:662)
Dec 16, 2013 2:51:56 PM org.apache.catalina.session.StandardManager startInternal
SEVERE: Exception loading sessions from persistent storage  
java.io.EOFException
    at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2280)
    at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2749)
    at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:779)
    at java.io.ObjectInputStream.<init>(ObjectInputStream.java:279)
    at org.apache.catalina.util.CustomObjectInputStream.<init>(CustomObjectInputStream.java:58)
    at org.apache.catalina.session.StandardManager.doLoad(StandardManager.java:246)
    at org.apache.catalina.session.StandardManager.load(StandardManager.java:204)
    at org.apache.catalina.session.StandardManager.startInternal(StandardManager.java:491)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5443)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:662)
Dec 16, 2013 2:51:56 PM org.apache.catalina.core.ApplicationContext log
INFO: Initializing Spring FrameworkServlet 'petclinic'  

解決するには?

これは、Tomcatが、以前のシャットダウン時に保存された、以前にシリアライズされたWebセッションをロードできないことと関係があります。これは、Tomcatがきれいにシャットダウンされなかったため、シリアライズ中にセッション・オブジェクトが破損したためと思われます。

このエラーをなくす1つの方法は、再起動時のセッションの持続を無効にすることです。これを行うには、以下のファイルを編集します。 CATALINA_HOME/conf/context.xml を設定し pathname 属性は <Manager> を空の文字列に変換します。これは、Tomcat 7のファイルによく書かれています。

<!-- Uncomment this to disable session persistence across Tomcat restarts -->

<Manager pathname="" />

また、古い session.ser ファイルから CATALINA_HOME/work/Catalina/localhost/<appName> フォルダを削除します。

再起動時のセッションの持続が必要な場合、これは受け入れがたいかもしれません。この場合、問題のさらなるデバッグが必要になります。