[cubby-user:231] Re: Tomcat7 で Cubby で作成したWebアプリケーションを停止した際にメモリーリークのログが出力されるのを回避したい

はっしぃ [E-MAIL ADDRESS DELETED]
2013年 12月 8日 (日) 23:43:19 JST


馬場様

早々のご返信にもかかわらず、お礼が遅れ申し訳ございません。
ご教授いただきました方法にて、本件の課題をクリアすることができました!
ありがとうございました。
とても助かりました。

今後ともよろしくお願いいたします。


2013年11月27日 12:34 Yasuyuki BABA <yasuyuki.baba @ gmail.com>:

> こんにちは、馬場です。
>
> 以下のような ThreadContext をクリアするリスナを登録することで解消すると思います。
> プラグインだとフォワードするときにうまく動かないかもしれないです。
>
> ちょっとワークアラウンド的な方法なのと、きちんと検証できていないので申し訳ありません。
> お試しいただければと思います。
>
> ---------------
> import java.lang.reflect.Field;
>
> import javax.servlet.ServletRequestEvent;
> import javax.servlet.ServletRequestListener;
>
> import org.seasar.cubby.internal.controller.ThreadContext;
> import org.seasar.framework.util.ClassUtil;
> import org.seasar.framework.util.FieldUtil;
>
> public class ThreadContextListener implements ServletRequestListener {
>
>     private static ThreadLocal<ThreadContext> PREVIOUS = getPrevious();
>
>     private static ThreadLocal<ThreadContext> getPrevious() {
>         Field field = ClassUtil.getDeclaredField(ThreadContext.class,
> "PREVIOUS");
>         field.setAccessible(true);
>         @SuppressWarnings("unchecked")
>         ThreadLocal<ThreadContext> tl = (ThreadLocal<ThreadContext>)
> FieldUtil.get(field, null);
>         return tl;
>     }
>
>     public void requestInitialized(ServletRequestEvent sre) {
>     }
>
>     public void requestDestroyed(ServletRequestEvent sre) {
>         ThreadContext.remove();
>         PREVIOUS.remove();
>     }
> }
> ---------------
>
> 2013年11月26日 21:21 はっしぃ <hasuie @ gmail.com>:
> > お世話になります。はっしぃと申します。
> >
> > 表題のとおり、Tomcat7
> 停止時に以下のようなスレッドローカルのメモリリークエラーがログ出力されるのを回避したいのですが、何か手はないでしょうか?
> >
> > 重大: A web application created a ThreadLocal with key of type
> > [java.lang.ThreadLocal] (value [java.lang.ThreadLocal @ 543e51ed]) and a
> value
> > of type [org.seasar.cubby.internal.controller.ThreadContext] (value
> > [org.seasar.cubby.internal.controller.ThreadContext @ 3605435c]) but
> failed to
> > remove it when
> > the web application was stopped. To prevent a memory leak, the
> ThreadLocal
> > has been forcibly removed.
> >
> > 自前で使用しているThreadLocal変数は、AbstractPlugin#invokeActionResult
> > にて、クリアしていますが、フレームワークの ThreadContext
> > のクリア等がアプリケーション側で可能であれば、ご教授していただけると、こちらで対応可能なのですが・・・。
> >
> > 以上よろしくお願いいたします。
> >
> > _______________________________________________
> > cubby-user mailing list
> > cubby-user @ ml.seasar.org
> > https://ml.seasar.org/mailman/listinfo/cubby-user
> >
>
>
>
> --
> BABA,Yasuyuki
> yasuyuki.baba @ gmail.com
> _______________________________________________
> cubby-user mailing list
> cubby-user @ ml.seasar.org
> https://ml.seasar.org/mailman/listinfo/cubby-user
>
-------------- next part --------------
HTMLの添付ファイルを保管しました...
URL: <http://ml.seasar.org/archives/cubby-user/attachments/20131208/dea957f4/attachment.html>


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