= Hazelcast Component
//THIS FILE IS COPIED: EDIT THE SOURCE FILE:
:page-source: components/camel-hazelcast/src/main/docs/hazelcast-summary.adoc
//attributes written by hand, not generated
:docTitle: Hazelcast
:since: 2.7

*Since Camel {since}*

The *hazelcast-* component allows you to work with the
http://www.hazelcast.com[Hazelcast] distributed data grid / cache.
Hazelcast is a in memory data grid, entirely written in Java (single
jar). It offers a great palette of different data stores like map, multi
map (same key, n values), queue, list and atomic number. The main reason
to use Hazelcast is its simple cluster support. If you have enabled
multicast on your network you can run a cluster with hundred nodes with
no extra configuration. Hazelcast can simply configured to add
additional features like n copies between nodes (default is 1), cache
persistence, network configuration (if needed), near cache, eviction
and so on. For more information consult the Hazelcast documentation on
http://www.hazelcast.com/docs.jsp[http://www.hazelcast.com/docs.jsp].

== {docTitle} components

See the following for usage of each component:

indexDescriptionList::[attributes='group={docTitle}',descAttribute=description]

== Installation

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-hazelcast</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>
------------------------------------------------------------


== Using hazelcast reference

=== By its name

[source,xml]
--------------------------------------------------------------------------------------------------------
<bean id="hazelcastLifecycle" class="com.hazelcast.core.LifecycleService"
      factory-bean="hazelcastInstance" factory-method="getLifecycleService"
      destroy-method="shutdown" />

<bean id="config" class="com.hazelcast.config.Config">
    <constructor-arg type="java.lang.String" value="HZ.INSTANCE" />
</bean>

<bean id="hazelcastInstance" class="com.hazelcast.core.Hazelcast" factory-method="newHazelcastInstance">
    <constructor-arg type="com.hazelcast.config.Config" ref="config"/>
</bean>
<camelContext xmlns="http://camel.apache.org/schema/spring">
    <route id="testHazelcastInstanceBeanRefPut">
        <from uri="direct:testHazelcastInstanceBeanRefPut"/>
        <setHeader name="CamelHazelcastOperationType">
            <constant>put</constant>
        </setHeader>
        <to uri="hazelcast-map:testmap?hazelcastInstanceName=HZ.INSTANCE"/>
    </route>

    <route id="testHazelcastInstanceBeanRefGet">
        <from uri="direct:testHazelcastInstanceBeanRefGet" />
        <setHeader name="CamelHazelcastOperationType">
            <constant>get</constant>
        </setHeader>
        <to uri="hazelcast-map:testmap?hazelcastInstanceName=HZ.INSTANCE"/>
        <to uri="seda:out" />
    </route>
</camelContext>
--------------------------------------------------------------------------------------------------------

=== By instance

[source,xml]
------------------------------------------------------------------------------
<bean id="hazelcastInstance" class="com.hazelcast.core.Hazelcast"
      factory-method="newHazelcastInstance" />
<bean id="hazelcastLifecycle" class="com.hazelcast.core.LifecycleService"
      factory-bean="hazelcastInstance" factory-method="getLifecycleService"
      destroy-method="shutdown" />

<camelContext xmlns="http://camel.apache.org/schema/spring">
    <route id="testHazelcastInstanceBeanRefPut">
        <from uri="direct:testHazelcastInstanceBeanRefPut"/>
        <setHeader name="CamelHazelcastOperationType">
            <constant>put</constant>
        </setHeader>
        <to uri="hazelcast-map:testmap?hazelcastInstance=#hazelcastInstance"/>
    </route>

    <route id="testHazelcastInstanceBeanRefGet">
        <from uri="direct:testHazelcastInstanceBeanRefGet" />
        <setHeader name="CamelHazelcastOperationType">
            <constant>get</constant>
        </setHeader>
        <to uri="hazelcast-map:testmap?hazelcastInstance=#hazelcastInstance"/>
        <to uri="seda:out" />
    </route>
</camelContext>
------------------------------------------------------------------------------

=== Configuring HazelcastInstance on component

You can also configure the hazelcast instance on the component which will then be used by all hazelcast endpoints.
In the example above we setup this for the hazelcast map component and setup hazelcast via verbose `<bean>` configurations.

[source,xml]
------------------------------------------------------------------------------
<bean id="config" class="com.hazelcast.config.Config">
    <constructor-arg type="java.lang.String" value="HZ.INSTANCE" />
    <propety name="networkConfig" ref="myNetworkConfig"/>
</bean>

<bean id="myNetworkConfig" class="com.hazelcast.config.NetworkConfig">
  <propety name="port">1234</propety>
</bean>

<bean id="myHazelcastInstance" class="com.hazelcast.core.Hazelcast" factory-method="newHazelcastInstance">
    <constructor-arg type="com.hazelcast.config.Config" ref="config"/>
</bean>

<bean id="hazelcast" class="org.apache.camel.component.hazelcast.map.HazelcastMapComponent">
  <propety name="hazelcastInstance" ref="myHazelcastInstance"/>
</bean>
------------------------------------------------------------------------------

== Publishing hazelcast instance as an OSGI service

If operating in an OSGI container and you would want to use one instance
of hazelcast across all bundles in the same container. You can publish
the instance as an OSGI service and bundles using the cache al need is
to reference the service in the hazelcast endpoint.

=== Bundle A create an instance and publishes it as an OSGI service

[source,xml]
--------------------------------------------------------------------------------------------------------
<bean id="config" class="com.hazelcast.config.FileSystemXmlConfig">
    <argument type="java.lang.String" value="${hazelcast.config}"/>
</bean>

<bean id="hazelcastInstance" class="com.hazelcast.core.Hazelcast" factory-method="newHazelcastInstance">
    <argument type="com.hazelcast.config.Config" ref="config"/>
</bean>

<!-- publishing the hazelcastInstance as a service -->
<service ref="hazelcastInstance" interface="com.hazelcast.core.HazelcastInstance" />
--------------------------------------------------------------------------------------------------------

=== Bundle B uses the instance

[source,xml]
--------------------------------------------------------------------------------------
<!-- referencing the hazelcastInstance as a service -->
<reference ref="hazelcastInstance" interface="com.hazelcast.core.HazelcastInstance" />

<camelContext xmlns="http://camel.apache.org/schema/blueprint">
    <route id="testHazelcastInstanceBeanRefPut">
        <from uri="direct:testHazelcastInstanceBeanRefPut"/>
        <setHeader name="CamelHazelcastOperationType">
            <constant>put</constant>
        </setHeader>
        <to uri="hazelcast-map:testmap?hazelcastInstance=#hazelcastInstance"/>
    </route>

    <route id="testHazelcastInstanceBeanRefGet">
        <from uri="direct:testHazelcastInstanceBeanRefGet" />
        <setHeader name="CamelHazelcastOperationType">
            <constant>get</constant>
        </setHeader>
        <to uri="hazelcast-map:testmap?hazelcastInstance=#hazelcastInstance"/>
        <to uri="seda:out" />
    </route>
</camelContext>
--------------------------------------------------------------------------------------

include::camel-spring-boot::page$hazelcast-starter.adoc[]
