Performance: Synchronization of AbstractContext.addPropertyDifference degrades
performance
------------------------------------------------------------------------------------------
Key: AXIS2-3344
URL: https://issues.apache.org/jira/browse/AXIS2-3344
Project: Axis 2.0 (Axis2)
Issue Type: Bug
Reporter: Rich Scheuerle
Assignee: Rich Scheuerle
Problem:
David Strite, a member of the IBM performance analysis team, discovered that
the synchronization of AbstractContext.addPropertDifference has a performance
impact due to the high volume of callers of AbstractContext.getProperty and
AbstractContext.setProperty.
Solution:
The synchronization is changed so that it is limited to the case where a
ClusterManager is available.
private void addPropertyDifference(String key) {
ConfigurationContext cc = getRootContext();
if (cc == null) {
return;
}
// Add the property differences only if Context replication is enabled,
// and there are members in the cluster
ClusterManager clusterManager =
cc.getAxisConfiguration().getClusterManager();
if (clusterManager == null ||
clusterManager.getContextManager() == null) {
return;
}
// Narrowed the synchronization so that we only wait
// if a property difference is added.
synchronized(this) {
propertyDifferences.put(key, new PropertyDifference(key, false));
}
}
Long Term Solution:
We might want to consider using a ConcurrentHashMap (only available in JDK 5+)
or narrow the synchronization for the other methods.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]