2016-11-25 7 views
1

私はJBoss 6 ASを使用しており、デプロイされたアプリケーションからいくつかのパッケージのクラスにAOP経由でインターセプタを追加しようとしています。これはシナリオです。JBoss 6 AS with AOP throws StackOverflowError

  • 私はアドバイスを追加したいクラスを含むapp.jarです。このJARにもいくつかのEJB(ejb-jar.xml、jboss.xml)があります。
  • 私はこのようにJBossインターセプターに私が作成した:私はenableLoadTimeWeaving(ブートストラップ/ aop.xml)

  • を設定している

    <?xml version="1.0" encoding="UTF-8"?> 
    <aop xmlns="urn:jboss:aop-beans:1.0"> 
        <interceptor name="MyInterceptor" class="util.MyInterceptor"/> 
        <bind pointcut="execution(* my.app.*->*(..))"> 
         <interceptor-ref name="MyInterceptor"/> 
        </bind> 
    </aop> 
    
  • :私は含まれていjboss-aop.xmlファイルを作成し

    package util; 
    import org.jboss.aop.joinpoint.Invocation; 
    import org.jboss.aop.joinpoint.MethodInvocation; 
    public class MyInterceptor implements org.jboss.aop.advice.Interceptor { 
        @Override 
        public Object invoke(Invocation invocation) throws Throwable { 
         long startTime = System.currentTimeMillis(); 
         try { 
          return invocation.invokeNext(); 
         } finally { 
          long endTime = System.currentTimeMillis() - startTime; 
          System.out.println("MyInterceptor : " + endTime); 
          if (invocation instanceof MethodInvocation) { 
           MethodInvocation mi = (MethodInvocation) invocation; 
           String clazz = ""; 
           String method = ""; 
           try { 
            clazz = mi.getTargetObject().getClass().toString(); 
            method = mi.getMethod().getName(); 
           } catch (Throwable e) { 
            System.out.println("Error when trying to get target info"); 
           } 
           System.out.println("MyInterceptor : " + endTime); 
          } 
         } 
        } 
    
        @Override 
        public String getName() { 
         return "MyInterceptor"; 
        } 
    } 
    
  • 私は適切な場所にpluggable-instrumentor.jarを持っています(JBOSS/bin)
  • は、私は私がMyInterceptor.classを入れて、そのMETA-INFに私が言われていることを、

jboss-aop.xmlファイルを配置したJARファイルinterceptor.jarを作成している-javaagent:pluggable-instrumentor.jar

  • オプションを使用してサーバーを開始しています、問題は、私がアプリケーションを実行し、my.appパッケージのクラスから何らかのメソッドを呼び出すと、インターセプタが呼び出されたように見えますが、それは厄介なものですStackOverflowErrorをスローします。これは私のエラー・スタックの一部です:

    at my.app.JoinPoint_invoke_N_5164114663869737738_3.invokeNext(JoinPoint_invoke_N_5164114663869737738_3.java) [:] 
    at my.app.JoinPoint_invoke_N_5164114663869737738_3.invokeJoinpoint(JoinPoint_invoke_N_5164114663869737738_3.java) [:] 
    at my.app.MyInterceptor$MyInterceptorAdvisor.invoke_N_5164114663869737738(MyInterceptor$MyInterceptorAdvisor.java) [:] 
    at my.app.MyInterceptor.invoke(MyInterceptor.java) [:] 
    

    誰もがいくつかの同様の問題があった場合に任意のヘルプはappeciatedすることになります。

    java.lang.StackOverflowError 
    at org.jboss.resteasy.core.SynchronousDispatcher.unwrapException(SynchronousDispatcher.java:345) [:6.1.0.Final] 
    at org.jboss.resteasy.core.SynchronousDispatcher.handleApplicationException(SynchronousDispatcher.java:321) [:6.1.0.Final] 
    at org.jboss.resteasy.core.SynchronousDispatcher.handleException(SynchronousDispatcher.java:214) [:6.1.0.Final] 
    at org.jboss.resteasy.core.SynchronousDispatcher.handleInvokerException(SynchronousDispatcher.java:190) [:6.1.0.Final] 
    at org.jboss.resteasy.core.SynchronousDispatcher.getResponse(SynchronousDispatcher.java:534) [:6.1.0.Final] 
    at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:496) [:6.1.0.Final] 
    at org.jboss.resteasy.core.SynchronousDispatcher.invokePropagateNotFound(SynchronousDispatcher.java:155) [:6.1.0.Final] 
    at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:212) [:6.1.0.Final] 
    at org.jboss.resteasy.plugins.server.servlet.FilterDispatcher.doFilter(FilterDispatcher.java:59) [:6.1.0.Final] 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:274) [:6.1.0.Final] 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:242) [:6.1.0.Final] 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [:6.1.0.Final] 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) [:6.1.0.Final] 
    at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:181) [:6.1.0.Final] 
    at org.jboss.modcluster.catalina.CatalinaContext$RequestListenerValve.event(CatalinaContext.java:285) [:1.1.0.Final] 
    at org.jboss.modcluster.catalina.CatalinaContext$RequestListenerValve.invoke(CatalinaContext.java:261) [:1.1.0.Final] 
    at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:88) [:6.1.0.Final] 
    at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:100) [:6.1.0.Final] 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:159) [:6.1.0.Final] 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [:6.1.0.Final] 
    at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158) [:6.1.0.Final] 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [:6.1.0.Final] 
    at org.jboss.web.tomcat.service.request.ActiveRequestResponseCacheValve.invoke(ActiveRequestResponseCacheValve.java:53) [:6.1.0.Final] 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:362) [:6.1.0.Final] 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [:6.1.0.Final] 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:654) [:6.1.0.Final] 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:951) [:6.1.0.Final] 
    at java.lang.Thread.run(Thread.java:745) [:1.7.0_79] 
    Caused by: java.lang.StackOverflowError 
    at my.app.JoinPoint_invoke_N_5164114663869737738_3.invokeJoinpoint(JoinPoint_invoke_N_5164114663869737738_3.java) [:] 
    at my.app.MyInterceptor$MyInterceptorAdvisor.invoke_N_5164114663869737738(MyInterceptor$MyInterceptorAdvisor.java) [:] 
    at my.app.MyInterceptor.invoke(MyInterceptor.java) [:] 
    at my.app.JoinPoint_invoke_N_5164114663869737738_3.invokeNext(JoinPoint_invoke_N_5164114663869737738_3.java) [:] 
    at my.app.JoinPoint_invoke_N_5164114663869737738_3.invokeJoinpoint(JoinPoint_invoke_N_5164114663869737738_3.java) [:] 
    at my.app.MyInterceptor$MyInterceptorAdvisor.invoke_N_5164114663869737738(MyInterceptor$MyInterceptorAdvisor.java) [:] 
    at my.app.MyInterceptor.invoke(MyInterceptor.java) [:] 
    

    基本的に何が起こるかStackOverflowErrorが発生されるまで、これらの4本のラインがスローされていることです!

  • +0

    あなたはJBoss EAP 6を意味しますか? –

    +0

    JBoss AS 6(コミュニティディストリビューション)とEAP 6(これはJBoss AS 7に基づくエンタープライズディストリビューション) –

    +0

    だから基本的にJBoss 6.x IIUC? –

    答えて

    1

    私は問題を見つけました...インターセプタを同じパッケージmy.appに入れ、utilではなく...最終的にスタックが一杯になるまで無限に呼び出していました。だから...私の悪い

    +0

    十分な評判ポイントを集めたら、あなた自身の答えを受け入れて質問を閉じることができます。 – kriegaex

    関連する問題