You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commons-dev@ws.apache.org by ve...@apache.org on 2009/06/14 13:31:38 UTC

svn commit: r784542 - in /webservices/commons/trunk/modules/transport/modules: base/src/main/java/org/apache/axis2/transport/base/ base/src/main/java/org/apache/axis2/transport/base/datagram/ jms/src/main/java/org/apache/axis2/transport/jms/ mail/src/m...

Author: veithen
Date: Sun Jun 14 11:31:37 2009
New Revision: 784542

URL: http://svn.apache.org/viewvc?rev=784542&view=rev
Log:
Some refactorings to unify some of the aspects common to all AbstractTransportListener based transports.

Added:
    webservices/commons/trunk/modules/transport/modules/base/src/main/java/org/apache/axis2/transport/base/AbstractTransportListenerEx.java   (with props)
    webservices/commons/trunk/modules/transport/modules/base/src/main/java/org/apache/axis2/transport/base/ProtocolEndpoint.java   (with props)
Modified:
    webservices/commons/trunk/modules/transport/modules/base/src/main/java/org/apache/axis2/transport/base/AbstractPollTableEntry.java
    webservices/commons/trunk/modules/transport/modules/base/src/main/java/org/apache/axis2/transport/base/AbstractPollingTransportListener.java
    webservices/commons/trunk/modules/transport/modules/base/src/main/java/org/apache/axis2/transport/base/AbstractTransportListener.java
    webservices/commons/trunk/modules/transport/modules/base/src/main/java/org/apache/axis2/transport/base/datagram/AbstractDatagramTransportListener.java
    webservices/commons/trunk/modules/transport/modules/base/src/main/java/org/apache/axis2/transport/base/datagram/DatagramEndpoint.java
    webservices/commons/trunk/modules/transport/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSEndpoint.java
    webservices/commons/trunk/modules/transport/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSListener.java
    webservices/commons/trunk/modules/transport/modules/mail/src/main/java/org/apache/axis2/transport/mail/PollTableEntry.java
    webservices/commons/trunk/modules/transport/modules/udp/src/main/java/org/apache/axis2/transport/udp/Endpoint.java
    webservices/commons/trunk/modules/transport/modules/udp/src/main/java/org/apache/axis2/transport/udp/UDPListener.java

Modified: webservices/commons/trunk/modules/transport/modules/base/src/main/java/org/apache/axis2/transport/base/AbstractPollTableEntry.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/transport/modules/base/src/main/java/org/apache/axis2/transport/base/AbstractPollTableEntry.java?rev=784542&r1=784541&r2=784542&view=diff
==============================================================================
--- webservices/commons/trunk/modules/transport/modules/base/src/main/java/org/apache/axis2/transport/base/AbstractPollTableEntry.java (original)
+++ webservices/commons/trunk/modules/transport/modules/base/src/main/java/org/apache/axis2/transport/base/AbstractPollTableEntry.java Sun Jun 14 11:31:37 2009
@@ -21,18 +21,13 @@
 
 import java.util.TimerTask;
 
