Author: hiranya
Date: Fri Jul 24 06:24:06 2009
New Revision: 797333
URL: http://svn.apache.org/viewvc?rev=797333&view=rev
Log:
Adding the SynapseObserver interface. Implementations of this interface can be
used to monitor a SynapseConfiguration instance at runtime. A SynapseObserver
instance registered with a SynapseConfiguration receives events regarding
configuration updates (add/remove items). Useful when writing custom
configuration monitors, dependency trackers etc.
Added:
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/SynapseObserver.java
Modified:
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/SynapseConfiguration.java
Modified:
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/SynapseConfiguration.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/SynapseConfiguration.java?rev=797333&r1=797332&r2=797333&view=diff
==============================================================================
---
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/SynapseConfiguration.java
(original)
+++
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/SynapseConfiguration.java
Fri Jul 24 06:24:06 2009
@@ -118,6 +118,10 @@
*/
private Map<String, SynapseEventSource> eventSources = new HashMap<String,
SynapseEventSource>();
+ /**
+ * The list of registered configuration observers
+ */
+ private List<SynapseObserver> observers = new ArrayList<SynapseObserver>();
/**
* Add a named sequence into the local registry. If a sequence already
exists by the specified
@@ -131,6 +135,10 @@
public void addSequence(String key, Mediator mediator) {
assertAlreadyExists(key,SEQUENCE);
localRegistry.put(key, mediator);
+
+ for (SynapseObserver o : observers) {
+ o.sequenceAdded(mediator);
+ }
}
/**
@@ -254,6 +262,9 @@
Object sequence = localRegistry.get(key);
if (sequence instanceof Mediator) {
localRegistry.remove(key);
+ for (SynapseObserver o : observers) {
+ o.sequenceRemoved((Mediator) sequence);
+ }
} else {
handleException("No sequence exists by the key/name : " + key);
}
@@ -302,12 +313,18 @@
entry.setValue(SynapseConfigUtils.getOMElementFromURL(entry.getSrc()
.toString()));
localRegistry.put(key, entry);
+ for (SynapseObserver o : observers) {
+ o.entryAdded(entry);
+ }
} catch (IOException e) {
handleException("Can not read from source URL : "
+ entry.getSrc());
}
} else {
localRegistry.put(key, entry);
+ for (SynapseObserver o : observers) {
+ o.entryAdded(entry);
+ }
}
}
@@ -421,6 +438,9 @@
Object entry = localRegistry.get(key);
if (entry instanceof Entry) {
localRegistry.remove(key);
+ for (SynapseObserver o : observers) {
+ o.entryRemoved((Entry) entry);
+ }
} else {
handleException("No entry exists by the key : " + key);
}
@@ -467,6 +487,9 @@
public void addEndpoint(String key, Endpoint endpoint) {
assertAlreadyExists(key, ENDPOINT);
localRegistry.put(key, endpoint);
+ for (SynapseObserver o : observers) {
+ o.endpointAdded(endpoint);
+ }
}
/**
@@ -568,6 +591,9 @@
Object endpoint = localRegistry.get(key);
if (endpoint instanceof Endpoint) {
localRegistry.remove(key);
+ for (SynapseObserver o : observers) {
+ o.endpointRemoved((Endpoint) endpoint);
+ }
} else {
handleException("No endpoint exists by the key/name : " + key);
}
@@ -585,6 +611,9 @@
public void addProxyService(String name, ProxyService proxy) {
if (!proxyServices.containsKey(name)) {
proxyServices.put(name, proxy);
+ for (SynapseObserver o : observers) {
+ o.proxyServiceAdded(proxy);
+ }
} else {
handleException("Duplicate proxy service by the name : " + name);
}
@@ -609,8 +638,8 @@
* of the Proxy Service to be deleted
*/
public void removeProxyService(String name) {
- Object o = proxyServices.get(name);
- if (o == null) {
+ ProxyService proxy = proxyServices.get(name);
+ if (proxy == null) {
handleException("Unknown proxy service for name : " + name);
} else {
try {
@@ -623,6 +652,9 @@
getAxisConfiguration().removeService(name);
}
proxyServices.remove(name);
+ for (SynapseObserver o : observers) {
+ o.proxyServiceRemoved(proxy);
+ }
} catch (AxisFault axisFault) {
handleException(axisFault.getMessage());
}
@@ -759,6 +791,9 @@
public void addStartup(Startup startup) {
if (!startups.containsKey(startup.getName())) {
startups.put(startup.getName(), startup);
+ for (SynapseObserver o : observers) {
+ o.startupAdded(startup);
+ }
} else {
handleException("Duplicate startup by the name : " +
startup.getName());
}
@@ -771,8 +806,12 @@
* @param name - name of the startup that needs to be removed
*/
public void removeStartup(String name) {
- if (startups.containsKey(name)) {
+ Startup startup = startups.get(name);
+ if (startup != null) {
startups.remove(name);
+ for (SynapseObserver o : observers) {
+ o.startupRemoved(startup);
+ }
} else {
handleException("No startup exists by the name : " + name);
}
@@ -1000,6 +1039,9 @@
public void addEventSource(String name, SynapseEventSource eventSource) {
if (!eventSources.containsKey(name)) {
eventSources.put(name, eventSource);
+ for (SynapseObserver o : observers) {
+ o.eventSourceAdded(eventSource);
+ }
} else {
handleException("Duplicate event source by the name : " + name);
}
@@ -1016,8 +1058,12 @@
* @param name name of the event source to be removed
*/
public void removeEventSource(String name) {
- if (eventSources.containsKey(name)) {
+ SynapseEventSource eventSource = eventSources.get(name);
+ if (eventSource != null) {
eventSources.remove(name);
+ for (SynapseObserver o : observers) {
+ o.eventSourceRemoved(eventSource);
+ }
} else {
handleException("No event source exists by the name : " + name);
}
@@ -1031,6 +1077,12 @@
this.eventSources = eventSources;
}
+ public void registerObserver(SynapseObserver o) {
+ if (!observers.contains(o)) {
+ observers.add(o);
+ }
+ }
+
private void assertAlreadyExists(String key, String type) {
if (key == null || "".equals(key)) {
Added:
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/SynapseObserver.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/SynapseObserver.java?rev=797333&view=auto
==============================================================================
---
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/SynapseObserver.java
(added)
+++
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/SynapseObserver.java
Fri Jul 24 06:24:06 2009
@@ -0,0 +1,107 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.synapse.config;
+
+import org.apache.synapse.Mediator;
+import org.apache.synapse.Startup;
+import org.apache.synapse.eventing.SynapseEventSource;
+import org.apache.synapse.core.axis2.ProxyService;
+import org.apache.synapse.endpoints.Endpoint;
+
+/**
+ * An implementation of this interface can be registered with the
SynapseConfiguration to receive
+ * configuration update events. Whenever a new item is added to the
configuration or an existing
+ * item is removed the events defined in this interface will be fired.
+ */
+public interface SynapseObserver {
+
+ /** Event fired when a new sequence is added to the configuration
+ *
+ * @param sequence the Sequence mediator added to the configuration
+ */
+ public void sequenceAdded(Mediator sequence);
+
+ /** Event fired when an existing sequence is removed from the configuration
+ *
+ * @param sequence the Sequence removed from the configuration
+ */
+ public void sequenceRemoved(Mediator sequence);
+
+ /** Event fired when an entry is added to the configuration
+ *
+ * @param entry the Entry added to the configuration
+ */
+ public void entryAdded(Entry entry);
+
+ /** Event fired when an entry is removed from the configuration
+ *
+ * @param entry the Entry removed from the configuration
+ */
+ public void entryRemoved(Entry entry);
+
+ /** Event fired when an endpoint is added to the configuration
+ *
+ * @param endpoint the Endpoint added to the configuration
+ */
+ public void endpointAdded(Endpoint endpoint);
+
+ /** Event fired when an endpoint is removed from the configuration
+ *
+ * @param endpoint the Endpoint removed from the configuration
+ */
+ public void endpointRemoved(Endpoint endpoint);
+
+ /** Event fired when a proxy service is added to the configuration
+ *
+ * @param proxy the ProxyService added to the configuration
+ */
+ public void proxyServiceAdded(ProxyService proxy);
+
+ /** Event fired when a proxy service is removed from the configuration
+ *
+ * @param proxy the ProxyService removed from the configuration
+ */
+ public void proxyServiceRemoved(ProxyService proxy);
+
+ /** Event fired when a startup is added to the configuration
+ *
+ * @param startup the Startup added to the configuration
+ */
+ public void startupAdded(Startup startup);
+
+ /** Event fired when a startup is removed from the configuration
+ *
+ * @param startup the Startup removed from the configuration
+ */
+ public void startupRemoved(Startup startup);
+
+ /** Event fired when an event source is added to the configuration
+ *
+ * @param eventSource the SynapseEventSource added to the configuration
+ */
+ public void eventSourceAdded(SynapseEventSource eventSource);
+
+ /** Event fired when an event source is removed from the configuration
+ *
+ * @param eventSource the SynapseEventSource removed from the
configuration
+ */
+ public void eventSourceRemoved(SynapseEventSource eventSource);
+
+}