# IGNITE-421 MAke CacheManager use new start cache API.

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

Branch: refs/heads/ignite-421
Commit: e4e9c35123203b238e51de5bf78064cb68d11de2
Parents: cba2edf
Author: sevdokimov <sevdoki...@gridgain.com>
Authored: Wed Mar 11 14:28:25 2015 +0300
Committer: sevdokimov <sevdoki...@gridgain.com>
Committed: Wed Mar 11 14:28:25 2015 +0300

----------------------------------------------------------------------
 .../org/apache/ignite/cache/CacheManager.java   | 44 +++++++++++---------
 .../processors/cache/IgniteCacheProxy.java      | 20 +++++----
 2 files changed, 37 insertions(+), 27 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/e4e9c351/modules/core/src/main/java/org/apache/ignite/cache/CacheManager.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/cache/CacheManager.java 
b/modules/core/src/main/java/org/apache/ignite/cache/CacheManager.java
index b181f99..3658810 100644
--- a/modules/core/src/main/java/org/apache/ignite/cache/CacheManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/cache/CacheManager.java
@@ -22,7 +22,6 @@ import org.apache.ignite.configuration.*;
 import org.apache.ignite.internal.*;
 import org.apache.ignite.internal.mxbean.*;
 import org.apache.ignite.internal.processors.cache.*;
-import org.apache.ignite.internal.util.lang.*;
 import org.apache.ignite.internal.util.typedef.internal.*;
 
 import javax.cache.*;
