This is awesome! Thanks John. On Tue, Nov 28, 2017 at 9:36 AM Udo Kohlmeyer <ukohlme...@pivotal.io> wrote:
> Another great release from the Spring world!! > > --Udo > > On Mon, Nov 27, 2017 at 11:39 PM, John Blum <jb...@pivotal.io> wrote: > > > Greetings Apache Geode Community- > > > > It is my pleasure to announce the availability of *Spring Data* *Kay > > SR2* (*Service > > Release* 2) which includes *Spring Data Geode* *2.0.2.RELEASE*. The > > official release announcement is here... > > > > https://spring.io/blog/2017/11/27/spring-data-ingalls-sr9-an > > d-kay-sr2-released > > > > Unfortunately, we missed the announce for the first service release of > > *Kay*, > > which occurred back on October 27th; my apologies. > > > > So, in both *Kay SR1 + SR2*, you will find the follow improvements... > > > > > > * Better, more reliable integration between *Spring's Cache Abstraction* > > [1] > > and *Spring* container initialization (particularly in the context of > > proxies) with Geode CQ [2]. I have even have a complete example here [3] > > (README in-progress). > > > > * In both *Entity-defined* as well as *Caching-defined* *Regions*, I have > > enabled the ability to configure the ClientRegionShortcut for client-side > > generated Regions and RegionShortcut for server-side generated Regions. > > You can learn more about *Entity-defined Regions* [4] and > *Caching-defined > > Regions* [5] by following the links. > > > > * In addition to *Spring's Caching Annotations* [6] I have also added > > support for JSR-107 *JCache* API Annotations in SDG's *Caching-defined > > Regions*. That means, if you used any of the JSR-107 annotations in your > > application service components and declared the SDG > > @EnableCachingDefinedRegions annotation on your *Spring Boot* > > @Configuration > > class, then you can define cache client Regions from the "caches" > > identified in your use of JSR-107 annotations. > > > > * I added Annotation support for configuring Apache Geode Region > > Compression [7] using the @EnableCompression annotation; see docs [8] for > > more details. By default, it just enables the Google Snappy Compressor, > > provided by Apache Geode OOTB. > > > > > > Several other little enhancements were made and help to improve the > overall > > development experience when using Apache Geode, especially in a *Spring* > > context. See the *changelog* [9] for a complete list of changes in *Kay > > SR1 + SR2*. > > > > > > Finally, I leave you with a... > > > > > > *SPRING-GEODE TIP:* > > > > Let's say you want to create a simple *Spring Boot*, ClientCache > > application to store and manage customer data. It is as simple as > this... > > > > > > // Define Customer... > > > > @Region("Customers") > > public class Customer { > > > > private Long id; > > > > @Indexed(from = "/Customers") > > private String name; > > > > ... > > } > > > > > > // Define a Repository to persist and query Customers > > > > public interface CustomerRepository extends CrudRepository<Customer, > Long> > > { > > ... > > } > > > > > > // Finally, create your *Spring Boot* application & run everything... > > > > @SpringBootApplication > > @ClientCacheApplication > > @EnableEntityDefinedRegions(basePackageClasses = Customer.class, > > clientRegionShortcut = ClientRegionShortcut.LOCAL) > > @EnableGemfireRepositories(basePackageClasses = CustomerRepository.class) > > @EnableIndexing > > @EnablePdx > > //@EnableClusterConfiguration(useHttp = true) > > public class SpringBootApacheGeodeClientApplication { > > > > public static void main(String[] args) { > > SpringApplication.run(SpringBootApacheGeodeClientApplication.class, > > args); > > } > > > > ... > > } > > > > > > I challenge anyone to find any boilerplate code in this example > application > > (other than the basic, yet essential application/feature bootstrapping). > > > > No longer do you need boilerplate code to configure and create a > > *ClientCache*, *Pool*, *Regions*, *Indexes*, PDX, etc or to perform basic > > CRUD and simple (OQL) Queries. > > > > As am application developer, you can remain completely *focused* and > > *committed* to your application business requirements and logic, and let > > *SDG* worry about the plumbing. > > > > Because, I am "initially" using a ClientRegionShortcut.LOCAL, this " > > *ClientCache*" application runs properly, all by itself, without the need > > to start a server. This is ideal when you are rapidly prototyping your > > application and want to iterate (DEV-TEST) quickly! > > > > However, it is a simple matter to also convert this application to use > > Apache Geode's client/server topology as well... simply remove the > > configuration for the clientRegionShortcut attribute in the > > @EnableEntityDefinedRegions annotation. > > > > By default, a client Region is set to PROXY and all Region ops will be > sent > > to a server using the *ClientCache* "DEFAULT" *Pool*, which is configured > > to connect to a server running on localhost, listening on port 40404, by > > default. > > > > You can start 1 or more server(s) using *Gfsh* and optionally configure > > them either using *Gfsh* or SDG. You choose! > > > > While it is likely that you will use *Gfsh* to script your configuration > of > > the server(s) in the cluster, there is nothing that helps you on the > > client, other than SDG, of course! Imagine if you have 100s of Regions > to > > configure, and not only Regions, but Indexes, Disk Stores, and other > schema > > objects as well. > > > > While it is appropriate (and even "*recommended*") to use *Gfsh* to > script > > your final production configuration deployment, during your "building" > and > > "testing' phases, personally, I prefer to use the new SDG > > @EnableClusterConfiguration(useHttp = true) annotation. This annotation > > will push all *Entity-defined Region* configuration up to the server(s) > in > > your cluster, from the client app. Not only will it create corresponding > > server-side (PARTITION) Regions for all the client (PROXY) Regions, it > will > > also create Indexes from your application domain object @Indexed fields > on > > the server(s) as well. > > > > NOTE: You need a full installation of Apache Geode on the servers to use > > the > > @EnableClusterConfiguration feature. > > > > And, if that were not enough, the @EnableClusterConfiguration annotation > > performs the cluster server(s) modification in such a way that Apache > > Geode's Cluster Configuration service [10] will remember these changes. > > Therefore, if you had new nodes, those nodes will have a consistent > > configuration. Additionally, if you bounce your entire cluster, or the > > cluster goes down, it will come back up with the same configuration when > > restarted. > > > > SDG is very careful not to stomp on your existing (sever/cluster) > > configuration, hopefully for obvious reasons. If the Region already > > exists, SDG will not attempt to create it. > > > > I will be posting more examples like this over time so that everyone here > > will become familiar with the features and conveniences that SDG is > adding. > > > > You find details on the complete example ( https://github.com/ > > jxblum/simple-spring-geode-application) in *GitHub* [11]. > > > > Happy coding! > > > > -- > > -John > > > > > > [1] https://docs.spring.io/spring/docs/current/spring-framew > > ork-reference/integration.html#cache > > [2] http://geode.apache.org/docs/guide/12/developing/continu > > ous_querying/chapter_overview.html > > [3] https://github.com/jxblum/contacts-application/tree/mast > > er/continuous-query-example > > [4] https://docs.spring.io/spring-data/geode/docs/current/re > > ference/html/#bootstrap-annotation-config-regions > > [5] https://docs.spring.io/spring-data/geode/docs/current/re > > ference/html/#bootstrap-annotation-config-caching > > [6] https://docs.spring.io/spring/docs/current/spring-framew > > ork-reference/integration.html#cache-jsr-107 > > [7] http://geode.apache.org/docs/guide/12/managing/region_co > > mpression/region_compression.html > > [8] https://docs.spring.io/spring-data/geode/docs/current/re > > ference/html/#bootstrap-annotation-config-region-compression > > [9] https://docs.spring.io/spring-data/geode/docs/2.0.2.RELE > > ASE/changelog.txt > > [10] http://geode.apache.org/docs/guide/12/configuring/clust > > er_config/gfsh_persist.html > > [11] https://github.com/jxblum/simple-spring-geode-application > > > > > > -- > Kindest Regards > ----------------------------- > *Udo Kohlmeyer* | *Pivotal* > ukohlme...@pivotal.io > <http://www.gopivotal.com/> > www.pivotal.io >