Hi Eric,

I usually do not disable Maven Compiler, I just configure it and AspectJ Maven 
in a way so as not to interfere with each other. Let me know if you are 
interested. But of course disabling Maven Compiler completely is a safe bet for 
that kind of problem, too.

As for your JEE/CDI problem: I am not a framework guy, I neither use Spring nor 
JEE, mostly because programming is not my job (used to be 20 years ago) and I 
just do it for fun. So maybe I am not the most qualified person to answer that. 
But generally speaking, you already kinda nailed it: Aspect lifecycle is 
handled by AJ, not via CDI. And frankly, I even think it shouldn't. We have a 
bit of a hen and egg problem here, if you think about it. AOP is meant to 
implement cross-cutting concerns, i.e. AOP needs "to be there first", 
especially when thinking about AspectJ doing bytecode weaving during 
class-loading, which is what you essentially do with LTW. So the weaving agent 
needs to be up and running before any of the application classes are even 
loaded into the JVM. Spring AOP is a different kind of beast because it uses 
delegation via dynamic proxies, not bytecode weaving. Furthermore, a Spring 
aspect is also a Spring component and only works for other Spring components, 
i.e. there i
 s a strong dependency on the surrounding framework.

Maybe there is a way to get CDI working for aspects, but if there is, then only 
in some kind of "lazy instantiation" scenario, i.e. aspect weaving and 
class-loading is finished but DI into the aspect is only done later, e.g. when 
the aspect first accesses the injected object. To me this feels a little creepy 
though because suddenly the aspect would depend on the application and you 
could run into issues with aspects that ought to be kicking in early, such as 
logging or tracing. For aspects which are designed to only be used after the 
application is already wired up, you might have a chance. Someone else might be 
able to help you there. Does it work for you if you ask some kind of factory to 
provide you with a dependency? I know, it is not DI and more difficult to test, 
but you can still provide setters for the aspect's dependencies and then easily 
unit-test the aspect, injecting mocks.

Regards
-- 
Alexander Kriegisch
https://scrum-master.de

Eric B schrieb am 13.07.2018 10:32:
> 
> Hi Alex,
> 
> 
> Thanks for pointing that out. I can't believe I missed it. I had
> intentionally tried to disable the maven compiler using
> -Dmaven.main.skip=true, but I must have forgotten to use it for this
> attempt.
> 
> 
> I'm still perturbed as to how to get CDI to inject an AJ aspect though. I
> cannot seem to find the magic solution (if one exists) to configure the
> project such that I can get injections into my Aspect bean. I'm using LTW
> and realize that the lifecycle of the aspect is done via AJ and not
> through CDI. Nonetheless, in Spring, there is always the
> SpringBeanAutowiringSupport utility that you can use to wire an existing
> bean. Do you know if there is anything equivalent in JEE to accomplish DI
> in an Aspect?
> 
> 
> Thanks,
> 
> Eric
> 
> 
> On Thu, Jul 12, 2018 at 9:38 PM Alexander Kriegisch
> <alexan...@kriegisch.name <mailto:alexan...@kriegisch.name>
> > wrote:
>> Hi Eric.
>> 
>> The error comes from Maven Compiler, not from AspectJ Maven, i.e. Javac
>> tries to compile something you probably want to be compiled by Ajc.
>> Without seeing your POM I cannot say more, but the configuration with
>> regard to those two plugins is probably the root cause of your problem.
>> 
>> Regards
>> --
>> Alexander Kriegisch
>> https://scrum-master.de
>> 
>> 
>> Eric B schrieb am 12.07.2018 23:22:
>> >
>> > I'm trying to figure out a way to inject dependencies into an Aspect
>> that
>> > is running under Wildfly 10 with CDI.
>> >
>> >
>> > From what I can tell, by definition, I need to have a no-argument
>> > constructor in the Aspect, which already implies AJ cannot support the
>> > constructor injection pattern. Please correct me if I am mistaken.
>> >
>> >
>> > Secondly, once I have fields annotated with @Inject, I'm not sure how
>> to
>> > tell CDI to inject beans into my aspect. If I remember correctly, in
>> > Spring, I can use the .aspectOf() as a factory-method to declare the
>> bean
>> > to Spring. This was accomplished using XML definitions.
>> >
>> >
>> > However, when I try to do something similar in CDI, using @Produces, it
>> > does not seem to be work; the compiler throws errors that the
>> .aspectOf()
>> > method in my aspect does not exist.
>> >
>> >
>> > > public classUserAccountAspectFactory {
>> >
>> > @Produces
>> > publicUserAccountStatusAspect
>> > injectUserAccountStatusAspectDependencies()throwsNoSuchMethodException,
>> > InvocationTargetException, IllegalAccessException {
>> > returnUserAccountStatusAspect.aspectOf();
>> > }
>> > }
>> >
>> >
>> >
>> >
>> >> [ERROR] Failed to execute goal
>> >> org.apache.maven.plugins:maven-compiler-plugin:3.1:compile
>> >> (default-compile) on project adams-aspects: Compilation failure
>> >>
>> >>
>> >> [ERROR]
>> >>
>> /C:/dev/Projects/develop/aspects/src/main/java/model/interceptor/UserAccountAspectFactory.java:[11,39]
>> >> cannot find symbol
>> >>
>> >>
>> >> [ERROR] symbol: method aspectOf()
>> >>
>> >>
>> >> [ERROR] location: class model.interceptor.UserAccountStatusAspect
>> >>
>> >>
>> >> [ERROR]
>> >>
>> >>
>> >> [ERROR] -> [Help 1]
>> >>
>> >
>> > Which surprises me b/c when I look at the UserAccountStatusAspect.class
>> > file, I see that ajc has added the .aspectOf() method to the compiled
>> > class.
>> >
>> >
>> > I'm obviously doing something wrong, but not quite sure what.
>> >
>> >
>> > Can anyone point me in the right direction please?
>> >
>> >
>> > Thanks,
>> >
>> >
>> > Eric
>> >
>> >
>> 
>> _______________________________________________
>> aspectj-users mailing list
>> aspectj-users@eclipse.org
>> <mailto:aspectj-users@eclipse.org>
>> To change your delivery options, retrieve your password, or unsubscribe
>> from this list, visit
>> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>

_______________________________________________
aspectj-users mailing list
aspectj-users@eclipse.org
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