# ignite-265

Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/9cd987c5
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/9cd987c5
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/9cd987c5

Branch: refs/heads/ignite-public-api-cleanup
Commit: 9cd987c52c9bc64147d64d8cc9480c412a9ea7ee
Parents: 9f5b287
Author: sboikov <sboi...@gridgain.com>
Authored: Mon Feb 16 11:10:44 2015 +0300
Committer: sboikov <sboi...@gridgain.com>
Committed: Mon Feb 16 11:51:20 2015 +0300

----------------------------------------------------------------------
 .../store/dummy/CacheDummyPersonStore.java      | 11 +++
 .../hibernate/CacheHibernatePersonStore.java    | 12 +++
 .../store/jdbc/CacheJdbcPersonStore.java        | 11 ++-
 .../cache/store/CacheLoadOnlyStoreAdapter.java  |  2 +-
 .../apache/ignite/cache/store/CacheStore.java   | 31 +-------
 .../ignite/cache/store/CacheStoreAdapter.java   |  2 +-
 .../ignite/cache/store/CacheStoreSession.java   |  3 +
 .../store/jdbc/CacheAbstractJdbcStore.java      | 24 +++++-
 .../cache/store/jdbc/CacheJdbcBlobStore.java    | 11 +++
 .../configuration/CacheConfiguration.java       | 14 ++--
 .../cache/CacheStoreBalancingWrapper.java       |  2 +-
 .../cache/GridCacheLoaderWriterStore.java       |  2 +-
 .../processors/cache/GridCacheProcessor.java    |  2 +-
 .../processors/cache/GridCacheStoreManager.java | 84 ++++++++++++--------
 .../cache/GridCacheWriteBehindStore.java        |  2 +-
 .../processors/query/GridQueryProcessor.java    |  6 +-
 .../processors/resource/GridResourceIoc.java    | 48 ++++++++---
 .../resource/GridResourceProcessor.java         | 21 +++++
 .../resources/CacheStoreSessionResource.java    | 41 ++++++++++
 .../store/GridCacheBalancingStoreSelfTest.java  |  2 +-
 .../cache/store/GridGeneratingTestStore.java    |  2 +-
 .../store/jdbc/CacheJdbcPojoStoreTest.java      |  2 +-
 ...idCacheConfigurationConsistencySelfTest.java |  2 +-
 .../cache/GridCacheGenericTestStore.java        |  2 +-
 .../cache/GridCacheLifecycleAwareSelfTest.java  |  2 +-
 .../cache/GridCacheStorePutxSelfTest.java       |  2 +-
 .../processors/cache/GridCacheTestStore.java    | 15 +++-
 .../IgniteTxStoreExceptionAbstractSelfTest.java |  2 +-
 .../IgniteCrossCacheTxStoreSelfTest.java        | 14 +++-
 .../IgniteCacheStoreSessionAbstractTest.java    | 20 ++++-
 .../cache/GridAbstractCacheStoreSelfTest.java   |  2 +-
 .../hibernate/CacheHibernateBlobStore.java      | 11 +++
 .../cache/VisorCacheClearCommandSpec.scala      |  4 +-
 .../commands/cache/VisorCacheCommandSpec.scala  |  4 +-
 .../cache/VisorCacheCompactCommandSpec.scala    |  4 +-
 .../cswap/VisorCacheSwapCommandSpec.scala       |  4 +-
 36 files changed, 309 insertions(+), 114 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9cd987c5/examples/src/main/java/org/apache/ignite/examples/datagrid/store/dummy/CacheDummyPersonStore.java
----------------------------------------------------------------------
diff --git 
a/examples/src/main/java/org/apache/ignite/examples/datagrid/store/dummy/CacheDummyPersonStore.java
 
