001 /** 002 * 003 * Copyright 2004 Hiram Chirino 004 * 005 * Licensed under the Apache License, Version 2.0 (the "License"); 006 * you may not use this file except in compliance with the License. 007 * You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 * 017 **/ 018 package org.activemq.transport.activeio; 019 020 import java.io.IOException; 021 import java.net.URI; 022 import java.net.URISyntaxException; 023 024 import javax.jms.JMSException; 025 026 import org.activeio.AsyncChannel; 027 import org.activeio.ChannelFactory; 028 import org.activemq.io.WireFormat; 029 import org.activemq.transport.TransportChannel; 030 import org.activemq.transport.TransportChannelFactorySupport; 031 import org.activemq.util.JMSExceptionHelper; 032 033 /** 034 * A tcp implementation of a TransportChannelFactory 035 * 036 * @version $Revision: 1.1.1.1 $ 037 */ 038 public class ActiveIOTransportChannelFactory extends TransportChannelFactorySupport { 039 040 /** 041 * Create a Channel to a remote Node - e.g. a Broker 042 * 043 * @param wireFormat 044 * @param remoteLocation 045 * @return the TransportChannel bound to the remote node 046 * @throws JMSException 047 */ 048 public TransportChannel create(WireFormat wireFormat, URI remoteLocation) throws JMSException { 049 AsyncChannel asynchChannel = createAsyncChannel(remoteLocation); 050 ActiveIOTransportChannel channel = new ActiveIOTransportChannel(wireFormat, asynchChannel); 051 return populateProperties(channel, remoteLocation); 052 } 053 054 /** 055 * Create a Channel to a remote Node - e.g. a Broker 056 * 057 * @param wireFormat 058 * @param remoteLocation 059 * @param localLocation - 060 * e.g. local InetAddress and local port 061 * @return the TransportChannel bound to the remote node 062 * @throws JMSException 063 */ 064 public TransportChannel create(WireFormat wireFormat, URI remoteLocation, URI localLocation) throws JMSException { 065 AsyncChannel asynchChannel = createAsyncChannel(remoteLocation); 066 ActiveIOTransportChannel channel = new ActiveIOTransportChannel(wireFormat, asynchChannel); 067 return populateProperties(channel, remoteLocation); 068 } 069 070 public boolean requiresEmbeddedBroker() { 071 return false; 072 } 073 074 /** 075 * @param remoteLocation 076 * @return 077 * @throws JMSException 078 */ 079 private AsyncChannel createAsyncChannel(URI remoteLocation) throws JMSException { 080 try { 081 remoteLocation = URIConverter.convert(remoteLocation); 082 AsyncChannel channel = new ChannelFactory().openAsyncChannel(remoteLocation); 083 // If the channel is not allready buffered.. lets buffer it. 084 //if( channel.narrow(WriteBufferedAsynchChannel.class)==null && channel.narrow(WriteBufferedSynchChannel.class)==null ) { 085 // channel = new WriteBufferedAsynchChannel(channel); 086 //} 087 return channel; 088 } catch (IOException e) { 089 throw JMSExceptionHelper.newJMSException(e.getMessage(), e); 090 } catch (URISyntaxException e) { 091 throw JMSExceptionHelper.newJMSException(e.getMessage(), e); 092 } 093 } 094 095 }