0 Replies Latest reply on Aug 22, 2011 6:37 PM by gustavo.gomesc

    Problems when debug EJB intercepted by JBoss AOP

    gustavo.gomesc

      I am using the JBoss AOP for intercept a static method.

       

      The jboss-aop.xml used is:

      <?xml version="1.0" encoding="UTF-8"?>

      <aop xmlns="urn:jboss:aop-beans:1.0">

          <interceptor class="com.prana.tools.jee.log.LogInterceptor"

                  scope="PER_VM" />

         

          <bind pointcut="call(* com.prana.tools.jee.log.Log->getMessageKey(java.lang.Object))

                  OR call(* com.prana.tools.jee.log.Log->key(java.lang.Object))">

              <interceptor-ref name="com.prana.tools.jee.log.LogInterceptor" />

          </bind>

      </aop>

       

      The EJB class that will be intercepted is:

       

      @Stateless

      public class TesteMkImpl implements TesteMkLocal, TesteMkRemote {

          private CampoMonetario teste1;

          private CampoTexto teste2, teste3;

       

          public TesteMkImpl() {

          }

       

          private String test(int a, int b) {

              return Boolean.toString(a > b);

          }

       

          public void executaTeste() throws TesteMkException {

              teste1 = new CampoMonetario(10);

              teste2 = new CampoTexto("N");

              teste3 = new CampoTexto("B./ID 9004915410/32460");

       

              validaNroControleParticipante2();

              validaNroControleParticipante(teste1, teste2, teste3);

       

              if (!teste1.isPreenchido()

                      || teste1.getValorBigDecimal().toString().equalsIgnoreCase("")) {

                  Object[] param = { "Teste", "Teste2" };

                  throw new TesteMkException(Log.getMessageKey("teste"), param);

              }

       

              if (!teste1.isPreenchido()

                      || teste1.getValorBigDecimal().toString().equalsIgnoreCase("")) {

                  Object[] param = { "Teste", "Teste2" };

                  throw new TesteMkException(Log.getMessageKey("teste"), param);

              }

              if (test(5, 6).equalsIgnoreCase("XPTO")) {

                  Object[] param = { "Teste", "Teste2" };

                  throw new TesteMkException(Log.getMessageKey("teste"), param);

              }

              if (test(6, 7).equalsIgnoreCase("XPTO")) {

                  Object[] param = { "Teste", "Teste2" };

                  throw new TesteMkException(Log.getMessageKey("teste"), param);

              }

          }

       

          private void execute() throws TesteMkException {

              int i = 1;

              Object[] param = null;

             

              if (Boolean.parseBoolean(test(1, 2))

                      || (test(3, 4).equalsIgnoreCase("XPTO"))

                      || test(5, 6).equalsIgnoreCase("XYZ")) {

                  param = new Object[] { "Teste" + i, "Teste" + (i * 2) };

              }

              i++;

              if (Boolean.parseBoolean(test(1, 2))

                      || (test(3, 4).equalsIgnoreCase("XPTO"))

                      || test(5, 6).equalsIgnoreCase("XYZ")) {

                  param = new Object[] { "Teste" + i, "Teste" + (i * 2) };

              }

              i++;

              if (Boolean.parseBoolean(test(1, 2))

                      || (test(3, 4).equalsIgnoreCase("XPTO"))

                      || test(5, 6).equalsIgnoreCase("XYZ")) {

                  param = new Object[] { "Teste" + i, "Teste" + (i * 2) };

              }

              i++;

              if (Boolean.parseBoolean(test(1, 2))

                      || (test(3, 4).equalsIgnoreCase("XPTO"))

                      || test(5, 6).equalsIgnoreCase("XYZ")) {

                  param = new Object[] { "Teste" + i, "Teste" + (i * 2) };

              }

              i++;

              ...

              repeat this if condition some times.

               ...

              if (Boolean.parseBoolean(test(1, 2))

                      || (test(3, 4).equalsIgnoreCase("XPTO"))

                      || test(5, 6).equalsIgnoreCase("XYZ")) {

                  param = new Object[] { "Teste" + i, "Teste" + (i * 2) };

              }

              i++;

      ... repe

         }

      }

       

      And the class that test this EJB is:

       

      public class TesteMkTest {

          private TesteMkRemote testeMk;

          private TestLookup lookup;

          private TesteMkImpl testeMkImpl;

       

          public void setUp() throws Exception {

              lookup = new TestLookup();

              testeMk = (TesteMkRemote)lookup.getInitialContext().lookup("testeMk/TesteMkImpl/remote");

              testeMkImpl = new TesteMkImpl();

          }

         

          public void executeRemote() throws TesteMkException{

              testeMk.execute();

          }

         

         

          public void executeLocal() throws TesteMkException{

              testeMkImpl.execute();

          }

         

          public static void main(String[] args) throws Exception {

              TesteMkTest test = new TesteMkTest();

              test.setUp();

              test.executeRemote();

              test.executeLocal();

          }

      }

       

      I deploy the EJB with the interception configuration (jboss-aop.xml) in the JBoss AS 5.1.0.GA that uses JBoss AOP 2.1.1.GA in debug mode.

      When I run the test class with a breakpoint on the first line of the method execute of the EJB and step over the method lines, the debug shows the wrong line after some step over on the executeRemote call, but no problems on the executeLocal call.

       

      Does anyone know if this is a bug?