[Seasar-user:17372] Re: @InvalidateSessionで例外が発生

黒瀬健二 [E-MAIL ADDRESS DELETED]
2009年 5月 2日 (土) 07:57:50 JST


小林 (koichik) 様

> 申し訳ありません,Seasar2.4.35 の問題です.
> [Seasar-user:17333] で指摘があり,修正して
> SNAPSHOT をデプロイ済みなので以下をお使いください.
> 
> http://maven.seasar.org/maven2-snapshot/org/seasar/container/s2-framework/2.4.36-SNAPSHOT/s2-framework-2.4.36-20090428.100656-3.jar
> http://maven.seasar.org/maven2-snapshot/org/seasar/container/s2-extension/2.4.36-SNAPSHOT/s2-extension-2.4.36-20090428.100656-2.jar
> http://maven.seasar.org/maven2-snapshot/org/seasar/container/s2-tiger/2.4.36-SNAPSHOT/s2-tiger-2.4.36-20090428.101143-2.jar

SNAPSHOT版を適用し正常に動作しました。ありがとうございました。
ただ、新たな問題が発生している状態です。

セッションリスナでセッションの削除を検出し、DBからログイン情報を
削除しようとしているのですが、以下の★の箇所で後述の例外が発生し
ます。
 HotDeploy対象外クラスからHotDeploy対象クラスを扱っているので、
もともと★の部分でClassCastExceptionが発生していたのですが、これ
はLoginDtoクラスをHotDeploy対象外 (diconに登録) にすることで回避
していました。(Seasar 2.4.34時)
 しかし、Seasar 2.4.35ですと下記例外が発生するという状態です。
何か良い回避策はございますでしょうか?


@Override
public void sessionDestroyed(HttpSessionEvent se) {

  HttpSession session = se.getSession();
  ↓↓★ココ★↓↓
  LoginDto loginDto = (LoginDto)session.getAttribute("loginDto");
  if (loginDto == null)
    return;
  }
  // ログイン情報をデータベースから削除
  LoginService loginService =
    SingletonS2Container.getComponent(LoginService.class);
  loginService.logout(loginDto);
}

java.lang.ClassCastException: org.seasar.framework.container.hotdeploy.HotdeployHttpSession$SerializedObjectHolder cannot be cast to com.kowa.ebiz.elsis2.core.server.dto.LoginDto
	at com.kowa.ebiz.elsis2.core.server.listener.ApplicationEventListener.sessionDestroyed(ApplicationEventListener.java:110)
	at org.apache.catalina.session.StandardSession.expire(StandardSession.java:697)
	at org.apache.catalina.session.StandardSession.isValid(StandardSession.java:581)
	at org.apache.catalina.session.ManagerBase.processExpires(ManagerBase.java:679)
	at org.apache.catalina.session.ManagerBase.backgroundProcess(ManagerBase.java:664)
	at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1285)
	at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1570)
	at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1579)
	at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1579)
	at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1559)
	at java.lang.Thread.run(Thread.java:619)



Seasar-user メーリングリストの案内