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