if(changeList==null)
return xpathes;
MBeanRegistry registry = MBeanRegistryFactory.getAdminMBeanRegistry();
String xpath_last = null;
MBeanRegistryEntry entry = null;
boolean bLastEntryHasEvent = false;
String propertyName = null;
for(int i=0; i<changeList.size();i++)
{
ConfigChange change = (ConfigChange)changeList.get(i);
int action = getActionCodeForChange(change);
if(action==ElementChangeEvent.ACTION_ELEMENT_UNDEFINED)
continue; //??? not add/set/update/delete
String xpath = change.getXPath();
// Check if this xpath belongs to one of the excluded
// XPaths. Excluded xpaths include lb-configs, lb-config
// etc. Where restart checks do not apply.
if ( (xpath == null) || isXPathExcludedForRestartCheck(xpath) ) {
continue;
}
if(!xpath.equals(xpath_last))
{
xpath_last = xpath;
if(isPropertyXPath(change.getXPath()))
{
propertyName = getConfigElementPrimaryKey(xpath);
xpath = getElementXPath(change);
}
else
{
propertyName = null;
}
entry = registry.findMBeanRegistryEntryByXPath(xpath);
if(entry==null)
{
xpathes.add(xpath);
continue;
}
bLastEntryHasEvent = (entry.getElementChangeEventName()!=null);
}
if(bLastEntryHasEvent)
continue;
// check whether creation reconfigurable
if( (action==ElementChangeEvent.ACTION_ELEMENT_CREATE &&
entry.isElementCreationDynamicallyReconfigurable()))
{
xpathes.add(xpath);
continue;
}
// check whether deletion reconfigurable
if( (action==ElementChangeEvent.ACTION_ELEMENT_DELETE &&
entry.isElementDeletionDynamicallyReconfigurable()))
{
xpathes.add(xpath);
continue;
}
// check properties changes
if(propertyName!=null)
{
if(!entry.isPropertyDynamicallyReconfigurable(propertyName))
{
xpathes.add(xpath);
continue;
}
}
if ( !(change instanceof ConfigUpdate))
{
xpathes.add(xpath);
continue;
}
//here we are only for attributes
Set attrs = ((ConfigUpdate)change).getAttributeSet();
Iterator iter = attrs.iterator();
while(iter.hasNext())
{
String attr = (String)iter.next();
// check if dynamic reconfig is needed for the attribute, bug# 6509963
try {
if (! entry.isAttributeDynamicReconfigNeeded(attr))
{
break;
}
} catch (MBeanMetaException mme)
{
//field not found in registry
}
if(!entry.isAttributeDynamicallyReconfigurable(attr))
{
xpathes.add(xpath);
break;
}
}