2015-02-12 2 views
0

Я пытаюсь проверить время загрузки ткачества в простой привет мир нормального примера на основе сервлетов в wildfly8.2Не можете найти родительский аспект для конкретного аспекта

У меня есть ниже Аспект кода

package com.test.aspects; 

import org.aspectj.lang.annotation.Around; 
import org.aspectj.lang.annotation.Aspect; 
import org.aspectj.lang.annotation.Pointcut; 

import com.test.helloworld.HelloService; 

@Aspect 
public abstract class FieldAspect { 

    @Pointcut 
    public abstract void getField(); 

    @Pointcut 
    public abstract void setField(); 

    @Around("getField()") 
    public HelloService getFieldValue() { 
     System.out.println("In FieldAspect.getFieldValue() - Applying around advice - getting the value (Andy) for field annotated variable"); 
     return new HelloService(); 
    } 

    @Around("setField()") 
    public void setFieldValue() { 
     System.out 
       .println("In FieldAspect.setFieldValue() - Applying around advice - throw RuntimeException if field annotated variable is set"); 
     throw new RuntimeException(); 
    } 
} 

Ниже времени выполнения поле аннотаций

package com.test.aspects; 

import java.lang.annotation.Documented; 
import java.lang.annotation.ElementType; 
import java.lang.annotation.Retention; 
import java.lang.annotation.RetentionPolicy; 
import java.lang.annotation.Target; 

@Target({ ElementType.FIELD }) 
@Retention(RetentionPolicy.RUNTIME) 
@Documented 
public @interface Field { 

} 

Test Servlet:

package com.test.helloworld; 

import java.io.IOException; 
import java.io.PrintWriter; 

import javax.servlet.ServletException; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

import com.test.aspects.Field; 

@SuppressWarnings("serial") 
@WebServlet("/HelloWorld") 
public class HelloWorldServlet extends HttpServlet { 

    static String PAGE_HEADER = "<html><head><title>helloworld</title></head><body>"; 

    static String PAGE_FOOTER = "</body></html>"; 

    @Field 
    public HelloService helloService; 

    @Override 
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
     resp.setContentType("text/html"); 
     PrintWriter writer = resp.getWriter(); 
     writer.println(PAGE_HEADER); 
     writer.println("<h1>" + helloService.createHelloMessage("World") + "</h1>"); 
     writer.println(PAGE_FOOTER); 
     writer.close(); 
    } 

} 
класс

Услуги:

package com.test.helloworld; 

public class HelloService { 

    String createHelloMessage(String name) { 
     return "Hello " + name + "!"; 
    } 

} 

aop.xml под веб-инф:

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

     <!-- Field annotation example --> 
     <concrete-aspect name="com.test.aspects.MyFieldAspect" 
      extends="com.test.aspects.FieldAspect"> 
      <pointcut name="getField" expression="get(@com.test.aspects.Field * *)" /> 
      <pointcut name="setField" expression="set(@com.test.aspects.Field * *)" /> 
     </concrete-aspect> 


    </aspects> 

    <weaver options="-verbose -showWeaveInfo" /> 
</aspectj> 

И в pom.xml:

