diff options
author | lresende <lresende@13f79535-47bb-0310-9956-ffa450edef68> | 2009-11-20 23:53:35 +0000 |
---|---|---|
committer | lresende <lresende@13f79535-47bb-0310-9956-ffa450edef68> | 2009-11-20 23:53:35 +0000 |
commit | a3c48da9bb8971497d414f86e352123d95b9c3da (patch) | |
tree | fdf0f3636b65946c061c8b2e89d657b488be274e /java/sca/modules/endpoint-zookeeper/src/main/java/org/apache/tuscany/sca/endpoint/zookeeper/AbstractDistributedMap.java | |
parent | cc7496466097c3cb8e793ebf3e332b025705aaa7 (diff) |
Moving 2.x trunk
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@882795 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java/sca/modules/endpoint-zookeeper/src/main/java/org/apache/tuscany/sca/endpoint/zookeeper/AbstractDistributedMap.java')
-rw-r--r-- | java/sca/modules/endpoint-zookeeper/src/main/java/org/apache/tuscany/sca/endpoint/zookeeper/AbstractDistributedMap.java | 297 |
1 files changed, 0 insertions, 297 deletions
diff --git a/java/sca/modules/endpoint-zookeeper/src/main/java/org/apache/tuscany/sca/endpoint/zookeeper/AbstractDistributedMap.java b/java/sca/modules/endpoint-zookeeper/src/main/java/org/apache/tuscany/sca/endpoint/zookeeper/AbstractDistributedMap.java deleted file mode 100644 index d5b8e74631..0000000000 --- a/java/sca/modules/endpoint-zookeeper/src/main/java/org/apache/tuscany/sca/endpoint/zookeeper/AbstractDistributedMap.java +++ /dev/null @@ -1,297 +0,0 @@ -/* - * 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.tuscany.sca.endpoint.zookeeper; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; -import java.io.ObjectStreamClass; -import java.util.AbstractMap; -import java.util.AbstractSet; -import java.util.Collection; -import java.util.Collections; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.apache.zookeeper.CreateMode; -import org.apache.zookeeper.KeeperException; -import org.apache.zookeeper.WatchedEvent; -import org.apache.zookeeper.Watcher; -import org.apache.zookeeper.ZooKeeper; -import org.apache.zookeeper.KeeperException.Code; -import org.apache.zookeeper.ZooDefs.Ids; -import org.apache.zookeeper.data.Stat; -import org.oasisopen.sca.ServiceRuntimeException; - -/** - * - */ -public class AbstractDistributedMap<V> extends AbstractMap<String, V> implements Map<String, V>, Watcher { - protected ZooKeeper zooKeeper; - protected ClassLoader classLoader; - protected String root; - - /** - * @param zooKeeper - * @param root - * @param classLoader - */ - public AbstractDistributedMap(ZooKeeper zooKeeper, String root, ClassLoader classLoader) { - super(); - this.zooKeeper = zooKeeper; - this.root = root; - this.classLoader = classLoader; - } - - public void start() { - // FIXME: - this.zooKeeper.register(this); - try { - String path = getPath(root); - Stat stat = zooKeeper.exists(path, false); - if (stat == null) { - zooKeeper.create(path, new byte[0], Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); - } - } catch (Exception e) { - throw new IllegalArgumentException(e); - } - } - - @Override - public Set<Map.Entry<String, V>> entrySet() { - String path = getPath(root); - List<String> children = Collections.emptyList(); - try { - try { - children = zooKeeper.getChildren(path, false); - } catch (KeeperException e) { - if (e.code() == Code.NONODE) { - return Collections.emptySet(); - } else { - throw e; - } - } - } catch (Throwable e) { - throw new ServiceRuntimeException(e); - } - return new EntrySet(children); - } - - protected String getName(Object key) { - String name = String.valueOf(key); - name = name.replace("$", "$$"); - return name.replace('/', '$'); - } - - public String getPath(String... uris) { - StringBuffer buffer = new StringBuffer(); - for (String uri : uris) { - buffer.append('/').append(getName(uri)); - } - return buffer.toString(); - } - - protected byte[] serialize(V value) throws IOException { - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - ObjectOutputStream oos = new ObjectOutputStream(bos); - oos.writeObject(value); - oos.close(); - return bos.toByteArray(); - } - - protected V deserialize(byte[] bytes, final ClassLoader classLoader) throws IOException, ClassNotFoundException { - ByteArrayInputStream bis = new ByteArrayInputStream(bytes); - ObjectInputStream ois = new ObjectInputStream(bis) { - protected Class<?> resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException { - ClassLoader loader = classLoader; - if (loader == null) { - loader = Thread.currentThread().getContextClassLoader(); - } - try { - return Class.forName(desc.getName(), false, loader); - } catch (ClassNotFoundException e) { - return super.resolveClass(desc); - } - } - }; - return (V)ois.readObject(); - } - - @Override - public V get(Object key) { - String path = getPath(root, getName(key)); - return getData(path); - } - - protected V getData(String path) { - try { - Stat stat = new Stat(); - byte[] data = zooKeeper.getData(path, false, stat); - return deserialize(data, classLoader); - } catch (KeeperException e) { - if (e.code() == Code.NONODE) { - return null; - } else { - throw new ServiceRuntimeException(e); - } - } catch (Throwable e) { - throw new ServiceRuntimeException(e); - } - - } - - @Override - public V put(String key, V value) { - try { - String path = getPath(root, getName(key)); - Stat stat = new Stat(); - byte[] data = serialize(value); - - try { - byte[] oldData = zooKeeper.getData(path, false, stat); - zooKeeper.setData(path, data, -1); - return deserialize(oldData, classLoader); - } catch (KeeperException e) { - if (e.code() == Code.NONODE) { - zooKeeper.create(path, data, Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL); - return null; - } else { - throw e; - } - } - } catch (Throwable e) { - throw new ServiceRuntimeException(e); - } - - } - - @Override - public V remove(Object key) { - try { - String path = getPath(root, getName(key)); - try { - Stat stat = new Stat(); - byte[] oldData = zooKeeper.getData(path, false, stat); - zooKeeper.delete(path, -1); - return deserialize(oldData, classLoader); - } catch (KeeperException e) { - if (e.code() == Code.NONODE) { - return null; - } else { - throw e; - } - } - } catch (Throwable e) { - throw new ServiceRuntimeException(e); - } - - } - - private class MapEntry implements Map.Entry<String, V> { - private String key; - - /** - * @param key - */ - public MapEntry(String key) { - super(); - this.key = key; - } - - public String getKey() { - return key; - } - - public V getValue() { - try { - try { - byte[] data = zooKeeper.getData(getPath(root, getName(key)), false, new Stat()); - return deserialize(data, classLoader); - } catch (KeeperException e) { - if (e.code() == Code.NONODE) { - return null; - } else { - throw e; - } - } - } catch (Throwable e) { - throw new ServiceRuntimeException(e); - } - } - - public V setValue(V value) { - return put(key, value); - } - } - - private class EntrySet extends AbstractSet<Map.Entry<String, V>> { - private final int size; - private final Iterator<String> childrenIterator; - - /** - * @param size - * @param childrenIterator - */ - public EntrySet(Collection<String> children) { - super(); - this.size = children.size(); - this.childrenIterator = children.iterator(); - } - - @Override - public Iterator<Map.Entry<String, V>> iterator() { - return new Iterator<Map.Entry<String, V>>() { - private String path; - - public boolean hasNext() { - return childrenIterator.hasNext(); - } - - public Map.Entry<String, V> next() { - path = childrenIterator.next(); - return new MapEntry(path); - } - - public void remove() { - childrenIterator.remove(); - try { - zooKeeper.delete(getPath(root, path), -1); - } catch (Throwable e) { - throw new ServiceRuntimeException(e); - } - } - }; - - } - - @Override - public int size() { - return size; - } - } - - public void process(WatchedEvent event) { - System.out.println(event); - } -} |