Hi Alex,

If you can share your maven config to get the two compilers to work
together nicely, that would be appreciated.  Which IDE do you use?  I
recently switched to IntelliJ to be more compatible with my team, and it
seems that it doesn't handle maven AJ compilation/weaving as
nicely/transparently as Eclipse does.  I tend to need to either launch the
maven compile process by hand, or manually activate a post-build trigger on
the maven-compile process.  Eclipse, on the other hand, "magically" uses
the ajc compiler instead of javac on a AspectJ faceted project without any
issues/worries.

I think I will need to revert to a factory based approach for the Aspect,
whereby I will manually "inject" the required dependencies.  I can at least
use DI to inject dependencies into my factory, and then use the aspectOf()
method to retrieve the Aspect and inject the appropriate fields/members
there.  It's the closest that I've been able to figure out.  Unfortunately,
I'm not able to retrieve everything from the joinpoint context, as I need
to access some services that aren't used by the target class, and hence,
aren't available through the JP.  However, they are in the application
context - hence the desire to have CDI inject the service into the Aspect
for me.

Thanks,

Eric


On Fri, Jul 13, 2018 at 1:04 AM Alexander Kriegisch <
alexan...@kriegisch.name> wrote:

> I forgot to mention: Or can you get the dependencies your aspect needs to
> work with from the joinpoint context via args(), this(), target(),
> @annotation(), @target() etc.? This is what aspects usually do. What kind
> of dependency other than the ones available from the joinpoint context does
> the aspect need? And if it does need them, why? Maybe you should refactor
> your aspect in that case. A cross-cutting concern is usually be implemented
> with AOP because you want to avoid tangling, not because you want to
> increase it.
>
> Alexander Kriegisch schrieb am 13.07.2018 11:56:
>
> > 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 is 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
> >
>
> _______________________________________________
> 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
>
_______________________________________________
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