-import org.apache.axis2.addressing.EndpointReference;
-import org.apache.axis2.description.AxisService;
-
-public abstract class AbstractPollTableEntry {
+public abstract class AbstractPollTableEntry extends ProtocolEndpoint {
     // status of last scan
     public static final int SUCCSESSFUL = 0;
     public static final int WITH_ERRORS = 1;
     public static final int FAILED      = 2;
     public static final int NONE        = 3;
 
-    /** Axis2 service */
-    private AxisService service;
     /** next poll time */
     private long nextPollTime;
     /** last poll performed at */
@@ -48,16 +43,6 @@
     /** Flag indicating whether polling has been canceled. */
     boolean canceled;
     
-    public AxisService getService() {
-        return service;
-    }
-
-    void setService(AxisService service) {
-        this.service = service;
-    }
-    
-    public abstract EndpointReference getEndpointReference();
-
     public long getNextPollTime() {
         return nextPollTime;
     }

Modified: webservices/commons/trunk/modules/transport/modules/base/src/main/java/org/apache/axis2/transport/base/AbstractPollingTransportListener.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/transport/modules/base/src/main/java/org/apache/axis2/transport/base/AbstractPollingTransportListener.java?rev=784542&r1=784541&r2=784542&view=diff
==============================================================================
--- webservices/commons/trunk/modules/transport/modules/base/src/main/java/org/apache/axis2/transport/base/AbstractPollingTransportListener.java (original)
+++ webservices/commons/trunk/modules/transport/modules/base/src/main/java/org/apache/axis2/transport/base/AbstractPollingTransportListener.java Sun Jun 14 11:31:37 2009
@@ -212,7 +212,7 @@
                 String candidateName = service.getName();
                 if (candidateName.equals(serviceName) ||
                         serviceName.startsWith(candidateName + ".")) {
-                    return new EndpointReference[]{ entry.getEndpointReference() };
+                    return entry.getEndpointReferences(ip);
                 }
             }
         }

Modified: webservices/commons/trunk/modules/transport/modules/base/src/main/java/org/apache/axis2/transport/base/AbstractTransportListener.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/transport/modules/base/src/main/java/org/apache/axis2/transport/base/AbstractTransportListener.java?rev=784542&r1=784541&r2=784542&view=diff
==============================================================================
--- webservices/commons/trunk/modules/transport/modules/base/src/main/java/org/apache/axis2/transport/base/AbstractTransportListener.java (original)
+++ webservices/commons/trunk/modules/transport/modules/base/src/main/java/org/apache/axis2/transport/base/AbstractTransportListener.java Sun Jun 14 11:31:37 2009
@@ -337,6 +337,10 @@
         return transportIn.getName();
     }
 
+    public ConfigurationContext getConfigurationContext() {
+        return cfgCtx;
+    }
+    
     public MetricsCollector getMetricsCollector() {
         return metrics;
     }

Added: webservices/commons/trunk/modules/transport/modules/base/src/main/java/org/apache/axis2/transport/base/AbstractTransportListenerEx.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/transport/modules/base/src/main/java/org/apache/axis2/transport/base/AbstractTransportListenerEx.java?rev=784542&view=auto
==============================================================================
--- webservices/commons/trunk/modules/transport/modules/base/src/main/java/org/apache/axis2/transport/base/AbstractTransportListenerEx.java (added)
+++ webservices/commons/trunk/modules/transport/modules/base/src/main/java/org/apache/axis2/transport/base/AbstractTransportListenerEx.java Sun Jun 14 11:31:37 2009
@@ -0,0 +1,93 @@
+/*
+*  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.axis2.transport.base;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.axis2.AxisFault;
+import org.apache.axis2.addressing.EndpointReference;
+import org.apache.axis2.description.AxisService;
+
+/**
+ * Partial implementation of {@link AbstractTransportListener} with a higher level
+ * of abstraction. It maintains the mapping between services and protocol specific
+ * endpoints.
+ * <p>
+ * Note: the intention is to eventually merge the code in this class into
+ * {@link AbstractTransportListener}
+ * 
+ * @param <E> the type of protocol endpoint for this transport
+ */
+public abstract class AbstractTransportListenerEx<E extends ProtocolEndpoint>
+        extends AbstractTransportListener {
+    
+    /** A Map of service name to the protocol endpoints */
+    private Map<String,E> endpoints = new HashMap<String,E>();
+
+    @Override
+    public EndpointReference[] getEPRsForService(String serviceName, String ip) throws AxisFault {
+        //Strip out the operation name
+        if (serviceName.indexOf('/') != -1) {
+            serviceName = serviceName.substring(0, serviceName.indexOf('/'));
+        }
+        // strip out the endpoint name if present
+        if (serviceName.indexOf('.') != -1) {
+            serviceName = serviceName.substring(0, serviceName.indexOf('.'));
+        }
+        E endpoint = endpoints.get(serviceName);
+        if (endpoint != null) {
+            return endpoint.getEndpointReferences(ip);
+        } else {
+            return null;
+        }
+    }
+
+    public final Collection<E> getEndpoints() {
+        return Collections.unmodifiableCollection(endpoints.values());
+    }
+
+    protected abstract E createEndpoint();
+    
+    @Override
+    protected final void startListeningForService(AxisService service) throws AxisFault {
+        E endpoint = createEndpoint();
+        endpoint.setService(service);
+        configureAndStartEndpoint(endpoint, service);
+        endpoints.put(service.getName(), endpoint);
+    }
+
+    protected abstract void configureAndStartEndpoint(E endpoint, AxisService service) throws AxisFault;
+
+    @Override
+    protected final void stopListeningForService(AxisService service) {
+        E endpoint = endpoints.get(service.getName());
+        if (endpoint != null) {
+            stopEndpoint(endpoint);
+            endpoints.remove(service.getName());
+        } else {
+            log.error("Unable to stop service : " + service.getName() +
+                " - unable to find the corresponding protocol endpoint");
+        }
+    }
+    
+    protected abstract void stopEndpoint(E endpoint);
+}

