Плетение AspectJ CTW работает везде, кроме развернутой WAR? - PullRequest
3 голосов
/ 12 декабря 2011

Я добавил AspectJ CTW в проект и все (кажется) работает чудесно. Я могу запустить код в тестах, и это демонстрирует, что AspectJ перехватывает соответствующие методы. После того, как я упаковал код и развернул его в Tomcat в WAR, он больше не работает.

Я пробовал много разных вещей, но, похоже, ничего из этого не работает. Я использую плагин Maven в Maven 2, и я использую аннотации AspectJ. Все отзывы в сборке говорят о поиске методов и ткачестве.

Почему он перестает работать после развертывания в Tomcat?

        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>aspectj-maven-plugin</artifactId>
            <version>1.3</version>
            <configuration>
                <complianceLevel>1.6</complianceLevel>
                <source>1.6</source>
                <target>1.6</target>
                <showWeaveInfo>true</showWeaveInfo>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>compile</goal>
                        <goal>test-compile</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

1 Ответ

1 голос
/ 14 декабря 2011

Исправлением для меня было превращение моих точек вызова () в исполнение ().

Как первый пользователь AspectJ, я столкнулся с моей первой «ошибкой», которая фактически указана непосредственно в их FAQ. Код, вызванный с помощью отражения, не вызовет pointcut call ().

http://www.eclipse.org/aspectj/doc/released/faq.php#q:reflectiveCalls

Проблема заключалась в том, что в веб-приложении фрагмент интересного кода вызывался с помощью рефлексии. В тестах это работало нормально, потому что класс и метод вызывались напрямую. Следовательно, тесты работали нормально, но после развертывания ничего не получалось.

Эта проблема не имеет ничего общего с Tomcat или развертыванием.

...