<?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.
-->
<hazelcast>
  <map name="qi4j.data">
    <map-store enabled="true">
      <!--
         Name of the class implementing MapLoader and/or MapStore.
         The class should implement at least of these interfaces and
         contain no-argument constructor.
      -->
      <class-name>TODO</class-name>
      <!--
         Number of seconds to delay to call the MapStore.store(key, value).
         If the value is zero then it is write-through so MapStore.store(key, value)
         will be called as soon as the entry is updated.
         Otherwise it is write-behind so updates will be stored after write-delay-seconds
         value by calling Hazelcast.storeAll(map). Default value is 0.
      -->
      <write-delay-seconds>0</write-delay-seconds>
    </map-store>
  </map>
</hazelcast>