You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sb...@apache.org on 2015/01/13 16:21:54 UTC
[4/7] incubator-ignite git commit: ignite-45: wip
ignite-45: wip
Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/5800a756
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/5800a756
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/5800a756
Branch: refs/heads/ignite-1
Commit: 5800a75660a534711388367ef9046afb4603d041
Parents: 5190b12
Author: Yakov Zhdanov <yz...@gridgain.com>
Authored: Mon Jan 12 09:35:30 2015 +0300
Committer: Yakov Zhdanov <yz...@gridgain.com>
Committed: Mon Jan 12 09:35:30 2015 +0300
----------------------------------------------------------------------
.../org/apache/ignite/IgniteCacheManager.java | 107 +++++++++++++---
.../processors/cache/IgniteCacheProxy.java | 9 +-
.../ignite/tck/TCKMBeanServerBuilder.java | 124 +++++++++++++++++++
3 files changed, 217 insertions(+), 23 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/5800a756/modules/core/src/main/java/org/apache/ignite/IgniteCacheManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/IgniteCacheManager.java b/modules/core/src/main/java/org/apache/ignite/IgniteCacheManager.java
index 2f0073f..376c982 100644
--- a/modules/core/src/main/java/org/apache/ignite/IgniteCacheManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/IgniteCacheManager.java
@@ -10,11 +10,14 @@
package org.apache.ignite;
import org.apache.ignite.configuration.*;
+import org.apache.ignite.lang.*;
import org.gridgain.grid.cache.*;
+import org.gridgain.grid.util.typedef.*;
import javax.cache.*;
import javax.cache.configuration.*;
import javax.cache.spi.*;
+import javax.management.*;
import java.net.*;
import java.util.*;
import java.util.concurrent.atomic.*;
@@ -24,7 +27,7 @@ import java.util.concurrent.atomic.*;
*/
public class IgniteCacheManager implements CacheManager {
/** */
- private final Map<String, Ignite> igniteMap = new HashMap<>();
+ private final Map<String, IgniteBiTuple<Ignite, IgniteCacheMXBean>> igniteMap = new HashMap<>();
/** */
private final URI uri;
@@ -45,7 +48,7 @@ public class IgniteCacheManager implements CacheManager {
* @param uri Uri.
* @param cachingProvider Caching provider.
* @param clsLdr Class loader.
- * @param props
+ * @param props Properties.
*/
public IgniteCacheManager(URI uri, CachingProvider cachingProvider, ClassLoader clsLdr, Properties props) {
this.uri = uri;
@@ -102,12 +105,14 @@ public class IgniteCacheManager implements CacheManager {
}
}
- Ignite ignite;
+ IgniteCache<K, V> res;
synchronized (igniteMap) {
if (igniteMap.containsKey(cacheName))
throw new CacheException("Cache already exists [cacheName=" + cacheName + ", manager=" + uri + ']');
+ Ignite ignite;
+
if (uri.equals(cachingProvider.getDefaultURI())) {
IgniteConfiguration cfg = new IgniteConfiguration();
cfg.setGridName("grid-for-" + cacheName);
@@ -126,26 +131,31 @@ public class IgniteCacheManager implements CacheManager {
else
throw new UnsupportedOperationException();
- igniteMap.put(cacheName, ignite);
+ res = ignite.jcache(cacheName);
+
+ igniteMap.put(cacheName, new T2<>(ignite, new IgniteCacheMXBean(res)));
}
- return ignite.jcache(cacheName);
+ if (((CompleteConfiguration)cacheCfg).isManagementEnabled())
+ enableManagement(cacheName, true);
+
+ return res;
}
/**
* @param cacheName Cache name.
*/
private <K, V> IgniteCache<K, V> findCache(String cacheName) {
- Ignite ignite;
+ IgniteBiTuple<Ignite, IgniteCacheMXBean> tuple;
synchronized (igniteMap) {
- ignite = igniteMap.get(cacheName);
+ tuple = igniteMap.get(cacheName);
}
- if (ignite == null)
+ if (tuple == null)
return null;
- return ignite.jcache(cacheName);
+ return tuple.get1().jcache(cacheName);
}
/** {@inheritDoc} */
@@ -202,8 +212,13 @@ public class IgniteCacheManager implements CacheManager {
*/
public boolean isManagedIgnite(Ignite ignite) {
synchronized (igniteMap) {
- return igniteMap.values().contains(ignite);
+ for (IgniteBiTuple<Ignite, IgniteCacheMXBean> tuple : igniteMap.values()) {
+ if (ignite.equals(tuple.get1()))
+ return true;
+ }
}
+
+ return false;
}
/** {@inheritDoc} */
@@ -213,19 +228,48 @@ public class IgniteCacheManager implements CacheManager {
if (cacheName == null)
throw new NullPointerException();
- Ignite ignite;
+ IgniteBiTuple<Ignite, IgniteCacheMXBean> tuple;
synchronized (igniteMap) {
- ignite = igniteMap.remove(cacheName);
+ tuple = igniteMap.remove(cacheName);
}
- if (ignite != null) {
+ if (tuple != null) {
try {
- ignite.close();
+ tuple.get1().close();
}
catch (Exception ignored) {
}
+
+ ObjectName objName = getObjectName(cacheName);
+
+ MBeanServer mBeanSrv = tuple.get1().configuration().getMBeanServer();
+
+ for (ObjectName n : mBeanSrv.queryNames(objName, null)) {
+ try {
+ mBeanSrv.unregisterMBean(n);
+ }
+ catch (Exception ignored) {
+
+ }
+ }
+ }
+ }
+
+ /**
+ * @param cacheName Cache name.
+ */
+ private ObjectName getObjectName(String cacheName) {
+ String mBeanName = "javax.cache:type=CacheConfiguration,CacheManager="
+ + uri.toString().replaceAll(",|:|=|\n", ".")
+ + ",Cache=" + cacheName.replaceAll(",|:|=|\n", ".");
+
+ try {
+ return new ObjectName(mBeanName);
+ }
+ catch (MalformedObjectNameException e) {
+ throw new CacheException("Failed to create MBean name: " + mBeanName, e);
}
}
@@ -236,7 +280,32 @@ public class IgniteCacheManager implements CacheManager {
if (cacheName == null)
throw new NullPointerException();
- throw new UnsupportedOperationException();
+ IgniteBiTuple<Ignite, IgniteCacheMXBean> tuple;
+
+ synchronized (igniteMap) {
+ tuple = igniteMap.get(cacheName);
+ }
+
+ ObjectName objName = getObjectName(cacheName);
+ MBeanServer mBeanSrv = tuple.get1().configuration().getMBeanServer();
+
+ try {
+ if (enabled) {
+ if(mBeanSrv.queryNames(objName, null).isEmpty())
+ mBeanSrv.registerMBean(tuple.get2(), objName);
+ }
+ else {
+ for (ObjectName n : mBeanSrv.queryNames(objName, null))
+ mBeanSrv.unregisterMBean(n);
+
+ }
+ }
+ catch (InstanceAlreadyExistsException | InstanceNotFoundException ignored) {
+
+ }
+ catch (MBeanRegistrationException | NotCompliantMBeanException e) {
+ throw new CacheException(e);
+ }
}
/** {@inheritDoc} */
@@ -260,15 +329,15 @@ public class IgniteCacheManager implements CacheManager {
/** {@inheritDoc} */
@Override public void close() {
if (closed.compareAndSet(false, true)) {
- Ignite[] ignites;
+ IgniteBiTuple<Ignite, IgniteCacheMXBean>[] ignites;
synchronized (igniteMap) {
- ignites = igniteMap.values().toArray(new Ignite[igniteMap.values().size()]);
+ ignites = igniteMap.values().toArray(new IgniteBiTuple[igniteMap.values().size()]);
}
- for (Ignite ignite : ignites) {
+ for (IgniteBiTuple<Ignite, IgniteCacheMXBean> tuple : ignites) {
try {
- ignite.close();
+ tuple.get1().close();
}
catch (Exception ignored) {
// Ignore any exceptions according to javadoc of javax.cache.CacheManager#close()
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/5800a756/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 7d0bf2d..2f47697 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
@@ -747,6 +747,7 @@ public class IgniteCacheProxy<K, V> extends IgniteAsyncSupportAdapter implements
/** {@inheritDoc} */
@Override public CacheManager getCacheManager() {
+ // TODO IGNITE-45 (Support start/close/destroy cache correctly)
IgniteCachingProvider provider = (IgniteCachingProvider)Caching.getCachingProvider(
IgniteCachingProvider.class.getName(),
IgniteCachingProvider.class.getClassLoader());
@@ -759,14 +760,14 @@ public class IgniteCacheProxy<K, V> extends IgniteAsyncSupportAdapter implements
/** {@inheritDoc} */
@Override public void close() {
- // TODO IGNITE-1.
- throw new UnsupportedOperationException();
+ // TODO IGNITE-45 (Support start/close/destroy cache correctly)
+ getCacheManager().destroyCache(getName());
}
/** {@inheritDoc} */
@Override public boolean isClosed() {
- // TODO IGNITE-1.
- throw new UnsupportedOperationException();
+ // TODO IGNITE-45 (Support start/close/destroy cache correctly)
+ return getCacheManager() == null;
}
/** {@inheritDoc} */
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/5800a756/modules/core/src/main/java/org/apache/ignite/tck/TCKMBeanServerBuilder.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/tck/TCKMBeanServerBuilder.java b/modules/core/src/main/java/org/apache/ignite/tck/TCKMBeanServerBuilder.java
new file mode 100644
index 0000000..8123504
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/tck/TCKMBeanServerBuilder.java
@@ -0,0 +1,124 @@
+/* @java.file.header */
+
+/* _________ _____ __________________ _____
+ * __ ____/___________(_)______ /__ ____/______ ____(_)_______
+ * _ / __ __ ___/__ / _ __ / _ / __ _ __ `/__ / __ __ \
+ * / /_/ / _ / _ / / /_/ / / /_/ / / /_/ / _ / _ / / /
+ * \____/ /_/ /_/ \_,__/ \____/ \__,_/ /_/ /_/ /_/
+ */
+
+package org.apache.ignite.tck;
+
+import com.sun.jmx.mbeanserver.*;
+
+import javax.management.*;
+
+/**
+ *
+ */
+public class TCKMBeanServerBuilder extends MBeanServerBuilder {
+ /** {@inheritDoc} */
+ @Override public MBeanServer newMBeanServer(String dfltDomain, MBeanServer outer, MBeanServerDelegate delegate) {
+ MBeanServerDelegate decoratingDelegate = new ServerDelegate(delegate);
+ return JmxMBeanServer.newMBeanServer(dfltDomain, outer,
+ decoratingDelegate, false);
+ }
+
+ /**
+ *
+ */
+ private static class ServerDelegate extends MBeanServerDelegate {
+ /** */
+ private final MBeanServerDelegate delegate;
+
+ /**
+ * Constructor
+ *
+ * @param delegate the provided delegate
+ */
+ ServerDelegate(MBeanServerDelegate delegate) {
+ this.delegate = delegate;
+ }
+
+ /** {@inheritDoc} */
+ @Override public String getSpecificationName() {
+ return delegate.getSpecificationName();
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public String getSpecificationVersion() {
+ return delegate.getSpecificationVersion();
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public String getSpecificationVendor() {
+ return delegate.getSpecificationVendor();
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public String getImplementationName() {
+ return delegate.getImplementationName();
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public String getImplementationVersion() {
+ return delegate.getImplementationVersion();
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public String getImplementationVendor() {
+ return delegate.getImplementationVendor();
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public MBeanNotificationInfo[] getNotificationInfo() {
+ return delegate.getNotificationInfo();
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public synchronized void addNotificationListener(NotificationListener listener,
+ NotificationFilter filter,
+ Object handback) throws
+ IllegalArgumentException {
+ delegate.addNotificationListener(listener, filter, handback);
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public synchronized void removeNotificationListener(NotificationListener
+ listener,
+ NotificationFilter
+ filter,
+ Object handback) throws
+ ListenerNotFoundException {
+ delegate.removeNotificationListener(listener, filter, handback);
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public synchronized void removeNotificationListener(NotificationListener
+ listener) throws
+ ListenerNotFoundException {
+ delegate.removeNotificationListener(listener);
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public void sendNotification(Notification notification) {
+ delegate.sendNotification(notification);
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public synchronized String getMBeanServerId() {
+ return System.getProperty("org.jsr107.tck.management.agentId");
+ }
+ }
+}