Completed move to new configuration. Connection specs are now fully specified 
in the server via configuration. Clients create projections by name only.


Project: http://git-wip-us.apache.org/repos/asf/curator/repo
Commit: http://git-wip-us.apache.org/repos/asf/curator/commit/530010d9
Tree: http://git-wip-us.apache.org/repos/asf/curator/tree/530010d9
Diff: http://git-wip-us.apache.org/repos/asf/curator/diff/530010d9

Branch: refs/heads/curator-rpc
Commit: 530010d902cb8a2ff09ffe66048e9f11a0650cb1
Parents: e5ecbcd
Author: randgalt <randg...@apache.org>
Authored: Wed May 28 20:35:03 2014 -0500
Committer: randgalt <randg...@apache.org>
Committed: Wed May 28 20:35:03 2014 -0500

----------------------------------------------------------------------
 .../curator/x/rpc/CuratorProjectionServer.java  |   2 +-
 .../x/rpc/connections/ConnectionManager.java    |  48 ++--
 .../projection/CuratorProjectionService.java    |   9 +-
 .../idl/projection/CuratorProjectionSpec.java   |  26 --
 curator-x-rpc/src/main/thrift/curator.thrift    |   5 +-
 .../generated/CuratorProjectionSpec.java        | 280 -------------------
 .../curator/generated/CuratorService.java       | 139 +++++----
 .../org/apache/curator/x/rpc/TestClient.java    |   3 +-
 .../org/apache/curator/x/rpc/TestServer.java    |  13 +
 .../src/test/resources/configuration/test.json  |  14 +
 10 files changed, 130 insertions(+), 409 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/curator/blob/530010d9/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/CuratorProjectionServer.java
----------------------------------------------------------------------
diff --git 
a/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/CuratorProjectionServer.java
 
