*/
package org.wamblee.xmlrouter.impl;
+import org.wamblee.general.Pair;
+
/**
* The XML Router configuration contains both configuration data as well as
* derived data used by the XML router. It is important that all this data is
public interface XMLRouterConfiguration {
/**
- * To be called before the configuration is updated. Corresponds to write
- * lock acquire.
- */
- void startConfigurationChange();
-
- /**
- * To be called after the configuration is updated. Corresponds to write
- * lock acquire.
- */
- void endConfigurationChange();
-
- /**
- * To be called before the configuration is used. Corresponds to read lock
- * acquire.
- */
- void startPublishEvent();
-
- /**
- * To be called after the configuration is used. Corresponds to read lock
- * release.
- */
- void endPublishEvent();
-
- /**
- * @return Configuration data.
+ * Atomically get the configuration. The XMLRouter uses this to get a
+ * snapshot of the configuration data for handling a single message. In this
+ * way a consistent configuration is used for each event.
+ *
+ * @return Configuration.
*/
- ExtendedRouterConfig routerConfig();
+ Pair<ExtendedRouterConfig, TransformationPaths> getConfig();
/**
- * @return Transformation paths (derived data).
+ * Atomically sets the configuration and updates derived data. There will be
+ * a short time during which read attempts will fail.
+ *
+ * @param aConfig
+ * Configuration to set.
*/
- TransformationPaths transformations();
+ void setRouterConfig(ExtendedRouterConfig aConfig);
}