Propchange: webservices/commons/trunk/modules/transport/modules/base/src/main/java/org/apache/axis2/transport/base/AbstractTransportListenerEx.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: webservices/commons/trunk/modules/transport/modules/base/src/main/java/org/apache/axis2/transport/base/ProtocolEndpoint.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/transport/modules/base/src/main/java/org/apache/axis2/transport/base/ProtocolEndpoint.java?rev=784542&view=auto
==============================================================================
--- webservices/commons/trunk/modules/transport/modules/base/src/main/java/org/apache/axis2/transport/base/ProtocolEndpoint.java (added)
+++ webservices/commons/trunk/modules/transport/modules/base/src/main/java/org/apache/axis2/transport/base/ProtocolEndpoint.java Sun Jun 14 11:31:37 2009
@@ -0,0 +1,61 @@
+/*
+*  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.axis2.transport.base;
+
+import org.apache.axis2.AxisFault;
+import org.apache.axis2.addressing.EndpointReference;
+import org.apache.axis2.description.AxisService;
+
+/**
+ * Describes a protocol specific endpoint. This might be a TCP/UDP port, a mail account,
+ * a JMS destination, etc. Typically, a protocol specific endpoint is mapped to a
+ * service.
+ */
+public abstract class ProtocolEndpoint {
+    /** Axis2 service */
+    private AxisService service;
+    
+    public final AxisService getService() {
+        return service;
+    }
+
+    // TODO: this should only be called by AbstractTransportListener and declared with package access
+    public final void setService(AxisService service) {
+        this.service = service;
+    }
+    
+    public final String getServiceName() {
+        return service.getName();
+    }
+
+    /**
+     * Get the endpoint references for this protocol endpoint.
+     * 
+     * @param ip The host name or IP address of the local host. The implementation should use
+     *           this information instead of {@link java.net.InetAddress#getLocalHost()}.
+     *           The value of this parameter may be <code>null</code>, in which case the
+     *           implementation should use {@link org.apache.axis2.util.Utils#getIpAddress(
+     *           org.apache.axis2.engine.AxisConfiguration)}.
+     * @return an array of endpoint references
+     * @throws AxisFault
+     * 
+     * @see org.apache.axis2.transport.TransportListener#getEPRsForService(String, String)
+     */
+    public abstract EndpointReference[] getEndpointReferences(String ip) throws AxisFault;
+}

