EclipseとJavaEEコードでのセッションのデバッグは苦痛であり、誰かが私よりも優れた方法を持っていることを望んでいます。
これは、2つのEJBステートレスBeanメソッド間の一般的な呼び出しスタックです(TomEE 1.0を使用)。
NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]
NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39
DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25
Method.invoke(Object, Object...) line: 597
ReflectionInvocationContext$BeanInvocation(ReflectionInvocationContext$Invocation).invoke() line: 181
ReflectionInvocationContext.proceed() line: 163
StatsInterceptor.record(InvocationContext, Method) line: 176
StatsInterceptor.invoke(InvocationContext) line: 95
GeneratedMethodAccessor35.invoke(Object, Object[]) line: not available
DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25
Method.invoke(Object, Object...) line: 597
ReflectionInvocationContext$InterceptorInvocation(ReflectionInvocationContext$Invocation).invoke() line: 181
ReflectionInvocationContext.proceed() line: 163
CdiInterceptor.invoke(InvocationContext) line: 129
CdiInterceptor.access$000(CdiInterceptor, InvocationContext) line: 45
CdiInterceptor$1.call() line: 66
CdiInterceptor.aroundInvoke(InvocationContext) line: 72
GeneratedMethodAccessor34.invoke(Object, Object[]) line: not available
DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25
Method.invoke(Object, Object...) line: 597
ReflectionInvocationContext$InterceptorInvocation(ReflectionInvocationContext$Invocation).invoke() line: 181
ReflectionInvocationContext.proceed() line: 163
InterceptorStack.invoke(Object...) line: 138
StatelessContainer._invoke(Method, Method, Object[], Instance, ThreadContext, InterfaceType) line: 226
StatelessContainer.invoke(Object, InterfaceType, Class, Method, Object[], Object) line: 178
StatelessEjbObjectHandler(EjbObjectProxyHandler).synchronizedBusinessMethod(Class<?>, Method, Object[], Object) line: 260
StatelessEjbObjectHandler(EjbObjectProxyHandler).businessMethod(Class<?>, Method, Object[], Object) line: 240
StatelessEjbObjectHandler(EjbObjectProxyHandler)._invoke(Object, Class, Method, Object[]) line: 91
StatelessEjbObjectHandler(BaseEjbProxyHandler).invoke(Object, Method, Object[]) line: 284
MyService$LocalBeanProxy.removeScheduledEvent(ScheduledEvent) line: not available
これは、私が調べたくない30行のJavaEE配管メソッド呼び出しです。
メソッドにステップインするときにこれをすべてスキップする唯一の信頼できる方法は、次のメソッド呼び出しにブレークポイントを設定し、「StepInto」ではなく「StepOver」を押すことです。ただし、そのように常にブレークポイントを設定することは、単純な「ステップイン」と比較して大きな手間です。検査している方法から抜け出す必要があるときは、同じことを繰り返さなければなりません。
Eclipseのステップフィルターについて知っていて、それらを使用してみましたが、自動生成されたプロキシクラスの一部が自分のパッケージに挿入されているため、簡単に使用できません。
誰かがこれに対する良い解決策を持っていますか?
アップデート
次のステップフィルターを使用すると、今のところすべての不要なステップがスキップされます。
*$$* // for CGLib proxies
*$LocalBeanProxy // for other EJB proxies
java.*
net.sf.*
sun.*
編集2
MyServiceクラスの例を次に示します。
public void removeScheduledEvent(ScheduledEvent event) {
// ...
otherEJB.doStuff(event);
}
otherEJBはステートレスコンテナで実行されるEJBBeanであるため、上記の30個の呼び出しはプロキシを介して自動的に挿入されます。