]
Nuno Godinho de Matos commented on WFCORE-3387:
-----------------------------------------------
Hi Brian,
Thank you a lot for your reply.
Understood.
If the bean is not supposed to be registered at that point in time (which would well
justify why my query comes out empty handed).
I there any way that I can detect that the application has been deployed as this mechanims
tries to do?
In weblogic, for example, from the moment the dpeloyment starts there is an
"ApplicationRuntime" managed bean somewhere, that has an attribute ActiveState
or something of the sort, that is changing, and reaching value = 2 when the application is
deployed.
The problem here is really that the @Startup ejb phase is not good enough.
It slows down deployment time because the starutp phase has to be completed.
If something breaks during the Startup logic the deployment fails.
And some logic that you may want to eager initialize that is not "so core" is
better suited running only after deployment.
Do you know if there is a proper way of being able to detect this on wildfly?
Would the apporach have to be a timer that during the poll(), is scanning for the
application deployments.
And when it sees a change in application deployments registered fires the event.
This is the only alternative I can think of at the current time point.
Because what you have essentially told me above is that this registerMBean() will in a
next patch fix release not even be working anymore. So I would need some sort of
alternative approach.
Many thanks for all the help,
Kindest regards.
MBeanServer - not returning ManagedBean jboss.as:deployment=* during
deployment
-------------------------------------------------------------------------------
Key: WFCORE-3387
URL:
https://issues.jboss.org/browse/WFCORE-3387
Project: WildFly Core
Issue Type: Bug
Components: JMX
Affects Versions: 3.0.8.Final
Reporter: Nuno Godinho de Matos
Priority: Minor
In wildfly, there is a class of managed beans that are particularly useful to have
available during application deployment.
In partocular beans with Object name (e.g. jboss.as:deployment=someapp-war.war)
This type of beans can for example sned a JMX Notification that the corresponding
application has been deployed.
While trying to refactor a mechanism that fires an "ApplicationDeployed" event,
a mechanism that was blinding registering a Listener on a hard coded ObjectName stopped
working consistently once I generalized to hunt for the generalized beans.
The problem is the following.
1. HARD CODED APPROACH:
If when an application is deploying, during the @Startup logic of an EJB I blindly do
something like:
{panel}
MBeanServer mBeanServer = createMBeanServer();
ObjectName targetObject = new ObjectName(objectName);
mBeanServer.addNotificationListener(targetObject, listener, filter,
handback);
{panel}
I can successfully register my Listener, without any problem.
This will work 100% of the time, and after the deployment goes through I can send my
notification to the application that the deployment is done.
I just need to blindly register the listener on:
jboss.as:deployment=someapp-war.war
2. PROBLEM - GENERALIZED APPORACH - QUERY MBEANS
The Problem now is that once I try to generalize the mechanism, instead of directly doing
something like jumping at the "registration", first I need to run a JMX query to
hunt of beans:
jboss.as:deployment=*
Now I have the problem that I am coming out empty handed, no results.
Better said, the current approach has two possible behaviors.
Behavior 1 - Mechanism works:
- Wildfly is stopped
- on eclipse I drag and drop the WAR file to the APP server.
- I start wildfly.
In this case, the jboss.as:deployment=* will give me the deployed applications.
The generic mechanism works.
Behavior 2 - Query comes with no results
- Wildfly is running
- no deployments
- I drag and drop the APP,
then I get no results.
Here is a Log snippet from the application when running on apporach 2.
What you is multiple fluent wait queries.
You have N tries loop where the query * and hard-coded object name is run. In both
scenarios I get no results.
But i still managed to register a listener If I want and I know the war name.
{panel}
####2017-10-27 11:44:10,171 ThreadId:512 INFO [logger:
.impl.jmx.AbstractJmxAppDeploymentNotificationListenerRegistration] - Using
HARD_CODED_DIRTY_QUERY: jboss.as:deployment=someapp-war.war - returned: []
<LogContext:Facade> <ServerService Thread Pool -- 339>
####2017-10-27 11:44:10,246 ThreadId:512 WARN [logger:
.impl.jmx.AbstractJmxAppDeploymentNotificationListenerRegistration] - Query jmx query:
jboss.as:deployment=* yielded no results. <LogContext:Facade> <ServerService
Thread Pool -- 339>
####2017-10-27 11:44:10,253 ThreadId:512 INFO [logger:
.impl.jmx.AbstractJmxAppDeploymentNotificationListenerRegistration] - Using
HARD_CODED_DIRTY_QUERY: jboss.as:deployment=someapp-war.war - returned: []
<LogContext:Facade> <ServerService Thread Pool -- 339>
####2017-10-27 11:44:10,328 ThreadId:512 WARN [logger:
.impl.jmx.AbstractJmxAppDeploymentNotificationListenerRegistration] - Query jmx query:
jboss.as:deployment=* yielded no results. <LogContext:Facade> <ServerService
Thread Pool -- 339>
####2017-10-27 11:44:10,332 ThreadId:512 INFO [logger:
.impl.jmx.AbstractJmxAppDeploymentNotificationListenerRegistration] - Using
HARD_CODED_DIRTY_QUERY: jboss.as:deployment=someapp-war.war - returned: []
<LogContext:Facade> <ServerService Thread Pool -- 339>
####2017-10-27 11:44:10,406 ThreadId:512 WARN [logger:
.impl.jmx.AbstractJmxAppDeploymentNotificationListenerRegistration] - Query jmx query:
jboss.as:deployment=* yielded no results. <LogContext:Facade> <ServerService
Thread Pool -- 339>
####2017-10-27 11:44:10,409 ThreadId:512 INFO [logger:
.impl.jmx.AbstractJmxAppDeploymentNotificationListenerRegistration] - Using
HARD_CODED_DIRTY_QUERY: jboss.as:deployment=someapp-war.war - returned: []
<LogContext:Facade> <ServerService Thread Pool -- 339>
####2017-10-27 11:44:10,490 ThreadId:512 WARN
[AbstractJmxAppDeploymentNotificationListenerRegistration] - Query jmx query:
jboss.as:deployment=* yielded no results. <LogContext:Facade> <ServerService
Thread Pool -- 339>
####2017-10-27 11:44:10,494 ThreadId:512 INFO
[AbstractJmxAppDeploymentNotificationListenerRegistration] - Using HARD_CODED_DIRTY_QUERY:
jboss.as:deployment=someapp-war.war - returned: [] <LogContext:Facade>
<ServerService Thread Pool -- 339>
####2017-10-27 11:44:10,569 ThreadId:512 WARN
[AbstractJmxAppDeploymentNotificationListenerRegistration] - Query jmx query:
jboss.as:deployment=* yielded no results. <LogContext:Facade> <ServerService
Thread Pool -- 339>
####2017-10-27 11:44:10,574 ThreadId:512 INFO
[AbstractJmxAppDeploymentNotificationListenerRegistration] - Using HARD_CODED_DIRTY_QUERY:
jboss.as:deployment=someapp-war.war - returned: [] <LogContext:Facade>
<ServerService Thread Pool -- 339>
####2017-10-27 11:44:10,649 ThreadId:512 WARN
[AbstractJmxAppDeploymentNotificationListenerRegistration] - Query jmx query:
jboss.as:deployment=* yielded no results. <LogContext:Facade> <ServerService
Thread Pool -- 339>
####2017-10-27 11:44:10,653 ThreadId:512 INFO
[AbstractJmxAppDeploymentNotificationListenerRegistration] - Using HARD_CODED_DIRTY_QUERY:
jboss.as:deployment=someapp-war.war - returned: [] <LogContext:Facade>
<ServerService Thread Pool -- 339>
####2017-10-27 11:44:10,726 ThreadId:512 WARN
[AbstractJmxAppDeploymentNotificationListenerRegistration] - Query jmx query:
jboss.as:deployment=* yielded no results. <LogContext:Facade> <ServerService
Thread Pool -- 339>
####2017-10-27 11:44:10,729 ThreadId:512 INFO
[AbstractJmxAppDeploymentNotificationListenerRegistration] - Using HARD_CODED_DIRTY_QUERY:
jboss.as:deployment=someapp-war.war - returned: [] <LogContext:Facade>
<ServerService Thread Pool -- 339>
####2017-10-27 11:44:10,802 ThreadId:512 WARN
[AbstractJmxAppDeploymentNotificationListenerRegistration] - Query jmx query:
jboss.as:deployment=* yielded no results. <LogContext:Facade> <ServerService
Thread Pool -- 339>
####2017-10-27 11:44:10,804 ThreadId:512 INFO
[AbstractJmxAppDeploymentNotificationListenerRegistration] - Using HARD_CODED_DIRTY_QUERY:
jboss.as:deployment=someapp-war.war - returned: [] <LogContext:Facade>
<ServerService Thread Pool -- 339>
####2017-10-27 11:44:10,884 ThreadId:512 WARN
[AbstractJmxAppDeploymentNotificationListenerRegistration] - Query jmx query:
jboss.as:deployment=* yielded no results. <LogContext:Facade> <ServerService
Thread Pool -- 339>
####2017-10-27 11:44:10,893 ThreadId:512 INFO
[AbstractJmxAppDeploymentNotificationListenerRegistration] - Using HARD_CODED_DIRTY_QUERY:
jboss.as:deployment=someapp-war.war - returned: [] <LogContext:Facade>
<ServerService Thread Pool -- 339>
####2017-10-27 11:44:10,967 ThreadId:512 WARN
[AbstractJmxAppDeploymentNotificationListenerRegistration] - Query jmx query:
jboss.as:deployment=* yielded no results. <LogContext:Facade> <ServerService
Thread Pool -- 339>
####2017-10-27 11:44:10,970 ThreadId:512 INFO
[AbstractJmxAppDeploymentNotificationListenerRegistration] - Using HARD_CODED_DIRTY_QUERY:
jboss.as:deployment=someapp-war.war - returned: [] <LogContext:Facade>
<ServerService Thread Pool -- 339>
####2017-10-27 11:44:11,044 ThreadId:512 WARN
[AbstractJmxAppDeploymentNotificationListenerRegistration] - Query jmx query:
jboss.as:deployment=* yielded no results. <LogContext:Facade> <ServerService
Thread Pool -- 339>
####2017-10-27 11:44:11,050 ThreadId:512 INFO
[AbstractJmxAppDeploymentNotificationListenerRegistration] - Using HARD_CODED_DIRTY_QUERY:
jboss.as:deployment=someapp-war.war - returned: [] <LogContext:Facade>
<ServerService Thread Pool -- 339>
####2017-10-27 11:44:11,129 ThreadId:512 WARN
[AbstractJmxAppDeploymentNotificationListenerRegistration] - Query jmx query:
jboss.as:deployment=* yielded no results. <LogContext:Facade> <ServerService
Thread Pool -- 339>
####2017-10-27 11:44:11,138 ThreadId:512 INFO
[AbstractJmxAppDeploymentNotificationListenerRegistration] - Using HARD_CODED_DIRTY_QUERY:
jboss.as:deployment=someapp-war.war - returned: [] <LogContext:Facade>
<ServerService Thread Pool -- 339>
####2017-10-27 11:44:11,217 ThreadId:512 WARN
[AbstractJmxAppDeploymentNotificationListenerRegistration] - Query jmx query:
jboss.as:deployment=* yielded no results. <LogContext:Facade> <ServerService
Thread Pool -- 339>
####2017-10-27 11:44:11,227 ThreadId:512 INFO
[AbstractJmxAppDeploymentNotificationListenerRegistration] - Using HARD_CODED_DIRTY_QUERY:
jboss.as:deployment=someapp-war.war - returned: [] <LogContext:Facade>
<ServerService Thread Pool -- 339>
####2017-10-27 11:44:11,304 ThreadId:512 WARN
[AbstractJmxAppDeploymentNotificationListenerRegistration] - Query jmx query:
jboss.as:deployment=* yielded no results. <LogContext:Facade> <ServerService
Thread Pool -- 339>
####2017-10-27 11:44:11,312 ThreadId:512 INFO
[AbstractJmxAppDeploymentNotificationListenerRegistration] - Using HARD_CODED_DIRTY_QUERY:
jboss.as:deployment=someapp-war.war - returned: [] <LogContext:Facade>
<ServerService Thread Pool -- 339>
####2017-10-27 11:44:11,386 ThreadId:512 WARN
[AbstractJmxAppDeploymentNotificationListenerRegistration] - Query jmx query:
jboss.as:deployment=* yielded no results. <LogContext:Facade> <ServerService
Thread Pool -- 339>
####2017-10-27 11:44:11,393 ThreadId:512 INFO
[AbstractJmxAppDeploymentNotificationListenerRegistration] - Using HARD_CODED_DIRTY_QUERY:
jboss.as:deployment=someapp-war.war - returned: [] <LogContext:Facade>
<ServerService Thread Pool -- 339>
####2017-10-27 11:44:11,472 ThreadId:512 WARN
[AbstractJmxAppDeploymentNotificationListenerRegistration] - Query jmx query:
jboss.as:deployment=* yielded no results. <LogContext:Facade> <ServerService
Thread Pool -- 339>
####2017-10-27 11:44:11,480 ThreadId:512 INFO
[AbstractJmxAppDeploymentNotificationListenerRegistration] - Using HARD_CODED_DIRTY_QUERY:
jboss.as:deployment=someapp-war.war - returned: [] <LogContext:Facade>
<ServerService Thread Pool -- 339>
####2017-10-27 11:44:11,559 ThreadId:512 WARN
[AbstractJmxAppDeploymentNotificationListenerRegistration] - Query jmx query:
jboss.as:deployment=* yielded no results. <LogContext:Facade> <ServerService
Thread Pool -- 339>
####2017-10-27 11:44:11,568 ThreadId:512 INFO
[AbstractJmxAppDeploymentNotificationListenerRegistration] - Using HARD_CODED_DIRTY_QUERY:
jboss.as:deployment=someapp-war.war - returned: [] <LogContext:Facade>
<ServerService Thread Pool -- 339>
####2017-10-27 11:44:11,646 ThreadId:512 WARN
[AbstractJmxAppDeploymentNotificationListenerRegistration] - Query jmx query:
jboss.as:deployment=* yielded no results. <LogContext:Facade> <ServerService
Thread Pool -- 339>
####2017-10-27 11:44:11,656 ThreadId:512 INFO
[AbstractJmxAppDeploymentNotificationListenerRegistration] - Using HARD_CODED_DIRTY_QUERY:
jboss.as:deployment=someapp-war.war - returned: [] <LogContext:Facade>
<ServerService Thread Pool -- 339>
####2017-10-27 11:44:11,736 ThreadId:512 WARN
[AbstractJmxAppDeploymentNotificationListenerRegistration] - Query jmx query:
jboss.as:deployment=* yielded no results. <LogContext:Facade> <ServerService
Thread Pool -- 339>
####2017-10-27 11:44:11,744 ThreadId:512 INFO
[AbstractJmxAppDeploymentNotificationListenerRegistration] - Using HARD_CODED_DIRTY_QUERY:
jboss.as:deployment=someapp-war.war - returned: [] <LogContext:Facade>
<ServerService Thread Pool -- 339>
####2017-10-27 11:44:11,822 ThreadId:512 WARN
[AbstractJmxAppDeploymentNotificationListenerRegistration] - Query jmx query:
jboss.as:deployment=* yielded no results. <LogContext:Facade> <ServerService
Thread Pool -- 339>
####2017-10-27 11:44:11,831 ThreadId:512 INFO
[AbstractJmxAppDeploymentNotificationListenerRegistration] - Using HARD_CODED_DIRTY_QUERY:
jboss.as:deployment=someapp-war.war - returned: [] <LogContext:Facade>
<ServerService Thread Pool -- 339>
####2017-10-27 11:44:11,904 ThreadId:512 WARN
[AbstractJmxAppDeploymentNotificationListenerRegistration] - Query jmx query:
jboss.as:deployment=* yielded no results. <LogContext:Facade> <ServerService
Thread Pool -- 339>
####2017-10-27 11:44:11,907 ThreadId:512 INFO
[AbstractJmxAppDeploymentNotificationListenerRegistration] - Using HARD_CODED_DIRTY_QUERY:
jboss.as:deployment=someapp-war.war - returned: [] <LogContext:Facade>
<ServerService Thread Pool -- 339>
####2017-10-27 11:44:11,985 ThreadId:512 WARN
[AbstractJmxAppDeploymentNotificationListenerRegistration] - Query jmx query:
jboss.as:deployment=* yielded no results. <LogContext:Facade> <ServerService
Thread Pool -- 339>
####2017-10-27 11:44:11,991 ThreadId:512 INFO
[AbstractJmxAppDeploymentNotificationListenerRegistration] - Using HARD_CODED_DIRTY_QUERY:
jboss.as:deployment=someapp-war.war - returned: [] <LogContext:Facade>
<ServerService Thread Pool -- 339>
####2017-10-27 11:44:11,991 ThreadId:512 INFO
[AbstractJmxAppDeploymentNotificationListenerRegistration] - JMX Query to search for app
deployments yielded: [] <LogContext:Facade> <ServerService Thread Pool --
339>
####2017-10-27 11:44:11,991 ThreadId:512 ERROR
[AbstractJmxAppDeploymentNotificationListenerRegistration] - No WAR deployment could be
found on the managed bean server. The applicatin runtimes that could be found were: []
<LogContext:Facade> <ServerService Thread Pool -- 339>
####2017-10-27 11:44:11,992 ThreadId:512 ERROR
[AbstractJmxAppDeploymentNotificationListenerRegistration] - Going to add notification
listerner using HARD CODED deployment JMX object name <LogContext:Facade>
<ServerService Thread Pool -- 339>
####2017-10-27 11:44:11,992 ThreadId:512 INFO
[AbstractJmxAppDeploymentNotificationListenerRegistration] - Going to register a jmx
notification listener on the status of the deployed application:
jboss.as:deployment=someapp-war.war <LogContext:Facade> <ServerService Thread
Pool -- 339>
####2017-10-27 11:44:11,994 ThreadId:512 ERROR
[AbstractJmxAppDeploymentNotificationListenerRegistration] - Skipping registration of
NotificationLister on WAR application runtime, managed bean could not be found.This has
the implication that the application ready event will not be fired after the deployment
completes. <LogContext:Facade> <ServerService Thread Pool -- 339>
####2017-10-27 11:44:11,995 ThreadId:512 INFO
[WildflyJmxAppDeploymentNotificationListenerRegistration] - <-
WildflyJmxAppDeploymentNotificationListenerRegistration.registerNotificationLister {2092
ms} <LogContext:Facade> <ServerService Thread Pool -- 339>
{panel}
I can try to create a sample application to reproduce this.
I would expect that before the @Startup logic is triggered on any EJB, I consistenly will
have on the MBean server the deployment managemend bean for the WAR whose deployment is
currently ongoing - regardless of whether I start the APP serer with the WAr already in or
if I have just added the WAr file.
And in effect, since the "registration mechanims of a listener always works - if you
already know the WAR file name ... then it kind means that the Managed bean is in effect
in the MBean serer but somehow not visible.
Many thanks for any help on this.
I will try to give you a sample application for analysis.
Kindest regards.