Propchange: webservices/commons/trunk/modules/transport/modules/base/src/main/java/org/apache/axis2/transport/base/ProtocolEndpoint.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: webservices/commons/trunk/modules/transport/modules/base/src/main/java/org/apache/axis2/transport/base/datagram/AbstractDatagramTransportListener.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/transport/modules/base/src/main/java/org/apache/axis2/transport/base/datagram/AbstractDatagramTransportListener.java?rev=784542&r1=784541&r2=784542&view=diff
==============================================================================
--- webservices/commons/trunk/modules/transport/modules/base/src/main/java/org/apache/axis2/transport/base/datagram/AbstractDatagramTransportListener.java (original)
+++ webservices/commons/trunk/modules/transport/modules/base/src/main/java/org/apache/axis2/transport/base/datagram/AbstractDatagramTransportListener.java Sun Jun 14 11:31:37 2009
@@ -20,21 +20,17 @@
 
 import java.io.IOException;
 import java.net.SocketException;
-import java.util.HashMap;
-import java.util.Map;
 
 import org.apache.axis2.AxisFault;
-import org.apache.axis2.addressing.EndpointReference;
 import org.apache.axis2.context.ConfigurationContext;
 import org.apache.axis2.description.AxisService;
 import org.apache.axis2.description.TransportInDescription;
-import org.apache.axis2.transport.base.AbstractTransportListener;
+import org.apache.axis2.transport.base.AbstractTransportListenerEx;
 import org.apache.axis2.transport.base.ParamUtils;
 
 public abstract class AbstractDatagramTransportListener<E extends DatagramEndpoint>
-        extends AbstractTransportListener {
+        extends AbstractTransportListenerEx<E> {
     
-    private final Map<String,E> endpoints = new HashMap<String,E>();
 	private DatagramDispatcher<E> dispatcher;
     private String defaultIp;
 	
@@ -61,10 +57,8 @@
     }
 	
     @Override
-    protected void startListeningForService(AxisService service) throws AxisFault {
-        E endpoint = createEndpoint(service);
+    protected void configureAndStartEndpoint(E endpoint, AxisService service) throws AxisFault {
         endpoint.setListener(this);
-        endpoint.setService(service);
         endpoint.setContentType(ParamUtils.getRequiredParam(
                 service, "transport." + getTransportName() + ".contentType"));
         endpoint.setMetrics(metrics);
@@ -73,24 +67,22 @@
             dispatcher.addEndpoint(endpoint);
         } catch (IOException ex) {
             throw new AxisFault("Unable to listen on endpoint "
-                    + endpoint.getEndpointReference(defaultIp), ex);
+                    + endpoint.getEndpointReferences(defaultIp)[0], ex);
         }
         if (log.isDebugEnabled()) {
-            log.debug("Started listening on endpoint " + endpoint.getEndpointReference(defaultIp)
+            log.debug("Started listening on endpoint " + endpoint.getEndpointReferences(defaultIp)[0]
                     + " [contentType=" + endpoint.getContentType()
                     + "; service=" + service.getName() + "]");
         }
-        endpoints.put(service.getName(), endpoint);
     }
     
     @Override
-    protected void stopListeningForService(AxisService service) {
+    protected void stopEndpoint(E endpoint) {
         try {
-            dispatcher.removeEndpoint(endpoints.get(service.getName()));
+            dispatcher.removeEndpoint(endpoint);
         } catch (IOException ex) {
-            log.error("I/O exception while stopping listener for service " + service.getName(), ex);
+            log.error("I/O exception while stopping listener for service " + endpoint.getServiceName(), ex);
         }
-        endpoints.remove(service.getName());
     }
 
     @Override
@@ -103,24 +95,6 @@
         }
     }
 
-    public EndpointReference[] getEPRsForService(String serviceName, String ip) throws AxisFault {
-
-        // strip out the endpoint name if present
-        if (serviceName.indexOf('.') != -1) {
-            serviceName = serviceName.substring(0, serviceName.indexOf('.'));
-        }
-
-        E endpoint = endpoints.get(serviceName);
-        if (endpoint == null) {
-            return null;
-        } else {
-            return new EndpointReference[] {
-                    endpoint.getEndpointReference(ip == null ? defaultIp : ip) };
-        }
-    }
-    
 	protected abstract DatagramDispatcher<E> createDispatcher(DatagramDispatcherCallback callback)
             throws IOException;
