<?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.
  -->
<!--
      Ignite configuration with all defaults and enabled p2p deployment and enabled events.
  -->
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:util="http://www.springframework.org/schema/util" 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://www.springframework.org/schema/util         http://www.springframework.org/schema/util/spring-util.xsd">
  <bean class="org.apache.ignite.configuration.IgniteConfiguration" id="ignite.cfg">

    <!-- tag::ssl-configuration[] -->
    <property name="clientConnectorConfiguration">
        <bean class="org.apache.ignite.configuration.ClientConnectorConfiguration">
            <property name="sslEnabled" value="true"/>
            <property name="useIgniteSslContextFactory" value="false"/>
            <property name="sslContextFactory">
                <bean class="org.apache.ignite.ssl.SslContextFactory">
                    <property name="keyStoreFilePath" value="/path/to/server.jks"/>
                    <property name="keyStorePassword" value="123456"/>
                    <property name="trustStoreFilePath" value="/path/to/trust.jks"/>
                    <property name="trustStorePassword" value="123456"/>
                </bean>
            </property>
        </bean>
    </property>
    <!-- end::ssl-configuration[] -->


       <!-- Explicitly configure TCP discovery SPI to provide list of initial nodes. -->
    <property name="discoverySpi">
      <bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
        <property name="ipFinder">
          <!--
              Ignite provides several options for automatic discovery that can be used
              instead os static IP based discovery. For information on all options refer
              to our documentation: http://apacheignite.readme.io/docs/cluster-config
          -->
          <!-- Uncomment static IP finder to enable static-based discovery of initial nodes. -->
          <bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder">
            <!--bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.multicast.TcpDiscoveryMulticastIpFinder"-->
            <property name="addresses">
              <list>
                <!-- In distributed environment, replace with actual host IP address. -->
                <value>127.0.0.1:47500..47509</value>
              </list>
            </property>
          </bean>
        </property>
      </bean>
    </property>
  </bean>
</beans>
