[[mina-component]]
= Mina Component
:page-source: components/camel-mina/src/main/docs/mina-component.adoc

*Available as of Camel version 2.10*

The Mina component is a transport for working with
http://mina.apache.org/[Apache MINA 2.x]

TIP: Favor using xref:netty-component.adoc[Netty] as Netty is a much more active
maintained and popular project than Apache Mina currently is.

WARNING: Be careful with `sync=false` on consumer endpoints. Since camel-mina all
consumer exchanges are InOut. This is different to camel-mina.

Maven users will need to add the following dependency to their `pom.xml`
for this component:

[source,xml]
------------------------------------------------------------
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-mina</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>
------------------------------------------------------------

== URI format

[source,java]
-------------------------------------
mina:tcp://hostname[:port][?options]
mina:udp://hostname[:port][?options]
mina:vm://hostname[:port][?options]
-------------------------------------

You can specify a codec in the Registry using the
*codec* option. If you are using TCP and no codec is specified then the
`textline` flag is used to determine if text line based codec or object
serialization should be used instead. By default the object
serialization is used.

For UDP if no codec is specified the default uses a basic `ByteBuffer`
based codec.

The VM protocol is used as a direct forwarding mechanism in the same
JVM.

A Mina producer has a default timeout value of 30 seconds, while it
waits for a response from the remote server.

In normal use, `camel-mina` only supports marshalling the body
content—message headers and exchange properties are not sent. +
 However, the option, *transferExchange*, does allow you to transfer the
exchange itself over the wire. See options below.

You can append query options to the URI in the following format,
`?option=value&option=value&...`

== Options





// component options: START
The Mina component supports 3 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *configuration* (advanced) | To use the shared mina configuration. |  | MinaConfiguration
| *useGlobalSslContext Parameters* (security) | Enable usage of global SSL context parameters. | false | boolean
| *basicPropertyBinding* (advanced) | Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
|===
// component options: END








// endpoint options: START
The Mina endpoint is configured using URI syntax:

----
mina:protocol:host:port
----

with the following path and query parameters:

