I should also add that using the *Composite* Design Pattern is preferable over a single, "bloated" PdxSerializer implementation (which I see all too often in user applications) handling multiple domain object types (<sigh>), particularly when the ReflectionBasedAutoSerializer is not, or cannot be used.
Food for thought. On Tue, Mar 28, 2017 at 11:43 AM, John Blum <jb...@pivotal.io> wrote: > +1 to what Udo stated; additionally.. > > It is also advisable, if you required more fine grained control over the > serialization of your POJOs (i.e. necessarily more than the > ReflectionBasedAutoSerializer > <http://geode.apache.org/releases/latest/javadoc/org/apache/geode/pdx/ReflectionBasedAutoSerializer.html> > [2]), that you use, say, the *Composite* Design Pattern > <https://en.wikipedia.org/wiki/Composite_pattern> [1] to "compose" a > collection of PdxSerializer implementations that are specific to each > type of POJO. This is even preferable over having each POJO implement > Geode's PdxSerializable interface which affords you similar fine grained > control. > > It is unfortunate that you cannot register more than 1 PdxSerializer per > cache instance for different domain object, but essentially, you can > achieve a similar effect using the Composite Design Pattern. Here is 1 > example... > > https://github.com/spring-projects/spring-data-gemfire/ > blob/master/src/test/java/org/springframework/data/gemfire/function/ > ClientCacheFunctionExecutionWithPdxIntegrationTest.java#L312-L348 > > This "*ComposablePdxSerializer*" is composed of 2 PdxSerializer > implementations, 1 for each domain object... > > // PersonPdxSerializer > > https://github.com/spring-projects/spring-data-gemfire/ > blob/master/src/test/java/org/springframework/data/gemfire/function/ > ClientCacheFunctionExecutionWithPdxIntegrationTest.java#L408-L430 > > // AddressPdxSerializer > > https://github.com/spring-projects/spring-data-gemfire/ > blob/master/src/test/java/org/springframework/data/gemfire/function/ > ClientCacheFunctionExecutionWithPdxIntegrationTest.java#L382-L407 > > And then the "*ComposablePdxSerializer*" (and individual, POJO based > PdxSerializer implementations) are configured and registered > accordingly... > > https://github.com/spring-projects/spring-data-gemfire/ > blob/master/src/test/resources/org/springframework/data/gemfire/function/ > ClientCacheFunctionExecutionWithPdxIntegrationTest-server- > context.xml#L28-L42 > > Of course, this will all shown in *Spring Data Geode* (XML) > configuration, but a similar configuration can be achieved using the > equivalent Geode config where *Spring* (*Data Geode*) is not used. > > -j > > > > [1] https://en.wikipedia.org/wiki/Composite_pattern > [2] http://geode.apache.org/releases/latest/javadoc/org/apache/geode/pdx/ > ReflectionBasedAutoSerializer.html > > > On Tue, Mar 28, 2017 at 11:20 AM, Udo Kohlmeyer <ukohlme...@pivotal.io> > wrote: > >> Hi there Olivier. >> >> It is hard to say what you are trying to do... but to answer your >> question... The typical approach is to start a clientcache which spans >> lifetime of the client application. It is not something that I would want >> to start/stop as the mood strikes. >> >> As for generic PdxSerializer vs Pojo specific serializer, I would error >> on the side of Pojo specific serializer, as the serialization logic is >> defined on the pojo. BUT if you don't want to "taint" your pojo with >> serialization code, you could use a generic PDXSerializer. In this case you >> can write your own or use the provided ReflectionBasedAutoSerializer. [0] >> >> So to *hopefully* answer your question. 1 clientcache, with either 1 >> generic PdxSerializer (custom or ReflectionAutoSerializer) or 2 pojo >> specific PdxSerializable implementations. >> >> --Udo >> >> [0] - https://geode.apache.org/docs/guide/developing/data_serializ >> ation/gemfire_pdx_serialization.html >> >> >> >> >> On 3/28/17 10:47, Olivier NOUGUIER wrote: >> >>> Hi, >>> In a reactive extension to connect Apache Geode with akka-stream in >>> alpakka community project [0], I don't know how to use ClientCache in an >>> efficient way. >>> >>> Given: >>> >>> - 2 Pojos: Animal and Person >>> - 2 Regions for each >>> >>> Should I use 2 ClientCaches with 2 custom PDXSerializer or only one >>> ClientCache with a more generic PDXSerializer ? >>> >>> Another way to ask, if ClientCache is expensive to instanciate. >>> >>> Thanks in advance. >>> >>> PS: I've hesitate to post this on the user list... >>> >>> >>> [0]: https://github.com/cheleb/alpakka/tree/geode/geode >>> >>> >> > > > -- > -John > john.blum10101 (skype) > -- -John john.blum10101 (skype)