b/examples/src/main/java/org/apache/ignite/examples/datagrid/store/dummy/CacheDummyPersonStore.java
index ab836d1..640cbfd 100644
--- 
a/examples/src/main/java/org/apache/ignite/examples/datagrid/store/dummy/CacheDummyPersonStore.java
+++ 
b/examples/src/main/java/org/apache/ignite/examples/datagrid/store/dummy/CacheDummyPersonStore.java
@@ -40,6 +40,10 @@ public class CacheDummyPersonStore extends 
CacheStoreAdapter<Long, Person> {
     @CacheNameResource
     private String cacheName;
 
+    /** */
+    @CacheStoreSessionResource
+    private CacheStoreSession ses;
+
     /** Dummy database. */
     private Map<Long, Person> dummyDB = new ConcurrentHashMap<>();
 
@@ -106,4 +110,11 @@ public class CacheDummyPersonStore extends 
CacheStoreAdapter<Long, Person> {
 
         return ses != null ? ses.transaction() : null;
     }
+
+    /**
+     * @return Store session.
+     */
+    private CacheStoreSession session() {
+        return ses;
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9cd987c5/examples/src/main/java/org/apache/ignite/examples/datagrid/store/hibernate/CacheHibernatePersonStore.java
----------------------------------------------------------------------
diff --git 
a/examples/src/main/java/org/apache/ignite/examples/datagrid/store/hibernate/CacheHibernatePersonStore.java
 
b/examples/src/main/java/org/apache/ignite/examples/datagrid/store/hibernate/CacheHibernatePersonStore.java
index d1cab09..9549598 100644
--- 
a/examples/src/main/java/org/apache/ignite/examples/datagrid/store/hibernate/CacheHibernatePersonStore.java
+++ 
b/examples/src/main/java/org/apache/ignite/examples/datagrid/store/hibernate/CacheHibernatePersonStore.java
@@ -20,6 +20,7 @@ package org.apache.ignite.examples.datagrid.store.hibernate;
 import org.apache.ignite.cache.store.*;
 import org.apache.ignite.examples.datagrid.store.*;
 import org.apache.ignite.lang.*;
+import org.apache.ignite.resources.*;
 import org.apache.ignite.transactions.Transaction;
 import org.hibernate.*;
 import org.hibernate.cfg.*;
@@ -42,6 +43,10 @@ public class CacheHibernatePersonStore extends 
CacheStoreAdapter<Long, Person> {
     /** Session factory. */
     private SessionFactory sesFactory;
 
+    /** Auto-injected store session. */
+    @CacheStoreSessionResource
+    private CacheStoreSession ses;
+
     /**
      * Default constructor.
      */
@@ -275,4 +280,11 @@ public class CacheHibernatePersonStore extends 
CacheStoreAdapter<Long, Person> {
 
         return ses != null ? ses.transaction() : null;
     }
+
+    /**
+     * @return Store session.
+     */
+    private CacheStoreSession session() {
+        return ses;
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9cd987c5/examples/src/main/java/org/apache/ignite/examples/datagrid/store/jdbc/CacheJdbcPersonStore.java
----------------------------------------------------------------------
diff --git 
a/examples/src/main/java/org/apache/ignite/examples/datagrid/store/jdbc/CacheJdbcPersonStore.java
 
b/examples/src/main/java/org/apache/ignite/examples/datagrid/store/jdbc/CacheJdbcPersonStore.java
index d17fc87..6388fbf 100644
--- 
a/examples/src/main/java/org/apache/ignite/examples/datagrid/store/jdbc/CacheJdbcPersonStore.java
+++ 
b/examples/src/main/java/org/apache/ignite/examples/datagrid/store/jdbc/CacheJdbcPersonStore.java
@@ -21,6 +21,7 @@ import org.apache.ignite.*;
 import org.apache.ignite.cache.store.*;
 import org.apache.ignite.examples.datagrid.store.*;
 import org.apache.ignite.lang.*;
+import org.apache.ignite.resources.*;
 import org.apache.ignite.transactions.*;
 import org.jetbrains.annotations.*;
 
@@ -38,6 +39,10 @@ public class CacheJdbcPersonStore extends 
CacheStoreAdapter<Long, Person> {
     /** Transaction metadata attribute name. */
     private static final String ATTR_NAME = "SIMPLE_STORE_CONNECTION";
 
+    /** Auto-injected store session. */
+    @CacheStoreSessionResource
+    private CacheStoreSession ses;
+
     /**
      * Constructor.
      *
@@ -69,7 +74,7 @@ public class CacheJdbcPersonStore extends 
CacheStoreAdapter<Long, Person> {
     @Override public void txEnd(boolean commit) {
         Transaction tx = transaction();
 
-        Map<String, Connection> props = session().properties();
+        Map<String, Connection> props = ses.properties();
 
         try (Connection conn = props.remove(ATTR_NAME)) {
             if (conn != null) {
@@ -230,7 +235,7 @@ public class CacheJdbcPersonStore extends 
CacheStoreAdapter<Long, Person> {
      */
     private Connection connection(@Nullable Transaction tx) throws 
SQLException  {
         if (tx != null) {
-            Map<Object, Object> props = session().properties();
+            Map<Object, Object> props = ses.properties();
 
             Connection conn = (Connection)props.get(ATTR_NAME);
 
@@ -298,8 +303,6 @@ public class CacheJdbcPersonStore extends 
CacheStoreAdapter<Long, Person> {
      * @return Current transaction.
      */
     @Nullable private Transaction transaction() {
-        CacheStoreSession ses = session();
-
         return ses != null ? ses.transaction() : null;
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9cd987c5/modules/core/src/main/java/org/apache/ignite/cache/store/CacheLoadOnlyStoreAdapter.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/cache/store/CacheLoadOnlyStoreAdapter.java
 
b/modules/core/src/main/java/org/apache/ignite/cache/store/CacheLoadOnlyStoreAdapter.java
index 9b6db74..b4bcd6c 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/cache/store/CacheLoadOnlyStoreAdapter.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/cache/store/CacheLoadOnlyStoreAdapter.java
@@ -68,7 +68,7 @@ import static java.util.concurrent.TimeUnit.*;
  * @param <V> Value type.
  * @param <I> Input type.
  */
-public abstract class CacheLoadOnlyStoreAdapter<K, V, I> extends CacheStore<K, 
V> {
+public abstract class CacheLoadOnlyStoreAdapter<K, V, I> implements 
CacheStore<K, V> {
     /**
      * Default batch size (number of records read with {@link 
#inputIterator(Object...)}
      * and then submitted to internal pool at a time).

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9cd987c5/modules/core/src/main/java/org/apache/ignite/cache/store/CacheStore.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/cache/store/CacheStore.java 
b/modules/core/src/main/java/org/apache/ignite/cache/store/CacheStore.java
index 3565f09..848df39 100644
--- a/modules/core/src/main/java/org/apache/ignite/cache/store/CacheStore.java
+++ b/modules/core/src/main/java/org/apache/ignite/cache/store/CacheStore.java
@@ -17,10 +17,8 @@
 
 package org.apache.ignite.cache.store;
 
-import org.apache.ignite.*;
 import org.apache.ignite.cache.store.jdbc.*;
 import org.apache.ignite.lang.*;
-import org.apache.ignite.resources.*;
 import org.apache.ignite.transactions.*;
 import org.jetbrains.annotations.*;
 
@@ -117,14 +115,7 @@ import static javax.cache.Cache.*;
  *
  * @see CacheStoreSession
  */
-public abstract class CacheStore<K, V> implements CacheLoader<K, V>, 
CacheWriter<K, V> {
-    /** */
-    private CacheStoreSession ses;
-
-    /** */
-    @IgniteInstanceResource
-    private Ignite ignite;
-
+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
@@ -144,7 +135,7 @@ public abstract class CacheStore<K, V> implements 
CacheLoader<K, V>, CacheWriter
      *      {@link 
org.apache.ignite.cache.GridCache#loadCache(org.apache.ignite.lang.IgniteBiPredicate,
 long, Object...)} method.
      * @throws CacheLoaderException If loading failed.
      */
-    public abstract void loadCache(IgniteBiInClosure<K, V> clo, @Nullable 
Object... args) throws CacheLoaderException;
+    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'}
@@ -155,21 +146,5 @@ public abstract class CacheStore<K, V> implements 
CacheLoader<K, V>, CacheWriter
      *      may bring cache transaction into {@link TransactionState#UNKNOWN} 
which will
      *      consequently cause all transacted entries to be invalidated.
      */
-    public abstract void txEnd(boolean commit) throws CacheWriterException;
-
-    /**
-     * Gets session for current cache operation. Returns {@code null} if store 
is used with atomic cache.
-     *
-     * @return Session for current cache operation.
-     */
-    public CacheStoreSession session() {
-        return ses;
-    }
-
-    /**
-     * @return {@link Ignite} instance.
-     */
-    public Ignite ignite() {
-        return ignite;
-    }
+    public void txEnd(boolean commit) throws CacheWriterException;
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9cd987c5/modules/core/src/main/java/org/apache/ignite/cache/store/CacheStoreAdapter.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/cache/store/CacheStoreAdapter.java
 
b/modules/core/src/main/java/org/apache/ignite/cache/store/CacheStoreAdapter.java
index c166480..794281b 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/cache/store/CacheStoreAdapter.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/cache/store/CacheStoreAdapter.java
@@ -36,7 +36,7 @@ import java.util.*;
  * implementation because it is essentially up to the user to invoke it with
  * specific arguments.
  */
-public abstract class CacheStoreAdapter<K, V> extends CacheStore<K, V> {
+public abstract class CacheStoreAdapter<K, V> implements CacheStore<K, V> {
     /**
      * Default empty implementation. This method needs to be overridden only if
      * {@link org.apache.ignite.cache.GridCache#loadCache(IgniteBiPredicate, 
long, Object...)} method

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9cd987c5/modules/core/src/main/java/org/apache/ignite/cache/store/CacheStoreSession.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/cache/store/CacheStoreSession.java
 
b/modules/core/src/main/java/org/apache/ignite/cache/store/CacheStoreSession.java
index 2fdd68f..0bfc6fc 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/cache/store/CacheStoreSession.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/cache/store/CacheStoreSession.java
@@ -17,12 +17,15 @@
 
 package org.apache.ignite.cache.store;
 
+import org.apache.ignite.resources.*;
 import org.apache.ignite.transactions.*;
 
 import java.util.*;
 
 /**
  * Session for the cache store operations.
+ *
+ * @see CacheStoreSessionResource
  */
 public interface CacheStoreSession {
     /**

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9cd987c5/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/CacheAbstractJdbcStore.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/CacheAbstractJdbcStore.java
 
b/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/CacheAbstractJdbcStore.java
index 31ee5b5..7c6f060 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/CacheAbstractJdbcStore.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/CacheAbstractJdbcStore.java
@@ -76,7 +76,7 @@ import static java.sql.Statement.*;
  * <p>
  * For information about Spring framework visit <a 
href="http://www.springframework.org/";>www.springframework.org</a>
  */
-public abstract class CacheAbstractJdbcStore<K, V> extends CacheStore<K, V> 
implements LifecycleAware {
+public abstract class CacheAbstractJdbcStore<K, V> implements CacheStore<K, 
V>, LifecycleAware {
     /** Max attempt write count. */
     protected static final int MAX_ATTEMPT_WRITE_COUNT = 2;
 
@@ -92,6 +92,14 @@ public abstract class CacheAbstractJdbcStore<K, V> extends 
CacheStore<K, V> impl
     /** Empty column value. */
     protected static final Object[] EMPTY_COLUMN_VALUE = new Object[] { null };
 
+    /** Auto-injected store session. */
+    @CacheStoreSessionResource
+    private CacheStoreSession ses;
+
+    /** Auto injected ignite instance. */
+    @IgniteInstanceResource
+    private Ignite ignite;
+
     /** Auto-injected logger instance. */
     @LoggerResource
     protected IgniteLogger log;
@@ -1231,6 +1239,20 @@ public abstract class CacheAbstractJdbcStore<K, V> 
extends CacheStore<K, V> impl
     }
 
     /**
+     * @return Ignite instance.
+     */
+    protected Ignite ignite() {
+        return ignite;
+    }
+
+    /**
+     * @return Store session.
+     */
+    protected CacheStoreSession session() {
+        return ses;
+    }
+
+    /**
      * Entry mapping description.
      */
     protected static class EntryMapping {

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9cd987c5/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/CacheJdbcBlobStore.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/CacheJdbcBlobStore.java
 
b/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/CacheJdbcBlobStore.java
index 3b247be..90d62b7 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/CacheJdbcBlobStore.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/CacheJdbcBlobStore.java
@@ -142,6 +142,10 @@ public class CacheJdbcBlobStore<K, V> extends 
CacheStoreAdapter<K, V> {
     /** Flag for schema initialization. */
     private boolean initSchema = true;
 
+    /** Auto-injected store session. */
+    @CacheStoreSessionResource
+    private CacheStoreSession ses;
+
     /** Log. */
     @LoggerResource
     private IgniteLogger log;
@@ -582,4 +586,11 @@ public class CacheJdbcBlobStore<K, V> extends 
CacheStoreAdapter<K, V> {
 
         return ses != null ? ses.transaction() : null;
     }
+
+    /**
+     * @return Store session.
+     */
+    protected CacheStoreSession session() {
+        return ses;
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9cd987c5/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java
 
b/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java
index 84c047c..a45839b 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java
@@ -41,7 +41,7 @@ import java.util.*;
  * properties are optional, so users should only change what they need.
  */
 @SuppressWarnings("RedundantFieldInitialization")
-public class CacheConfiguration extends MutableConfiguration {
+public class CacheConfiguration<K, V> extends MutableConfiguration<K, V> {
     /** Default size of preload thread pool. */
     public static final int DFLT_PRELOAD_THREAD_POOL_SIZE = 2;
 
@@ -686,9 +686,9 @@ public class CacheConfiguration extends 
MutableConfiguration {
 
     /**
      * Gets eviction filter to specify which entries should not be evicted
-     * (except explicit evict by calling {@link Entry#evict()}).
-     * If {@link 
org.apache.ignite.cache.eviction.CacheEvictionFilter#evictAllowed(Entry)} 
method returns
-     * {@code false} then eviction policy will not be notified and entry will
+     * (except explicit evict by calling {@link 
IgniteCache#localEvict(Collection)}).
+     * If {@link 
org.apache.ignite.cache.eviction.CacheEvictionFilter#evictAllowed(javax.cache.Cache.Entry)}
 method
+     * returns {@code false} then eviction policy will not be notified and 
entry will
      * never be evicted.
      * <p>
      * If not provided, any entry may be evicted depending on
@@ -697,7 +697,7 @@ public class CacheConfiguration extends 
MutableConfiguration {
      * @return Eviction filter or {@code null}.
      */
     @SuppressWarnings("unchecked")
-    public <K, V> CacheEvictionFilter<K, V> getEvictionFilter() {
+    public CacheEvictionFilter<K, V> getEvictionFilter() {
         return (CacheEvictionFilter<K, V>)evictFilter;
     }
 
@@ -706,7 +706,7 @@ public class CacheConfiguration extends 
MutableConfiguration {
      *
      * @param evictFilter Eviction filter.
      */
-    public <K, V> void setEvictionFilter(CacheEvictionFilter<K, V> 
evictFilter) {
+    public void setEvictionFilter(CacheEvictionFilter<K, V> evictFilter) {
         this.evictFilter = evictFilter;
     }
 
@@ -717,7 +717,7 @@ public class CacheConfiguration extends 
MutableConfiguration {
      * When not set, default value is {@link #DFLT_EAGER_TTL}.
      * <p>
      * <b>Note</b> that this flag only matters for entries expiring based on
-     * {@link Entry#timeToLive()} value and should not be confused with entry
+     * {@link javax.cache.expiry.ExpiryPolicy} and should not be confused with 
entry
      * evictions based on configured {@link 
org.apache.ignite.cache.eviction.CacheEvictionPolicy}.
      *
      * @return Flag indicating whether Ignite will eagerly remove expired 
entries.

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9cd987c5/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheStoreBalancingWrapper.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheStoreBalancingWrapper.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheStoreBalancingWrapper.java
index 9013fcb..394bcfb 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheStoreBalancingWrapper.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheStoreBalancingWrapper.java
@@ -33,7 +33,7 @@ import java.util.concurrent.*;
 /**
  * Cache store wrapper that ensures that there will be no more that one thread 
loading value from underlying store.
  */
-public class CacheStoreBalancingWrapper<K, V> extends CacheStore<K, V> {
+public class CacheStoreBalancingWrapper<K, V> implements CacheStore<K, V> {
     /** */
     public static final int DFLT_LOAD_ALL_THRESHOLD = 5;
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9cd987c5/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheLoaderWriterStore.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheLoaderWriterStore.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheLoaderWriterStore.java
index 291afe6..30c84e9 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheLoaderWriterStore.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheLoaderWriterStore.java
@@ -29,7 +29,7 @@ import java.util.*;
 /**
  * Store implementation wrapping {@link CacheLoader} and {@link CacheWriter}.
  */
-class GridCacheLoaderWriterStore<K, V> extends CacheStore<K, V> implements 
LifecycleAware {
+class GridCacheLoaderWriterStore<K, V> implements CacheStore<K, V>, 
LifecycleAware {
     /** */
     private final CacheLoader<K, V> ldr;
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9cd987c5/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
index c03ecbb..d038e91 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
@@ -587,7 +587,7 @@ public class GridCacheProcessor extends 
GridProcessorAdapter {
         IdentityHashMap<CacheStore, ThreadLocal> sesHolders = new 
IdentityHashMap<>();
 
         for (int i = 0; i < cfgs.length; i++) {
-            CacheConfiguration cfg = new CacheConfiguration(cfgs[i]);
+            CacheConfiguration<?, ?> cfg = new CacheConfiguration(cfgs[i]);
 
             // Initialize defaults.
             initialize(cfg);

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9cd987c5/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheStoreManager.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheStoreManager.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheStoreManager.java
index 5a17b4f..54420e8 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheStoreManager.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheStoreManager.java
@@ -48,9 +48,6 @@ public class GridCacheStoreManager<K, V> extends 
GridCacheManagerAdapter<K, V> {
     private static final String SES_ATTR = "STORE_SES";
 
     /** */
-    private static final String SES_FIELD_NAME = "ses";
-
-    /** */
     private final CacheStore<K, Object> store;
 
     /** */
@@ -69,6 +66,9 @@ public class GridCacheStoreManager<K, V> extends 
GridCacheManagerAdapter<K, V> {
     private final boolean writeThrough;
 
     /** */
+    private final boolean sesEnabled;
+
+    /** */
     private boolean convertPortable;
 
     /**
@@ -94,32 +94,33 @@ public class GridCacheStoreManager<K, V> extends 
GridCacheManagerAdapter<K, V> {
 
         ThreadLocal<SessionData> sesHolder0 = null;
 
-        if (cfgStore != null) {
-            try {
-                if (!sesHolders.containsKey(cfgStore)) {
-                    sesHolder0 = new ThreadLocal<>();
+        boolean sesEnabled0 = false;
 
-                    Field sesField = 
CacheStore.class.getDeclaredField(SES_FIELD_NAME);
-
-                    sesField.setAccessible(true);
+        if (cfgStore != null) {
+            if (!sesHolders.containsKey(cfgStore)) {
+                sesHolder0 = new ThreadLocal<>();
 
-                    sesField.set(cfgStore, new ThreadLocalSession(sesHolder0));
+                sesEnabled0 = ctx.resource().injectStoreSession(cfgStore, new 
ThreadLocalSession(sesHolder0));
 
+                if (sesEnabled0)
                     sesHolders.put(cfgStore, sesHolder0);
-                }
                 else
-                    sesHolder0 = sesHolders.get(cfgStore);
+                    sesHolder0 = null;
             }
-            catch (IllegalAccessException | NoSuchFieldException e) {
-                throw new IgniteCheckedException(e);
+            else {
+                sesHolder0 = sesHolders.get(cfgStore);
+
+                sesEnabled0 = true;
             }
         }
 
+        sesEnabled = sesEnabled0;
+
         sesHolder = sesHolder0;
 
         locStore = U.hasAnnotation(cfgStore, CacheLocalStore.class);
 
-        assert sesHolder != null || cfgStore == null;
+        assert sesHolder != null || !sesEnabled;
     }
 
     /**
@@ -271,7 +272,7 @@ public class GridCacheStoreManager<K, V> extends 
GridCacheManagerAdapter<K, V> {
             if (log.isDebugEnabled())
                 log.debug("Loading value from store for key: " + key);
 
-            initSession(tx);
+            boolean ses = initSession(tx);
 
             Object val = null;
 
@@ -288,7 +289,8 @@ public class GridCacheStoreManager<K, V> extends 
GridCacheManagerAdapter<K, V> {
                 throw new IgniteCheckedException(new CacheLoaderException(e));
             }
             finally {
-                sesHolder.set(null);
+                if (ses)
+                    sesHolder.set(null);
             }
 
             if (log.isDebugEnabled())
@@ -413,7 +415,7 @@ public class GridCacheStoreManager<K, V> extends 
GridCacheManagerAdapter<K, V> {
             if (log.isDebugEnabled())
                 log.debug("Loading values from store for keys: " + keys0);
 
-            initSession(tx);
+            boolean ses = initSession(tx);
 
             try {
                 IgniteBiInClosure<K,Object> c = new CI2<K, Object>() {
@@ -459,7 +461,8 @@ public class GridCacheStoreManager<K, V> extends 
GridCacheManagerAdapter<K, V> {
                 throw new IgniteCheckedException(new CacheLoaderException(e));
             }
             finally {
-                sesHolder.set(null);
+                if (ses)
+                    sesHolder.set(null);
             }
 
             if (log.isDebugEnabled())
@@ -482,7 +485,7 @@ public class GridCacheStoreManager<K, V> extends 
GridCacheManagerAdapter<K, V> {
             if (log.isDebugEnabled())
                 log.debug("Loading all values from store.");
 
-            initSession(null);
+            boolean ses = initSession(null);
 
             try {
                 store.loadCache(new IgniteBiInClosure<K, Object>() {
@@ -510,7 +513,8 @@ public class GridCacheStoreManager<K, V> extends 
GridCacheManagerAdapter<K, V> {
                 throw new IgniteCheckedException(new CacheLoaderException(e));
             }
             finally {
-                sesHolder.set(null);
+                if (ses)
+                    sesHolder.set(null);
             }
 
             if (log.isDebugEnabled())
@@ -551,7 +555,7 @@ public class GridCacheStoreManager<K, V> extends 
GridCacheManagerAdapter<K, V> {
             if (log.isDebugEnabled())
                 log.debug("Storing value in cache store [key=" + key + ", 
val=" + val + ']');
 
-            initSession(tx);
+            boolean ses = initSession(tx);
 
             try {
                 store.write(new CacheEntryImpl<>(key, locStore ? F.t(val, ver) 
: val));
@@ -566,7 +570,8 @@ public class GridCacheStoreManager<K, V> extends 
GridCacheManagerAdapter<K, V> {
                 throw new IgniteCheckedException(new CacheWriterException(e));
             }
             finally {
-                sesHolder.set(null);
+                if (ses)
+                    sesHolder.set(null);
             }
 
             if (log.isDebugEnabled())
@@ -603,7 +608,7 @@ public class GridCacheStoreManager<K, V> extends 
GridCacheManagerAdapter<K, V> {
                 if (log.isDebugEnabled())
                     log.debug("Storing values in cache store [entries=" + 
entries + ']');
 
-                initSession(tx);
+                boolean ses = initSession(tx);
 
                 try {
                     store.writeAll(entries);
@@ -627,7 +632,8 @@ public class GridCacheStoreManager<K, V> extends 
GridCacheManagerAdapter<K, V> {
                     throw new IgniteCheckedException(e);
                 }
                 finally {
-                    sesHolder.set(null);
+                    if (ses)
+                        sesHolder.set(null);
                 }
 
                 if (log.isDebugEnabled())
@@ -659,7 +665,7 @@ public class GridCacheStoreManager<K, V> extends 
GridCacheManagerAdapter<K, V> {
             if (log.isDebugEnabled())
                 log.debug("Removing value from cache store [key=" + key + ']');
 
-            initSession(tx);
+            boolean ses = initSession(tx);
 
             try {
                 store.delete(key);
@@ -674,7 +680,8 @@ public class GridCacheStoreManager<K, V> extends 
GridCacheManagerAdapter<K, V> {
                 throw new IgniteCheckedException(new CacheWriterException(e));
             }
             finally {
-                sesHolder.set(null);
+                if (ses)
+                    sesHolder.set(null);
             }
 
             if (log.isDebugEnabled())
@@ -710,7 +717,7 @@ public class GridCacheStoreManager<K, V> extends 
GridCacheManagerAdapter<K, V> {
             if (log.isDebugEnabled())
                 log.debug("Removing values from cache store [keys=" + keys0 + 
']');
 
-            initSession(tx);
+            boolean ses = initSession(tx);
 
             try {
                 store.deleteAll(keys0);
@@ -728,7 +735,8 @@ public class GridCacheStoreManager<K, V> extends 
GridCacheManagerAdapter<K, V> {
                 throw new IgniteCheckedException(e);
             }
             finally {
-                sesHolder.set(null);
+                if (ses)
+                    sesHolder.set(null);
             }
 
             if (log.isDebugEnabled())
@@ -763,15 +771,17 @@ public class GridCacheStoreManager<K, V> extends 
GridCacheManagerAdapter<K, V> {
     public void txEnd(IgniteInternalTx tx, boolean commit) throws 
IgniteCheckedException {
         assert store != null;
 
-        initSession(tx);
+        boolean ses = initSession(tx);
 
         try {
             store.txEnd(commit);
         }
         finally {
-            sesHolder.set(null);
+            if (ses) {
+                sesHolder.set(null);
 
-            tx.removeMeta(SES_ATTR);
+                tx.removeMeta(SES_ATTR);
+            }
         }
     }
 
@@ -792,8 +802,12 @@ public class GridCacheStoreManager<K, V> extends 
GridCacheManagerAdapter<K, V> {
 
     /**
      * @param tx Current transaction.
+     * @return {@code True} if session
      */
-    private void initSession(@Nullable IgniteInternalTx<?, ?> tx) {
+    private boolean initSession(@Nullable IgniteInternalTx<?, ?> tx) {
+        if (!sesEnabled)
+            return false;
+
         SessionData ses;
 
         if (tx != null) {
@@ -812,6 +826,8 @@ public class GridCacheStoreManager<K, V> extends 
GridCacheManagerAdapter<K, V> {
             ses = new SessionData(null, cctx.name());
 
         sesHolder.set(ses);
+
+        return true;
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9cd987c5/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheWriteBehindStore.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheWriteBehindStore.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheWriteBehindStore.java
index 084ebbd..eb6120a 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheWriteBehindStore.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheWriteBehindStore.java
@@ -55,7 +55,7 @@ import static javax.cache.Cache.*;
  * Since write operations to the cache store are deferred, transaction support 
is lost; no
  * transaction objects are passed to the underlying store.
  */
-public class GridCacheWriteBehindStore<K, V> extends CacheStore<K, V> 
implements LifecycleAware {
+public class GridCacheWriteBehindStore<K, V> implements CacheStore<K, V>, 
LifecycleAware {
     /** Default write cache initial capacity. */
     public static final int DFLT_INITIAL_CAPACITY = 1024;
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9cd987c5/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java
index 415f76d..1a68619 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java
@@ -107,7 +107,7 @@ public class GridQueryProcessor extends 
GridProcessorAdapter {
 
             idx.start(ctx);
 
-            for (CacheConfiguration ccfg : 
ctx.config().getCacheConfiguration()){
+            for (CacheConfiguration<?, ?> ccfg : 
ctx.config().getCacheConfiguration()){
                 CacheQueryConfiguration qryCfg = ccfg.getQueryConfiguration();
 
                 if (qryCfg != null) {
@@ -647,7 +647,7 @@ public class GridQueryProcessor extends 
GridProcessorAdapter {
         if (portableIds == null) {
             portableIds = new HashMap<>();
 
-            for (CacheConfiguration ccfg : 
ctx.config().getCacheConfiguration()){
+            for (CacheConfiguration<?, ?> ccfg : 
ctx.config().getCacheConfiguration()){
                 CacheQueryConfiguration qryCfg = ccfg.getQueryConfiguration();
 
                 if (qryCfg != null) {
@@ -673,7 +673,7 @@ public class GridQueryProcessor extends 
GridProcessorAdapter {
         if (declaredTypesById == null) {
             declaredTypesById = new HashMap<>();
 
-            for (CacheConfiguration ccfg : 
ctx.config().getCacheConfiguration()){
+            for (CacheConfiguration<?, ?> ccfg : 
ctx.config().getCacheConfiguration()){
                 CacheQueryConfiguration qryCfg = ccfg.getQueryConfiguration();
 
                 if (qryCfg != null) {

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9cd987c5/modules/core/src/main/java/org/apache/ignite/internal/processors/resource/GridResourceIoc.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/resource/GridResourceIoc.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/resource/GridResourceIoc.java
index 4b47545..03d81f8 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/resource/GridResourceIoc.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/resource/GridResourceIoc.java
@@ -99,16 +99,25 @@ class GridResourceIoc {
      * @param dep Deployment.
      * @param depCls Deployment class.
      * @throws IgniteCheckedException Thrown in case of any errors during 
injection.
+     * @return {@code True} if resource was injected.
      */
-    void inject(Object target, Class<? extends Annotation> annCls, 
GridResourceInjector injector,
-        @Nullable GridDeployment dep, @Nullable Class<?> depCls) throws 
IgniteCheckedException {
+    @SuppressWarnings("SimplifiableIfStatement")
+    boolean inject(Object target,
+        Class<? extends Annotation> annCls,
+        GridResourceInjector injector,
+        @Nullable GridDeployment dep,
+        @Nullable Class<?> depCls)
+        throws IgniteCheckedException
+    {
         assert target != null;
         assert annCls != null;
         assert injector != null;
 
         if (isAnnotationPresent(target, annCls, dep))
             // Use identity hash set to compare via referential equality.
-            injectInternal(target, annCls, injector, dep, depCls, new 
GridIdentityHashSet<>(3));
+            return injectInternal(target, annCls, injector, dep, depCls, new 
GridIdentityHashSet<>(3));
+
+        return false;
     }
 
     /**
@@ -119,9 +128,16 @@ class GridResourceIoc {
      * @param depCls Deployment class.
      * @param checkedObjs Set of already inspected objects to avoid indefinite 
recursion.
      * @throws IgniteCheckedException Thrown in case of any errors during 
injection.
+     * @return {@code True} if resource was injected.
      */
-    private void injectInternal(Object target, Class<? extends Annotation> 
annCls, GridResourceInjector injector,
-        @Nullable GridDeployment dep, @Nullable Class<?> depCls, Set<Object> 
checkedObjs) throws IgniteCheckedException {
+    private boolean injectInternal(Object target,
+        Class<? extends Annotation> annCls,
+        GridResourceInjector injector,
+        @Nullable GridDeployment dep,
+        @Nullable Class<?> depCls,
+        Set<Object> checkedObjs)
+        throws IgniteCheckedException
+    {
         assert target != null;
         assert annCls != null;
         assert injector != null;
@@ -133,16 +149,18 @@ class GridResourceIoc {
 
         // Skip this class if it does not need to be injected.
         if (skipClss != null && skipClss.contains(targetCls))
-            return;
+            return false;
 
         // Check if already inspected to avoid indefinite recursion.
         if (checkedObjs.contains(target))
-            return;
+            return false;
 
         checkedObjs.add(target);
 
         int annCnt = 0;
 
+        boolean injected = false;
+
         for (GridResourceField field : getFieldsWithAnnotation(dep, targetCls, 
annCls)) {
             Field f = field.getField();
 
@@ -152,24 +170,32 @@ class GridResourceIoc {
                 try {
                     Object obj = f.get(target);
 
-                    if (obj != null)
+                    if (obj != null) {
                         // Recursion.
-                        injectInternal(obj, annCls, injector, dep, depCls, 
checkedObjs);
+                        boolean injected0 = injectInternal(obj, annCls, 
injector, dep, depCls, checkedObjs);
+
+                        injected |= injected0;
+                    }
                 }
                 catch (IllegalAccessException e) {
                     throw new IgniteCheckedException("Failed to inject 
resource [field=" + f.getName() +
                         ", target=" + target + ']', e);
                 }
             }
-            else
+            else {
                 injector.inject(field, target, depCls, dep);
 
+                injected = true;
+            }
+
             annCnt++;
         }
 
         for (GridResourceMethod mtd : getMethodsWithAnnotation(dep, targetCls, 
annCls)) {
             injector.inject(mtd, target, depCls, dep);
 
+            injected = true;
+
             annCnt++;
         }
 
@@ -181,6 +207,8 @@ class GridResourceIoc {
 
             skipClss.add(targetCls);
         }
+
+        return injected;
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9cd987c5/modules/core/src/main/java/org/apache/ignite/internal/processors/resource/GridResourceProcessor.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/resource/GridResourceProcessor.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/resource/GridResourceProcessor.java
index 83ee983..555754f 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/resource/GridResourceProcessor.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/resource/GridResourceProcessor.java
@@ -18,6 +18,7 @@
 package org.apache.ignite.internal.processors.resource;
 
 import org.apache.ignite.*;
+import org.apache.ignite.cache.store.*;
 import org.apache.ignite.compute.*;
 import org.apache.ignite.internal.*;
 import org.apache.ignite.internal.managers.deployment.*;
@@ -200,6 +201,26 @@ public class GridResourceProcessor extends 
GridProcessorAdapter {
     }
 
     /**
+     * Injects cache store session into given object.
+     *
+     * @param obj Object.
+     * @param ses Session to inject.
+     * @return {@code True} if session was injected.
+     * @throws IgniteCheckedException If failed to inject.
+     */
+    public boolean injectStoreSession(Object obj, CacheStoreSession ses) 
throws IgniteCheckedException {
+        assert obj != null;
+
+        if (log.isDebugEnabled())
+            log.debug("Injecting cache store session: " + obj);
+
+        // Unwrap Proxy object.
+        obj = unwrapTarget(obj);
+
+        return ioc.inject(obj, CacheStoreSessionResource.class, new 
GridResourceBasicInjector<>(ses), null, null);
+    }
+
+    /**
      * @param obj Object to inject.
      * @throws IgniteCheckedException If failed to inject.
      */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9cd987c5/modules/core/src/main/java/org/apache/ignite/resources/CacheStoreSessionResource.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/resources/CacheStoreSessionResource.java
 
b/modules/core/src/main/java/org/apache/ignite/resources/CacheStoreSessionResource.java
new file mode 100644
index 0000000..b75b796
--- /dev/null
+++ 
b/modules/core/src/main/java/org/apache/ignite/resources/CacheStoreSessionResource.java
@@ -0,0 +1,41 @@
+/*
+ * 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.resources;
+
+import java.lang.annotation.*;
+
+/**
+ * Annotates a field or a setter method for injection of current {@link 
org.apache.ignite.cache.store.CacheStoreSession}
+ * instance. It can be injected into {@link 
org.apache.ignite.cache.store.CacheStore}.
+ * <p>
+ * Here is how injection would typically happen:
+ * <pre name="code" class="java">
+ * public class MyCacheStore implements CacheStore {
+ *      ...
+ *      &#64;CacheStoreSessionResource
+ *      private CacheStoreSession ses;
+ *      ...
+ *  }
+ * </pre>
+ */
+@Documented
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.METHOD, ElementType.FIELD})
+public @interface CacheStoreSessionResource {
+    // No-op.
+}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9cd987c5/modules/core/src/test/java/org/apache/ignite/cache/store/GridCacheBalancingStoreSelfTest.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/cache/store/GridCacheBalancingStoreSelfTest.java
 
b/modules/core/src/test/java/org/apache/ignite/cache/store/GridCacheBalancingStoreSelfTest.java
index 38055dc..d53e275 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/cache/store/GridCacheBalancingStoreSelfTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/cache/store/GridCacheBalancingStoreSelfTest.java
@@ -114,7 +114,7 @@ public class GridCacheBalancingStoreSelfTest extends 
GridCommonAbstractTest {
     /**
      *
      */
-    private static class VerifyStore extends CacheStore<Integer, Integer> {
+    private static class VerifyStore implements CacheStore<Integer, Integer> {
         /** */
         private Lock[] locks;
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9cd987c5/modules/core/src/test/java/org/apache/ignite/cache/store/GridGeneratingTestStore.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/cache/store/GridGeneratingTestStore.java
 
b/modules/core/src/test/java/org/apache/ignite/cache/store/GridGeneratingTestStore.java
index 944320b..b7e2da7 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/cache/store/GridGeneratingTestStore.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/cache/store/GridGeneratingTestStore.java
@@ -29,7 +29,7 @@ import java.util.*;
 /**
  * Test store that generates objects on demand.
  */
-public class GridGeneratingTestStore extends CacheStore<String, String> {
+public class GridGeneratingTestStore implements CacheStore<String, String> {
     /** Number of entries to be generated. */
     private static final int DFLT_GEN_CNT = 100;
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9cd987c5/modules/core/src/test/java/org/apache/ignite/cache/store/jdbc/CacheJdbcPojoStoreTest.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/cache/store/jdbc/CacheJdbcPojoStoreTest.java
 
b/modules/core/src/test/java/org/apache/ignite/cache/store/jdbc/CacheJdbcPojoStoreTest.java
index 3c04ea4..e870fd6 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/cache/store/jdbc/CacheJdbcPojoStoreTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/cache/store/jdbc/CacheJdbcPojoStoreTest.java
@@ -111,7 +111,7 @@ public class CacheJdbcPojoStoreTest extends 
GridCommonAbstractTest {
     protected void inject(CacheAbstractJdbcStore store) throws Exception {
         getTestResources().inject(store);
 
-        GridTestUtils.setFieldValue(store, CacheStore.class, "ses", ses);
+        GridTestUtils.setFieldValue(store, CacheAbstractJdbcStore.class, 
"ses", ses);
 
         URL cfgUrl;
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9cd987c5/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheConfigurationConsistencySelfTest.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheConfigurationConsistencySelfTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheConfigurationConsistencySelfTest.java
index d2ea7d2..3bd42dc 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheConfigurationConsistencySelfTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheConfigurationConsistencySelfTest.java
@@ -1016,7 +1016,7 @@ public class GridCacheConfigurationConsistencySelfTest 
extends GridCommonAbstrac
     }
 
     /** */
-    private static class TestStore extends CacheStore<Object,Object> {
+    private static class TestStore implements CacheStore<Object,Object> {
         /** {@inheritDoc} */
         @Nullable @Override public Object load(Object key) {
             return null;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9cd987c5/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheGenericTestStore.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheGenericTestStore.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheGenericTestStore.java
index 6fabc87..5b7d130 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheGenericTestStore.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheGenericTestStore.java
@@ -34,7 +34,7 @@ import static javax.cache.Cache.*;
  * Test store.
  */
 @SuppressWarnings({"TypeParameterExtendsFinalClass"})
-public class GridCacheGenericTestStore<K, V> extends CacheStore<K, V> {
+public class GridCacheGenericTestStore<K, V> implements CacheStore<K, V> {
     /** Store. */
     private final Map<K, V> map = new ConcurrentHashMap<>();
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9cd987c5/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheLifecycleAwareSelfTest.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheLifecycleAwareSelfTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheLifecycleAwareSelfTest.java
index 52fae7c..9f4b8f2 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheLifecycleAwareSelfTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheLifecycleAwareSelfTest.java
@@ -53,7 +53,7 @@ public class GridCacheLifecycleAwareSelfTest extends 
GridAbstractLifecycleAwareS
 
     /**
      */
-    private static class TestStore extends CacheStore implements 
LifecycleAware {
+    private static class TestStore implements CacheStore, LifecycleAware {
         /** */
         private final TestLifecycleAware lifecycleAware = new 
TestLifecycleAware(CACHE_NAME);
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9cd987c5/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheStorePutxSelfTest.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheStorePutxSelfTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheStorePutxSelfTest.java
index c441b96..093ad0e 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheStorePutxSelfTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheStorePutxSelfTest.java
@@ -112,7 +112,7 @@ public class GridCacheStorePutxSelfTest extends 
GridCommonAbstractTest {
     }
 
     /** */
-    private static class TestStore extends CacheStore<Integer, Integer> {
+    private static class TestStore implements CacheStore<Integer, Integer> {
         /** {@inheritDoc} */
         @Nullable @Override public Integer load(Integer key) {
             loads.incrementAndGet();

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9cd987c5/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheTestStore.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheTestStore.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheTestStore.java
index 95b6d9b..3cd925a 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheTestStore.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheTestStore.java
@@ -24,6 +24,7 @@ import 
org.apache.ignite.internal.processors.cache.transactions.*;
 import org.apache.ignite.internal.util.*;
 import org.apache.ignite.internal.util.typedef.internal.*;
 import org.apache.ignite.lang.*;
+import org.apache.ignite.resources.*;
 import org.apache.ignite.testframework.*;
 import org.apache.ignite.transactions.*;
 import org.jetbrains.annotations.*;
@@ -39,7 +40,11 @@ import static junit.framework.Assert.*;
 /**
  * Test store.
  */
-public final class GridCacheTestStore extends CacheStore<Integer, String> {
+public final class GridCacheTestStore implements CacheStore<Integer, String> {
+    /** */
+    @CacheStoreSessionResource
+    private CacheStoreSession ses;
+
     /** Store. */
     private final Map<Integer, String> map;
 
@@ -318,6 +323,7 @@ public final class GridCacheTestStore extends 
CacheStore<Integer, String> {
 
     /**
      * @param ses Session.
+     * @param load {@code True} is {@link #loadAll method is called.}
      */
     private void checkTx(@Nullable CacheStoreSession ses, boolean load) {
         Transaction tx = ses != null ? ses.transaction() : null;
@@ -337,4 +343,11 @@ public final class GridCacheTestStore extends 
CacheStore<Integer, String> {
         if (tx0.dht() && !load)
             throw new IgniteException("Tx is DHT: " + tx);
     }
+
+    /**
+     * @return Store session.
+     */
+    private CacheStoreSession session() {
+        return ses;
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9cd987c5/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteTxStoreExceptionAbstractSelfTest.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteTxStoreExceptionAbstractSelfTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteTxStoreExceptionAbstractSelfTest.java
index 1634476..b378b97 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteTxStoreExceptionAbstractSelfTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteTxStoreExceptionAbstractSelfTest.java
@@ -596,7 +596,7 @@ public abstract class 
IgniteTxStoreExceptionAbstractSelfTest extends GridCacheAb
     /**
      *
      */
-    private static class TestStore extends CacheStore<Object, Object> {
+    private static class TestStore implements CacheStore<Object, Object> {
         /** Fail flag. */
         private volatile boolean fail;
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9cd987c5/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCrossCacheTxStoreSelfTest.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCrossCacheTxStoreSelfTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCrossCacheTxStoreSelfTest.java
index 544ffbf..89ac933 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCrossCacheTxStoreSelfTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCrossCacheTxStoreSelfTest.java
@@ -24,6 +24,7 @@ import org.apache.ignite.configuration.*;
 import org.apache.ignite.internal.*;
 import org.apache.ignite.internal.util.typedef.*;
 import org.apache.ignite.lang.*;
+import org.apache.ignite.resources.*;
 import org.apache.ignite.spi.communication.tcp.*;
 import org.apache.ignite.testframework.junits.common.*;
 import org.apache.ignite.transactions.*;
@@ -229,10 +230,14 @@ public class IgniteCrossCacheTxStoreSelfTest extends 
GridCommonAbstractTest {
     /**
      *
      */
-    private static class TestStore extends CacheStore<Object, Object> {
+    private static class TestStore implements CacheStore<Object, Object> {
         /** */
         private Queue<String> evts = new ConcurrentLinkedDeque<>();
 
+        /** Auto-injected store session. */
+        @CacheStoreSessionResource
+        private CacheStoreSession ses;
+
         /**
          *
          */
@@ -295,5 +300,12 @@ public class IgniteCrossCacheTxStoreSelfTest extends 
GridCommonAbstractTest {
 
             evts.add("deleteAll " + cacheName + " " + keys.size());
         }
+
+        /**
+         * @return Store session.
+         */
+        private CacheStoreSession session() {
+            return ses;
+        }
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9cd987c5/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/integration/IgniteCacheStoreSessionAbstractTest.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/integration/IgniteCacheStoreSessionAbstractTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/integration/IgniteCacheStoreSessionAbstractTest.java
index 055ca1b..749f468 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/integration/IgniteCacheStoreSessionAbstractTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/integration/IgniteCacheStoreSessionAbstractTest.java
@@ -23,6 +23,7 @@ import org.apache.ignite.configuration.*;
 import org.apache.ignite.internal.processors.cache.*;
 import org.apache.ignite.internal.util.typedef.*;
 import org.apache.ignite.lang.*;
+import org.apache.ignite.resources.*;
 import org.jetbrains.annotations.*;
 
 import javax.cache.*;
@@ -226,7 +227,15 @@ public abstract class IgniteCacheStoreSessionAbstractTest 
extends IgniteCacheAbs
     /**
      *
      */
-    private class TestStore extends CacheStore<Object, Object> {
+    private class TestStore implements CacheStore<Object, Object> {
+        /** Auto-injected store session. */
+        @CacheStoreSessionResource
+        private CacheStoreSession ses;
+
+        /** */
+        @IgniteInstanceResource
+        protected Ignite ignite;
+
         /** {@inheritDoc} */
         @Override public void loadCache(IgniteBiInClosure<Object, Object> clo, 
@Nullable Object... args) {
             log.info("Load cache [tx=" + session().transaction() + ']');
@@ -293,10 +302,17 @@ public abstract class IgniteCacheStoreSessionAbstractTest 
extends IgniteCacheAbs
         }
 
         /**
+         * @return Store session.
+         */
+        private CacheStoreSession session() {
+            return ses;
+        }
+
+        /**
          * @param mtd Called stored method.
          */
         private void checkSession(String mtd) {
-            assertNotNull(ignite());
+            assertNotNull(ignite);
 
             assertFalse(expData.isEmpty());
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9cd987c5/modules/core/src/test/java/org/apache/ignite/testframework/junits/cache/GridAbstractCacheStoreSelfTest.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/testframework/junits/cache/GridAbstractCacheStoreSelfTest.java
 
b/modules/core/src/test/java/org/apache/ignite/testframework/junits/cache/GridAbstractCacheStoreSelfTest.java
index 8682caa..ccb8b7e 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/testframework/junits/cache/GridAbstractCacheStoreSelfTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/testframework/junits/cache/GridAbstractCacheStoreSelfTest.java
@@ -410,7 +410,7 @@ public abstract class GridAbstractCacheStoreSelfTest<T 
extends CacheStore<Object
     protected void inject(T store) throws Exception {
         getTestResources().inject(store);
 
-        GridTestUtils.setFieldValue(store, CacheStore.class, "ses", ses);
+        GridTestUtils.setFieldValue(store, "ses", ses);
     }
 
     /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9cd987c5/modules/hibernate/src/main/java/org/apache/ignite/cache/store/hibernate/CacheHibernateBlobStore.java
----------------------------------------------------------------------
diff --git 
a/modules/hibernate/src/main/java/org/apache/ignite/cache/store/hibernate/CacheHibernateBlobStore.java
 
b/modules/hibernate/src/main/java/org/apache/ignite/cache/store/hibernate/CacheHibernateBlobStore.java
index 87e8816..b6a4155 100644
--- 
a/modules/hibernate/src/main/java/org/apache/ignite/cache/store/hibernate/CacheHibernateBlobStore.java
+++ 
b/modules/hibernate/src/main/java/org/apache/ignite/cache/store/hibernate/CacheHibernateBlobStore.java
@@ -188,6 +188,10 @@ public class CacheHibernateBlobStore<K, V> extends 
CacheStoreAdapter<K, V> {
     @LoggerResource
     private IgniteLogger log;
 
+    /** Auto-injected store session. */
+    @CacheStoreSessionResource
+    private CacheStoreSession ses;
+
     /** Ignite instance. */
     @IgniteInstanceResource
     private Ignite ignite;
@@ -591,4 +595,11 @@ public class CacheHibernateBlobStore<K, V> extends 
CacheStoreAdapter<K, V> {
 
         return ses != null ? ses.transaction() : null;
     }
+
+    /**
+     * @return Store session.
+     */
+    private CacheStoreSession session() {
+        return ses;
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9cd987c5/modules/visor-console/src/test/scala/org/apache/ignite/visor/commands/cache/VisorCacheClearCommandSpec.scala
----------------------------------------------------------------------
diff --git 
a/modules/visor-console/src/test/scala/org/apache/ignite/visor/commands/cache/VisorCacheClearCommandSpec.scala
 
b/modules/visor-console/src/test/scala/org/apache/ignite/visor/commands/cache/VisorCacheClearCommandSpec.scala
index 93c332f..13e7040 100644
--- 
a/modules/visor-console/src/test/scala/org/apache/ignite/visor/commands/cache/VisorCacheClearCommandSpec.scala
+++ 
b/modules/visor-console/src/test/scala/org/apache/ignite/visor/commands/cache/VisorCacheClearCommandSpec.scala
@@ -65,8 +65,8 @@ class VisorCacheClearCommandSpec extends 
VisorRuntimeBaseSpec(2) {
      * @param name Cache name.
      * @return Cache Configuration.
      */
-    def cacheConfig(@Nullable name: String): CacheConfiguration = {
-        val cfg = new CacheConfiguration
+    def cacheConfig(@Nullable name: String): CacheConfiguration[Object, 
Object] = {
+        val cfg = new CacheConfiguration[Object, Object]
 
         cfg.setCacheMode(REPLICATED)
         cfg.setAtomicityMode(TRANSACTIONAL)

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9cd987c5/modules/visor-console/src/test/scala/org/apache/ignite/visor/commands/cache/VisorCacheCommandSpec.scala
----------------------------------------------------------------------
diff --git 
a/modules/visor-console/src/test/scala/org/apache/ignite/visor/commands/cache/VisorCacheCommandSpec.scala
 
b/modules/visor-console/src/test/scala/org/apache/ignite/visor/commands/cache/VisorCacheCommandSpec.scala
index 4b1f9b8..94e9374 100644
--- 
a/modules/visor-console/src/test/scala/org/apache/ignite/visor/commands/cache/VisorCacheCommandSpec.scala
+++ 
b/modules/visor-console/src/test/scala/org/apache/ignite/visor/commands/cache/VisorCacheCommandSpec.scala
@@ -44,8 +44,8 @@ class VisorCacheCommandSpec extends VisorRuntimeBaseSpec(1) {
      * @param name Cache name.
      * @return Cache Configuration.
      */
-    def cacheConfig(@Nullable name: String): CacheConfiguration = {
-        val cfg = new CacheConfiguration
+    def cacheConfig(@Nullable name: String): CacheConfiguration[Object, 
Object] = {
+        val cfg = new CacheConfiguration[Object, Object]
 
         cfg.setCacheMode(REPLICATED)
         cfg.setAtomicityMode(TRANSACTIONAL)

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9cd987c5/modules/visor-console/src/test/scala/org/apache/ignite/visor/commands/cache/VisorCacheCompactCommandSpec.scala
----------------------------------------------------------------------
diff --git 
a/modules/visor-console/src/test/scala/org/apache/ignite/visor/commands/cache/VisorCacheCompactCommandSpec.scala
 
b/modules/visor-console/src/test/scala/org/apache/ignite/visor/commands/cache/VisorCacheCompactCommandSpec.scala
index ed3cf9c..ee184ad 100644
--- 
a/modules/visor-console/src/test/scala/org/apache/ignite/visor/commands/cache/VisorCacheCompactCommandSpec.scala
+++ 
b/modules/visor-console/src/test/scala/org/apache/ignite/visor/commands/cache/VisorCacheCompactCommandSpec.scala
@@ -64,8 +64,8 @@ class VisorCacheCompactCommandSpec extends 
VisorRuntimeBaseSpec(2) {
      * @param name Cache name.
      * @return Cache Configuration.
      */
-    def cacheConfig(@Nullable name: String): CacheConfiguration = {
-        val cfg = new CacheConfiguration
+    def cacheConfig(@Nullable name: String): CacheConfiguration[Object, 
Object] = {
+        val cfg = new CacheConfiguration[Object, Object]
 
         cfg.setCacheMode(REPLICATED)
         cfg.setName(name)

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9cd987c5/modules/visor-console/src/test/scala/org/apache/ignite/visor/commands/cswap/VisorCacheSwapCommandSpec.scala
----------------------------------------------------------------------
diff --git 
a/modules/visor-console/src/test/scala/org/apache/ignite/visor/commands/cswap/VisorCacheSwapCommandSpec.scala
 
b/modules/visor-console/src/test/scala/org/apache/ignite/visor/commands/cswap/VisorCacheSwapCommandSpec.scala
index 56a4bec..1bc3001 100644
--- 
a/modules/visor-console/src/test/scala/org/apache/ignite/visor/commands/cswap/VisorCacheSwapCommandSpec.scala
+++ 
b/modules/visor-console/src/test/scala/org/apache/ignite/visor/commands/cswap/VisorCacheSwapCommandSpec.scala
@@ -59,8 +59,8 @@ class VisorCacheSwapCommandSpec extends 
VisorRuntimeBaseSpec(2) {
      * @param name Cache name.
      * @return Cache Configuration.
      */
-    def cacheConfig(@Nullable name: String): CacheConfiguration = {
-        val cfg = new CacheConfiguration
+    def cacheConfig(@Nullable name: String): CacheConfiguration[Object, 
Object] = {
+        val cfg = new CacheConfiguration[Object, Object]
 
         cfg.setName(name)
         cfg.setCacheMode(CacheMode.PARTITIONED)

Reply via email to