b/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/CuratorProjectionServer.java
index e8ebfc5..0ab490b 100644
--- 
a/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/CuratorProjectionServer.java
+++ 
b/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/CuratorProjectionServer.java
@@ -71,7 +71,7 @@ public class CuratorProjectionServer
         }
         else
         {
-            System.out.println("First argument is not a file. Treating the 
command line as a json object");
+            System.out.println("First argument is not a file. Treating the 
command line as a json/yaml object");
             configurationSource = args[0];
         }
 

http://git-wip-us.apache.org/repos/asf/curator/blob/530010d9/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/connections/ConnectionManager.java
----------------------------------------------------------------------
diff --git 
a/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/connections/ConnectionManager.java
 
b/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/connections/ConnectionManager.java
index b101c6d..21fe762 100644
--- 
a/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/connections/ConnectionManager.java
+++ 
b/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/connections/ConnectionManager.java
@@ -7,12 +7,14 @@ import com.google.common.cache.RemovalListener;
 import com.google.common.cache.RemovalNotification;
 import com.google.common.collect.ImmutableMap;
 import org.apache.curator.framework.CuratorFramework;
+import org.apache.curator.utils.ThreadUtils;
 import org.apache.curator.x.rpc.configuration.ConnectionConfiguration;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import java.io.Closeable;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicReference;
 
@@ -20,8 +22,11 @@ public class ConnectionManager implements Closeable
 {
     private final Logger log = LoggerFactory.getLogger(getClass());
     private final Cache<String, CuratorEntry> cache;
-    private final Map<String, CuratorFramework> clients;
     private final AtomicReference<State> state = new 
AtomicReference<State>(State.LATENT);
+    private final Map<String, ConnectionConfiguration> connections;
+    private final ScheduledExecutorService service = 
ThreadUtils.newSingleThreadScheduledExecutor("ConnectionManager");
+
+    private static final int FORCED_CLEANUP_SECONDS = 30;
 
     private enum State
     {
@@ -32,6 +37,8 @@ public class ConnectionManager implements Closeable
 
     public ConnectionManager(List<ConnectionConfiguration> connections, long 
expirationMs)
     {
+        this.connections = buildConnectionsMap(connections);
+
         RemovalListener<String, CuratorEntry> listener = new 
RemovalListener<String, CuratorEntry>()
         {
             @SuppressWarnings("NullableProblems")
@@ -50,22 +57,22 @@ public class ConnectionManager implements Closeable
                 }
             }
         };
-        cache = CacheBuilder
-            .newBuilder()
-            .expireAfterAccess(expirationMs, TimeUnit.MILLISECONDS)
-            .removalListener(listener)
-            .build();
-
-        clients = buildClients(connections);
+        cache = CacheBuilder.newBuilder().expireAfterAccess(expirationMs, 
TimeUnit.MILLISECONDS).removalListener(listener).build();
     }
 
     public void start()
     {
         Preconditions.checkState(state.compareAndSet(State.LATENT, 
State.STARTED), "Already started");
-        for ( CuratorFramework client : clients.values() )
+
+        Runnable cleanup = new Runnable()
         {
-            client.start();
-        }
+            @Override
+            public void run()
+            {
+                cache.cleanUp();
+            }
+        };
+        service.scheduleWithFixedDelay(cleanup, FORCED_CLEANUP_SECONDS, 30, 
TimeUnit.SECONDS);
     }
 
     @Override
@@ -73,16 +80,19 @@ public class ConnectionManager implements Closeable
     {
         if ( state.compareAndSet(State.STARTED, State.CLOSED) )
         {
+            service.shutdownNow();
             cache.invalidateAll();
             cache.cleanUp();
-
-            for ( CuratorFramework client : clients.values() )
-            {
-                client.close();
-            }
         }
     }
 
+    public CuratorFramework newConnection(String name)
+    {
+        ConnectionConfiguration configuration = connections.get(name);
+        Preconditions.checkNotNull(configuration, "No connection configuration 
with that name was found: " + name);
+        return configuration.build();
+    }
+
     public void add(String id, CuratorFramework client)
     {
         Preconditions.checkState(state.get() == State.STARTED, "Not started");
@@ -101,14 +111,14 @@ public class ConnectionManager implements Closeable
         return cache.asMap().remove(id);
     }
 
-    private Map<String, CuratorFramework> 
buildClients(List<ConnectionConfiguration> connections)
+    private Map<String, ConnectionConfiguration> 
buildConnectionsMap(List<ConnectionConfiguration> connections)
     {
         Preconditions.checkArgument(connections.size() > 0, "You must have at 
least one connection configured");
 
-        ImmutableMap.Builder<String, CuratorFramework> builder = 
ImmutableMap.builder();
+        ImmutableMap.Builder<String, ConnectionConfiguration> builder = 
ImmutableMap.builder();
         for ( ConnectionConfiguration configuration : connections )
         {
-            builder.put(configuration.getName(), configuration.build());
+            builder.put(configuration.getName(), configuration);
         }
         return builder.build();
     }

http://git-wip-us.apache.org/repos/asf/curator/blob/530010d9/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/idl/projection/CuratorProjectionService.java
----------------------------------------------------------------------
diff --git 
a/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/idl/projection/CuratorProjectionService.java
 
b/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/idl/projection/CuratorProjectionService.java
index b76730d..880f290 100644
--- 
a/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/idl/projection/CuratorProjectionService.java
+++ 
b/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/idl/projection/CuratorProjectionService.java
@@ -22,7 +22,6 @@ package org.apache.curator.x.rpc.idl.projection;
 import com.facebook.swift.service.ThriftMethod;
 import com.facebook.swift.service.ThriftService;
 import org.apache.curator.framework.CuratorFramework;
-import org.apache.curator.framework.CuratorFrameworkFactory;
 import org.apache.curator.framework.api.BackgroundCallback;
 import org.apache.curator.framework.api.Backgroundable;
 import org.apache.curator.framework.api.Compressible;
@@ -33,10 +32,9 @@ import org.apache.curator.framework.api.PathAndBytesable;
 import org.apache.curator.framework.recipes.locks.InterProcessSemaphoreMutex;
 import org.apache.curator.framework.state.ConnectionState;
 import org.apache.curator.framework.state.ConnectionStateListener;
-import org.apache.curator.retry.RetryOneTime;
 import org.apache.curator.x.rpc.connections.Closer;
-import org.apache.curator.x.rpc.connections.CuratorEntry;
 import org.apache.curator.x.rpc.connections.ConnectionManager;
+import org.apache.curator.x.rpc.connections.CuratorEntry;
 import org.apache.curator.x.rpc.idl.event.RpcCuratorEvent;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -55,9 +53,10 @@ public class CuratorProjectionService
     }
 
     @ThriftMethod
-    public CuratorProjection newCuratorProjection(CuratorProjectionSpec spec)  
 // TODO
+    public CuratorProjection newCuratorProjection(String connectionName)
     {
-        CuratorFramework client = 
CuratorFrameworkFactory.newClient("localhost:2181", new RetryOneTime(1));
+        CuratorFramework client = 
connectionManager.newConnection(connectionName);
+
         String id = UUID.randomUUID().toString();
         client.start();
         connectionManager.add(id, client);

http://git-wip-us.apache.org/repos/asf/curator/blob/530010d9/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/idl/projection/CuratorProjectionSpec.java
----------------------------------------------------------------------
diff --git 
a/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/idl/projection/CuratorProjectionSpec.java
 
b/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/idl/projection/CuratorProjectionSpec.java
deleted file mode 100644
index b79990c..0000000
--- 
a/curator-x-rpc/src/main/java/org/apache/curator/x/rpc/idl/projection/CuratorProjectionSpec.java
+++ /dev/null
@@ -1,26 +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.curator.x.rpc.idl.projection;
-
-import com.facebook.swift.codec.ThriftStruct;
-
-@ThriftStruct
-public class CuratorProjectionSpec
-{
-}

http://git-wip-us.apache.org/repos/asf/curator/blob/530010d9/curator-x-rpc/src/main/thrift/curator.thrift
----------------------------------------------------------------------
diff --git a/curator-x-rpc/src/main/thrift/curator.thrift 
b/curator-x-rpc/src/main/thrift/curator.thrift
index b03cc66..491753b 100644
--- a/curator-x-rpc/src/main/thrift/curator.thrift
+++ b/curator-x-rpc/src/main/thrift/curator.thrift
@@ -33,9 +33,6 @@ struct CuratorProjection {
   1: string id;
 }
 
-struct CuratorProjectionSpec {
-}
-
 struct GenericProjection {
   1: string id;
 }
@@ -88,7 +85,7 @@ service CuratorService {
   void closeCuratorProjection(1: CuratorProjection projection);
   bool closeGenericProjection(1: CuratorProjection curatorProjection, 2: 
GenericProjection genericProjection);
   string create(1: CuratorProjection projection, 2: CreateSpec createSpec);
-  CuratorProjection newCuratorProjection(1: CuratorProjectionSpec spec);
+  CuratorProjection newCuratorProjection(1: string connectionName);
 }
 
 service EventService {

http://git-wip-us.apache.org/repos/asf/curator/blob/530010d9/curator-x-rpc/src/test/java/org/apache/curator/generated/CuratorProjectionSpec.java
----------------------------------------------------------------------
diff --git 
a/curator-x-rpc/src/test/java/org/apache/curator/generated/CuratorProjectionSpec.java
 
b/curator-x-rpc/src/test/java/org/apache/curator/generated/CuratorProjectionSpec.java
deleted file mode 100644
index 1171cc9..0000000
--- 
a/curator-x-rpc/src/test/java/org/apache/curator/generated/CuratorProjectionSpec.java
+++ /dev/null
@@ -1,280 +0,0 @@
-/**
- * Autogenerated by Thrift Compiler (0.9.1)
- *
- * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
- *  @generated
- */
-package org.apache.curator.generated;
-
-import org.apache.thrift.scheme.IScheme;
-import org.apache.thrift.scheme.SchemeFactory;
-import org.apache.thrift.scheme.StandardScheme;
-
-import org.apache.thrift.scheme.TupleScheme;
-import org.apache.thrift.protocol.TTupleProtocol;
-import org.apache.thrift.protocol.TProtocolException;
-import org.apache.thrift.EncodingUtils;
-import org.apache.thrift.TException;
-import org.apache.thrift.async.AsyncMethodCallback;
-import org.apache.thrift.server.AbstractNonblockingServer.*;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Map;
-import java.util.HashMap;
-import java.util.EnumMap;
-import java.util.Set;
-import java.util.HashSet;
-import java.util.EnumSet;
-import java.util.Collections;
-import java.util.BitSet;
-import java.nio.ByteBuffer;
-import java.util.Arrays;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class CuratorProjectionSpec implements 
org.apache.thrift.TBase<CuratorProjectionSpec, CuratorProjectionSpec._Fields>, 
java.io.Serializable, Cloneable, Comparable<CuratorProjectionSpec> {
-  private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new 
org.apache.thrift.protocol.TStruct("CuratorProjectionSpec");
-
-
-  private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = 
new HashMap<Class<? extends IScheme>, SchemeFactory>();
-  static {
-    schemes.put(StandardScheme.class, new 
CuratorProjectionSpecStandardSchemeFactory());
-    schemes.put(TupleScheme.class, new 
CuratorProjectionSpecTupleSchemeFactory());
-  }
-
-
-  /** The set of fields this struct contains, along with convenience methods 
for finding and manipulating them. */
-  public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-;
-
-    private static final Map<String, _Fields> byName = new HashMap<String, 
_Fields>();
-
-    static {
-      for (_Fields field : EnumSet.allOf(_Fields.class)) {
-        byName.put(field.getFieldName(), field);
-      }
-    }
-
-    /**
-     * Find the _Fields constant that matches fieldId, or null if its not 
found.
-     */
-    public static _Fields findByThriftId(int fieldId) {
-      switch(fieldId) {
-        default:
-          return null;
-      }
-    }
-
-    /**
-     * Find the _Fields constant that matches fieldId, throwing an exception
-     * if it is not found.
-     */
-    public static _Fields findByThriftIdOrThrow(int fieldId) {
-      _Fields fields = findByThriftId(fieldId);
-      if (fields == null) throw new IllegalArgumentException("Field " + 
fieldId + " doesn't exist!");
-      return fields;
-    }
-
-    /**
-     * Find the _Fields constant that matches name, or null if its not found.
-     */
-    public static _Fields findByName(String name) {
-      return byName.get(name);
-    }
-
-    private final short _thriftId;
-    private final String _fieldName;
-
-    _Fields(short thriftId, String fieldName) {
-      _thriftId = thriftId;
-      _fieldName = fieldName;
-    }
-
-    public short getThriftFieldId() {
-      return _thriftId;
-    }
-
-    public String getFieldName() {
-      return _fieldName;
-    }
-  }
-  public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> 
metaDataMap;
-  static {
-    Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new 
EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
-    metaDataMap = Collections.unmodifiableMap(tmpMap);
-    
org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(CuratorProjectionSpec.class,
 metaDataMap);
-  }
-
-  public CuratorProjectionSpec() {
-  }
-
-  /**
-   * Performs a deep copy on <i>other</i>.
-   */
-  public CuratorProjectionSpec(CuratorProjectionSpec other) {
-  }
-
-  public CuratorProjectionSpec deepCopy() {
-    return new CuratorProjectionSpec(this);
-  }
-
-  @Override
-  public void clear() {
-  }
-
-  public void setFieldValue(_Fields field, Object value) {
-    switch (field) {
-    }
-  }
-
-  public Object getFieldValue(_Fields field) {
-    switch (field) {
-    }
-    throw new IllegalStateException();
-  }
-
-  /** Returns true if field corresponding to fieldID is set (has been assigned 
a value) and false otherwise */
-  public boolean isSet(_Fields field) {
-    if (field == null) {
-      throw new IllegalArgumentException();
-    }
-
-    switch (field) {
-    }
-    throw new IllegalStateException();
-  }
-
-  @Override
-  public boolean equals(Object that) {
-    if (that == null)
-      return false;
-    if (that instanceof CuratorProjectionSpec)
-      return this.equals((CuratorProjectionSpec)that);
-    return false;
-  }
-
-  public boolean equals(CuratorProjectionSpec that) {
-    if (that == null)
-      return false;
-
-    return true;
-  }
-
-  @Override
-  public int hashCode() {
-    return 0;
-  }
-
-  @Override
-  public int compareTo(CuratorProjectionSpec other) {
-    if (!getClass().equals(other.getClass())) {
-      return getClass().getName().compareTo(other.getClass().getName());
-    }
-
-    int lastComparison = 0;
-
-    return 0;
-  }
-
-  public _Fields fieldForId(int fieldId) {
-    return _Fields.findByThriftId(fieldId);
-  }
-
-  public void read(org.apache.thrift.protocol.TProtocol iprot) throws 
org.apache.thrift.TException {
-    schemes.get(iprot.getScheme()).getScheme().read(iprot, this);
-  }
-
-  public void write(org.apache.thrift.protocol.TProtocol oprot) throws 
org.apache.thrift.TException {
-    schemes.get(oprot.getScheme()).getScheme().write(oprot, this);
-  }
-
-  @Override
-  public String toString() {
-    StringBuilder sb = new StringBuilder("CuratorProjectionSpec(");
-    boolean first = true;
-
-    sb.append(")");
-    return sb.toString();
-  }
-
-  public void validate() throws org.apache.thrift.TException {
-    // check for required fields
-    // check for sub-struct validity
-  }
-
-  private void writeObject(java.io.ObjectOutputStream out) throws 
java.io.IOException {
-    try {
-      write(new org.apache.thrift.protocol.TCompactProtocol(new 
org.apache.thrift.transport.TIOStreamTransport(out)));
-    } catch (org.apache.thrift.TException te) {
-      throw new java.io.IOException(te);
-    }
-  }
-
-  private void readObject(java.io.ObjectInputStream in) throws 
java.io.IOException, ClassNotFoundException {
-    try {
-      read(new org.apache.thrift.protocol.TCompactProtocol(new 
org.apache.thrift.transport.TIOStreamTransport(in)));
-    } catch (org.apache.thrift.TException te) {
-      throw new java.io.IOException(te);
-    }
-  }
-
-  private static class CuratorProjectionSpecStandardSchemeFactory implements 
SchemeFactory {
-    public CuratorProjectionSpecStandardScheme getScheme() {
-      return new CuratorProjectionSpecStandardScheme();
-    }
-  }
-
-  private static class CuratorProjectionSpecStandardScheme extends 
StandardScheme<CuratorProjectionSpec> {
-
-    public void read(org.apache.thrift.protocol.TProtocol iprot, 
CuratorProjectionSpec struct) throws org.apache.thrift.TException {
-      org.apache.thrift.protocol.TField schemeField;
-      iprot.readStructBegin();
-      while (true)
-      {
-        schemeField = iprot.readFieldBegin();
-        if (schemeField.type == org.apache.thrift.protocol.TType.STOP) { 
-          break;
-        }
-        switch (schemeField.id) {
-          default:
-            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, 
schemeField.type);
-        }
-        iprot.readFieldEnd();
-      }
-      iprot.readStructEnd();
-
-      // check for required fields of primitive type, which can't be checked 
in the validate method
-      struct.validate();
-    }
-
-    public void write(org.apache.thrift.protocol.TProtocol oprot, 
CuratorProjectionSpec struct) throws org.apache.thrift.TException {
-      struct.validate();
-
-      oprot.writeStructBegin(STRUCT_DESC);
-      oprot.writeFieldStop();
-      oprot.writeStructEnd();
-    }
-
-  }
-
-  private static class CuratorProjectionSpecTupleSchemeFactory implements 
SchemeFactory {
-    public CuratorProjectionSpecTupleScheme getScheme() {
-      return new CuratorProjectionSpecTupleScheme();
-    }
-  }
-
-  private static class CuratorProjectionSpecTupleScheme extends 
TupleScheme<CuratorProjectionSpec> {
-
-    @Override
-    public void write(org.apache.thrift.protocol.TProtocol prot, 
CuratorProjectionSpec struct) throws org.apache.thrift.TException {
-      TTupleProtocol oprot = (TTupleProtocol) prot;
-    }
-
-    @Override
-    public void read(org.apache.thrift.protocol.TProtocol prot, 
CuratorProjectionSpec struct) throws org.apache.thrift.TException {
-      TTupleProtocol iprot = (TTupleProtocol) prot;
-    }
-  }
-
-}
-

http://git-wip-us.apache.org/repos/asf/curator/blob/530010d9/curator-x-rpc/src/test/java/org/apache/curator/generated/CuratorService.java
----------------------------------------------------------------------
diff --git 
a/curator-x-rpc/src/test/java/org/apache/curator/generated/CuratorService.java 
b/curator-x-rpc/src/test/java/org/apache/curator/generated/CuratorService.java
index 0fd1905..8eae496 100644
--- 
a/curator-x-rpc/src/test/java/org/apache/curator/generated/CuratorService.java
+++ 
b/curator-x-rpc/src/test/java/org/apache/curator/generated/CuratorService.java
@@ -44,7 +44,7 @@ public class CuratorService {
 
     public String create(CuratorProjection projection, CreateSpec createSpec) 
throws org.apache.thrift.TException;
 
-    public CuratorProjection newCuratorProjection(CuratorProjectionSpec spec) 
throws org.apache.thrift.TException;
+    public CuratorProjection newCuratorProjection(String connectionName) 
throws org.apache.thrift.TException;
 
   }
 
@@ -58,7 +58,7 @@ public class CuratorService {
 
     public void create(CuratorProjection projection, CreateSpec createSpec, 
org.apache.thrift.async.AsyncMethodCallback resultHandler) throws 
org.apache.thrift.TException;
 
-    public void newCuratorProjection(CuratorProjectionSpec spec, 
org.apache.thrift.async.AsyncMethodCallback resultHandler) throws 
org.apache.thrift.TException;
+    public void newCuratorProjection(String connectionName, 
org.apache.thrift.async.AsyncMethodCallback resultHandler) throws 
org.apache.thrift.TException;
 
   }
 
@@ -175,16 +175,16 @@ public class CuratorService {
       throw new 
org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT,
 "create failed: unknown result");
     }
 
-    public CuratorProjection newCuratorProjection(CuratorProjectionSpec spec) 
throws org.apache.thrift.TException
+    public CuratorProjection newCuratorProjection(String connectionName) 
throws org.apache.thrift.TException
     {
-      send_newCuratorProjection(spec);
+      send_newCuratorProjection(connectionName);
       return recv_newCuratorProjection();
     }
 
-    public void send_newCuratorProjection(CuratorProjectionSpec spec) throws 
org.apache.thrift.TException
+    public void send_newCuratorProjection(String connectionName) throws 
org.apache.thrift.TException
     {
       newCuratorProjection_args args = new newCuratorProjection_args();
-      args.setSpec(spec);
+      args.setConnectionName(connectionName);
       sendBase("newCuratorProjection", args);
     }
 
@@ -356,24 +356,24 @@ public class CuratorService {
       }
     }
 
