7

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個の呼び出しはプロキシを介して自動的に挿入されます。

4

3 に答える 3

4

Eclipseステップフィルターに関するいくつかの情報:

Eclipseのデバッグ/AOP配線をスキップするメソッドへのステップ

デバッグビューで動的に生成されたクラスをフィルタリングするにはどうすればよいですか?

TomEEで使用する実際のステップフィルター:

*$LocalBeanProxy
*$CGLibInterceptor
net.sf.*
org.apache.geronimo.*
org.apache.naming.*
org.apache.openejb.*
org.apache.tomee.*
org.apache.webbeans.*
于 2012-10-30T18:49:31.003 に答える
2

デバッグするときCtrlAltは、ハイパーリンクに変わるまで、もう一度停止するメソッド名にカーソルを合わせて、メソッド名をクリックします。この機能は、ステップインセレクションと呼ばれます。

于 2012-10-26T17:57:04.803 に答える
-1

code + test(ブレークポイントを設定せずに実行するだけで)段階的に。例外スタックは、EEでは役に立たないことがよくあります。

于 2012-10-26T16:40:41.593 に答える