Hi,

I have some error during the invocation of a bean inside an Aspect, and I also 
would like to have some suggestions about initialization of beans inside an 
aspect class.

1. I am trying to invoke a bean [2] inside my aspects class [1], but in the end 
I get the following error [4]. It seems that the @Autowired parameter didn't 
initialize the bean. My configuration file is in [3]. What am I doing wrong?


2. I want that the bean will be invoked one time during initialization. So, 
even the `map` function is called multiple times, the bean is already 
initialized.
Another solution is, I want (I don't know if it is possible), that the bean 
will be initialized when the pointcut `map` or `reduce` is invoked by the first 
time.
Are these requests possible to do?

Thanks,





[1] My aspect class @Aspect @Configurable @Component public class 
MapReduceAspects {
    @Autowired MedusaDigestsdigests;

@Before("execution(* map(..))")
public void mymap(JoinPoint joinPoint) {
        System.out.println("My Map Execution: " + joinPoint.getArgs() +":" + 
joinPoint.getTarget());
        Object[] obj = joinPoint.getArgs();

        if (obj.length >0) {
            byte[] key = convertToBytes(obj[0]);
        byte[] value = convertToBytes(obj[1]);

            digests.updateDigest(key, value);
        }
    }

@Before("execution(* reduce(..))")
public void myreduce(JoinPoint joinPoint) { System.out.println("My Reduce 
Execution");
       Object[] obj = joinPoint.getArgs();

       if (obj.length >0) {
           byte[] key = convertToBytes(obj[0]);
           byte[] value = convertToBytes(obj[1]);

           digests.updateDigest(key, value);
       }
    }

}


[1] My aspect

@Component public class MedusaDigests {
    private final StringMD5 ="MD5";
    private MessageDigestmda =null;

    public MedusaDigests() {
        try {
            mda = MessageDigest.getInstance(MD5);
        }catch (NoSuchAlgorithmException e) {
            // TODO Auto-generated catch block e.printStackTrace();
        }
    }

[3] My beans-aspects.xml

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; xmlns:aop="http://www.springframework.org/schema/aop"; xmlns:context="http://www.springframework.org/schema/context"; xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd";>

    <aop:aspectj-autoproxy proxy-target-class="true"/>
<!--<aop:include name="mapreduceAspect"/>--> <!--<aop:include name="jobClient"/>--> <!--</aop:aspectj-autoproxy>--> <!--<context:load-time-weaver/>--> <context:component-scan base-package="org.apache.hadoop.mapred"/>

<bean id="mapreduceAspect" class="org.apache.hadoop.mapred.aspects.MapReduceAspects" factory-method="aspectOf" autowire="byType" />
    <bean id="medusaDigests" class="org.apache.hadoop.mapred.MedusaDigests"/>
</beans>


[4] the error that I get

WARNING: job_local138234703_0001
java.lang.Exception: java.lang.NullPointerException
        at 
org.apache.hadoop.mapred.LocalJobRunner$Job.runTasks(LocalJobRunner.java:462)
        at 
org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:522)
Caused by: java.lang.NullPointerException
        at 
org.apache.hadoop.mapred.aspects.MapReduceAspects.mymap(MapReduceAspects.java:50)
        at 
org.apache.hadoop.mapred.examples.DummyWordCount$Map.map(DummyWordCount.java:32)
        at 
org.apache.hadoop.mapred.examples.DummyWordCount$Map.map(DummyWordCount.java:1)
        at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:146)
        at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:787)
        at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341)
        at 
org.apache.hadoop.mapred.LocalJobRunner$Job$MapTaskRunnable.run(LocalJobRunner.java:243)
        at 
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)
_______________________________________________
aspectj-users mailing list
[email protected]
To change your delivery options, retrieve your password, or unsubscribe from 
this list, visit
https://dev.eclipse.org/mailman/listinfo/aspectj-users

Reply via email to