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)

Reply via email to