View Javadoc

    1   /***
    2    *
    3    * Copyright 2004 Protique Ltd
    4    *
    5    * Licensed under the Apache License, Version 2.0 (the "License");
    6    * you may not use this file except in compliance with the License.
    7    * You may obtain a copy of the License at
    8    *
    9    * http://www.apache.org/licenses/LICENSE-2.0
    10   *
    11   * Unless required by applicable law or agreed to in writing, software
    12   * distributed under the License is distributed on an "AS IS" BASIS,
    13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    14   * See the License for the specific language governing permissions and
    15   * limitations under the License.
    16   *
    17   **/
    18  package org.codehaus.activemq.transport.composite;
    19
    20  import org.codehaus.activemq.message.WireFormat;
    21  import org.codehaus.activemq.transport.TransportChannel;
    22  import org.codehaus.activemq.transport.TransportChannelFactory;
    23  import org.codehaus.activemq.util.JMSExceptionHelper;
    24
    25  import javax.jms.JMSException;
    26  import java.net.URI;
    27  import java.net.URISyntaxException;
    28  import java.util.ArrayList;
    29  import java.util.List;
    30  import java.util.StringTokenizer;
    31
    32  /***
    33   * A Composite implementation of a TransportChannelFactory
    34   *
    35   * @version $Revision: 1.5 $
    36   */
    37  public class CompositeTransportChannelFactory implements TransportChannelFactory {
    38      private String separator = ",";
    39
    40      public TransportChannel create(WireFormat wireFormat, URI remoteLocation) throws JMSException {
    41          try {
    42              return new CompositeTransportChannel(wireFormat, parseURIs(remoteLocation));
    43          }
    44          catch (URISyntaxException e) {
    45              throw JMSExceptionHelper.newJMSException("Can't parse list of URIs for: " + remoteLocation + ". Reason: " + e, e);
    46          }
    47      }
    48
    49      public TransportChannel create(WireFormat wireFormat, URI remoteLocation, URI localLocation) throws JMSException {
    50          return create(wireFormat, remoteLocation);
    51      }
    52
    53      public boolean requiresEmbeddedBroker() {
    54          return false;
    55      }
    56
    57      protected List parseURIs(URI uri) throws URISyntaxException {
    58          String text = uri.getSchemeSpecificPart();
    59          List uris = new ArrayList();
    60          StringTokenizer iter = new StringTokenizer(text, separator);
    61          while (iter.hasMoreTokens()) {
    62              String child = stripLeadingSlashes(iter.nextToken().trim());
    63              uris.add(new URI(child));
    64          }
    65          return randomizeURIs(uris);
    66      }
    67
    68      protected String stripLeadingSlashes(String text) {
    69          int idx = 0;
    70          while (text.charAt(idx) == '/') {
    71              idx++;
    72          }
    73          if (idx > 0) {
    74              return text.substring(idx);
    75          }
    76          return text;
    77      }
    78
    79
    80      protected List randomizeURIs(List uris) {
    81          return uris;
    82      }
    83  }