Try removing your Cache reference from your config. If the xml is being
bootstraped it will be created there. Then try referencing your Region as a
member of the class you are working in using the @Resource annotation. Ie:



  @Resource(name = "Parent")
  private Region<?, ?> parent;


To get a reference to foo.ScheduleRequest from the Cache you will need to
have that class definition on your classpath (or that class defined in the
client in the same package).

On Dec 15, 2016 3:57 AM, "Preben Asmussen DR" <[email protected]> wrote:

Hi



I’m trying out Geode in client server mode with the following setup



Using gfsh I have created a region as

create region --name=/schedule --type=REPLICATE_PERSISTENT



and enabled pdx disk store on the server

configure pdx --disk-store=DEFAULT



The Spring Boot client is setup as

*public* *class* GeodeClientConfiguration {



    @Bean

    ClientCache cache() {

        *return* *new* ClientCacheFactory()

            .setPdxPersistent(*true*)

            .addPoolLocator("localhost", 10334)

            .setPdxDiskStore("foo")

            .setPdxReadSerialized(*true*)

            .setPdxSerializer(*new* ReflectionBasedAutoSerializer(*false*,
"foo.ScheduleRequest", "bar.EpgProgram"))

            .create();

    }



    @Bean

    Region<ScheduleRequest, List<EpgProgram>> testRegion(*final*
ClientCache cache) {

        *return* cache.<ScheduleRequest, List<EpgProgram>> getRegion(
"schedule");

    }



I has to include a cache.xml as

<?xml version=*"1.0"* encoding=*"UTF-8"*?>

<client-cache

        xmlns=*"http://geode.apache.org/schema/cache
<http://geode.apache.org/schema/cache>"*

        xmlns:xsi=*"http://www.w3.org/2001/XMLSchema-instance
<http://www.w3.org/2001/XMLSchema-instance>"*

        xsi:schemaLocation=*"http://geode.apache.org/schema/cache
<http://geode.apache.org/schema/cache>*

*                        http://geode.apache.org/schema/cache/cache-1.0.xsd
<http://geode.apache.org/schema/cache/cache-1.0.xsd>"*

        version=*"1.0"*>

    <pool name=*"serverPool"*>

        <locator host=*"localhost"* port=*"10334"*/>

    </pool>

    <pdx disk-store-name=*"foo"* read-serialized=*"true"*>

        <pdx-serializer>

            <class-name>org.apache.geode.pdx.ReflectionBasedAutoSerializer</
class-name>

            <parameter name=*"classes"*>

                <string>xxx….</string>

            </parameter>

        </pdx-serializer>



    </pdx>

    <region name=*"schedule"*  refid=*"CACHING_PROXY"*>

        <region-attributes pool-name=*"serverPool"*

                scope=*"global"* />

    </region>

</client-cache>



I guess this shouldn’t he necessary, but I didn’t currently manage to get
the java config work without it ??



Logs from boot startup shows that it is running in client mode

[info 2016/12/15 09:31:49.278 CET <restartedMain> tid=0x14] Running in
client mode





[info 2016/12/15 09:31:49.510 CET <restartedMain> tid=0x14] Pool serverPool
started with multiuser-authentication=false



[info 2016/12/15 09:31:49.518 CET <poolTimer-serverPool-2> tid=0x28]
AutoConnectionSource discovered new locators [host/10.65.95.154:10334]



[info 2016/12/15 09:31:49.519 CET <poolTimer-serverPool-3> tid=0x29]
Updating membership port.  Port changed from 0 to 51.808.  ID is now
A78029(1164:loner):0:00de9b01



When using the region in code as



        ScheduleRequest scheduleRequest = *new* ScheduleRequest(channel,
broadcastDate);

        List<EpgProgram> *list* = schedule.get(scheduleRequest);

I get an Pdx Serialization exception



2016-12-15 09:32:50.465  INFO 1164 --- [nio-8080-exec-1]
o.s.web.servlet.DispatcherServlet
: FrameworkServlet 'dispatcherServlet': initialization completed in 24 ms

[info 2016/12/15 09:32:54.564 CET <http-nio-8080-exec-1> tid=0x3c] Auto
serializer generating type for class foo.ScheduleRequest for fields:

    channel: private java.lang.String foo.ScheduleRequest.channel

    broadcastDate: private java.time.LocalDate foo.ScheduleRequest.
broadcastDate





[info 2016/12/15 09:32:54.572 CET <http-nio-8080-exec-1> tid=0x3c]
Defining: PdxType[

    dsid=0, typenum=2, name=foo.ScheduleRequest, fields=[

        channel:String:0:idx0(relativeOffset)=0:idx1(vlfOffsetIndex)=-1

        broadcastDate:Object:1:1:idx0(relativeOffset)=0:idx1(
vlfOffsetIndex)=1]]



2016-12-15 09:32:54.607 ERROR 1164 --- [nio-8080-exec-1]
o.a.c.c.C.[.[.[/].[dispatcherServlet]
: Servlet.service() for servlet [dispatcherServlet] in context with path []
threw exception [Request processing failed; nested exception is
org.apache.geode.cache.client.ServerOperationException: remote server on
A78029(1164:loner):51808:00de9b01:
org.apache.geode.pdx.PdxSerializationException:
Could not create an instance of a class foo.ScheduleRequest] with root cause



java.lang.ClassNotFoundException: foo.ScheduleRequest

                             at org.apache.geode.internal.
ClassPathLoader.forName(ClassPathLoader.java:426)
~[geode-core-1.0.0-incubating.jar:na]

                             at org.apache.geode.internal.
InternalDataSerializer.getCachedClass(InternalDataSerializer.java:4006)
~[geode-core-1.0.0-incubating.jar:na]

                             at org.apache.geode.pdx.internal.
PdxType.getPdxClass(PdxType.java:236) ~[geode-core-1.0.0-incubating.jar:na]

                             at org.apache.geode.pdx.internal.
PdxReaderImpl.basicGetObject(PdxReaderImpl.java:686)
~[geode-core-1.0.0-incubating.jar:na]

                             at org.apache.geode.pdx.internal.
PdxReaderImpl.getObject(PdxReaderImpl.java:682)
~[geode-core-1.0.0-incubating.jar:na]

                             at org.apache.geode.internal.
InternalDataSerializer.readPdxSerializable(InternalDataSerializer.java:3210)
~[geode-core-1.0.0-incubating.jar:na]

                             at org.apache.geode.internal.
InternalDataSerializer.basicReadObject(InternalDataSerializer.java:3008)
~[geode-core-1.0.0-incubating.jar:na]

                             at
org.apache.geode.DataSerializer.readObject(DataSerializer.java:3281)
~[geode-core-1.0.0-incubating.jar:na]

                             at org.apache.geode.internal.util.BlobHelper.
deserializeBlob(BlobHelper.java:94) ~[geode-core-1.0.0-incubating.jar:na]

                             at org.apache.geode.internal.
cache.tier.sockets.CacheServerHelper.deserialize(CacheServerHelper.java:82)
~[geode-core-1.0.0-incubating.jar:na]

                             at org.apache.geode.internal.
cache.tier.sockets.Part.getObject(Part.java:273)
~[geode-core-1.0.0-incubating.jar:na]

                             at org.apache.geode.internal.
cache.tier.sockets.Part.getObject(Part.java:282)
~[geode-core-1.0.0-incubating.jar:na]

                             at org.apache.geode.internal.
cache.tier.sockets.Part.getStringOrObject(Part.java:287)
~[geode-core-1.0.0-incubating.jar:na]

                             at org.apache.geode.internal.
cache.tier.sockets.command.Get70.cmdExecute(Get70.java:95)
~[geode-core-1.0.0-incubating.jar:na]

                             at org.apache.geode.internal.
cache.tier.sockets.BaseCommand.execute(BaseCommand.java:147)
~[geode-core-1.0.0-incubating.jar:na]

                             at org.apache.geode.internal.
cache.tier.sockets.ServerConnection.doNormalMsg(ServerConnection.java:783)
~[geode-core-1.0.0-incubating.jar:na]

                             at org.apache.geode.internal.
cache.tier.sockets.ServerConnection.doOneMessage(ServerConnection.java:913)
~[geode-core-1.0.0-incubating.jar:na]

                             at org.apache.geode.internal.
cache.tier.sockets.ServerConnection.run(ServerConnection.java:1180)
~[geode-core-1.0.0-incubating.jar:na]

                             at java.util.concurrent.
ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) ~[na:1.8.0_73]

                             at java.util.concurrent.
ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) ~[na:1.8.0_73]

                             at org.apache.geode.internal.
cache.tier.sockets.AcceptorImpl$1$1.run(AcceptorImpl.java:546)
~[geode-core-1.0.0-incubating.jar:na]

                             at java.lang.Thread.run(Thread.java:745)
[na:1.8.0_73]



I guess the geode server should have the pdx serializing pushed ?



Best regards

Preben

Reply via email to