-    
-    protected abstract E createEndpoint(AxisService service) throws AxisFault;
 }

Modified: webservices/commons/trunk/modules/transport/modules/base/src/main/java/org/apache/axis2/transport/base/datagram/DatagramEndpoint.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/transport/modules/base/src/main/java/org/apache/axis2/transport/base/datagram/DatagramEndpoint.java?rev=784542&r1=784541&r2=784542&view=diff
==============================================================================
--- webservices/commons/trunk/modules/transport/modules/base/src/main/java/org/apache/axis2/transport/base/datagram/DatagramEndpoint.java (original)
+++ webservices/commons/trunk/modules/transport/modules/base/src/main/java/org/apache/axis2/transport/base/datagram/DatagramEndpoint.java Sun Jun 14 11:31:37 2009
@@ -18,9 +18,8 @@
  */
 package org.apache.axis2.transport.base.datagram;
 
-import org.apache.axis2.addressing.EndpointReference;
-import org.apache.axis2.description.AxisService;
 import org.apache.axis2.transport.base.MetricsCollector;
+import org.apache.axis2.transport.base.ProtocolEndpoint;
 
 /**
  * Endpoint description.
@@ -30,10 +29,9 @@
  * transport specific information, such as the port number
  * the transport listens on.
  */
-public abstract class DatagramEndpoint {
+public abstract class DatagramEndpoint extends ProtocolEndpoint {
     private AbstractDatagramTransportListener listener;
     private String contentType;
-    private AxisService service;
     private MetricsCollector metrics;
 
     public AbstractDatagramTransportListener getListener() {
@@ -52,14 +50,6 @@
 		this.contentType = contentType;
 	}
 
-	public AxisService getService() {
-        return service;
-    }
-
-    public void setService(AxisService service) {
-		this.service = service;
-	}
-
 	public MetricsCollector getMetrics() {
         return metrics;
     }
@@ -67,6 +57,4 @@
 	public void setMetrics(MetricsCollector metrics) {
 		this.metrics = metrics;
 	}
-	
-	public abstract EndpointReference getEndpointReference(String ip);
 }

Modified: webservices/commons/trunk/modules/transport/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSEndpoint.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/transport/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSEndpoint.java?rev=784542&r1=784541&r2=784542&view=diff
==============================================================================
--- webservices/commons/trunk/modules/transport/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSEndpoint.java (original)
+++ webservices/commons/trunk/modules/transport/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSEndpoint.java Sun Jun 14 11:31:37 2009
@@ -15,8 +15,8 @@
 */
 package org.apache.axis2.transport.jms;
 
-import org.apache.axis2.description.AxisService;
 import org.apache.axis2.description.Parameter;
+import org.apache.axis2.transport.base.ProtocolEndpoint;
 import org.apache.axis2.transport.jms.ctype.ContentTypeRuleSet;
 import org.apache.axis2.addressing.EndpointReference;
 
@@ -33,27 +33,14 @@
  * all the required information to process incoming JMS messages and to inject them
  * into Axis2.
  */
-public class JMSEndpoint {
+public class JMSEndpoint extends ProtocolEndpoint {
     private JMSConnectionFactory cf;
-    private AxisService service;
     private String jndiDestinationName;
     private int destinationType = JMSConstants.GENERIC;
     private Set<EndpointReference> endpointReferences = new HashSet<EndpointReference>();
     private ContentTypeRuleSet contentTypeRuleSet;
     private ServiceTaskManager serviceTaskManager;
 
-    public AxisService getService() {
-        return service;
-    }
-
-    public void setService(AxisService service) {
-        this.service = service;
-    }
-    
-    public String getServiceName() {
-        return service.getName();
-    }
-
     public String getJndiDestinationName() {
         return jndiDestinationName;
     }
@@ -72,7 +59,8 @@
         }
     }
 
-    public EndpointReference[] getEndpointReferences() {
+    @Override
+    public EndpointReference[] getEndpointReferences(String ip) {
         return endpointReferences.toArray(new EndpointReference[endpointReferences.size()]);
     }
 

Modified: webservices/commons/trunk/modules/transport/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSListener.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/transport/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSListener.java?rev=784542&r1=784541&r2=784542&view=diff
==============================================================================
--- webservices/commons/trunk/modules/transport/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSListener.java (original)
+++ webservices/commons/trunk/modules/transport/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSListener.java Sun Jun 14 11:31:37 2009
@@ -17,12 +17,11 @@
 
 import org.apache.axis2.AxisFault;
 import org.apache.axis2.Constants;
-import org.apache.axis2.addressing.EndpointReference;
 import org.apache.axis2.context.ConfigurationContext;
 import org.apache.axis2.description.AxisService;
 import org.apache.axis2.description.Parameter;
 import org.apache.axis2.description.TransportInDescription;
-import org.apache.axis2.transport.base.AbstractTransportListener;
+import org.apache.axis2.transport.base.AbstractTransportListenerEx;
 import org.apache.axis2.transport.base.BaseConstants;
 import org.apache.axis2.transport.base.ManagementSupport;
 import org.apache.axis2.transport.base.event.TransportErrorListener;
@@ -33,9 +32,6 @@
 import org.apache.axis2.transport.jms.ctype.MessageTypeRule;
 import org.apache.axis2.transport.jms.ctype.PropertyRule;
 
-import java.util.HashMap;
-import java.util.Map;
-
 import javax.jms.BytesMessage;
 import javax.jms.TextMessage;
 
@@ -56,15 +52,13 @@
  * <p>
  * All Destinations / JMS Administered objects used MUST be pre-created or already available 
  */
-public class JMSListener extends AbstractTransportListener implements ManagementSupport,
+public class JMSListener extends AbstractTransportListenerEx<JMSEndpoint> implements ManagementSupport,
     TransportErrorSource {
 
     public static final String TRANSPORT_NAME = Constants.TRANSPORT_JMS;
 
     /** The JMSConnectionFactoryManager which centralizes the management of defined factories */
     private JMSConnectionFactoryManager connFacManager;
-    /** A Map of service name to the JMS endpoints */
-    private Map<String,JMSEndpoint> serviceNameToEndpointMap = new HashMap<String,JMSEndpoint>();
 
     private final TransportErrorSourceSupport tess = new TransportErrorSourceSupport(this);
     
@@ -82,27 +76,9 @@
         log.info("JMS Transport Receiver/Listener initialized...");
     }
 
-    /**
-     * Returns EPRs for the given service over the JMS transport
-     *
-     * @param serviceName service name
-     * @return the JMS EPRs for the service
-     */
-    public EndpointReference[] getEPRsForService(String serviceName) {
-        //Strip out the operation name
-        if (serviceName.indexOf('/') != -1) {
-            serviceName = serviceName.substring(0, serviceName.indexOf('/'));
-        }
-        // strip out the endpoint name if present
-        if (serviceName.indexOf('.') != -1) {
-            serviceName = serviceName.substring(0, serviceName.indexOf('.'));
-        }
-        JMSEndpoint endpoint = serviceNameToEndpointMap.get(serviceName);
-        if (endpoint != null) {
-            return endpoint.getEndpointReferences();
-        } else {
-            return null;
-        }
+    @Override
+    protected JMSEndpoint createEndpoint() {
+        return new JMSEndpoint();
     }
 
     /**
@@ -110,15 +86,14 @@
      *
      * @param service the Axis service for which to listen for messages
      */
-    protected void startListeningForService(AxisService service) throws AxisFault {
+    @Override
+    protected void configureAndStartEndpoint(JMSEndpoint endpoint, AxisService service) throws AxisFault {
         JMSConnectionFactory cf = getConnectionFactory(service);
         if (cf == null) {
             throw new AxisFault("The service doesn't specify a JMS connection factory or refers " +
                 "to an invalid factory.");
         }
 
-        JMSEndpoint endpoint = new JMSEndpoint();
-        endpoint.setService(service);
         endpoint.setCf(cf);
 
         Parameter destParam = service.getParameter(JMSConstants.PARAM_DESTINATION);
@@ -161,8 +136,6 @@
         stm.start();
         endpoint.setServiceTaskManager(stm);
 
-        serviceNameToEndpointMap.put(service.getName(), endpoint);
-        
         for (int i=0; i<3; i++) {
             if (stm.getActiveTaskCount() > 0) {
                 log.info("Started to listen on destination : " + stm.getDestinationJNDIName() +
@@ -185,26 +158,19 @@
      *
      * @param service the service that was undeployed or stopped
      */
-    protected void stopListeningForService(AxisService service) {
-
-        JMSEndpoint endpoint = serviceNameToEndpointMap.get(service.getName());
-        if (endpoint != null) {
-            ServiceTaskManager stm = endpoint.getServiceTaskManager();
-            if (log.isDebugEnabled()) {
-                log.debug("Stopping listening on destination : " + stm.getDestinationJNDIName() +
-                    " for service : " + stm.getServiceName());
-            }
-
-            stm.stop();
+    @Override
+    protected void stopEndpoint(JMSEndpoint endpoint) {
+        ServiceTaskManager stm = endpoint.getServiceTaskManager();
+        if (log.isDebugEnabled()) {
+            log.debug("Stopping listening on destination : " + stm.getDestinationJNDIName() +
+                " for service : " + stm.getServiceName());
+        }
 
-            serviceNameToEndpointMap.remove(service.getName());
-            log.info("Stopped listening for JMS messages to service : " + service.getName());
+        stm.stop();
 
-        } else {
-            log.error("Unable to stop service : " + service.getName() +
-                " - unable to find its ServiceTaskManager");
-        }
+        log.info("Stopped listening for JMS messages to service : " + endpoint.getServiceName());
     }
+
     /**
      * Return the connection factory name for this service. If this service
      * refers to an invalid factory or defaults to a non-existent default
@@ -233,7 +199,7 @@
     public void pause() throws AxisFault {
         if (state != BaseConstants.STARTED) return;
         try {
-            for (JMSEndpoint endpoint : serviceNameToEndpointMap.values()) {
+            for (JMSEndpoint endpoint : getEndpoints()) {
                 endpoint.getServiceTaskManager().pause();
             }
             state = BaseConstants.PAUSED;
@@ -250,7 +216,7 @@
     public void resume() throws AxisFault {
         if (state != BaseConstants.PAUSED) return;
         try {
-            for (JMSEndpoint endpoint : serviceNameToEndpointMap.values()) {
+            for (JMSEndpoint endpoint : getEndpoints()) {
                 endpoint.getServiceTaskManager().resume();
             }
             state = BaseConstants.STARTED;

Modified: webservices/commons/trunk/modules/transport/modules/mail/src/main/java/org/apache/axis2/transport/mail/PollTableEntry.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/transport/modules/mail/src/main/java/org/apache/axis2/transport/mail/PollTableEntry.java?rev=784542&r1=784541&r2=784542&view=diff
==============================================================================
--- webservices/commons/trunk/modules/transport/modules/mail/src/main/java/org/apache/axis2/transport/mail/PollTableEntry.java (original)
+++ webservices/commons/trunk/modules/transport/modules/mail/src/main/java/org/apache/axis2/transport/mail/PollTableEntry.java Sun Jun 14 11:31:37 2009
@@ -86,8 +86,9 @@
     private long reconnectTimeout;
 
     @Override
-    public EndpointReference getEndpointReference() {
-        return new EndpointReference(MailConstants.TRANSPORT_PREFIX + emailAddress);
+    public EndpointReference[] getEndpointReferences(String ip) {
+        return new EndpointReference[] { new EndpointReference(MailConstants.TRANSPORT_PREFIX
+                + emailAddress) };
     }
 
     public InternetAddress getEmailAddress() {

Modified: webservices/commons/trunk/modules/transport/modules/udp/src/main/java/org/apache/axis2/transport/udp/Endpoint.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/transport/modules/udp/src/main/java/org/apache/axis2/transport/udp/Endpoint.java?rev=784542&r1=784541&r2=784542&view=diff
==============================================================================
--- webservices/commons/trunk/modules/transport/modules/udp/src/main/java/org/apache/axis2/transport/udp/Endpoint.java (original)
+++ webservices/commons/trunk/modules/transport/modules/udp/src/main/java/org/apache/axis2/transport/udp/Endpoint.java Sun Jun 14 11:31:37 2009
@@ -18,8 +18,12 @@
  */
 package org.apache.axis2.transport.udp;
 
+import java.net.SocketException;
+
+import org.apache.axis2.AxisFault;
 import org.apache.axis2.addressing.EndpointReference;
 import org.apache.axis2.transport.base.datagram.DatagramEndpoint;
+import org.apache.axis2.util.Utils;
 
 /**
  * UDP endpoint description.
@@ -44,7 +48,16 @@
 		this.maxPacketSize = maxPacketSize;
 	}
 
-	public EndpointReference getEndpointReference(String ip) {
-        return new EndpointReference("udp://" + ip + ":" + getPort() + "?contentType=" + getContentType());
+	@Override
+    public EndpointReference[] getEndpointReferences(String ip) throws AxisFault {
+	    if (ip == null) {
+	        try {
+	            ip = Utils.getIpAddress(getListener().getConfigurationContext().getAxisConfiguration());
+	        } catch (SocketException ex) {
+	            throw new AxisFault("Unable to determine the host's IP address", ex);
+	        }
+	    }
+        return new EndpointReference[] { new EndpointReference("udp://" + ip + ":" + getPort()
+                + "?contentType=" + getContentType()) };
     }
 }

Modified: webservices/commons/trunk/modules/transport/modules/udp/src/main/java/org/apache/axis2/transport/udp/UDPListener.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/transport/modules/udp/src/main/java/org/apache/axis2/transport/udp/UDPListener.java?rev=784542&r1=784541&r2=784542&view=diff
==============================================================================
--- webservices/commons/trunk/modules/transport/modules/udp/src/main/java/org/apache/axis2/transport/udp/UDPListener.java (original)
+++ webservices/commons/trunk/modules/transport/modules/udp/src/main/java/org/apache/axis2/transport/udp/UDPListener.java Sun Jun 14 11:31:37 2009
@@ -54,10 +54,14 @@
     }
 
     @Override
-    protected Endpoint createEndpoint(AxisService service) throws AxisFault {
-    	Endpoint endpoint = new Endpoint();
-    	endpoint.setPort(ParamUtils.getRequiredParamInt(service, UDPConstants.PORT_KEY));
-    	endpoint.setMaxPacketSize(ParamUtils.getOptionalParamInt(service, UDPConstants.MAX_PACKET_SIZE_KEY, UDPConstants.DEFAULT_MAX_PACKET_SIZE));
-    	return endpoint;
+    protected Endpoint createEndpoint() {
+    	return new Endpoint();
+    }
+
+    @Override
+    protected void configureAndStartEndpoint(Endpoint endpoint, AxisService service) throws AxisFault {
+        endpoint.setPort(ParamUtils.getRequiredParamInt(service, UDPConstants.PORT_KEY));
+        endpoint.setMaxPacketSize(ParamUtils.getOptionalParamInt(service, UDPConstants.MAX_PACKET_SIZE_KEY, UDPConstants.DEFAULT_MAX_PACKET_SIZE));
+        super.configureAndStartEndpoint(endpoint, service);
     }
 }