-    public void newCuratorProjection(CuratorProjectionSpec spec, 
org.apache.thrift.async.AsyncMethodCallback resultHandler) throws 
org.apache.thrift.TException {
+    public void newCuratorProjection(String connectionName, 
org.apache.thrift.async.AsyncMethodCallback resultHandler) throws 
org.apache.thrift.TException {
       checkReady();
-      newCuratorProjection_call method_call = new 
newCuratorProjection_call(spec, resultHandler, this, ___protocolFactory, 
___transport);
+      newCuratorProjection_call method_call = new 
newCuratorProjection_call(connectionName, resultHandler, this, 
___protocolFactory, ___transport);
       this.___currentMethod = method_call;
       ___manager.call(method_call);
     }
 
     public static class newCuratorProjection_call extends 
org.apache.thrift.async.TAsyncMethodCall {
-      private CuratorProjectionSpec spec;
-      public newCuratorProjection_call(CuratorProjectionSpec spec, 
org.apache.thrift.async.AsyncMethodCallback resultHandler, 
org.apache.thrift.async.TAsyncClient client, 
org.apache.thrift.protocol.TProtocolFactory protocolFactory, 
org.apache.thrift.transport.TNonblockingTransport transport) throws 
org.apache.thrift.TException {
+      private String connectionName;
+      public newCuratorProjection_call(String connectionName, 
org.apache.thrift.async.AsyncMethodCallback resultHandler, 
org.apache.thrift.async.TAsyncClient client, 
org.apache.thrift.protocol.TProtocolFactory protocolFactory, 
org.apache.thrift.transport.TNonblockingTransport transport) throws 
org.apache.thrift.TException {
         super(client, protocolFactory, transport, resultHandler, false);
-        this.spec = spec;
+        this.connectionName = connectionName;
       }
 
       public void write_args(org.apache.thrift.protocol.TProtocol prot) throws 
org.apache.thrift.TException {
         prot.writeMessageBegin(new 
org.apache.thrift.protocol.TMessage("newCuratorProjection", 
org.apache.thrift.protocol.TMessageType.CALL, 0));
         newCuratorProjection_args args = new newCuratorProjection_args();
-        args.setSpec(spec);
+        args.setConnectionName(connectionName);
         args.write(prot);
         prot.writeMessageEnd();
       }
@@ -505,7 +505,7 @@ public class CuratorService {
 
       public newCuratorProjection_result getResult(I iface, 
newCuratorProjection_args args) throws org.apache.thrift.TException {
         newCuratorProjection_result result = new newCuratorProjection_result();
-        result.success = iface.newCuratorProjection(args.spec);
+        result.success = iface.newCuratorProjection(args.connectionName);
         return result;
       }
     }
@@ -782,7 +782,7 @@ public class CuratorService {
       }
 
       public void start(I iface, newCuratorProjection_args args, 
org.apache.thrift.async.AsyncMethodCallback<CuratorProjection> resultHandler) 
throws TException {
-        iface.newCuratorProjection(args.spec,resultHandler);
+        iface.newCuratorProjection(args.connectionName,resultHandler);
       }
     }
 
@@ -3948,7 +3948,7 @@ public class CuratorService {
   public static class newCuratorProjection_args implements 
org.apache.thrift.TBase<newCuratorProjection_args, 
newCuratorProjection_args._Fields>, java.io.Serializable, Cloneable, 
Comparable<newCuratorProjection_args>   {
     private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new 
org.apache.thrift.protocol.TStruct("newCuratorProjection_args");
 
-    private static final org.apache.thrift.protocol.TField SPEC_FIELD_DESC = 
new org.apache.thrift.protocol.TField("spec", 
org.apache.thrift.protocol.TType.STRUCT, (short)1);
+    private static final org.apache.thrift.protocol.TField 
CONNECTION_NAME_FIELD_DESC = new 
org.apache.thrift.protocol.TField("connectionName", 
org.apache.thrift.protocol.TType.STRING, (short)1);
 
     private static final Map<Class<? extends IScheme>, SchemeFactory> schemes 
= new HashMap<Class<? extends IScheme>, SchemeFactory>();
     static {
@@ -3956,11 +3956,11 @@ public class CuratorService {
       schemes.put(TupleScheme.class, new 
newCuratorProjection_argsTupleSchemeFactory());
     }
 
-    public CuratorProjectionSpec spec; // required
+    public String connectionName; // required
 
     /** The set of fields this struct contains, along with convenience methods 
for finding and manipulating them. */
     public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-      SPEC((short)1, "spec");
+      CONNECTION_NAME((short)1, "connectionName");
 
       private static final Map<String, _Fields> byName = new HashMap<String, 
_Fields>();
 
@@ -3975,8 +3975,8 @@ public class CuratorService {
        */
       public static _Fields findByThriftId(int fieldId) {
         switch(fieldId) {
-          case 1: // SPEC
-            return SPEC;
+          case 1: // CONNECTION_NAME
+            return CONNECTION_NAME;
           default:
             return null;
         }
@@ -4020,8 +4020,8 @@ public class CuratorService {
     public static final Map<_Fields, 
org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
     static {
       Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new 
EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
-      tmpMap.put(_Fields.SPEC, new 
org.apache.thrift.meta_data.FieldMetaData("spec", 
org.apache.thrift.TFieldRequirementType.DEFAULT, 
-          new 
org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT,
 CuratorProjectionSpec.class)));
+      tmpMap.put(_Fields.CONNECTION_NAME, new 
org.apache.thrift.meta_data.FieldMetaData("connectionName", 
org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new 
org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
       metaDataMap = Collections.unmodifiableMap(tmpMap);
       
org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(newCuratorProjection_args.class,
 metaDataMap);
     }
@@ -4030,18 +4030,18 @@ public class CuratorService {
     }
 
     public newCuratorProjection_args(
-      CuratorProjectionSpec spec)
+      String connectionName)
     {
       this();
-      this.spec = spec;
+      this.connectionName = connectionName;
     }
 
     /**
      * Performs a deep copy on <i>other</i>.
      */
     public newCuratorProjection_args(newCuratorProjection_args other) {
-      if (other.isSetSpec()) {
-        this.spec = new CuratorProjectionSpec(other.spec);
+      if (other.isSetConnectionName()) {
+        this.connectionName = other.connectionName;
       }
     }
 
@@ -4051,40 +4051,40 @@ public class CuratorService {
 
     @Override
     public void clear() {
-      this.spec = null;
+      this.connectionName = null;
     }
 
-    public CuratorProjectionSpec getSpec() {
-      return this.spec;
+    public String getConnectionName() {
+      return this.connectionName;
     }
 
-    public newCuratorProjection_args setSpec(CuratorProjectionSpec spec) {
-      this.spec = spec;
+    public newCuratorProjection_args setConnectionName(String connectionName) {
+      this.connectionName = connectionName;
       return this;
     }
 
-    public void unsetSpec() {
-      this.spec = null;
+    public void unsetConnectionName() {
+      this.connectionName = null;
     }
 
-    /** Returns true if field spec is set (has been assigned a value) and 
false otherwise */
-    public boolean isSetSpec() {
-      return this.spec != null;
+    /** Returns true if field connectionName is set (has been assigned a 
value) and false otherwise */
+    public boolean isSetConnectionName() {
+      return this.connectionName != null;
     }
 
-    public void setSpecIsSet(boolean value) {
+    public void setConnectionNameIsSet(boolean value) {
       if (!value) {
-        this.spec = null;
+        this.connectionName = null;
       }
     }
 
     public void setFieldValue(_Fields field, Object value) {
       switch (field) {
-      case SPEC:
+      case CONNECTION_NAME:
         if (value == null) {
-          unsetSpec();
+          unsetConnectionName();
         } else {
-          setSpec((CuratorProjectionSpec)value);
+          setConnectionName((String)value);
         }
         break;
 
@@ -4093,8 +4093,8 @@ public class CuratorService {
 
     public Object getFieldValue(_Fields field) {
       switch (field) {
-      case SPEC:
-        return getSpec();
+      case CONNECTION_NAME:
+        return getConnectionName();
 
       }
       throw new IllegalStateException();
@@ -4107,8 +4107,8 @@ public class CuratorService {
       }
 
       switch (field) {
-      case SPEC:
-        return isSetSpec();
+      case CONNECTION_NAME:
+        return isSetConnectionName();
       }
       throw new IllegalStateException();
     }
@@ -4126,12 +4126,12 @@ public class CuratorService {
       if (that == null)
         return false;
 
-      boolean this_present_spec = true && this.isSetSpec();
-      boolean that_present_spec = true && that.isSetSpec();
-      if (this_present_spec || that_present_spec) {
-        if (!(this_present_spec && that_present_spec))
+      boolean this_present_connectionName = true && this.isSetConnectionName();
+      boolean that_present_connectionName = true && that.isSetConnectionName();
+      if (this_present_connectionName || that_present_connectionName) {
+        if (!(this_present_connectionName && that_present_connectionName))
           return false;
-        if (!this.spec.equals(that.spec))
+        if (!this.connectionName.equals(that.connectionName))
           return false;
       }
 
@@ -4151,12 +4151,12 @@ public class CuratorService {
 
       int lastComparison = 0;
 
-      lastComparison = 
Boolean.valueOf(isSetSpec()).compareTo(other.isSetSpec());
+      lastComparison = 
Boolean.valueOf(isSetConnectionName()).compareTo(other.isSetConnectionName());
       if (lastComparison != 0) {
         return lastComparison;
       }
-      if (isSetSpec()) {
-        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.spec, 
other.spec);
+      if (isSetConnectionName()) {
+        lastComparison = 
org.apache.thrift.TBaseHelper.compareTo(this.connectionName, 
other.connectionName);
         if (lastComparison != 0) {
           return lastComparison;
         }
@@ -4181,11 +4181,11 @@ public class CuratorService {
       StringBuilder sb = new StringBuilder("newCuratorProjection_args(");
       boolean first = true;
 
-      sb.append("spec:");
-      if (this.spec == null) {
+      sb.append("connectionName:");
+      if (this.connectionName == null) {
         sb.append("null");
       } else {
-        sb.append(this.spec);
+        sb.append(this.connectionName);
       }
       first = false;
       sb.append(")");
@@ -4195,9 +4195,6 @@ public class CuratorService {
     public void validate() throws org.apache.thrift.TException {
       // check for required fields
       // check for sub-struct validity
-      if (spec != null) {
-        spec.validate();
-      }
     }
 
     private void writeObject(java.io.ObjectOutputStream out) throws 
java.io.IOException {
@@ -4234,11 +4231,10 @@ public class CuratorService {
             break;
           }
           switch (schemeField.id) {
-            case 1: // SPEC
-              if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) 
{
-                struct.spec = new CuratorProjectionSpec();
-                struct.spec.read(iprot);
-                struct.setSpecIsSet(true);
+            case 1: // CONNECTION_NAME
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRING) 
{
+                struct.connectionName = iprot.readString();
+                struct.setConnectionNameIsSet(true);
               } else { 
                 org.apache.thrift.protocol.TProtocolUtil.skip(iprot, 
schemeField.type);
               }
@@ -4258,9 +4254,9 @@ public class CuratorService {
         struct.validate();
 
         oprot.writeStructBegin(STRUCT_DESC);
-        if (struct.spec != null) {
-          oprot.writeFieldBegin(SPEC_FIELD_DESC);
-          struct.spec.write(oprot);
+        if (struct.connectionName != null) {
+          oprot.writeFieldBegin(CONNECTION_NAME_FIELD_DESC);
+          oprot.writeString(struct.connectionName);
           oprot.writeFieldEnd();
         }
         oprot.writeFieldStop();
@@ -4281,12 +4277,12 @@ public class CuratorService {
       public void write(org.apache.thrift.protocol.TProtocol prot, 
newCuratorProjection_args struct) throws org.apache.thrift.TException {
         TTupleProtocol oprot = (TTupleProtocol) prot;
         BitSet optionals = new BitSet();
-        if (struct.isSetSpec()) {
+        if (struct.isSetConnectionName()) {
           optionals.set(0);
         }
         oprot.writeBitSet(optionals, 1);
-        if (struct.isSetSpec()) {
-          struct.spec.write(oprot);
+        if (struct.isSetConnectionName()) {
+          oprot.writeString(struct.connectionName);
         }
       }
 
@@ -4295,9 +4291,8 @@ public class CuratorService {
         TTupleProtocol iprot = (TTupleProtocol) prot;
         BitSet incoming = iprot.readBitSet(1);
         if (incoming.get(0)) {
-          struct.spec = new CuratorProjectionSpec();
-          struct.spec.read(iprot);
-          struct.setSpecIsSet(true);
+          struct.connectionName = iprot.readString();
+          struct.setConnectionNameIsSet(true);
         }
       }
     }

http://git-wip-us.apache.org/repos/asf/curator/blob/530010d9/curator-x-rpc/src/test/java/org/apache/curator/x/rpc/TestClient.java
----------------------------------------------------------------------
diff --git 
a/curator-x-rpc/src/test/java/org/apache/curator/x/rpc/TestClient.java 
b/curator-x-rpc/src/test/java/org/apache/curator/x/rpc/TestClient.java
index f65138f..b48c066 100644
--- a/curator-x-rpc/src/test/java/org/apache/curator/x/rpc/TestClient.java
+++ b/curator-x-rpc/src/test/java/org/apache/curator/x/rpc/TestClient.java
@@ -22,7 +22,6 @@ import org.apache.curator.generated.CreateSpec;
 import org.apache.curator.generated.CuratorEvent;
 import org.apache.curator.generated.CuratorEventType;
 import org.apache.curator.generated.CuratorProjection;
-import org.apache.curator.generated.CuratorProjectionSpec;
 import org.apache.curator.generated.CuratorService;
 import org.apache.curator.generated.EventService;
 import org.apache.curator.generated.GenericProjection;
@@ -49,7 +48,7 @@ public class TestClient
         TProtocol eventProtocol = new TBinaryProtocol(eventTransport);
         final EventService.Client serviceClient = new 
EventService.Client(eventProtocol);
 
-        final CuratorProjection curatorProjection = 
client.newCuratorProjection(new CuratorProjectionSpec());
+        final CuratorProjection curatorProjection = 
client.newCuratorProjection("test");
 
         Executors.newSingleThreadExecutor().submit
         (

http://git-wip-us.apache.org/repos/asf/curator/blob/530010d9/curator-x-rpc/src/test/java/org/apache/curator/x/rpc/TestServer.java
----------------------------------------------------------------------
diff --git 
a/curator-x-rpc/src/test/java/org/apache/curator/x/rpc/TestServer.java 
b/curator-x-rpc/src/test/java/org/apache/curator/x/rpc/TestServer.java
new file mode 100644
index 0000000..9472dd8
--- /dev/null
+++ b/curator-x-rpc/src/test/java/org/apache/curator/x/rpc/TestServer.java
@@ -0,0 +1,13 @@
+package org.apache.curator.x.rpc;
+
+import com.google.common.io.Resources;
+import java.nio.charset.Charset;
+
+public class TestServer
+{
+    public static void main(String[] args) throws Exception
+    {
+        String configurationSource = 
Resources.toString(Resources.getResource("configuration/test.json"), 
Charset.defaultCharset());
+        CuratorProjectionServer.main(new String[]{configurationSource});
+    }
+}

http://git-wip-us.apache.org/repos/asf/curator/blob/530010d9/curator-x-rpc/src/test/resources/configuration/test.json
----------------------------------------------------------------------
diff --git a/curator-x-rpc/src/test/resources/configuration/test.json 
b/curator-x-rpc/src/test/resources/configuration/test.json
new file mode 100644
index 0000000..c9d6cb8
--- /dev/null
+++ b/curator-x-rpc/src/test/resources/configuration/test.json
@@ -0,0 +1,14 @@
+{
+    "projectionExpiration": "15s",
+
+    "thrift": {
+        "port": 8899
+    },
+
+    "connections": [
+        {
+            "name": "test",
+            "connectionString": "localhost:2181"
+        }
+    ]
+}
\ No newline at end of file

Reply via email to