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.ember;
    19
    20  import org.codehaus.activemq.message.WireFormat;
    21  import org.codehaus.activemq.transport.TransportServerChannel;
    22  import org.codehaus.activemq.transport.TransportServerChannelFactory;
    23  import pyrasun.eio.EIOGlobalContext;
    24  import pyrasun.eio.EIOPoolingStrategy;
    25  import pyrasun.eio.services.EmberServiceController;
    26  import pyrasun.eio.services.bytearray.ByteArrayServerService;
    27
    28  import javax.jms.JMSException;
    29  import java.io.IOException;
    30  import java.net.URI;
    31
    32  /***
    33   * An EmberIO (using NIO) implementation of a TransportServerChannelFactory
    34   *
    35   * @version $Revision: 1.7 $
    36   */
    37  public class EmberTransportServerChannelFactory extends EmberSupport implements TransportServerChannelFactory {
    38
    39      private EIOPoolingStrategy acceptPoolingStrategy;
    40      private String acceptPoolingStrategyName = "BLOCKING_ACCEPTOR";
    41
    42      public EmberTransportServerChannelFactory() {
    43      }
    44
    45      public EmberTransportServerChannelFactory(EIOGlobalContext context, EIOPoolingStrategy ioPoolingStrategy, EIOPoolingStrategy acceptPoolingStrategy) {
    46          super(context, ioPoolingStrategy);
    47          this.acceptPoolingStrategy = acceptPoolingStrategy;
    48      }
    49
    50      /***
    51       * Bind a ServerChannel to an address
    52       *
    53       * @param wireFormat
    54       * @param bindAddress
    55       * @return the TransportChannel bound to the remote node
    56       * @throws JMSException
    57       */
    58      public TransportServerChannel create(WireFormat wireFormat, URI bindAddress) throws JMSException {
    59          try {
    60              EmberServiceController controller = getController();
    61              ByteArrayServerService service = new ByteArrayServerService(getContext(), getAcceptPoolingStrategy(), getIoPoolingStrategy(), bindAddress.getHost(), bindAddress.getPort());
    62              controller.addService(service);
    63
    64              EmberTransportServerChannel answer = new EmberTransportServerChannel(wireFormat, bindAddress, getContext(), controller);
    65              service.setListener(answer);
    66              return answer;
    67          }
    68          catch (IOException e) {
    69              throw createJMSException("Initialization of TransportServerChannel failed: ", e);
    70          }
    71      }
    72
    73      protected EIOPoolingStrategy getAcceptPoolingStrategy() {
    74          if (acceptPoolingStrategy == null) {
    75              acceptPoolingStrategy = getPoolingStrategyByName(acceptPoolingStrategyName);
    76          }
    77          return acceptPoolingStrategy;
    78      }
    79  }