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
    19  package org.codehaus.activemq.transport.reliable;
    20  import java.net.URI;
    21  import java.net.URISyntaxException;
    22  import javax.jms.JMSException;
    23  import org.codehaus.activemq.message.WireFormat;
    24  import org.codehaus.activemq.transport.TransportChannel;
    25  import org.codehaus.activemq.transport.composite.CompositeTransportChannelFactory;
    26  import org.codehaus.activemq.util.JMSExceptionHelper;
    27
    28  /***
    29   * A Reliable implementation of a TransportChannelFactory
    30   *
    31   * @version $Revision: 1.1 $
    32   */
    33  public class ReliableTransportChannelFactory extends CompositeTransportChannelFactory {
    34      ;
    35
    36      /***
    37       * Create a TransportChannel
    38       *
    39       * @param wireFormat - the on-the-wire marshaller
    40       * @param remoteLocation - location to bind to
    41       * @return a reliable transport channel
    42       * @throws JMSException if an error occurs
    43       */
    44      public TransportChannel create(WireFormat wireFormat, URI remoteLocation) throws JMSException {
    45          try {
    46              return new ReliableTransportChannel(wireFormat, parseURIs(remoteLocation));
    47          }
    48          catch (URISyntaxException e) {
    49              throw JMSExceptionHelper.newJMSException("Can't parse list of URIs for: " + remoteLocation + ". Reason: "
    50                      + e, e);
    51          }
    52      }
    53
    54      /***
    55       * @param uris - the URIs to randomize
    56       * @return randomized array
    57       */
    58      protected URI[] randomizeURIs(URI[] uris) {
    59          URI[] result = uris;
    60          if (uris != null && uris.length > 1) {
    61              result = new URI[uris.length];
    62              SMLCGRandom random = new SMLCGRandom();
    63              int startIndex = (int) (random.nextDouble() * (uris.length + 1));
    64              int count = 0;
    65              for (int i = startIndex;i < uris.length;i++) {
    66                  result[count++] = uris[i];
    67              }
    68              for (int i = 0;i < startIndex;i++) {
    69                  result[count++] = uris[i];
    70              }
    71          }
    72          return result;
    73      }
    74  }