[wildfly-dev] Dynamically attaching AspectJ LTW weaver from EAR
Stuart Douglas
stuart.w.douglas at gmail.com
Wed Oct 18 15:37:51 EDT 2017
On Wed, Oct 18, 2017 at 8:47 PM, Eric B <ebenzacar at gmail.com> wrote:
> Thanks Stuart - I hadn't thought of that.
>
> It does bring up a couple of questions/concerns though:
> 1) The AspectJ attach EJB would need to be in an independent module from
> the rest of the application (minor detail)
>
Yes, not getting around that.
> 2) The EJB required is of a singleton pattern. How would that work in a
> clustered environment? A @Singleton @Startup EJB would only be spawned in
> a single JVM - other nodes in the cluster won't trigger the @PostConstruct
> method of it and consquently not load the weaver.
>
Just don't make it clustered, you want one per JVM not one per cluster.
Stuart
>
> Is there a way to force eager initialization of a @Stateless bean
> instead?
>
>
> Baring that, I did run across a blog entry that indicates the use of the
> Observer pattern listening for the ApplicationScope (https://rmannibucau.
> wordpress.com/2015/03/10/cdi-and-startup/). But I suspect that at that
> point the beans have already been scanned.
>
> @ApplicationScoped
> public class ProvisioningDataForApplicationLifecycle {
> private final Map<String, User> users = new HashMap<>(); // + getter
>
> public void init(@Observes @Initialized(ApplicationScoped.class)
> Object init) {
> users.put("cdi", new User("cdi", "1.1"));
> users.put("deltaspike", new User("deltaspike", "1.3"));
> }
>
> public void destroy(@Observes @Destroyed(ApplicationScoped.class)
> Object init) {
> users.clear();
> }
> }
>
>
>
> This seems fairly like a complex solution to a fairly simple ask. Or am I
> misunderstanding the @Singleton pattern?
>
> Thanks,
>
> Eric
>
>
> On Wed, Oct 18, 2017 at 10:55 AM, Stuart Douglas <
> stuart.w.douglas at gmail.com> wrote:
>
>> So one possibility that comes to mind would be to create a small
>> deployment that does the aspectJ attach on deploy (e.g. in a @PostConstruct
>> method of an @Startup EJB).
>>
>> You could then add an inter-deployment dependency on this deployment to
>> all your other deployments, which should ensure that this code is run
>> before other modules are created/loaded.
>>
>> Stuart
>>
>> On Wed, Oct 18, 2017 at 4:00 AM, Eric B <ebenzacar at gmail.com> wrote:
>>
>>> Hi,
>>>
>>> I'm looking to use AspectJ Load Time Weaving with Wildfly 10. Looking
>>> around at some posts, it is a little complicated to get Wildfly launched
>>> properly with the AJ weaver due to the way the AJ library intializes the
>>> logging subsystem differently than WF.
>>>
>>> Digging around, I found a config that actually works. It is documented
>>> here (obviously some of the class names/versions have to change):
>>> https://github.com/ChienChingLee/How-to-launch-Wild
>>> fly-9.0-with-AspectJ-1.8-LTW
>>>
>>> But I'm not a fan of changing my conf file to something that has
>>> hardcoded paths/jar names in it - for example adding:
>>> -Xbootclasspath/p:$JBOSS_HOME/modules/system/layers/base/or
>>> g/jboss/logmanager/main/jboss-logmanager-2.0.0.Final.jar
>>>
>>>
>>> Digging around some more in AJ, I saw that as of AJ 1.8.7, there is a
>>> way to dynamically attach the weaver to the JVM. Very cool.
>>> https://www.eclipse.org/aspectj/doc/released/README-187.html
>>> But in order to use the LTW effectively, I need to ensure that the
>>> weaver is loaded prior to WF scanning and loading any of my classes (EJB,
>>> annotated beans, pojos, etc). But I have no ideas how to do that.
>>>
>>> In the case of a console application, it is pretty straight forward -
>>> make it the first item in the application's main() method. But in the case
>>> of a JEE app, I don't know of any main() equivalent.
>>>
>>>
>>> Is there a way to hook into the classloading mechanism of WF instead to
>>> tell it to load the weaver if it isn't already loaded? Can this be done
>>> from within the EAR deployment? Or is there a single point of entry that
>>> WF accesses before scanning any of the classes in the EAR? Or is there a
>>> simpler way of configuring or attaching the AJ Weaver? I did find an old
>>> ticket (https://issues.jboss.org/browse/WFLY-895) that related to this
>>> issue, but it is marked as WONT FIX.
>>>
>>> Am not sure of the best approach at this point.
>>>
>>>
>>> Thanks,
>>>
>>> Eric
>>>
>>> _______________________________________________
>>> wildfly-dev mailing list
>>> wildfly-dev at lists.jboss.org
>>> https://lists.jboss.org/mailman/listinfo/wildfly-dev
>>>
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/wildfly-dev/attachments/20171018/385c1b04/attachment-0001.html
More information about the wildfly-dev
mailing list