synapse-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From indika kumara <indika.k...@gmail.com>
Subject Re: svn commit: r797333 - in /synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config: SynapseConfiguration.java SynapseObserver.java
Date Fri, 24 Jul 2009 09:01:48 GMT
What about Extension Interface design Patten [1].It is a proven
pattern that used to address different challenges and issues in
interface design such as adaptability, Stability, Versioning,
Extensibility, Special purpose usage, etc...

If you need to added new component - some main abstraction related
with synapse, same as proxy, sequence, even sources, etc. You can make
event notification related into that abstraction into a new interface
and then only any client that needs those events have to implement
that interface.

Anyway, I am not against for currently suggested approach.

[1] http://www.laputan.org/pub/sag/extension-interface.pdf

Indika

On Fri, Jul 24, 2009 at 12:37 PM, Andreas
Veithen<andreas.veithen@gmail.com> wrote:
> Sounds like a very useful feature. Can you also add an
> AbstractSynapseObserver that implements SynapseObserver with default
> (empty) implementations for all the methods? By recommending to extend
> this class instead of implementing SynapseObserver directly, we can
> easily add new methods later without breaking existing observer
> implementations.
>
> Thanks,
>
> Andreas
>
> On Fri, Jul 24, 2009 at 08:24, <hiranya@apache.org> wrote:
>> 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);
>> +
>> +}
>>
>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@synapse.apache.org
> For additional commands, e-mail: dev-help@synapse.apache.org
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@synapse.apache.org
For additional commands, e-mail: dev-help@synapse.apache.org


Mime
View raw message