From 08e7bf7cd138c850d7fb08a4e82a8683d0e13a06 Mon Sep 17 00:00:00 2001 From: John Blum Date: Wed, 3 Jun 2020 11:34:43 -0700 Subject: [PATCH] Add chapter to reference documentation on SBDG's Apache Geode API Extensions. Resolves gh-84. --- .../asciidoc/_includes/geode-api-ext.adoc | 296 ++++++++++++++++++ .../asciidoc/images/membership-api-uml.png | Bin 0 -> 75746 bytes .../src/docs/asciidoc/index.adoc | 5 +- 3 files changed, 299 insertions(+), 2 deletions(-) create mode 100644 spring-geode-docs/src/docs/asciidoc/_includes/geode-api-ext.adoc create mode 100644 spring-geode-docs/src/docs/asciidoc/images/membership-api-uml.png diff --git a/spring-geode-docs/src/docs/asciidoc/_includes/geode-api-ext.adoc b/spring-geode-docs/src/docs/asciidoc/_includes/geode-api-ext.adoc new file mode 100644 index 00000000..cc486d50 --- /dev/null +++ b/spring-geode-docs/src/docs/asciidoc/_includes/geode-api-ext.adoc @@ -0,0 +1,296 @@ +[[geode-api-extensions]] +== Apache Geode API Extensions +:gemfire-name: Pivotal GemFire +:geode-name: Apache Geode +:images-dir: ./images + + +The Spring Boot for {geode-name} (SBDG) project includes the `org.springframework.geode:apache-geode-extensions` module +to make working with the Apache Geode {apache-geode-javadoc}[APIs] tolerable and useful. While this module is relatively +new, it contains several useful API extensions already. We will continue to add extensions to this module as both SBDG +and users' needs dictate. + +{geode-name}'s {apache-geode-javadoc}[API] is quite convoluted with many design problems: + +1. Non-intuitive, complex interfaces that often contradict industry standard terms. +(e.g. `Cache` vs. {apache-geode-javadoc}/org/apache/geode/cache/Region.html[`Region`]). +2. APIs with an excessive footprint: no sensible https://en.wikipedia.org/wiki/Abstract_data_type[ADTs] resulting in +too many overloaded methods with loaded method signatures (e.g. {apache-geode-javadoc}/org/apache/geode/cache/Region.html[`Region`]). +3. Useful functionality hidden behind so called "internal" APIs that ought to be public. +4. APIs that are closed for modification yet offer no option for extension violating the +https://en.wikipedia.org/wiki/Open%E2%80%93closed_principle[_Open/Closed Principle_]. +5. Utility/Helper classes containing functionality that ought to be part of the behavior exhibited by the types on which +the Utility/Helper classes operate (e.g. {apache-geode-javadoc}/org/apache/geode/cache/partition/PartitionRegionHelper.html[`PartitionRegionHelper`]). +6. Incorrect use of _Checked_ `Exceptions` +(e.g. {apache-geode-javadoc}/org/apache/geode/cache/IncompatibleVersionException.html[`IncompatibleVersionException`]). +7. Lingering deprecations. +8. ... + +All of this plus much more makes using the {geode-name} API correctly difficult and confusing at times, especially +without prior knowledge or experience. Users very often get this wrong and it is the main reason why Spring's APIs for +{geode-name} are so invaluable; they can help you do the right thing! + +Consider this, the one and only cache implementation (`GemFireCacheImpl`) implements both the `ClientCache` and `Cache` +interfaces. A `ClientCache` instance is created by client applications to access/persist data in a {geode-name} cluster. +On the contrary, a "peer" `Cache` instance is created by server-side applications serving as peer members of the +{geode-name} cluster (a.k.a. distributed system) to manage data. Both incarnations result in an instance of +`GemFireCacheImpl`, yet a cache cannot be both a client and a peer. But, you would never know this by introspecting +the cache instance. + +The {apache-geode-javadoc}/org/apache/geode/Delta.html[`Delta`] interface, {apache-geode-javadoc}/org/apache/geode/Delta.html#hasDelta--[`hasDelta()`] +method is another point of confusion. If there is no delta, why send the object in its entirety? Presumably there are no +changes. Of course, there is a reason but it is not immediately apparent why! + +Spring in general, and SBDG in particular, shield users from design problems as well as changes in {geode-name}'s APIs +that could adversely affect your applications when integrating with {geode-name}. Spring's APIs provide a layer of +indirection along with enhanced capabilities (e.g. Exception translation). + +NOTE: Spring Data for {geode-name} (SDG) also {spring-data-geode-docs-html}/#apis[offers] some relief when working with +{geode-name}'s APIs. + +[[geode-api-extensions-cacheresolver]] +=== `SimpleCacheResolver` + +In some cases, it is necessary to acquire a reference to the cache instance in your application components at runtime. +For instance, you might want to create a temporary `Region` on the fly in order to aggregate data for analysis. + +Typically, you already know the type of cache your application is using since you must declare your application to be +either a client (i.e. `ClientCache`) in the {apache-geode-docs}/topologies_and_comm/cs_configuration/chapter_overview.html[client/server topology], +or a {apache-geode-docs}/topologies_and_comm/p2p_configuration/chapter_overview.html[peer member/node] in the cluster +(i.e. `Cache`) on startup. This is expressed in configuration when creating the cache instance required to interact with +the {geode-name} data management system. In most cases, your application will be a client. SBDG makes the decision easy +since it _auto-configures_ a `ClientCache` instance, <>. + +In a Spring context, the cache instance created by the framework is a managed bean in the Spring container. As such, +it is a simple matter to inject a reference to the _Singleton_ cache bean into any other managed application component. + +Auto-wiring a Cache Reference using Dependency Injection (DI) +[source,java] +---- +@Service +class CacheMonitoringService { + + @Autowired + ClientCache clientCache; + + // use the clientCache object reference to monitor the cache as necessary + +} +---- + +However, in cases where the application component or class is not managed by Spring, and you need a reference to the +cache instance at runtime, then SBDG provides the abstract `org.springframework.geode.cache.SimpleCacheResolver` class +(see {spring-boot-data-geode-javadoc}/org/springframework/geode/cache/SimpleCacheResolver.html[Javadoc]). + +.`SimpleCacheResolver` API +[source, java ] +---- +package org.springframework.geode.cache; + +abstract class SimpleCacheResolver { + + T require() { } + + Optional resolve() { } + + Optional resolveClientCache() { } + + Optional resolvePeerCache() { } + +} +---- + +`SimpleCacheResolver` adheres to https://en.wikipedia.org/wiki/SOLID[SOLID OO Principles]. This class is abstract and +extensible so that users could change the algorithm used to resolve client or peer cache instances as well as mock the +methods for use in unit tests. + +Additionally, each method is precise. For example, `resolveClientCache()` will only resolve a reference to a cache if +the cache instance is a "client"! If a cache exists but is a "peer" instance, then `resolveClientCache()` returns +`Optional.EMPTY`. + +`require()` returns a non-`Optional` reference to a cache instance throwing an `IllegalStateException` if a cache +is not present. + +[[geode-api-extensions-cacheutils]] +=== `CacheUtils` + +Under-the-hood, the `SimpleCacheResolver` delegates some of its functions to the +{spring-boot-data-geode-javadoc}/org/springframework/geode/util/CacheUtils.html[`org.springframework.geode.util.CacheUtils`] +abstract utility class, which provides additional, convenient capabilities when working with a cache. + +While there are utility methods to determine whether a cache instance (i.e. `GemFireCache`) or _Region_ is a client +or a peer, 1 of the more useful functions is to extract all the values from a _Region_. + +To extract all the values stored in a _Region_ call `CacheUtils.collectValues(:Region)`. This method returns a +`Collection` containing all the values stored in the given _Region_. + +The `collectValues(:Region)` is smart and knows how to handle either client or peer _Regions_. This distinction is +important since client `PROXY` _Regions_ store no values. + +WARNING: Caution is advised when getting all values from a _Region_. While getting filtered reference values from a +non-transactional, reference-only data [`REPLICATE`] _Region_ is quite useful, getting values from a transactional, +[`PARTITION`] _Region_ can prove quite detrimental, especially in production. Getting all values from a _Region_ is +also quite useful in testing. + +[[geode-api-extensions-membership]] +=== `MembershipListenerAdapter` & `MembershipEvent` + +Another useful API hidden by {geode-name} is the membership events and listener interface. This API is particularly +useful on the server-side when your Spring Boot application is serving as a peer member/node of the {geode-name} +distributed system. + +When a peer member gets disconnected from the cluster, perhaps due to a network failure, the member is forcibly removed +from the distributed system. This node immediately enters a reconnecting state, trying to establish a connection back to +the cluster. Once reconnected, the peer member must rebuild all cache objects (i.e. `Cache`, `Regions`, `Indexes`, +`DiskStores`, etc). All old/previous cache objects are invalid and their references stale. + +As you can imagine, in a Spring context this is particularly problematic since most {geode-name} objects are _Singleton_ +beans declared in and managed by the Spring container. Those beans maybe, and in many cases are, injected into framework +and application components. For instance, `Regions` are injected into SDG's `GemfireTemplate`, Spring Data _Repositories_ +and possibly application-specific _Data Access Objects_ (https://en.wikipedia.org/wiki/Data_access_object[DAO]). + +If references to those cache objects become stale on a forced disconnect event, then there is no way to auto-wire fresh +object references into the dependent application or framework components when the peer member is reconnected, not unless +the Spring `ApplicationContext` is "refreshed". In fact, there is no way to even know that this event has occurred since +the {geode-name} `MembershipListener` API and corresponding events are "internal". + +NOTE: We have explored the idea of creating proxies for all types of cache objects (i.e. `Cache`, `Regions`, `Indexes`, +`DiskStores`, AEQs, `GatewayReceivers`, `GatewaySenders`, etc) used by Spring. The proxies would know how to obtain a +"fresh" reference on a reconnect event. However, this turns out to be more problematic than it is worth. It is simply +easier to "refresh" the Spring `ApplicationContext`, although no less cheap. Neither way is ideal. See +https://jira.spring.io/browse/SGF-921[SGF-921] and https://jira.spring.io/browse/SGF-227[SGF-227] for further details. + +In the situation where membership events are useful to the Spring Boot application, SBDG provides the following +{spring-boot-data-geode-javadoc}/org/springframework/geode/distributed/event/package-frame.html[API]: + +* {spring-boot-data-geode-javadoc}/org/springframework/geode/distributed/event/MembershipListenerAdapter.html[`MembershipListenerAdapter`] +* {spring-boot-data-geode-javadoc}/org/springframework/geode/distributed/event/MembershipEvent.html[`MembershipEvent`] + +The abstract `MembershipListenerAdapter` class implements {geode-name}'s clumsy +`org.apache.geode.distributed.internal.MembershipListener` interface, simplifying the event handler method signatures +by using an appropriate `MembershipEvent` type to encapsulate the actors in the event. + +The abstract `MembershipEvent` class is further subclassed to represent the specific membership event types that occur +within the {geode-name} system: + +* {spring-boot-data-geode-javadoc}/org/springframework/geode/distributed/event/support/MemberDepartedEvent.html[`MemberDepartedEvent`] +* {spring-boot-data-geode-javadoc}/org/springframework/geode/distributed/event/support/MemberJoinedEvent.html[`MemberJoinedEvent`] +* {spring-boot-data-geode-javadoc}/org/springframework/geode/distributed/event/support/MemberSuspectEvent.html[`MemberSuspectEvent`] +* {spring-boot-data-geode-javadoc}/org/springframework/geode/distributed/event/support/QuorumLostEvent.html[`QuorumLostEvent`] + +The API can be depicted in this UML diagram: + +image::{images-dir}/membership-api-uml.png[] + +The membership event type is further categorized with an appropriate enumerated value, +{spring-boot-data-geode-javadoc}/org/springframework/geode/distributed/event/MembershipEvent.Type.html[`MembershipEvent.Type`], +as a property of the `MembershipEvent` itself (see {spring-boot-data-geode-javadoc}/org/springframework/geode/distributed/event/MembershipEvent.html#getType--[`getType()`]). + +The type hierarchy is useful in `instanceof` expressions while the `Enum` is useful in `switch` statements. + +You can see 1 particular implementation of the `MembershipListenerAdapter` with the +{spring-boot-data-geode-javadoc}/org/springframework/geode/distributed/event/ApplicationContextMembershipListener.html[`ApplicationContextMembershipListener`] class, +which does exactly as we described above, handling forced-disconnect/auto-reconnect membership events inside a +Spring context. + +[[geode-api-extensions-pdx]] +=== PDX + +{geode-name}'s PDX serialization framework is yet another API that falls short. + +For instance, there is no easy or direct way to serialize an object as PDX bytes. It is also not possible to modify an +existing `PdxInstance` by adding or removing a field. In this case, you must create a new `PdxInstance`, but +unfortunately, the {geode-name} API offers no assistance when copying from an existing `PdxInstance`. + +In such cases, SBDG provides the {spring-boot-data-geode-javadoc}/org/springframework/geode/pdx/PdxInstanceBuilder.html[`PdxInstanceBuilder`] +class, appropriately named after the https://en.wikipedia.org/wiki/Builder_pattern[_Builder Software Design Pattern_]. +The `PdxInstanceBuilder` also offers a fluent API style for constructing `PdxInstances`. + +.`PdxInstanceBuilder` API +[source,java] +---- +class PdxInstanceBuilder { + + PdxInstanceFactory copy(PdxInstance pdx); + + Factory from(Object target); + +} +---- + +For example, you could serialize an application domain object as PDX bytes with the following code: + +.Object to PDX +[source,java] +---- +@Component +class CustomerSerializer { + + PdxInstance serialize(Customer customer) { + + return PdxInstanceBuilder.create() + .from(customer) + .create(); + } +} +---- + +You could then modify the `PdxInstance` by copying from the original: + +.Copy `PdxInstance` +[source,java] +---- +@Component +class CustomerDecorator { + + @Autowired + CustomerSerializer serializer; + + PdxIntance decorate(Customer customer) { + + PdxInstance pdxCustomer = serializer.serialize(customer); + + return PdxInstanceBuilder.create() + .copy(pdxCustomer) + .writeBoolean("vip", isImportant(cutomer)) + .create(); + } +} +---- + +SBDG also provides the {spring-boot-data-geode-javadoc}/org/springframework/geode/pdx/PdxInstanceWrapper.html[`PdxInstanceWrapper`] +class, which wraps an existing `PdxInstance` in order to provide more control during the conversion from PDX to JSON +and back into a POJO. Specifically, the wrapper gives users more control of the configuration of Jackson's `ObjectMapper`. + +The `ObjectMapper` constructed by {geode-name}'s own `PdxInstance` implementation (`PdxInstanceImpl`) is not +configurable nor was it configured correctly. And unfortunately, since `PdxInstance` is not extensible, the `getObject()` +method fails miserably when converting the JSON generated from PDX back into a POJO for any practical application domain +model type. + +.Wrapping an existing `PdxInstance` +[source,java] +---- +PdxInstanceWrapper wrapper = PdxInstanceWrapper.from(pdxInstance); +---- + +For all operations on `PdxInstance` except `getObject()`, the wrapper delegates to the underlying `PdxInstance` +implementation of the called method. + +In addition to the decorated `getObject()` method, the `PdxInstanceWrapper` provides a thorough implementation of the +`toString()` method. The state of the `PdxInstance` is output in a JSON-like String. + +WARNING: It is not currently possible to implement the `PdxInstance` interface and store instances of this type as a +value in a _Region_. {geode-name} naively assumes that all `PdxInstance` objects are an implementation created by +{geode-name} itself (i.e. `PdxInstanceImpl`), which has a tight coupling to the PDX type registry. + +[[geode-api-extensions-security]] +=== Security + +For testing purposes, SBDG provides a test implementation of {geode-name}'s {apache-geode-javadoc}/org/apache/geode/security/SecurityManager.html[`SecurityManager`] +interface that simply expects the password to match the username (case-sensitive) when authenticating. + +By default, all operations are authorized. + +To match the expectations of SBDG's `TestSecurityManager`, SBDG additionally provides a test implementation of +{geode-name}'s {apache-geode-javadoc}/org/apache/geode/security/AuthInitialize.html[`AuthInitialize`] interface that +supplies matching credentials for both the username and password. diff --git a/spring-geode-docs/src/docs/asciidoc/images/membership-api-uml.png b/spring-geode-docs/src/docs/asciidoc/images/membership-api-uml.png new file mode 100644 index 0000000000000000000000000000000000000000..70e520297be6995a1bd50027896de4820da37be4 GIT binary patch literal 75746 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 NNQy~|LWOmG{|_~2+iL&- literal 0 HcmV?d00001 diff --git a/spring-geode-docs/src/docs/asciidoc/index.adoc b/spring-geode-docs/src/docs/asciidoc/index.adoc index 235d1b59..e54f2c71 100644 --- a/spring-geode-docs/src/docs/asciidoc/index.adoc +++ b/spring-geode-docs/src/docs/asciidoc/index.adoc @@ -29,7 +29,7 @@ John Blum :spring-boot-docs-html: {spring-boot-docs}/html :spring-boot-javadoc: https://docs.spring.io/spring-boot/docs/current/api :spring-boot-website: https://spring.io/projects/spring-boot -:spring-boot-data-geode-javadoc: https://docs.spring.io/autorepo/docs/spring-boot-data-geode-build/current/api/ +:spring-boot-data-geode-javadoc: https://docs.spring.io/spring-boot-data-geode-build/current/api/ :spring-data-commons-docs: https://docs.spring.io/spring-data/commons/docs/current/reference :spring-data-commons-docs-html: {spring-data-commons-docs}/html :spring-data-commons-javadoc: https://docs.spring.io/spring-data/commons/docs/current/api @@ -237,8 +237,9 @@ include::{include-dir}/functions.adoc[] include::{include-dir}/continuous-query.adoc[] include::{include-dir}/data.adoc[] include::{include-dir}/data-serialization.adoc[] -include::{include-dir}/security.adoc[] include::{include-dir}/logging.adoc[] +include::{include-dir}/security.adoc[] +include::{include-dir}/geode-api-ext.adoc[] include::{include-dir}/actuator.adoc[] include::{include-dir}/session.adoc[] include::{include-dir}/cloudfoundry.adoc[]