<?xml version="1.0"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>org.wildfly.quickstarts</groupId> 
    <artifactId>wildfly-helloworld</artifactId> 
    <version>8.0.0-SNAPSHOT</version> 
    <packaging>war</packaging> 
    <name>WildFly : Helloworld</name> 
    <description>WildFly : Helloworld</description> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 


     <version.wildfly.maven.plugin>1.0.2.Final</version.wildfly.maven.plugin> 

     <version.jboss.spec.javaee.7.0>1.0.0.Final</version.jboss.spec.javaee.7.0> 


     <!-- other plugin versions --> 
     <version.compiler.plugin>3.1</version.compiler.plugin> 
     <version.war.plugin>2.1.1</version.war.plugin> 

     <!-- maven-compiler-plugin --> 
     <maven.compiler.target>1.7</maven.compiler.target> 
     <maven.compiler.source>1.7</maven.compiler.source> 
    </properties> 

    <dependencyManagement> 
     <dependencies> 
      <!-- Define the version of JBoss' Java EE 7 APIs we want to use --> 
      <!-- JBoss distributes a complete set of Java EE 7 APIs including 
       a Bill of Materials (BOM). A BOM specifies the versions of a "stack" (or 
       a collection) of artifacts. We use this here so that we always get the correct 
       versions of artifacts. Here we use the jboss-javaee-7.0 stack (you can 
       read this as the JBoss stack of the Java EE 7 APIs). You can actually 
       use this stack with any version of WildFly that implements Java EE 7, not 
       just WildFly 8! --> 
      <dependency> 
       <groupId>org.jboss.spec</groupId> 
       <artifactId>jboss-javaee-7.0</artifactId> 
       <version>1.0.2</version> 
       <type>pom</type> 
      </dependency> 
     </dependencies> 
    </dependencyManagement> 

    <dependencies> 
     <dependency> 
      <groupId>org.aspectj</groupId> 
      <artifactId>aspectjrt</artifactId> 
      <version>1.8.2</version> 
     </dependency> 

     <!-- Import the CDI API, we use provided scope as the API is included in JBoss WildFly --> 
     <dependency> 
      <groupId>javax.enterprise</groupId> 
      <artifactId>cdi-api</artifactId> 
      <version>1.2</version>    
     </dependency> 

     <!-- Import the Common Annotations API (JSR-250), we use provided scope 
      as the API is included in JBoss WildFly --> 
     <dependency> 
      <groupId>org.jboss.spec.javax.annotation</groupId> 
      <artifactId>jboss-annotations-api_1.2_spec</artifactId> 
      <version>1.0.0.Final</version> 
     </dependency> 

     <!-- Import the Servlet API, we use provided scope as the API is included in JBoss WildFly --> 
     <dependency> 
      <groupId>org.jboss.spec.javax.servlet</groupId> 
      <artifactId>jboss-servlet-api_3.1_spec</artifactId> 
      <version>1.0.0.Final</version> 
     </dependency> 

    </dependencies> 

    <build> 
     <!-- Set the name of the war, used as the context root when the app 
      is deployed --> 
     <finalName>wildfly-helloworld</finalName> 
     <pluginManagement> 
      <plugins> 
       <!--This plugin's configuration is used to store Eclipse m2e settings 
        only. It has no influence on the Maven build itself. --> 
       <plugin> 
        <groupId>org.eclipse.m2e</groupId> 
        <artifactId>lifecycle-mapping</artifactId> 
        <version>1.0.0</version> 
        <configuration> 
         <lifecycleMappingMetadata> 
          <pluginExecutions> 
           <pluginExecution> 
            <pluginExecutionFilter> 
             <groupId> 
              org.apache.maven.plugins 
             </groupId> 
             <artifactId> 
              maven-compiler-plugin 
             </artifactId> 
             <versionRange> 
              [2.5.1,) 
             </versionRange> 
             <goals> 
              <goal>compile</goal> 
             </goals> 
            </pluginExecutionFilter> 
            <action> 
             <ignore></ignore> 
            </action> 
           </pluginExecution> 
           <pluginExecution> 
            <pluginExecutionFilter> 
             <groupId> 
              org.codehaus.mojo 
             </groupId> 
             <artifactId> 
              aspectj-maven-plugin 
             </artifactId> 
             <versionRange> 
              [1.7,) 
             </versionRange> 
             <goals> 
              <goal>compile</goal> 
              <goal>test-compile</goal> 
             </goals> 
            </pluginExecutionFilter> 
            <action> 
             <ignore></ignore> 
            </action> 
           </pluginExecution> 
          </pluginExecutions> 
         </lifecycleMappingMetadata> 
        </configuration> 
       </plugin> 
      </plugins> 
     </pluginManagement> 

     <plugins> 
      <plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>aspectj-maven-plugin</artifactId> 
       <configuration> 
        <complianceLevel>1.6</complianceLevel> 
        <source>1.6</source> 
        <target>1.6</target> 
       </configuration> 
       <executions> 
        <execution> 
         <goals> 
          <goal>compile</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 

      <plugin> 
       <artifactId>maven-war-plugin</artifactId> 
       <version>2.6</version> 
       <configuration> 
        <!-- Java EE 7 doesn't require web.xml, Maven needs to catch up! --> 
        <failOnMissingWebXml>false</failOnMissingWebXml> 
       </configuration> 
      </plugin> 
      <!-- WildFly plugin to deploy war --> 
      <plugin> 
       <groupId>org.wildfly.plugins</groupId> 
       <artifactId>wildfly-maven-plugin</artifactId> 
       <version>1.0.2.Final</version> 
       <configuration> 
        <version>1.0.2.Final</version> 
        <jvmArgs>${the-whole-jvm-args}</jvmArgs> 
       </configuration> 
      </plugin> 
      <!-- Compiler plugin enforces Java 1.6 compatibility and activates 
       annotation processors --> 
      <plugin> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>3.1</version> 
       <configuration> 
        <source>1.7</source> 
        <target>1.7</target> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 

</project> 

Используется ссылку ниже, чтобы настроить время загрузки ткачество : http://wiki.eclipse.org/LTWJboss7

Итак, после выше, если я начну wildfl y, он показывает ниже трассировку стека ошибок.

[[email protected]] info AspectJ Weaver Version 1.8.5 built on Thursday Jan 29, 2015 at 01:03:58 GMT 
[[email protected]] info register classloader [email protected] 
[[email protected]] info using configuration file:/helloworld/target/wildfly-helloworld.war!/WEB-INF/aop.xml 
[[email protected]] info define aspect com.test.aspects.MyFieldAspect 
[[email protected]] error Cannot find parent aspect for: <concrete-aspect name='com.test.aspects.MyFieldAspect' extends='com.test.aspects.FieldAspect' perclause='null'/> in aop.xml 
[[email protected]] error Concrete-aspect 'com.test.aspects.MyFieldAspect' could not be registered 
[[email protected]] warning failure(s) registering aspects. Disabling weaver for class loader [email protected] 

Я смущенно здесь, что сделано неправильно. Может кто-нибудь помочь мне запустить мою тестовую программу. Я изучаю AspectJ и LTW с wildfly и новичок в этом. Thanks,

ответ

0

classpath был неправильным. Поместите баннер aspectjWeaver в папку WEB-INF/lib. Также пакет aop-модуль создает Aspects внутри военного модуля, создает аспекты в разных модулях и пакетах в банке.

+0

Вы можете либо принять свой собственный вопрос, чтобы закрыть его, либо просто удалить его, если хотите, потому что вся указанная информация не связана с вашей проблемой. – kriegaex

+0

Возможно, вы поможете мне исправить свой ответ как ошибку ошибки «Не удается найти родительский аспект для: <конкретного-аспекта name = 'com.test.aspects.MyFieldAspect' extends = 'com.test.aspects.FieldAspect' perclause = 'null '/> "в aop.xm произошел как аспекты com.test.aspects.FieldAspect не был найден в пути к классам и тот же, что я нашел во время отладки кода aspectjweaver: BcelWorld.resolve(). Причина в том, что я не должен помещать свой aop.xml в войну, так как в аспекте classpath не найден. – hitts

+0

хотя мое решение, которое я применил и работал, поэтому я закрываю его, принимая его :) n thnx, если вы предлагаете мне исправить свои фразы в более технической глубине. – hitts