Repository: curator Updated Branches: refs/heads/CURATOR-397 0917e314b -> 69f1829d0
added some doc Project: http://git-wip-us.apache.org/repos/asf/curator/repo Commit: http://git-wip-us.apache.org/repos/asf/curator/commit/69f1829d Tree: http://git-wip-us.apache.org/repos/asf/curator/tree/69f1829d Diff: http://git-wip-us.apache.org/repos/asf/curator/diff/69f1829d Branch: refs/heads/CURATOR-397 Commit: 69f1829d0f63badb0e16ff0bd4d53f3c4a8df541 Parents: 0917e31 Author: randgalt <[email protected]> Authored: Tue May 2 22:01:29 2017 -0500 Committer: randgalt <[email protected]> Committed: Tue May 2 22:01:29 2017 -0500 ---------------------------------------------------------------------- .../src/main/java/pubsub/Publisher.java | 66 +++++++++++++++----- .../src/main/java/pubsub/Subscriber.java | 30 ++++++++- .../src/main/java/pubsub/builders/Clients.java | 21 +++++-- .../main/java/pubsub/builders/ModelSpecs.java | 23 ++++--- .../src/main/java/pubsub/builders/Paths.java | 9 +++ 5 files changed, 117 insertions(+), 32 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/curator/blob/69f1829d/curator-examples/src/main/java/pubsub/Publisher.java ---------------------------------------------------------------------- diff --git a/curator-examples/src/main/java/pubsub/Publisher.java b/curator-examples/src/main/java/pubsub/Publisher.java index 53fad3e..8854b35 100644 --- a/curator-examples/src/main/java/pubsub/Publisher.java +++ b/curator-examples/src/main/java/pubsub/Publisher.java @@ -28,23 +28,33 @@ public class Publisher this.client = Objects.requireNonNull(client, "client cannot be null"); } + /** + * Publish the given instance using the Instance client template + * + * @param instance instance to publish + */ public void publishInstance(Instance instance) { ModeledFramework<Instance> resolvedClient = instanceClient - .resolved(client, instance.getType()) - .resolved(instance); + .resolved(client, instance.getType()) // this resolves to the parent path + .resolved(instance); // this resolves to a child node - uses the Instance's id because Instance extends NodeName resolvedClient.set(instance).exceptionally(e -> { log.error("Could not publish instance: " + instance, e); return null; }); } + /** + * Publish the given instances using the Instance client template in a transaction + * + * @param instances instances to publish + */ public void publishInstances(List<Instance> instances) { List<CuratorOp> operations = instances.stream() .map(instance -> instanceClient - .resolved(client, instance.getType()) - .resolved(instance) + .resolved(client, instance.getType()) // this resolves to the parent path + .resolved(instance) // this resolves to a child node - uses the Instance's id because Instance extends NodeName .createOp(instance) ) .collect(Collectors.toList()); @@ -54,27 +64,51 @@ public class Publisher }); } - public void publishLocationAvailable(Group group, LocationAvailable message) + /** + * Publish the given LocationAvailable using the LocationAvailable client template + * + * @param group group + * @param locationAvailable message to publish + */ + public void publishLocationAvailable(Group group, LocationAvailable locationAvailable) { - publishMessage(locationAvailableClient, group, message); + publishMessage(locationAvailableClient, group, locationAvailable); } - public void publishUserCreated(Group group, UserCreated message) + /** + * Publish the given UserCreated using the UserCreated client template + * + * @param group group + * @param userCreated message to publish + */ + public void publishUserCreated(Group group, UserCreated userCreated) { - publishMessage(userCreatedClient, group, message); + publishMessage(userCreatedClient, group, userCreated); } - public void publishLocationsAvailable(Group group, List<LocationAvailable> messages) + /** + * Publish the given LocationAvailables using the LocationAvailable client template in a transaction + * + * @param group group + * @param locationsAvailable messages to publish + */ + public void publishLocationsAvailable(Group group, List<LocationAvailable> locationsAvailable) { - publishMessages(locationAvailableClient, group, messages); + publishMessages(locationAvailableClient, group, locationsAvailable); } - public void publishUsersCreated(Group group, List<UserCreated> messages) + /** + * Publish the given UserCreateds using the UserCreated client template in a transaction + * + * @param group group + * @param usersCreated messages to publish + */ + public void publishUsersCreated(Group group, List<UserCreated> usersCreated) { - publishMessages(userCreatedClient, group, messages); + publishMessages(userCreatedClient, group, usersCreated); } - public <T extends Message> void publishMessage(TypedModeledFramework2<T, Group, Priority> typedClient, Group group, T message) + private <T extends Message> void publishMessage(TypedModeledFramework2<T, Group, Priority> typedClient, Group group, T message) { ModeledFramework<T> resolvedClient = typedClient .resolved(client, group, message.getPriority()) @@ -85,12 +119,12 @@ public class Publisher }); } - public <T extends Message> void publishMessages(TypedModeledFramework2<T, Group, Priority> typedClient, Group group, List<T> messages) + private <T extends Message> void publishMessages(TypedModeledFramework2<T, Group, Priority> typedClient, Group group, List<T> messages) { List<CuratorOp> operations = messages.stream() .map(message -> typedClient - .resolved(client, group, message.getPriority()) - .resolved(message) + .resolved(client, group, message.getPriority()) // this resolves to the parent path + .resolved(message) // this resolves to a child node - uses the Message's id because Message extends NodeName .createOp(message) ) .collect(Collectors.toList()); http://git-wip-us.apache.org/repos/asf/curator/blob/69f1829d/curator-examples/src/main/java/pubsub/Subscriber.java ---------------------------------------------------------------------- diff --git a/curator-examples/src/main/java/pubsub/Subscriber.java b/curator-examples/src/main/java/pubsub/Subscriber.java index 29911a2..1acee0b 100644 --- a/curator-examples/src/main/java/pubsub/Subscriber.java +++ b/curator-examples/src/main/java/pubsub/Subscriber.java @@ -22,26 +22,50 @@ public class Subscriber this.client = client; } + /** + * Start a subscriber (a CachedModeledFramework instance) using the LocationAvailable client template + * + * @param group group to listen for + * @param priority priority to listen for + * @return CachedModeledFramework instance (already started) + */ public CachedModeledFramework<LocationAvailable> startLocationAvailableSubscriber(Group group, Priority priority) { return startSubscriber(locationAvailableClient, group, priority); } + /** + * Start a subscriber (a CachedModeledFramework instance) using the UserCreated client template + * + * @param group group to listen for + * @param priority priority to listen for + * @return CachedModeledFramework instance (already started) + */ public CachedModeledFramework<UserCreated> startUserCreatedSubscriber(Group group, Priority priority) { return startSubscriber(userCreatedClient, group, priority); } + /** + * Start a subscriber (a CachedModeledFramework instance) using the Instance client template + * + * @param instanceType type to listen for + * @return CachedModeledFramework instance (already started) + */ public CachedModeledFramework<Instance> startInstanceSubscriber(InstanceType instanceType) { - CachedModeledFramework<Instance> resolved = instanceClient.resolved(client, instanceType).cached(); + CachedModeledFramework<Instance> resolved = instanceClient + .resolved(client, instanceType) // resolves to the parent path - models are children of this path + .cached(); // makes a cached modeled instance resolved.start(); return resolved; } - public <T extends Message> CachedModeledFramework<T> startSubscriber(TypedModeledFramework2<T, Group, Priority> typedClient, Group group, Priority priority) + private <T extends Message> CachedModeledFramework<T> startSubscriber(TypedModeledFramework2<T, Group, Priority> typedClient, Group group, Priority priority) { - CachedModeledFramework<T> resolved = typedClient.resolved(client, group, priority).cached(); + CachedModeledFramework<T> resolved = typedClient + .resolved(client, group, priority) // resolves to the parent path - models are children of this path + .cached(); // makes a cached modeled instance resolved.start(); return resolved; } http://git-wip-us.apache.org/repos/asf/curator/blob/69f1829d/curator-examples/src/main/java/pubsub/builders/Clients.java ---------------------------------------------------------------------- diff --git a/curator-examples/src/main/java/pubsub/builders/Clients.java b/curator-examples/src/main/java/pubsub/builders/Clients.java index f8569aa..b742e8c 100644 --- a/curator-examples/src/main/java/pubsub/builders/Clients.java +++ b/curator-examples/src/main/java/pubsub/builders/Clients.java @@ -12,19 +12,28 @@ import pubsub.models.Priority; public class Clients { + /** + * A client template for LocationAvailable instances + */ public static final TypedModeledFramework2<LocationAvailable, Group, Priority> locationAvailableClient = TypedModeledFramework2.from( - ModeledFramework.builder(), - ModelSpecs.locationAvailableModelSpec + ModeledFramework.builder(), // our client will use only defaults + ModelSpecs.locationAvailableModelSpec // the LocationAvailable model spec ); + /** + * A client template for UserCreated instances + */ public static final TypedModeledFramework2<UserCreated, Group, Priority> userCreatedClient = TypedModeledFramework2.from( - ModeledFramework.builder(), - ModelSpecs.userCreatedModelSpec + ModeledFramework.builder(), // our client will use only defaults + ModelSpecs.userCreatedModelSpec // the UserCreated model spec ); + /** + * A client template for Instance instances + */ public static final TypedModeledFramework<Instance, InstanceType> instanceClient = TypedModeledFramework.from( - ModeledFramework.builder(), - ModelSpecs.instanceModelSpec + ModeledFramework.builder(), // our client will use only defaults + ModelSpecs.instanceModelSpec // the Instance model spec ); private Clients() http://git-wip-us.apache.org/repos/asf/curator/blob/69f1829d/curator-examples/src/main/java/pubsub/builders/ModelSpecs.java ---------------------------------------------------------------------- diff --git a/curator-examples/src/main/java/pubsub/builders/ModelSpecs.java b/curator-examples/src/main/java/pubsub/builders/ModelSpecs.java index dff4e21..dcb7a29 100644 --- a/curator-examples/src/main/java/pubsub/builders/ModelSpecs.java +++ b/curator-examples/src/main/java/pubsub/builders/ModelSpecs.java @@ -16,25 +16,34 @@ import java.util.concurrent.TimeUnit; public class ModelSpecs { + /** + * A model spec for LocationAvailable instances + */ public static final TypedModelSpec2<LocationAvailable, Group, Priority> locationAvailableModelSpec = TypedModelSpec2.from( - builder(LocationAvailable.class), - Paths.locationAvailablePath + builder(LocationAvailable.class), // creates a standard JSON serializer + Paths.locationAvailablePath // use the path for LocationAvailable instances ); + /** + * A model spec for UserCreated instances + */ public static final TypedModelSpec2<UserCreated, Group, Priority> userCreatedModelSpec = TypedModelSpec2.from( - builder(UserCreated.class), - Paths.userCreatedPath + builder(UserCreated.class), // creates a standard JSON serializer + Paths.userCreatedPath // use the path for UserCreated instances ); + /** + * A model spec for Instance instances + */ public static final TypedModelSpec<Instance, InstanceType> instanceModelSpec = TypedModelSpec.from( - builder(Instance.class), - Paths.instancesPath + builder(Instance.class), // creates a standard JSON serializer + Paths.instancesPath // use the path for Instance instances ); private static <T> ModelSpecBuilder<T> builder(Class<T> clazz) { return ModelSpec.builder(JacksonModelSerializer.build(clazz)) - .withTtl(TimeUnit.MINUTES.toMillis(10)) + .withTtl(TimeUnit.MINUTES.toMillis(10)) // for our pub-sub example, messages are valid for 10 minutes .withCreateMode(CreateMode.PERSISTENT_WITH_TTL) ; } http://git-wip-us.apache.org/repos/asf/curator/blob/69f1829d/curator-examples/src/main/java/pubsub/builders/Paths.java ---------------------------------------------------------------------- diff --git a/curator-examples/src/main/java/pubsub/builders/Paths.java b/curator-examples/src/main/java/pubsub/builders/Paths.java index 6b2dd6f..74f45ce 100644 --- a/curator-examples/src/main/java/pubsub/builders/Paths.java +++ b/curator-examples/src/main/java/pubsub/builders/Paths.java @@ -10,10 +10,19 @@ public class Paths { private static final String basePath = "/root/pubsub"; + /** + * Represents a path for LocationAvailable models that is parameterized with a Group and a Priority + */ public static final TypedZPath2<Group, Priority> locationAvailablePath = TypedZPath2.from(basePath + "/messages/locations/{id}/{id}"); + /** + * Represents a path for UserCreated models that is parameterized with a Group and a Priority + */ public static final TypedZPath2<Group, Priority> userCreatedPath = TypedZPath2.from(basePath + "/messages/users/{id}/{id}"); + /** + * Represents a path for Instance models that is parameterized with a InstanceType + */ public static final TypedZPath<InstanceType> instancesPath = TypedZPath.from(basePath + "/instances/{id}"); private Paths()