=== Path Parameters (3 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *protocol* | *Required* Protocol to use |  | String
| *host* | *Required* Hostname to use. Use localhost or 0.0.0.0 for local server as consumer. For producer use the hostname or ip address of the remote server. |  | String
| *port* | *Required* Port number |  | int
|===


=== Query Parameters (29 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *disconnect* (common) | Whether or not to disconnect(close) from Mina session right after use. Can be used for both consumer and producer. | false | boolean
| *minaLogger* (common) | You can enable the Apache MINA logging filter. Apache MINA uses slf4j logging at INFO level to log all input and output. | false | boolean
| *sync* (common) | Setting to set endpoint as one-way or request-response. | true | boolean
| *timeout* (common) | You can configure the timeout that specifies how long to wait for a response from a remote server. The timeout unit is in milliseconds, so 60000 is 60 seconds. | 30000 | long
| *writeTimeout* (common) | Maximum amount of time it should take to send data to the MINA session. Default is 10000 milliseconds. | 10000 | long
| *bridgeErrorHandler* (consumer) | Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored. | false | boolean
| *clientMode* (consumer) | If the clientMode is true, mina consumer will connect the address as a TCP client. | false | boolean
| *disconnectOnNoReply* (consumer) | If sync is enabled then this option dictates MinaConsumer if it should disconnect where there is no reply to send back. | true | boolean
| *exceptionHandler* (consumer) | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this option is not in use. By default the consumer will deal with exceptions, that will be logged at WARN or ERROR level and ignored. |  | ExceptionHandler
| *exchangePattern* (consumer) | Sets the exchange pattern when the consumer creates an exchange. |  | ExchangePattern
| *noReplyLogLevel* (consumer) | If sync is enabled this option dictates MinaConsumer which logging level to use when logging a there is no reply to send back. | WARN | LoggingLevel
| *lazyStartProducer* (producer) | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing. | false | boolean
| *cachedAddress* (producer) | Whether to create the InetAddress once and reuse. Setting this to false allows to pickup DNS changes in the network. | true | boolean
| *lazySessionCreation* (producer) | Sessions can be lazily created to avoid exceptions, if the remote server is not up and running when the Camel producer is started. | true | boolean
| *basicPropertyBinding* (advanced) | Whether the endpoint should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
| *maximumPoolSize* (advanced) | Number of worker threads in the worker pool for TCP and UDP | 16 | int
| *orderedThreadPoolExecutor* (advanced) | Whether to use ordered thread pool, to ensure events are processed orderly on the same channel. | true | boolean
| *synchronous* (advanced) | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | boolean
| *transferExchange* (advanced) | Only used for TCP. You can transfer the exchange over the wire instead of just the body. The following fields are transferred: In body, Out body, fault body, In headers, Out headers, fault headers, exchange properties, exchange exception. This requires that the objects are serializable. Camel will exclude any non-serializable objects and log it at WARN level. | false | boolean
| *allowDefaultCodec* (codec) | The mina component installs a default codec if both, codec is null and textline is false. Setting allowDefaultCodec to false prevents the mina component from installing a default codec as the first element in the filter chain. This is useful in scenarios where another filter must be the first in the filter chain, like the SSL filter. | true | boolean
| *codec* (codec) | To use a custom minda codec implementation. |  | ProtocolCodecFactory
| *decoderMaxLineLength* (codec) | To set the textline protocol decoder max line length. By default the default value of Mina itself is used which are 1024. | 1024 | int
| *encoderMaxLineLength* (codec) | To set the textline protocol encoder max line length. By default the default value of Mina itself is used which are Integer.MAX_VALUE. | -1 | int
| *encoding* (codec) | You can configure the encoding (a charset name) to use for the TCP textline codec and the UDP protocol. If not provided, Camel will use the JVM default Charset |  | String
| *filters* (codec) | You can set a list of Mina IoFilters to use. |  | List
| *textline* (codec) | Only used for TCP. If no codec is specified, you can use this flag to indicate a text line based codec; if not specified or the value is false, then Object Serialization is assumed over TCP. | false | boolean
| *textlineDelimiter* (codec) | Only used for TCP and if textline=true. Sets the text line delimiter to use. If none provided, Camel will use DEFAULT. This delimiter is used to mark the end of text. |  | MinaTextLineDelimiter
| *autoStartTls* (security) | Whether to auto start SSL handshake. | true | boolean
| *sslContextParameters* (security) | To configure SSL security. |  | SSLContextParameters
|===
// endpoint options: END
// spring-boot-auto-configure options: START
== Spring Boot Auto-Configuration

When using Spring Boot make sure to use the following Maven dependency to have support for auto configuration:

[source,xml]
----
<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-mina-starter</artifactId>
  <version>x.x.x</version>
  <!-- use the same version as your Camel core version -->
</dependency>
----


The component supports 29 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *camel.component.mina.basic-property-binding* | Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | Boolean
| *camel.component.mina.configuration.allow-default-codec* | The mina component installs a default codec if both, codec is null and textline is false. Setting allowDefaultCodec to false prevents the mina component from installing a default codec as the first element in the filter chain. This is useful in scenarios where another filter must be the first in the filter chain, like the SSL filter. | true | Boolean
| *camel.component.mina.configuration.auto-start-tls* | Whether to auto start SSL handshake. | true | Boolean
| *camel.component.mina.configuration.cached-address* | Whether to create the InetAddress once and reuse. Setting this to false allows to pickup DNS changes in the network. | true | Boolean
| *camel.component.mina.configuration.client-mode* | If the clientMode is true, mina consumer will connect the address as a TCP client. | false | Boolean
| *camel.component.mina.configuration.codec* | To use a custom minda codec implementation. |  | ProtocolCodecFactory
| *camel.component.mina.configuration.decoder-max-line-length* | To set the textline protocol decoder max line length. By default the default value of Mina itself is used which are 1024. | 1024 | Integer
| *camel.component.mina.configuration.disconnect* | Whether or not to disconnect(close) from Mina session right after use. Can be used for both consumer and producer. | false | Boolean
| *camel.component.mina.configuration.disconnect-on-no-reply* | If sync is enabled then this option dictates MinaConsumer if it should disconnect where there is no reply to send back. | true | Boolean
| *camel.component.mina.configuration.encoder-max-line-length* | To set the textline protocol encoder max line length. By default the default value of Mina itself is used which are Integer.MAX_VALUE. | -1 | Integer
| *camel.component.mina.configuration.encoding* | You can configure the encoding (a charset name) to use for the TCP textline codec and the UDP protocol. If not provided, Camel will use the JVM default Charset |  | String
| *camel.component.mina.configuration.filters* | You can set a list of Mina IoFilters to use. |  | List
| *camel.component.mina.configuration.host* | Hostname to use. Use localhost or 0.0.0.0 for local server as consumer. For producer use the hostname or ip address of the remote server. |  | String
| *camel.component.mina.configuration.lazy-session-creation* | Sessions can be lazily created to avoid exceptions, if the remote server is not up and running when the Camel producer is started. | true | Boolean
| *camel.component.mina.configuration.maximum-pool-size* | Number of worker threads in the worker pool for TCP and UDP | 16 | Integer
| *camel.component.mina.configuration.mina-logger* | You can enable the Apache MINA logging filter. Apache MINA uses slf4j logging at INFO level to log all input and output. | false | Boolean
| *camel.component.mina.configuration.no-reply-log-level* | If sync is enabled this option dictates MinaConsumer which logging level to use when logging a there is no reply to send back. |  | LoggingLevel
| *camel.component.mina.configuration.ordered-thread-pool-executor* | Whether to use ordered thread pool, to ensure events are processed orderly on the same channel. | true | Boolean
| *camel.component.mina.configuration.port* | Port number |  | Integer
| *camel.component.mina.configuration.protocol* | Protocol to use |  | String
| *camel.component.mina.configuration.ssl-context-parameters* | To configure SSL security. |  | SSLContextParameters
| *camel.component.mina.configuration.sync* | Setting to set endpoint as one-way or request-response. | true | Boolean
| *camel.component.mina.configuration.textline* | Only used for TCP. If no codec is specified, you can use this flag to indicate a text line based codec; if not specified or the value is false, then Object Serialization is assumed over TCP. | false | Boolean
| *camel.component.mina.configuration.textline-delimiter* | Only used for TCP and if textline=true. Sets the text line delimiter to use. If none provided, Camel will use DEFAULT. This delimiter is used to mark the end of text. |  | MinaTextLineDelimiter
| *camel.component.mina.configuration.timeout* | You can configure the timeout that specifies how long to wait for a response from a remote server. The timeout unit is in milliseconds, so 60000 is 60 seconds. | 30000 | Long
| *camel.component.mina.configuration.transfer-exchange* | Only used for TCP. You can transfer the exchange over the wire instead of just the body. The following fields are transferred: In body, Out body, fault body, In headers, Out headers, fault headers, exchange properties, exchange exception. This requires that the objects are serializable. Camel will exclude any non-serializable objects and log it at WARN level. | false | Boolean
| *camel.component.mina.configuration.write-timeout* | Maximum amount of time it should take to send data to the MINA session. Default is 10000 milliseconds. | 10000 | Long
| *camel.component.mina.enabled* | Whether to enable auto configuration of the mina component. This is enabled by default. |  | Boolean
| *camel.component.mina.use-global-ssl-context-parameters* | Enable usage of global SSL context parameters. | false | Boolean
|===
// spring-boot-auto-configure options: END





== Using a custom codec

See the Mina how to write your own codec. To use your custom codec with
`camel-mina`, you should register your codec in the
Registry; for example, by creating a bean in the
Spring XML file. Then use the `codec` option to specify the bean ID of
your codec. See xref:hl7-dataformat.adoc[HL7] that has a custom codec.

=== Sample with sync=false

In this sample, Camel exposes a service that listens for TCP connections
on port 6200. We use the *textline* codec. In our route, we create a
Mina consumer endpoint that listens on port 6200:

[source,java]
---------------------------------------------------------------------------------------
from("mina:tcp://localhost:" + port1 + "?textline=true&sync=false").to("mock:result");
---------------------------------------------------------------------------------------

As the sample is part of a unit test, we test it by sending some data to
it on port 6200.

[source,java]
-------------------------------------------------------------------------------------------------
MockEndpoint mock = getMockEndpoint("mock:result");
mock.expectedBodiesReceived("Hello World");

template.sendBody("mina:tcp://localhost:" + port1 + "?textline=true&sync=false", "Hello World");

assertMockEndpointsSatisfied();
-------------------------------------------------------------------------------------------------

=== Sample with sync=true

In the next sample, we have a more common use case where we expose a TCP
service on port 6201 also use the textline codec. However, this time we
want to return a response, so we set the `sync` option to `true` on the
consumer.

[source,java]
---------------------------------------------------------------------------------------------
from("mina:tcp://localhost:" + port2 + "?textline=true&sync=true").process(new Processor() {
    public void process(Exchange exchange) throws Exception {
        String body = exchange.getIn().getBody(String.class);
        exchange.getOut().setBody("Bye " + body);
    }
});
---------------------------------------------------------------------------------------------

Then we test the sample by sending some data and retrieving the response
using the `template.requestBody()` method. As we know the response is a
`String`, we cast it to `String` and can assert that the response is, in
fact, something we have dynamically set in our processor code logic.

[source,java]
-----------------------------------------------------------------------------------------------------------------------
String response = (String)template.requestBody("mina:tcp://localhost:" + port2 + "?textline=true&sync=true", "World");
assertEquals("Bye World", response);
-----------------------------------------------------------------------------------------------------------------------

== Sample with Spring DSL

Spring DSL can, of course, also be used for xref:mina-component.adoc[MINA]. In the
sample below we expose a TCP server on port 5555:

[source,xml]
-----------------------------------------------------------
   <route>
     <from uri="mina:tcp://localhost:5555?textline=true"/>
     <to uri="bean:myTCPOrderHandler"/>
  </route>
-----------------------------------------------------------

In the route above, we expose a TCP server on port 5555 using the
textline codec. We let the Spring bean with ID, `myTCPOrderHandler`,
handle the request and return a reply. For instance, the handler bean
could be implemented as follows:

[source,java]
-----------------------------------------------
    public String handleOrder(String payload) {
        ...
        return "Order: OK"
   }
-----------------------------------------------

== Closing Session When Complete

When acting as a server you sometimes want to close the session when,
for example, a client conversion is finished. To instruct Camel to close
the session, you should add a header with the key
`CamelMinaCloseSessionWhenComplete` set to a boolean `true` value.

For instance, the example below will close the session after it has
written the `bye` message back to the client:

[source,java]
---------------------------------------------------------------------------------------------------
        from("mina:tcp://localhost:8080?sync=true&textline=true").process(new Processor() {
            public void process(Exchange exchange) throws Exception {
                String body = exchange.getIn().getBody(String.class);
                exchange.getOut().setBody("Bye " + body);
                exchange.getOut().setHeader(MinaConstants.MINA_CLOSE_SESSION_WHEN_COMPLETE, true);
            }
        });
---------------------------------------------------------------------------------------------------

== Get the IoSession for message

You can get the IoSession from the message header with this key
`MinaConstants.MINA_IOSESSION`, and also get the local host address
with the key `MinaConstants.MINA_LOCAL_ADDRESS` and remote host address
with the key `MinaConstants.MINA_REMOTE_ADDRESS`.

== Configuring Mina filters

Filters permit you to use some Mina Filters, such as `SslFilter`. You
can also implement some customized filters. Please note that `codec` and
`logger` are also implemented as Mina filters of type, `IoFilter`. Any
filters you may define are appended to the end of the filter chain; that
is, after `codec` and `logger`.

