blob: b7d9c293c813566d4d75c30e0fe429fc34ba9d59 [file] [log] [blame]
/*
* 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.ignite.cache.store;
import java.util.Collection;
import javax.cache.integration.CacheLoader;
import javax.cache.integration.CacheLoaderException;
import javax.cache.integration.CacheWriter;
import javax.cache.integration.CacheWriterException;
import org.apache.ignite.cache.store.jdbc.CacheJdbcBlobStore;
import org.apache.ignite.lang.IgniteBiInClosure;
import org.apache.ignite.lang.IgniteBiPredicate;
import org.apache.ignite.transactions.Transaction;
import org.apache.ignite.transactions.TransactionState;
import org.jetbrains.annotations.Nullable;
/**
* API for cache persistent storage for read-through and write-through behavior.
* Persistent store is configured via {@link org.apache.ignite.configuration.CacheConfiguration#getCacheStoreFactory()}
* configuration property. If not provided, values will be only kept in cache memory
* or swap storage without ever being persisted to a persistent storage.
* <p>
* {@link CacheStoreAdapter} provides default implementation for bulk operations,
* such as {@link #loadAll(Iterable)},
* {@link #writeAll(Collection)}, and {@link #deleteAll(Collection)}
* by sequentially calling corresponding {@link #load(Object)},
* {@link #write(javax.cache.Cache.Entry)}, and {@link #delete(Object)}
* operations. Use this adapter whenever such behaviour is acceptable. However
* in many cases it maybe more preferable to take advantage of database batch update
* functionality, and therefore default adapter implementation may not be the best option.
* <p>
* Provided implementations may be used for test purposes:
* <ul>
* <li>{@ignitelink org.apache.ignite.cache.store.hibernate.CacheHibernateBlobStore}</li>
* <li>{@link CacheJdbcBlobStore}</li>
* </ul>
* <p>
* All transactional operations of this API are provided with ongoing {@link Transaction},
* if any. You can attach any metadata to it, e.g. to recognize if several operations belong
* to the same transaction or not.
* Here is an example of how attach a JDBC connection as transaction metadata:
* <pre name="code" class="java">
* Connection conn = tx.meta("some.name");
*
* if (conn == null) {
* conn = ...; // Get JDBC connection.
*
* // Store connection in transaction metadata, so it can be accessed
* // for other operations on the same transaction.
* tx.addMeta("some.name", conn);
* }
* </pre>
*
* @see CacheStoreSession
*/
public interface CacheStore<K, V> extends CacheLoader<K, V>, CacheWriter<K, V> {
/**
* Loads all values from underlying persistent storage. Note that keys are not
* passed, so it is up to implementation to figure out what to load. This method
* is called whenever {@link org.apache.ignite.IgniteCache#loadCache(IgniteBiPredicate, Object...)}
* method is invoked which is usually to preload the cache from persistent storage.
* <p>
* This method is optional, and cache implementation does not depend on this
* method to do anything. Default implementation of this method in
* {@link CacheStoreAdapter} does nothing.
* <p>
* For every loaded value method {@link org.apache.ignite.lang.IgniteBiInClosure#apply(Object, Object)}
* should be called on the passed in closure. The closure will then make sure
* that the loaded value is stored in cache.
*
* @param clo Closure for loaded values.
* @param args Arguments passes into
* {@link org.apache.ignite.IgniteCache#loadCache(IgniteBiPredicate, Object...)} method.
* @throws CacheLoaderException If loading failed.
*/
public void loadCache(IgniteBiInClosure<K, V> clo, @Nullable Object... args) throws CacheLoaderException;
/**
* Tells store to commit or rollback a transaction depending on the value of the {@code 'commit'}
* parameter.
*
* @param commit {@code True} if transaction should commit, {@code false} for rollback.
* @throws CacheWriterException If commit or rollback failed. Note that commit failure in some cases
* may bring cache transaction into {@link TransactionState#UNKNOWN} which will
* consequently cause all transacted entries to be invalidated.
* @deprecated Use {@link CacheStoreSessionListener} instead (refer to its JavaDoc for details).
*/
@Deprecated
public void sessionEnd(boolean commit) throws CacheWriterException;
}