Issue #1742 Fixed concurrent mod exception in DAT config updates
Change-Id: I78ddb871e2bdc3c4200d9c32ae5d9fbd729f116e Former-commit-id:c25937ec85
[formerly111ffab3c9
] [formerly6d9872d694
[formerly 8f3cbb79c086845d49b7a877359cac3f83fc1c1c]] Former-commit-id:6d9872d694
Former-commit-id:2702279e7a
This commit is contained in:
parent
7924115bbc
commit
d290c84290
5 changed files with 121 additions and 50 deletions
|
@ -21,9 +21,9 @@ package com.raytheon.uf.common.monitor.config;
|
|||
**/
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
|
||||
import com.raytheon.uf.common.localization.FileUpdatedMessage;
|
||||
import com.raytheon.uf.common.localization.ILocalizationFileObserver;
|
||||
|
@ -36,9 +36,27 @@ import com.raytheon.uf.common.localization.PathManagerFactory;
|
|||
import com.raytheon.uf.common.monitor.events.MonitorConfigEvent;
|
||||
import com.raytheon.uf.common.monitor.events.MonitorConfigListener;
|
||||
import com.raytheon.uf.common.serialization.SerializationUtil;
|
||||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||
import com.raytheon.uf.common.status.UFStatus;
|
||||
import com.raytheon.uf.common.status.UFStatus.Priority;
|
||||
import com.raytheon.uf.edex.database.purge.PurgeRule;
|
||||
import com.raytheon.uf.edex.database.purge.PurgeRuleSet;
|
||||
|
||||
/**
|
||||
* FFMPRetentionTimeManager
|
||||
*
|
||||
* <pre>
|
||||
*
|
||||
* SOFTWARE HISTORY
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Aug 13, 2013 1742 dhladky fixed concurrent mod exception on update
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
public class FFMPRetentionTimeManager implements ILocalizationFileObserver {
|
||||
|
||||
/** Path to FFMP Source config. */
|
||||
|
@ -52,11 +70,14 @@ public class FFMPRetentionTimeManager implements ILocalizationFileObserver {
|
|||
*/
|
||||
protected PurgeRuleSet configXml;
|
||||
|
||||
private final ArrayList<MonitorConfigListener> listeners = new ArrayList<MonitorConfigListener>();
|
||||
private CopyOnWriteArrayList<MonitorConfigListener> listeners = new CopyOnWriteArrayList<MonitorConfigListener>();
|
||||
|
||||
/** Singleton instance of this class */
|
||||
private static FFMPRetentionTimeManager instance = new FFMPRetentionTimeManager();
|
||||
|
||||
private static final IUFStatusHandler statusHandler = UFStatus
|
||||
.getHandler(FFMPRetentionTimeManager.class);
|
||||
|
||||
/* Private Constructor */
|
||||
private FFMPRetentionTimeManager() {
|
||||
configXml = new PurgeRuleSet();
|
||||
|
@ -103,14 +124,16 @@ public class FFMPRetentionTimeManager implements ILocalizationFileObserver {
|
|||
|
||||
PurgeRuleSet configXmltmp = null;
|
||||
|
||||
configXmltmp = (PurgeRuleSet) SerializationUtil
|
||||
.jaxbUnmarshalFromXmlFile(file.getAbsolutePath());
|
||||
configXmltmp = SerializationUtil.jaxbUnmarshalFromXmlFile(
|
||||
PurgeRuleSet.class, file.getAbsolutePath());
|
||||
|
||||
configXml = configXmltmp;
|
||||
|
||||
} catch (Exception e) {
|
||||
System.err.println("No SITE Purge Rule file found");
|
||||
e.printStackTrace();
|
||||
statusHandler
|
||||
.handle(Priority.WARN,
|
||||
"No SITE level purge file found.",
|
||||
e);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -143,7 +166,8 @@ public class FFMPRetentionTimeManager implements ILocalizationFileObserver {
|
|||
|
||||
lf = newXmlFile;
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
statusHandler.handle(Priority.WARN,
|
||||
"Couldn't save config.", e);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -151,12 +175,18 @@ public class FFMPRetentionTimeManager implements ILocalizationFileObserver {
|
|||
@Override
|
||||
public void fileUpdated(FileUpdatedMessage message) {
|
||||
if (message.getFileName().equals(CONFIG_FILE_NAME)) {
|
||||
readConfigXml();
|
||||
// inform listeners
|
||||
synchronized (listeners) {
|
||||
try {
|
||||
readConfigXml();
|
||||
|
||||
// inform listeners
|
||||
for (MonitorConfigListener fl : listeners) {
|
||||
fl.configChanged(new MonitorConfigEvent(this));
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
statusHandler.handle(Priority.WARN,
|
||||
"FFMPRetentionTimeManager: " + message.getFileName()
|
||||
+ " couldn't be updated.", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -22,6 +22,7 @@ package com.raytheon.uf.common.monitor.config;
|
|||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
|
||||
import com.raytheon.uf.common.localization.FileUpdatedMessage;
|
||||
import com.raytheon.uf.common.localization.ILocalizationFileObserver;
|
||||
|
@ -41,6 +42,9 @@ import com.raytheon.uf.common.monitor.xml.SourceOverrideXML;
|
|||
import com.raytheon.uf.common.monitor.xml.SourceXML;
|
||||
import com.raytheon.uf.common.serialization.SerializationException;
|
||||
import com.raytheon.uf.common.serialization.SerializationUtil;
|
||||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||
import com.raytheon.uf.common.status.UFStatus;
|
||||
import com.raytheon.uf.common.status.UFStatus.Priority;
|
||||
|
||||
|
||||
/**
|
||||
|
@ -53,6 +57,7 @@ import com.raytheon.uf.common.serialization.SerializationUtil;
|
|||
* ------------ ---------- ----------- --------------------------
|
||||
* 2012-09-04 DR 14404 gzhang Fixing ConcurrentModificationException
|
||||
* Apr 26, 2013 1954 bsteffen Minor code cleanup throughout FFMP.
|
||||
* Aug 13, 2013 1742 dhladky Concurrent mod exception on update fixed
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -74,9 +79,11 @@ public class FFMPRunConfigurationManager implements ILocalizationFileObserver {
|
|||
|
||||
private LocalizationFile lf = null;
|
||||
|
||||
private java.util.concurrent.CopyOnWriteArrayList<MonitorConfigListener> listeners = new java.util.concurrent.CopyOnWriteArrayList<MonitorConfigListener>();// DR 14404
|
||||
//private ArrayList<MonitorConfigListener> listeners = new ArrayList<MonitorConfigListener>();// DR 14404
|
||||
|
||||
private static final IUFStatusHandler statusHandler = UFStatus
|
||||
.getHandler(FFMPRunConfigurationManager.class);
|
||||
|
||||
private CopyOnWriteArrayList<MonitorConfigListener> listeners = new CopyOnWriteArrayList<MonitorConfigListener>();
|
||||
|
||||
/** Singleton instance of this class */
|
||||
private static FFMPRunConfigurationManager instance = new FFMPRunConfigurationManager();
|
||||
|
||||
|
@ -139,8 +146,7 @@ public class FFMPRunConfigurationManager implements ILocalizationFileObserver {
|
|||
|
||||
FFMPRunConfigXML configXmltmp = null;
|
||||
|
||||
configXmltmp = (FFMPRunConfigXML) SerializationUtil
|
||||
.jaxbUnmarshalFromXmlFile(file.getAbsolutePath());
|
||||
configXmltmp = SerializationUtil.jaxbUnmarshalFromXmlFile(FFMPRunConfigXML.class, file.getAbsolutePath());
|
||||
|
||||
configXml = configXmltmp;
|
||||
isPopulated = true;
|
||||
|
@ -176,7 +182,8 @@ public class FFMPRunConfigurationManager implements ILocalizationFileObserver {
|
|||
|
||||
lf = newXmlFile;
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
statusHandler
|
||||
.handle(Priority.ERROR, "Couldn't save config file.", e);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -268,14 +275,18 @@ public class FFMPRunConfigurationManager implements ILocalizationFileObserver {
|
|||
if (message.getFileName().equals(CONFIG_FILE_NAME)) {
|
||||
try {
|
||||
readConfigXml();
|
||||
|
||||
// inform listeners
|
||||
//synchronized (listeners) {// DR 14404
|
||||
for (MonitorConfigListener fl : listeners) {
|
||||
fl.configChanged(new MonitorConfigEvent(this));
|
||||
}
|
||||
//}// DR 14404
|
||||
for (MonitorConfigListener fl : listeners) {
|
||||
fl.configChanged(new MonitorConfigEvent(this));
|
||||
}
|
||||
|
||||
} catch (SerializationException e) {
|
||||
e.printStackTrace();
|
||||
statusHandler.handle(
|
||||
Priority.WARN,
|
||||
"FFMPRunConfigurationManager: "
|
||||
+ message.getFileName()
|
||||
+ " couldn't be updated.", e);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -39,6 +39,9 @@ import com.raytheon.uf.common.monitor.xml.ProductXML;
|
|||
import com.raytheon.uf.common.monitor.xml.SourceXML;
|
||||
import com.raytheon.uf.common.serialization.SerializationException;
|
||||
import com.raytheon.uf.common.serialization.SerializationUtil;
|
||||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||
import com.raytheon.uf.common.status.UFStatus;
|
||||
import com.raytheon.uf.common.status.UFStatus.Priority;
|
||||
|
||||
/**
|
||||
* FFMPSourceConfigurationManager
|
||||
|
@ -50,6 +53,7 @@ import com.raytheon.uf.common.serialization.SerializationUtil;
|
|||
* ------------ ---------- ----------- --------------------------
|
||||
* 2012-09-04 DR 14404 gzhang Fixing ConcurrentModificationException
|
||||
* Apr 26, 2013 1954 bsteffen Minor code cleanup throughout FFMP.
|
||||
* Aug 18, 2013 1742 dhladky Concurrent mod exception on update fixed
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -84,6 +88,9 @@ public class FFMPSourceConfigurationManager implements
|
|||
|
||||
private List<MonitorConfigListener> listeners = new CopyOnWriteArrayList<MonitorConfigListener>();
|
||||
|
||||
private static final IUFStatusHandler statusHandler = UFStatus
|
||||
.getHandler(FFMPSourceConfigurationManager.class);
|
||||
|
||||
/* Private Constructor */
|
||||
private FFMPSourceConfigurationManager() {
|
||||
configXml = new FFMPSourceConfigXML();
|
||||
|
@ -137,11 +144,12 @@ public class FFMPSourceConfigurationManager implements
|
|||
|
||||
FFMPSourceConfigXML configXmltmp = null;
|
||||
try {
|
||||
configXmltmp = (FFMPSourceConfigXML) SerializationUtil
|
||||
configXmltmp = SerializationUtil
|
||||
.jaxbUnmarshalFromXmlFile(FFMPSourceConfigXML.class,
|
||||
file);
|
||||
} catch (SerializationException e1) {
|
||||
e1.printStackTrace();
|
||||
statusHandler.handle(Priority.ERROR,
|
||||
"Couldn't serialize file.", e1);
|
||||
}
|
||||
|
||||
configXml = configXmltmp;
|
||||
|
@ -173,7 +181,8 @@ public class FFMPSourceConfigurationManager implements
|
|||
lf = newXmlFile;
|
||||
lf.addFileUpdatedObserver(this);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
statusHandler.handle(Priority.ERROR,
|
||||
"Couldn't save config file.", e);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -474,14 +483,19 @@ public class FFMPSourceConfigurationManager implements
|
|||
@Override
|
||||
public void fileUpdated(FileUpdatedMessage message) {
|
||||
if (message.getFileName().equals(CONFIG_FILE_NAME)) {
|
||||
readConfigXml();
|
||||
// inform listeners
|
||||
//synchronized (listeners) {// DR 14404
|
||||
try {
|
||||
readConfigXml();
|
||||
// inform listeners
|
||||
for (MonitorConfigListener fl : listeners) {
|
||||
fl.configChanged(new MonitorConfigEvent(this));
|
||||
}
|
||||
//}// DR 14404
|
||||
} catch (Exception e) {
|
||||
statusHandler.handle(Priority.WARN,
|
||||
"FFMPSourceConfigurationManager: " + message.getFileName()
|
||||
+ " couldn't be updated.", e);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -21,6 +21,7 @@ package com.raytheon.uf.common.monitor.config;
|
|||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
|
||||
import com.raytheon.uf.common.localization.FileUpdatedMessage;
|
||||
import com.raytheon.uf.common.localization.ILocalizationFileObserver;
|
||||
|
@ -35,6 +36,9 @@ import com.raytheon.uf.common.monitor.events.MonitorConfigListener;
|
|||
import com.raytheon.uf.common.monitor.xml.FFMPTemplateXML;
|
||||
import com.raytheon.uf.common.monitor.xml.VGBXML;
|
||||
import com.raytheon.uf.common.serialization.SerializationUtil;
|
||||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||
import com.raytheon.uf.common.status.UFStatus;
|
||||
import com.raytheon.uf.common.status.UFStatus.Priority;
|
||||
|
||||
/**
|
||||
* Template area configuration xml.
|
||||
|
@ -46,6 +50,7 @@ import com.raytheon.uf.common.serialization.SerializationUtil;
|
|||
* ------------ ---------- ----------- --------------------------
|
||||
* Feb 12, 2009 lvenable Initial creation
|
||||
* Oct 25, 2012 DR 15514 gzhang Adding getHucLevelsInArray()
|
||||
* Aug 18, 2013 1742 dhladky Concurrent mod exception on update fixed
|
||||
* </pre>
|
||||
*
|
||||
* @author dhladky
|
||||
|
@ -71,8 +76,11 @@ public class FFMPTemplateConfigurationManager implements
|
|||
|
||||
private LocalizationFile lf = null;
|
||||
|
||||
private ArrayList<MonitorConfigListener> listeners = new ArrayList<MonitorConfigListener>();
|
||||
|
||||
private CopyOnWriteArrayList<MonitorConfigListener> listeners = new CopyOnWriteArrayList<MonitorConfigListener>();
|
||||
|
||||
private static final IUFStatusHandler statusHandler = UFStatus
|
||||
.getHandler(FFMPTemplateConfigurationManager.class);
|
||||
|
||||
/* Private Constructor */
|
||||
private FFMPTemplateConfigurationManager() {
|
||||
configXml = new FFMPTemplateXML();
|
||||
|
@ -118,8 +126,9 @@ public class FFMPTemplateConfigurationManager implements
|
|||
}
|
||||
|
||||
File file = lf.getFile();
|
||||
FFMPTemplateXML configXmltmp = (FFMPTemplateXML) SerializationUtil
|
||||
.jaxbUnmarshalFromXmlFile(file.getAbsolutePath());
|
||||
FFMPTemplateXML configXmltmp = SerializationUtil
|
||||
.jaxbUnmarshalFromXmlFile(FFMPTemplateXML.class,
|
||||
file.getAbsolutePath());
|
||||
configXml = configXmltmp;
|
||||
}
|
||||
|
||||
|
@ -151,7 +160,8 @@ public class FFMPTemplateConfigurationManager implements
|
|||
|
||||
lf = newXmlFile;
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
statusHandler.handle(Priority.ERROR,
|
||||
"Couldn't save config file.", e);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -244,8 +254,9 @@ public class FFMPTemplateConfigurationManager implements
|
|||
|
||||
@Override
|
||||
public void fileUpdated(FileUpdatedMessage message) {
|
||||
try {
|
||||
if (message.getFileName().equals(CONFIG_FILE_NAME)) {
|
||||
|
||||
if (message.getFileName().equals(CONFIG_FILE_NAME)) {
|
||||
try {
|
||||
readConfigXml();
|
||||
// inform listeners
|
||||
synchronized (listeners) {
|
||||
|
@ -253,9 +264,13 @@ public class FFMPTemplateConfigurationManager implements
|
|||
fl.configChanged(new MonitorConfigEvent(this));
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
statusHandler.handle(
|
||||
Priority.WARN,
|
||||
"FFMPTemplateConfigurationManager: "
|
||||
+ message.getFileName()
|
||||
+ " couldn't be updated.", e);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -3,6 +3,7 @@ package com.raytheon.uf.common.monitor.config;
|
|||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
|
||||
import com.raytheon.uf.common.dataplugin.radar.util.RadarsInUseUtil;
|
||||
import com.raytheon.uf.common.localization.FileUpdatedMessage;
|
||||
|
@ -34,7 +35,8 @@ import com.raytheon.uf.common.status.UFStatus.Priority;
|
|||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* 02/07/2009 2037 dhladky Initial Creation.
|
||||
* 02/25/13 1660 D. Hladky Fixed configuration bug in scan.
|
||||
* 02/25/13 1660 dhladky Fixed configuration bug in scan.
|
||||
* Aug 13, 2013 1742 dhladky Concurrent mod exception on update fixed
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -63,7 +65,7 @@ public class SCANRunSiteConfigurationManager implements
|
|||
|
||||
private LocalizationFile lf = null;
|
||||
|
||||
private ArrayList<MonitorConfigListener> listeners = new ArrayList<MonitorConfigListener>();
|
||||
private List<MonitorConfigListener> listeners = new CopyOnWriteArrayList<MonitorConfigListener>();
|
||||
|
||||
protected boolean isPopulated;
|
||||
|
||||
|
@ -76,7 +78,6 @@ public class SCANRunSiteConfigurationManager implements
|
|||
} catch (Exception e) {
|
||||
statusHandler.handle(Priority.ERROR, "Can not read the SCAN configuration", e);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -170,18 +171,18 @@ public class SCANRunSiteConfigurationManager implements
|
|||
try {
|
||||
readConfigXml();
|
||||
// inform listeners
|
||||
final ArrayList<MonitorConfigListener> flistners = listeners;
|
||||
synchronized (flistners) {
|
||||
for (MonitorConfigListener fl : flistners) {
|
||||
fl.configChanged(new MonitorConfigEvent(this));
|
||||
}
|
||||
for (MonitorConfigListener fl : listeners) {
|
||||
fl.configChanged(new MonitorConfigEvent(this));
|
||||
}
|
||||
} catch (SerializationException e) {
|
||||
statusHandler.handle(Priority.WARN, "SCANRunSiteConfigurationManager: "
|
||||
+ message.getFileName() + " couldn't be updated.", e);
|
||||
|
||||
} catch (Exception e) {
|
||||
statusHandler.handle(
|
||||
Priority.WARN,
|
||||
"SCANRunSiteConfigurationManager: "
|
||||
+ message.getFileName()
|
||||
+ " couldn't be updated.", e);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void addRunConfig(SCANSiteRunConfigXML configXml) {
|
||||
|
|
Loading…
Add table
Reference in a new issue