Author: davsclaus Date: Fri Jan 23 02:04:36 2009 New Revision: 736980 URL: http://svn.apache.org/viewvc?rev=736980&view=rev Log: CAMEL-505: Mina endpoints can now be configued using spring bean style.
Added: camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaConfiguration.java (with props) camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/SpringMinaEndpointTest.java (with props) camel/trunk/components/camel-mina/src/test/resources/org/ camel/trunk/components/camel-mina/src/test/resources/org/apache/ camel/trunk/components/camel-mina/src/test/resources/org/apache/camel/ camel/trunk/components/camel-mina/src/test/resources/org/apache/camel/component/ camel/trunk/components/camel-mina/src/test/resources/org/apache/camel/component/mina/ camel/trunk/components/camel-mina/src/test/resources/org/apache/camel/component/mina/SpringMinaEndpointTest-context.xml (with props) Modified: camel/trunk/components/camel-mina/pom.xml camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaComponent.java camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaConsumer.java camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaEndpoint.java camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaPayloadHelper.java camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaProducer.java camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaUdpUsingTemplateTest.java Modified: camel/trunk/components/camel-mina/pom.xml URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-mina/pom.xml?rev=736980&r1=736979&r2=736980&view=diff ============================================================================== --- camel/trunk/components/camel-mina/pom.xml (original) +++ camel/trunk/components/camel-mina/pom.xml Fri Jan 23 02:04:36 2009 @@ -70,6 +70,17 @@ <scope>test</scope> </dependency> <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-spring</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-spring</artifactId> + <type>test-jar</type> + <scope>test</scope> + </dependency> + <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <scope>test</scope> Modified: camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaComponent.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaComponent.java?rev=736980&r1=736979&r2=736980&view=diff ============================================================================== --- camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaComponent.java (original) +++ camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaComponent.java Fri Jan 23 02:04:36 2009 @@ -29,6 +29,7 @@ import org.apache.camel.ExchangePattern; import org.apache.camel.NoTypeConversionAvailableException; import org.apache.camel.impl.DefaultComponent; +import org.apache.camel.util.ObjectHelper; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.mina.common.ByteBuffer; @@ -64,19 +65,7 @@ */ public class MinaComponent extends DefaultComponent { private static final transient Log LOG = LogFactory.getLog(MinaComponent.class); - - private static final long DEFAULT_CONNECT_TIMEOUT = 30000; - private boolean sync = true; - private boolean textline; - private TextLineDelimiter textlineDelimiter; - private String codec; - private String encoding; - private long timeout; - private boolean lazySessionCreation; - private boolean transferExchange; - private boolean minaLogger; - // encoder used for datagram - private CharsetEncoder encoder; + private MinaConfiguration configuration = new MinaConfiguration(); public MinaComponent() { } @@ -87,49 +76,69 @@ @Override protected Endpoint createEndpoint(String uri, String remaining, Map parameters) throws Exception { - setProperties(this, parameters); + // must use copy as each endpoint can have different options + ObjectHelper.notNull(configuration, "configuration"); + MinaConfiguration config = configuration.copy(); URI u = new URI(remaining); + config.setHost(u.getHost()); + config.setPort(u.getPort()); + config.setProtocol(u.getScheme()); + setProperties(config, parameters); + + return createEndpoint(uri, config); + } + + public Endpoint createEndpoint(MinaConfiguration config) throws Exception { + return createEndpoint(null, config); + } - String protocol = u.getScheme(); + private Endpoint createEndpoint(String uri, MinaConfiguration config) throws Exception { + String protocol = config.getProtocol(); // if mistyped uri then protocol can be null if (protocol != null) { if (protocol.equals("tcp")) { - return createSocketEndpoint(uri, u, parameters); + return createSocketEndpoint(uri, config); } else if (protocol.equals("udp") || protocol.equals("mcast") || protocol.equals("multicast")) { - return createDatagramEndpoint(uri, u, parameters); + return createDatagramEndpoint(uri, config); } else if (protocol.equals("vm")) { - return createVmEndpoint(uri, u); + return createVmEndpoint(uri, config); } } // protocol not resolved so error throw new IllegalArgumentException("Unrecognised MINA protocol: " + protocol + " for uri: " + uri); + } // Implementation methods //------------------------------------------------------------------------- - protected MinaEndpoint createVmEndpoint(String uri, URI connectUri) { + protected MinaEndpoint createVmEndpoint(String uri, MinaConfiguration configuration) { + boolean minaLogger = configuration.isMinaLogger(); + boolean sync = configuration.isSync(); + IoAcceptor acceptor = new VmPipeAcceptor(); - SocketAddress address = new VmPipeAddress(connectUri.getPort()); + SocketAddress address = new VmPipeAddress(configuration.getPort()); IoConnector connector = new VmPipeConnector(); // connector config - configureCodecFactory("MinaProducer", connector.getDefaultConfig(), textline, encoding, codec); + configureCodecFactory("MinaProducer", connector.getDefaultConfig(), configuration); if (minaLogger) { connector.getFilterChain().addLast("logger", new LoggingFilter()); } // acceptor connectorConfig - configureCodecFactory("MinaConsumer", acceptor.getDefaultConfig(), textline, encoding, codec); + configureCodecFactory("MinaConsumer", acceptor.getDefaultConfig(), configuration); if (minaLogger) { acceptor.getFilterChain().addLast("logger", new LoggingFilter()); } - MinaEndpoint endpoint = new MinaEndpoint(uri, this, address, acceptor, null, connector, null, false, timeout, transferExchange, sync); - if (encoding != null) { - endpoint.setCharsetName(getEncodingParameter("MinaProducer", encoding).name()); - } + MinaEndpoint endpoint = new MinaEndpoint(uri, this); + endpoint.setAddress(address); + endpoint.setAcceptor(acceptor); + endpoint.setConnector(connector); + endpoint.setConfiguration(configuration); + // set sync or async mode after endpoint is created if (sync) { endpoint.setExchangePattern(ExchangePattern.InOut); @@ -140,34 +149,41 @@ return endpoint; } - protected MinaEndpoint createSocketEndpoint(String uri, URI connectUri, Map parameters) { + protected MinaEndpoint createSocketEndpoint(String uri, MinaConfiguration configuration) { + boolean minaLogger = configuration.isMinaLogger(); + long timeout = configuration.getTimeout(); + boolean sync = configuration.isSync(); + IoAcceptor acceptor = new SocketAcceptor(); - SocketAddress address = new InetSocketAddress(connectUri.getHost(), connectUri.getPort()); + SocketAddress address = new InetSocketAddress(configuration.getHost(), configuration.getPort()); IoConnector connector = new SocketConnector(); // connector config SocketConnectorConfig connectorConfig = new SocketConnectorConfig(); - configureCodecFactory("MinaProducer", connectorConfig, textline, encoding, codec); + configureCodecFactory("MinaProducer", connectorConfig, configuration); if (minaLogger) { connectorConfig.getFilterChain().addLast("logger", new LoggingFilter()); } // set connect timeout to mina in seconds - long connectTimeout = timeout > 0 ? timeout : DEFAULT_CONNECT_TIMEOUT; - connectorConfig.setConnectTimeout((int)(connectTimeout / 1000)); + connectorConfig.setConnectTimeout((int) (timeout / 1000)); // acceptor connectorConfig SocketAcceptorConfig acceptorConfig = new SocketAcceptorConfig(); - configureCodecFactory("MinaConsumer", acceptorConfig, textline, encoding, codec); + configureCodecFactory("MinaConsumer", acceptorConfig, configuration); acceptorConfig.setReuseAddress(true); acceptorConfig.setDisconnectOnUnbind(true); if (minaLogger) { acceptorConfig.getFilterChain().addLast("logger", new LoggingFilter()); } - MinaEndpoint endpoint = new MinaEndpoint(uri, this, address, acceptor, acceptorConfig, connector, connectorConfig, lazySessionCreation, timeout, transferExchange, sync); - if (encoding != null) { - endpoint.setCharsetName(getEncodingParameter("MinaProducer", encoding).name()); - } + MinaEndpoint endpoint = new MinaEndpoint(uri, this); + endpoint.setAddress(address); + endpoint.setAcceptor(acceptor); + endpoint.setAcceptorConfig(acceptorConfig); + endpoint.setConnector(connector); + endpoint.setConnectorConfig(connectorConfig); + endpoint.setConfiguration(configuration); + // set sync or async mode after endpoint is created if (sync) { endpoint.setExchangePattern(ExchangePattern.InOut); @@ -178,17 +194,18 @@ return endpoint; } - protected void configureCodecFactory(String type, IoServiceConfig config, boolean textline, String encoding, String codec) { - ProtocolCodecFactory codecFactory = getCodecFactory(type, codec); + protected void configureCodecFactory(String type, IoServiceConfig config, MinaConfiguration configuration) { + ProtocolCodecFactory codecFactory = getCodecFactory(type, configuration.getCodec()); if (codecFactory == null) { - if (textline) { - Charset charset = getEncodingParameter(type, encoding); - LineDelimiter delimiter = getLineDelimiterParameter(); + if (configuration.isTextline()) { + Charset charset = getEncodingParameter(type, configuration); + LineDelimiter delimiter = getLineDelimiterParameter(configuration.getTextlineDelimiter()); codecFactory = new TextLineCodecFactory(charset, delimiter); if (LOG.isDebugEnabled()) { LOG.debug(type + ": Using TextLineCodecFactory: " + codecFactory + " using encoding: " - + charset + " and line delimiter: " + textlineDelimiter + "(" + delimiter + ")"); + + charset + " and line delimiter: " + configuration.getTextlineDelimiter() + + "(" + delimiter + ")"); } } else { codecFactory = new ObjectSerializationCodecFactory(); @@ -201,9 +218,14 @@ addCodecFactory(config, codecFactory); } - protected MinaEndpoint createDatagramEndpoint(String uri, URI connectUri, Map parameters) { + protected MinaEndpoint createDatagramEndpoint(String uri, MinaConfiguration configuration) { + boolean minaLogger = configuration.isMinaLogger(); + long timeout = configuration.getTimeout(); + boolean transferExchange = configuration.isTransferExchange(); + boolean sync = configuration.isSync(); + IoAcceptor acceptor = new DatagramAcceptor(); - SocketAddress address = new InetSocketAddress(connectUri.getHost(), connectUri.getPort()); + SocketAddress address = new InetSocketAddress(configuration.getHost(), configuration.getPort()); IoConnector connector = new DatagramConnector(); if (transferExchange) { @@ -211,26 +233,28 @@ } DatagramConnectorConfig connectorConfig = new DatagramConnectorConfig(); - configureDataGramCodecFactory("MinaProducer", connectorConfig, encoding, codec); + configureDataGramCodecFactory("MinaProducer", connectorConfig, configuration); if (minaLogger) { connectorConfig.getFilterChain().addLast("logger", new LoggingFilter()); } // set connect timeout to mina in seconds - long connectTimeout = timeout > 0 ? timeout : DEFAULT_CONNECT_TIMEOUT; - connectorConfig.setConnectTimeout((int)(connectTimeout / 1000)); + connectorConfig.setConnectTimeout((int) (timeout / 1000)); DatagramAcceptorConfig acceptorConfig = new DatagramAcceptorConfig(); - configureDataGramCodecFactory("MinaConsumer", acceptorConfig, encoding, codec); + configureDataGramCodecFactory("MinaConsumer", acceptorConfig, configuration); acceptorConfig.setDisconnectOnUnbind(true); // reuse address is default true for datagram if (minaLogger) { acceptorConfig.getFilterChain().addLast("logger", new LoggingFilter()); } - MinaEndpoint endpoint = new MinaEndpoint(uri, this, address, acceptor, acceptorConfig, connector, connectorConfig, lazySessionCreation, timeout, transferExchange, sync); - if (encoding != null) { - endpoint.setCharsetName(getEncodingParameter("MinaProducer", encoding).name()); - } + MinaEndpoint endpoint = new MinaEndpoint(uri, this); + endpoint.setAddress(address); + endpoint.setAcceptor(acceptor); + endpoint.setAcceptorConfig(acceptorConfig); + endpoint.setConnector(connector); + endpoint.setConnectorConfig(connectorConfig); + endpoint.setConfiguration(configuration); // set sync or async mode after endpoint is created if (sync) { endpoint.setExchangePattern(ExchangePattern.InOut); @@ -241,32 +265,26 @@ return endpoint; } - private static Charset getEncodingParameter(String type, String encoding) { - if (encoding == null) { - encoding = Charset.defaultCharset().name(); - if (LOG.isDebugEnabled()) { - LOG.debug(type + ": No encoding parameter using default charset: " + encoding); - } - } - if (!Charset.isSupported(encoding)) { - throw new IllegalArgumentException("The encoding: " + encoding + " is not supported"); - } - - return Charset.forName(encoding); - } - /** * For datagrams the entire message is available as a single ByteBuffer so lets just pass those around by default * and try converting whatever they payload is into ByteBuffers unless some custom converter is specified */ - protected void configureDataGramCodecFactory(String type, IoServiceConfig config, String encoding, String codec) { - ProtocolCodecFactory codecFactory = getCodecFactory(type, codec); + protected void configureDataGramCodecFactory(final String type, final IoServiceConfig config, final MinaConfiguration configuration) { + ProtocolCodecFactory codecFactory = getCodecFactory(type, configuration.getCodec()); if (codecFactory == null) { + final Charset charset = getEncodingParameter(type, configuration); + + // set the encoder used for this datagram codec factory codecFactory = new ProtocolCodecFactory() { public ProtocolEncoder getEncoder() throws Exception { return new ProtocolEncoder() { + private CharsetEncoder encoder; + public void encode(IoSession session, Object message, ProtocolEncoderOutput out) throws Exception { - ByteBuffer buf = toByteBuffer(message); + if (encoder == null) { + encoder = charset.newEncoder(); + } + ByteBuffer buf = toByteBuffer(message, encoder); buf.flip(); out.write(buf); } @@ -298,10 +316,6 @@ } }; - // set the encoder used for this datagram codec factory - Charset charset = getEncodingParameter(type, encoding); - encoder = charset.newEncoder(); - if (LOG.isDebugEnabled()) { LOG.debug(type + ": Using CodecFactory: " + codecFactory + " using encoding: " + charset); } @@ -310,8 +324,8 @@ addCodecFactory(config, codecFactory); } - protected ByteBuffer toByteBuffer(Object message) throws CharacterCodingException { - ByteBuffer answer = null; + private ByteBuffer toByteBuffer(Object message, CharsetEncoder encoder) throws CharacterCodingException { + ByteBuffer answer; try { answer = convertTo(ByteBuffer.class, message); } catch (NoTypeConversionAvailableException e) { @@ -322,7 +336,7 @@ return answer; } - protected ProtocolCodecFactory getCodecFactory(String type, String codec) { + private ProtocolCodecFactory getCodecFactory(String type, String codec) { ProtocolCodecFactory codecFactory = null; if (codec != null) { codecFactory = mandatoryLookup(codec, ProtocolCodecFactory.class); @@ -333,16 +347,16 @@ return codecFactory; } - protected void addCodecFactory(IoServiceConfig config, ProtocolCodecFactory codecFactory) { + private void addCodecFactory(IoServiceConfig config, ProtocolCodecFactory codecFactory) { config.getFilterChain().addLast("codec", new ProtocolCodecFilter(codecFactory)); } - private LineDelimiter getLineDelimiterParameter() { - if (textlineDelimiter == null) { + private static LineDelimiter getLineDelimiterParameter(TextLineDelimiter delimiter) { + if (delimiter == null) { return LineDelimiter.AUTO; } - switch (textlineDelimiter) { + switch (delimiter) { case AUTO: return LineDelimiter.AUTO; case UNIX: @@ -352,83 +366,38 @@ case MAC: return LineDelimiter.MAC; default: - throw new IllegalArgumentException("Unknown textline delimiter: " + textlineDelimiter); + throw new IllegalArgumentException("Unknown textline delimiter: " + delimiter); } } - // Properties - //------------------------------------------------------------------------- - - public boolean isSync() { - return sync; - } - - public void setSync(boolean sync) { - this.sync = sync; - } - - public boolean isTextline() { - return textline; - } - - public void setTextline(boolean textline) { - this.textline = textline; - } - - public TextLineDelimiter getTextlineDelimiter() { - return textlineDelimiter; - } - - public void setTextlineDelimiter(TextLineDelimiter textlineDelimiter) { - this.textlineDelimiter = textlineDelimiter; - } - - public String getCodec() { - return codec; - } - - public void setCodec(String codec) { - this.codec = codec; - } - - public String getEncoding() { - return encoding; - } - - public void setEncoding(String encoding) { - this.encoding = encoding; - } - - public long getTimeout() { - return timeout; - } - - public void setTimeout(long timeout) { - this.timeout = timeout; - } - - public boolean isLazySessionCreation() { - return lazySessionCreation; - } - - public void setLazySessionCreation(boolean lazySessionCreation) { - this.lazySessionCreation = lazySessionCreation; - } + private static Charset getEncodingParameter(String type, MinaConfiguration configuration) { + String encoding = configuration.getEncoding(); + if (encoding == null) { + encoding = Charset.defaultCharset().name(); + // set in on configuration so its updated + configuration.setEncoding(encoding); + if (LOG.isDebugEnabled()) { + LOG.debug(type + ": No encoding parameter using default charset: " + encoding); + } + } + if (!Charset.isSupported(encoding)) { + throw new IllegalArgumentException("The encoding: " + encoding + " is not supported"); + } - public boolean isTransferExchange() { - return transferExchange; + return Charset.forName(encoding); } - public void setTransferExchange(boolean transferExchange) { - this.transferExchange = transferExchange; - } + // Properties + //------------------------------------------------------------------------- - public boolean isMinaLogger() { - return minaLogger; + public synchronized MinaConfiguration getConfiguration() { + if (configuration == null) { + configuration = new MinaConfiguration(); + } + return configuration; } - public void setMinaLogger(boolean minaLogger) { - this.minaLogger = minaLogger; + public void setConfiguration(MinaConfiguration configuration) { + this.configuration = configuration; } - } Added: camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaConfiguration.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaConfiguration.java?rev=736980&view=auto ============================================================================== --- camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaConfiguration.java (added) +++ camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaConfiguration.java Fri Jan 23 02:04:36 2009 @@ -0,0 +1,158 @@ +/** + * 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.camel.component.mina; + +import java.nio.charset.Charset; + +import org.apache.camel.RuntimeCamelException; + +/** + * Mina configuration + */ +public class MinaConfiguration implements Cloneable { + private String protocol; + private String host; + private int port; + private boolean sync = true; + private boolean textline; + private TextLineDelimiter textlineDelimiter; + private String codec; + private String encoding; + private long timeout = 30000; + private boolean lazySessionCreation; + private boolean transferExchange; + private boolean minaLogger; + + /** + * Returns a copy of this configuration + */ + public MinaConfiguration copy() { + try { + return (MinaConfiguration) clone(); + } catch (CloneNotSupportedException e) { + throw new RuntimeCamelException(e); + } + } + + public String getCharsetName() { + if (encoding == null) { + return null; + } + if (!Charset.isSupported(encoding)) { + throw new IllegalArgumentException("The encoding: " + encoding + " is not supported"); + } + + return Charset.forName(encoding).name(); + } + + + public String getProtocol() { + return protocol; + } + + public void setProtocol(String protocol) { + this.protocol = protocol; + } + + public String getHost() { + return host; + } + + public void setHost(String host) { + this.host = host; + } + + public int getPort() { + return port; + } + + public void setPort(int port) { + this.port = port; + } + + public boolean isSync() { + return sync; + } + + public void setSync(boolean sync) { + this.sync = sync; + } + + public boolean isTextline() { + return textline; + } + + public void setTextline(boolean textline) { + this.textline = textline; + } + + public TextLineDelimiter getTextlineDelimiter() { + return textlineDelimiter; + } + + public void setTextlineDelimiter(TextLineDelimiter textlineDelimiter) { + this.textlineDelimiter = textlineDelimiter; + } + + public String getCodec() { + return codec; + } + + public void setCodec(String codec) { + this.codec = codec; + } + + public String getEncoding() { + return encoding; + } + + public void setEncoding(String encoding) { + this.encoding = encoding; + } + + public long getTimeout() { + return timeout; + } + + public void setTimeout(long timeout) { + this.timeout = timeout; + } + + public boolean isLazySessionCreation() { + return lazySessionCreation; + } + + public void setLazySessionCreation(boolean lazySessionCreation) { + this.lazySessionCreation = lazySessionCreation; + } + + public boolean isTransferExchange() { + return transferExchange; + } + + public void setTransferExchange(boolean transferExchange) { + this.transferExchange = transferExchange; + } + + public boolean isMinaLogger() { + return minaLogger; + } + + public void setMinaLogger(boolean minaLogger) { + this.minaLogger = minaLogger; + } +} Propchange: camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaConfiguration.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaConfiguration.java ------------------------------------------------------------------------------ svn:keywords = Rev Date Modified: camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaConsumer.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaConsumer.java?rev=736980&r1=736979&r2=736980&view=diff ============================================================================== --- camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaConsumer.java (original) +++ camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaConsumer.java Fri Jan 23 02:04:36 2009 @@ -48,7 +48,7 @@ this.endpoint = endpoint; this.address = endpoint.getAddress(); this.acceptor = endpoint.getAcceptor(); - this.sync = endpoint.isSync(); + this.sync = endpoint.getConfiguration().isSync(); } @Override @@ -96,8 +96,8 @@ Exchange exchange = endpoint.createExchange(session, object); //Set the exchange charset property for converting - if (endpoint.getCharsetName() != null) { - exchange.setProperty(Exchange.CHARSET_NAME, endpoint.getCharsetName()); + if (endpoint.getConfiguration().getCharsetName() != null) { + exchange.setProperty(Exchange.CHARSET_NAME, endpoint.getConfiguration().getCharsetName()); } getProcessor().process(exchange); @@ -110,7 +110,7 @@ body = MinaPayloadHelper.getIn(endpoint, exchange); } boolean failed = exchange.isFailed(); - if (failed && !endpoint.isTransferExchange()) { + if (failed && !endpoint.getConfiguration().isTransferExchange()) { if (exchange.getException() != null) { body = exchange.getException(); } else { Modified: camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaEndpoint.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaEndpoint.java?rev=736980&r1=736979&r2=736980&view=diff ============================================================================== --- camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaEndpoint.java (original) +++ camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaEndpoint.java Fri Jan 23 02:04:36 2009 @@ -17,15 +17,13 @@ package org.apache.camel.component.mina; import java.net.SocketAddress; -import java.nio.charset.Charset; import org.apache.camel.Consumer; import org.apache.camel.Exchange; -import org.apache.camel.ExchangePattern; import org.apache.camel.Processor; import org.apache.camel.Producer; import org.apache.camel.impl.DefaultEndpoint; -import org.apache.camel.impl.DefaultExchange; +import org.apache.camel.util.ObjectHelper; import org.apache.mina.common.IoAcceptor; import org.apache.mina.common.IoAcceptorConfig; import org.apache.mina.common.IoConnector; @@ -39,43 +37,39 @@ */ public class MinaEndpoint extends DefaultEndpoint { - private static final long DEFAULT_TIMEOUT = 30000; - private long timeout = DEFAULT_TIMEOUT; + private SocketAddress address; + private IoAcceptor acceptor; + private IoConnector connector; + private IoAcceptorConfig acceptorConfig; + private IoConnectorConfig connectorConfig; + private MinaConfiguration configuration; - private final IoAcceptor acceptor; - private final SocketAddress address; - private final IoConnector connector; - private final IoAcceptorConfig acceptorConfig; - private final IoConnectorConfig connectorConfig; - private final boolean lazySessionCreation; - private final boolean transferExchange; - private final boolean sync; - private String charsetName; - - public MinaEndpoint(String endpointUri, MinaComponent component, SocketAddress address, - IoAcceptor acceptor, IoAcceptorConfig acceptorConfig, IoConnector connector, - IoConnectorConfig connectorConfig, boolean lazySessionCreation, long timeout, - boolean transferExchange, boolean sync) { + public MinaEndpoint() { + } + + public MinaEndpoint(String endpointUri, MinaComponent component) { super(endpointUri, component); - this.address = address; - this.acceptor = acceptor; - this.acceptorConfig = acceptorConfig; - this.connectorConfig = connectorConfig; - this.connector = connector; - this.lazySessionCreation = lazySessionCreation; - if (timeout > 0) { - // override default timeout if provided - this.timeout = timeout; - } - this.transferExchange = transferExchange; - this.sync = sync; } public Producer createProducer() throws Exception { + ObjectHelper.notNull(configuration, "configuration"); + ObjectHelper.notNull(address, "address"); + ObjectHelper.notNull(connector, "connector"); + // wm protocol does not have config + if (!configuration.getProtocol().equalsIgnoreCase("vm")) { + ObjectHelper.notNull(connectorConfig, "connectorConfig"); + } return new MinaProducer(this); } public Consumer createConsumer(Processor processor) throws Exception { + ObjectHelper.notNull(configuration, "configuration"); + ObjectHelper.notNull(address, "address"); + ObjectHelper.notNull(acceptor, "acceptor"); + // wm protocol does not have config + if (!configuration.getProtocol().equalsIgnoreCase("vm")) { + ObjectHelper.notNull(acceptorConfig, "acceptorConfig"); + } return new MinaConsumer(this, processor); } @@ -85,53 +79,58 @@ return exchange; } + public boolean isSingleton() { + return true; + } + // Properties // ------------------------------------------------------------------------- - public IoAcceptor getAcceptor() { - return acceptor; + + public MinaConfiguration getConfiguration() { + return configuration; } - public SocketAddress getAddress() { - return address; + public void setConfiguration(MinaConfiguration configuration) { + this.configuration = configuration; } - public IoConnector getConnector() { - return connector; + public SocketAddress getAddress() { + return address; } - public boolean isLazySessionCreation() { - return lazySessionCreation; + public void setAddress(SocketAddress address) { + this.address = address; } - public IoAcceptorConfig getAcceptorConfig() { - return acceptorConfig; + public IoAcceptor getAcceptor() { + return acceptor; } - public IoConnectorConfig getConnectorConfig() { - return connectorConfig; + public void setAcceptor(IoAcceptor acceptor) { + this.acceptor = acceptor; } - public boolean isSingleton() { - return true; + public IoConnector getConnector() { + return connector; } - public long getTimeout() { - return timeout; + public void setConnector(IoConnector connector) { + this.connector = connector; } - public boolean isTransferExchange() { - return transferExchange; + public IoAcceptorConfig getAcceptorConfig() { + return acceptorConfig; } - public boolean isSync() { - return sync; + public void setAcceptorConfig(IoAcceptorConfig acceptorConfig) { + this.acceptorConfig = acceptorConfig; } - public void setCharsetName(String charset) { - this.charsetName = charset; + public IoConnectorConfig getConnectorConfig() { + return connectorConfig; } - public String getCharsetName() { - return charsetName; + public void setConnectorConfig(IoConnectorConfig connectorConfig) { + this.connectorConfig = connectorConfig; } } Modified: camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaPayloadHelper.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaPayloadHelper.java?rev=736980&r1=736979&r2=736980&view=diff ============================================================================== --- camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaPayloadHelper.java (original) +++ camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaPayloadHelper.java Fri Jan 23 02:04:36 2009 @@ -34,7 +34,7 @@ } public static Object getIn(MinaEndpoint endpoint, Exchange exchange) { - if (endpoint.isTransferExchange()) { + if (endpoint.getConfiguration().isTransferExchange()) { // we should transfer the entire exchange over the wire (includes in/out) return MinaPayloadHolder.marshal(exchange); } else { @@ -44,7 +44,7 @@ } public static Object getOut(MinaEndpoint endpoint, Exchange exchange) { - if (endpoint.isTransferExchange()) { + if (endpoint.getConfiguration().isTransferExchange()) { // we should transfer the entire exchange over the wire (includes in/out) return MinaPayloadHolder.marshal(exchange); } else { Modified: camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaProducer.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaProducer.java?rev=736980&r1=736979&r2=736980&view=diff ============================================================================== --- camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaProducer.java (original) +++ camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaProducer.java Fri Jan 23 02:04:36 2009 @@ -53,9 +53,9 @@ public MinaProducer(MinaEndpoint endpoint) { super(endpoint); this.endpoint = endpoint; - this.lazySessionCreation = endpoint.isLazySessionCreation(); - this.timeout = endpoint.getTimeout(); - this.sync = endpoint.isSync(); + this.lazySessionCreation = endpoint.getConfiguration().isLazySessionCreation(); + this.timeout = endpoint.getConfiguration().getTimeout(); + this.sync = endpoint.getConfiguration().isSync(); } public void process(Exchange exchange) throws Exception { @@ -67,8 +67,8 @@ } // set the exchange encoding property - if (endpoint.getCharsetName() != null) { - exchange.setProperty(Exchange.CHARSET_NAME, endpoint.getCharsetName()); + if (endpoint.getConfiguration().getCharsetName() != null) { + exchange.setProperty(Exchange.CHARSET_NAME, endpoint.getConfiguration().getCharsetName()); } Object body = MinaPayloadHelper.getIn(endpoint, exchange); Modified: camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaUdpUsingTemplateTest.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaUdpUsingTemplateTest.java?rev=736980&r1=736979&r2=736980&view=diff ============================================================================== --- camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaUdpUsingTemplateTest.java (original) +++ camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaUdpUsingTemplateTest.java Fri Jan 23 02:04:36 2009 @@ -44,7 +44,7 @@ protected void sendUdpMessages() throws Exception { for (int i = 0; i < messageCount; i++) { - template.sendBody("mina:udp://127.0.0.1:4445", "Hello Message: " + i); + template.sendBody("mina:udp://127.0.0.1:4445?sync=false", "Hello Message: " + i); } } Added: camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/SpringMinaEndpointTest.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/SpringMinaEndpointTest.java?rev=736980&view=auto ============================================================================== --- camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/SpringMinaEndpointTest.java (added) +++ camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/SpringMinaEndpointTest.java Fri Jan 23 02:04:36 2009 @@ -0,0 +1,42 @@ +/** + * 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.camel.component.mina; + +import org.apache.camel.component.mock.MockEndpoint; +import org.apache.camel.spring.SpringTestSupport; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +/** + * Unit test spring based mina endpoint configuraiton. + */ +public class SpringMinaEndpointTest extends SpringTestSupport { + + public void testMinaSpringEndpoint() throws Exception { + MockEndpoint result = getMockEndpoint("mock:result"); + result.expectedMessageCount(1); + + template.sendBody("myMinaEndpoint", "Hello World"); + + assertMockEndpointsSatisfied(); + } + + @Override + protected ClassPathXmlApplicationContext createApplicationContext() { + return new ClassPathXmlApplicationContext("org/apache/camel/component/mina/SpringMinaEndpointTest-context.xml"); + } + +} Propchange: camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/SpringMinaEndpointTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/SpringMinaEndpointTest.java ------------------------------------------------------------------------------ svn:keywords = Rev Date Added: camel/trunk/components/camel-mina/src/test/resources/org/apache/camel/component/mina/SpringMinaEndpointTest-context.xml URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-mina/src/test/resources/org/apache/camel/component/mina/SpringMinaEndpointTest-context.xml?rev=736980&view=auto ============================================================================== --- camel/trunk/components/camel-mina/src/test/resources/org/apache/camel/component/mina/SpringMinaEndpointTest-context.xml (added) +++ camel/trunk/components/camel-mina/src/test/resources/org/apache/camel/component/mina/SpringMinaEndpointTest-context.xml Fri Jan 23 02:04:36 2009 @@ -0,0 +1,57 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + 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. +--> +<beans xmlns="http://www.springframework.org/schema/beans" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation=" + http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd + http://activemq.apache.org/camel/schema/spring http://activemq.apache.org/camel/schema/spring/camel-spring.xsd"> + + <!-- START SNIPPET: e1 --> + <!-- Creating mina endpoints is a bit complex so we reuse MinaComponnet + as a factory bean to create our endpoint, this is the easiest to do --> + <bean id="myMinaFactory" class="org.apache.camel.component.mina.MinaComponent"/> + + <!-- This is our mina endpoint configured with spring, we will use the factory above + to create it for us. The goal is to invoke the createEndpoint method with the + mina configuration parameter we defined using the constructor-arg option --> + <bean id="myMinaEndpoint" + factory-bean="myMinaFactory" + factory-method="createEndpoint"> + <constructor-arg index="0" ref="myMinaConfig"/> + </bean> + + <!-- this is our mina configuration with plain properties --> + <bean id="myMinaConfig" class="org.apache.camel.component.mina.MinaConfiguration"> + <property name="protocol" value="tcp"/> + <property name="host" value="localhost"/> + <property name="port" value="1234"/> + <property name="sync" value="false"/> + </bean> + <!-- END SNIPPET: e1 --> + + <camelContext xmlns="http://activemq.apache.org/camel/schema/spring"> + <!-- START SNIPPET: e2 --> + <route> + <!-- here we route from or mina endpoint we have defined above --> + <from ref="myMinaEndpoint"/> + <to uri="mock:result"/> + </route> + <!-- END SNIPPET: e2 --> + </camelContext> + +</beans> Propchange: camel/trunk/components/camel-mina/src/test/resources/org/apache/camel/component/mina/SpringMinaEndpointTest-context.xml ------------------------------------------------------------------------------ svn:eol-style = native Propchange: camel/trunk/components/camel-mina/src/test/resources/org/apache/camel/component/mina/SpringMinaEndpointTest-context.xml ------------------------------------------------------------------------------ svn:keywords = Rev Date Propchange: camel/trunk/components/camel-mina/src/test/resources/org/apache/camel/component/mina/SpringMinaEndpointTest-context.xml ------------------------------------------------------------------------------ svn:mime-type = text/xml