@@ -118,12 +117,15 @@ public class CacheManager implements 
javax.cache.CacheManager {
         if (cacheName == null)
             throw new NullPointerException();
 
-        CacheConfiguration igniteCacheCfg;
+        if (getCache0(cacheName) != null)
+            throw new CacheException("Cache already exists [cacheName=" + 
cacheName + ", manager=" + uri + ']');
+
+        CacheConfiguration<K, V> igniteCacheCfg;
 
         if (cacheCfg instanceof CompleteConfiguration)
-            igniteCacheCfg = new 
CacheConfiguration((CompleteConfiguration)cacheCfg);
+            igniteCacheCfg = new 
CacheConfiguration<>((CompleteConfiguration<K, V>)cacheCfg);
         else {
-            igniteCacheCfg = new CacheConfiguration();
+            igniteCacheCfg = new CacheConfiguration<>();
 
             igniteCacheCfg.setTypes(cacheCfg.getKeyType(), 
cacheCfg.getValueType());
             igniteCacheCfg.setStoreValueBytes(cacheCfg.isStoreByValue());
@@ -131,17 +133,7 @@ public class CacheManager implements 
javax.cache.CacheManager {
 
         igniteCacheCfg.setName(cacheName);
 
-        IgniteInternalFuture<?> fut = 
ignite.context().cache().dynamicStartCache(igniteCacheCfg, new 
GridNodePredicate(
-            Collections.singleton(ignite.getLocalNodeId())));
-
-        try {
-            fut.get();
-        }
-        catch (IgniteCheckedException e) {
-            throw CU.convertToCacheException(e);
-        }
-
-        IgniteCache<K, V> res = ignite.jcache(cacheName);
+        IgniteCache<K, V> res = ignite.createCache(igniteCacheCfg);
 
         ((IgniteCacheProxy<K, V>)res).setCacheManager(this);
 
@@ -161,7 +153,7 @@ public class CacheManager implements 
javax.cache.CacheManager {
     @Override public <K, V> Cache<K, V> getCache(String cacheName, Class<K> 
keyType, Class<V> valType) {
         ensureNotClosed();
 
-        Cache<K, V> cache = ignite.jcache(cacheName);
+        Cache<K, V> cache = getCache0(cacheName);
 
         if (cache != null) {
             
if(!keyType.isAssignableFrom(cache.getConfiguration(Configuration.class).getKeyType()))
@@ -178,7 +170,7 @@ public class CacheManager implements 
javax.cache.CacheManager {
     @Override public <K, V> Cache<K, V> getCache(String cacheName) {
         ensureNotClosed();
 
-        IgniteCache<K, V> cache = ignite.jcache(cacheName);
+        IgniteCache<K, V> cache = getCache0(cacheName);
 
         if (cache != null) {
             if(cache.getConfiguration(Configuration.class).getKeyType() != 
Object.class)
@@ -191,6 +183,18 @@ public class CacheManager implements 
javax.cache.CacheManager {
         return cache;
     }
 
+    /**
+     * @param cacheName Cache name.
+     */
+    private <K, V> IgniteCache<K, V> getCache0(String cacheName) {
+        try {
+            return ignite.jcache(cacheName);
+        }
+        catch (IllegalArgumentException ignored) {
+            return null;
+        }
+    }
+
     /** {@inheritDoc} */
     @Override public Iterable<String> getCacheNames() {
         if (isClosed())
@@ -212,7 +216,7 @@ public class CacheManager implements 
javax.cache.CacheManager {
         if (cacheName == null)
             throw new NullPointerException();
 
-        IgniteCache<?, ?> cache = ignite.jcache(cacheName);
+        IgniteCache<?, ?> cache = getCache0(cacheName);
 
         if (cache != null)
             cache.close();
@@ -241,7 +245,7 @@ public class CacheManager implements 
javax.cache.CacheManager {
         if (cacheName == null)
             throw new NullPointerException();
 
-        IgniteCache<?, ?> cache = ignite.jcache(cacheName);
+        IgniteCache<?, ?> cache = getCache0(cacheName);
 
         if (cache == null)
             throw new CacheException("Cache not found: " + cacheName);
@@ -261,7 +265,7 @@ public class CacheManager implements 
javax.cache.CacheManager {
         if (cacheName == null)
             throw new NullPointerException();
 
-        IgniteCache<?, ?> cache = ignite.jcache(cacheName);
+        IgniteCache<?, ?> cache = getCache0(cacheName);
 
         if (cache == null)
             throw new CacheException("Cache not found: " + cacheName);

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/e4e9c351/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxy.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxy.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxy.java
index 030e53a..4d5f955 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxy.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxy.java
@@ -19,6 +19,7 @@ package org.apache.ignite.internal.processors.cache;
 
 import org.apache.ignite.*;
 import org.apache.ignite.cache.*;
+import org.apache.ignite.cache.CacheManager;
 import org.apache.ignite.cache.query.*;
 import org.apache.ignite.cluster.*;
 import org.apache.ignite.configuration.*;
@@ -40,6 +41,7 @@ import javax.cache.integration.*;
 import javax.cache.processor.*;
 import java.io.*;
 import java.util.*;
+import java.util.concurrent.atomic.*;
 import java.util.concurrent.locks.*;
 
 /**
@@ -66,6 +68,9 @@ public class IgniteCacheProxy<K, V> extends 
AsyncSupportAdapter<IgniteCache<K, V
     /** */
     private CacheManager cacheMgr;
 
+    /** */
+    private final AtomicBoolean closed = new AtomicBoolean();
+
     /**
      * Empty constructor required for {@link Externalizable}.
      */
@@ -1239,18 +1244,19 @@ public class IgniteCacheProxy<K, V> extends 
AsyncSupportAdapter<IgniteCache<K, V
 
     /** {@inheritDoc} */
     @Override public void close() {
-        try {
-            ctx.kernalContext().cache().dynamicStopCache(ctx.name()).get();
-        }
-        catch (IgniteCheckedException e) {
-            throw new CacheException(e);
+        if (closed.compareAndSet(false, true)) {
+            try {
+                ctx.kernalContext().cache().dynamicStopCache(ctx.name()).get();
+            }
+            catch (IgniteCheckedException e) {
+                throw new CacheException(e);
+            }
         }
     }
 
     /** {@inheritDoc} */
     @Override public boolean isClosed() {
-        // TODO IGNITE-45 (Support start/close/destroy cache correctly)
-        return cacheMgr != null && cacheMgr.isClosed();
+        return closed.get() || cacheMgr != null && cacheMgr.isClosed();
     }
 
     /**

Reply via email to