[Seasar-user:16597] Re: ThrowsInterceptor で例外発生箇所を特定するには

黒川博之 [E-MAIL ADDRESS DELETED]
2009年 1月 7日 (水) 11:48:51 JST


海野様

>    StackTraceElement err = e.getStackTrace()[0];
>    err.getClassName();
>    err.getMethodName();
System.out.println(err.getClassName());
System.out.println(err.getMethodName());

すると、これらが出力されました。
org.seasar.framework.util.PreparedStatementUtil
executeUpdate

フレームワークのクラス/メソッドのようですね。



----- Original Message ----- 
From: <[E-MAIL ADDRESS DELETED]>
To: <[E-MAIL ADDRESS DELETED]>
Sent: Wednesday, January 07, 2009 11:39 AM
Subject: [Seasar-user:16595] Re: ThrowsInterceptor で例外発生箇所を特定するには


> 海野です。
>
> もう1つだけ思いついたので、、
>
>    public void handleThrowable(RuntimeException e, MethodInvocation
> invocation) throws Throwable {
>
> メソッド内で
>
>    StackTraceElement err = e.getStackTrace()[0];
>    err.getClassName();
>    err.getMethodName();
>
> というのはどうでしょうか。
>
>
>> ひがです。
>>>
>>> 返答ありがとうございます。
>>>
>>> >getTargetClass(invocation).getName()
>>> >invocation.getMethod().getName()
>>> これだと、ThrowsInterceptorが適用されているactionクラス名とメソッド名
>>> が取得されてしまうようです。
>>>
>>> 独自例外を定義して、そのクラスにクラス名とメソッド名のプロパティを
>>> Stringで持たせて、catch句でクラス名とメソッド名をセットするしか
>>> 無いですかね。。。
>>> *そうなると、全ての箇所にtry catchを書く必要があるから、AOPの威力が魅力が落ちそうな予感。。。
>>>
>> ServiceのすべてのメソッドにInterceptorをしかけて、
>> そこでThreadLocalにクラス名とメソッド名を格納し、
>> ThrowsInterceptorで取り出すという方法もあります。
>> _______________________________________________
>> Seasar-user mailing list
>> [E-MAIL ADDRESS DELETED]
>> https://ml.seasar.org/mailman/listinfo/seasar-user
>>
>>
>
>
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user 



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