Hi
Chathura
Great
stuff, though had a question - don't you think it would be important to capture
the following stats:
1) ServiceTime
2) MaxResponseTime
3) LastResponseTime
Apart from this have you thought about sending JMX
notifications? as it's synchronized the request will not be sent back to
the requester till the notification is sent, this could prove a deterrent to the
performance!
Best regards
Soumadeep
-----Original Message-----
From: Chathura Ekanayake [mailto:[EMAIL PROTECTED]
Sent: Thursday, February 23, 2006 8:30 PM
To: [email protected]
Subject: [Axis2] Management Interface - Counting requests
From: Chathura Ekanayake [mailto:[EMAIL PROTECTED]
Sent: Thursday, February 23, 2006 8:30 PM
To: [email protected]
Subject: [Axis2] Management Interface - Counting requests
Hi,I am developing the management interface for Axis2. I am currently implementing code to monitor dynamic statistics of remote Axis2 engines.These statistics include,- Total number of requests- Total number of failed requests- Number of requests for specified services- Number of requests for given operations in specified services- Operations to reset each of these countsFor this, I need to count the number of requests. I think, a handler of a globally engaged module is the best place to do it.I think of having a singleton object, which is invoked by a handler with the msg context as a parameter.Then this object can extract necessary information from the msg context and store them internally.Management interfaces (e.g. WS or MBean) can call methods of this singleton object to get various statistics.Below is a brief code sample:// Globally engaged handlerpublic class DynamicStatsHandler extends AbstractHandler implements Handler {public void invoke(MessageContext msgContext) throws AxisFault {DynamicStatsManager.getDynamicStatsManager().notify(msgContext);
}
}// Singleton objectpublic class DynamicStatsManager {
private int totalRequests = 0;public DynamicStatsManager getDynamicStatsManager() { // singleton }
public void notify(MessageContext msgContext) {
// extract necessary information and store in private variables
}
public int getTotalRequests() { return totalRequests; }
public void resetTotalRequests() { totalRequests = 0; }
}// Management interfaces (WS)public class AxisDynamicStats {
public OMElement getTotalRequests() {
DynamicStatsManager dsManager = DynamicStatsManager.getDynamicStatsManager();
int totalRequests = dsManager.getTotalRequests();
// create OMElement and return
}
public void getTotalRequests() {
DynamicStatsManager dsManager = DynamicStatsManager.getDynamicStatsManager();
int totalRequests = dsManager.resetTotalRequests();
}}Is this design ok? Will it slow down the process of directing msgs to services?Please give suggestions about this and ways to improve.Thanks,Chathura.
