[ 
https://issues.apache.org/jira/browse/GEODE-8235?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17129896#comment-17129896
 ] 

John Blum edited comment on GEODE-8235 at 6/9/20, 11:59 PM:
------------------------------------------------------------

I also encounter this {{Exception}} as well, but this, like the 
{{CacheClosedException}} is not helpful/useful:

{code}
Caused by: org.apache.geode.pdx.JSONFormatterException: Could not parse JSON 
document: [Source: 
(String)"{"@type":"example.app.golf.model.Golfer","id":1,"name":"John 
Blum","handicap":9}"; line: 1, column: 81]
        at 
org.apache.geode.pdx.JSONFormatter.toPdxInstance(JSONFormatter.java:206)
        at org.apache.geode.pdx.JSONFormatter.fromJSON(JSONFormatter.java:134)
        at 
org.springframework.geode.data.json.converter.support.JSONFormatterJsonToPdxConverter.jsonFormatterFromJson(JSONFormatterJsonToPdxConverter.java:69)
        at 
org.springframework.geode.data.json.converter.support.JSONFormatterJsonToPdxConverter.convertJsonToPdx(JSONFormatterJsonToPdxConverter.java:57)
        at 
org.springframework.geode.data.json.converter.support.JSONFormatterJsonToPdxConverter.convert(JSONFormatterJsonToPdxConverter.java:42)
        at 
org.springframework.geode.data.json.converter.support.JSONFormatterJsonToPdxConverter.convert(JSONFormatterJsonToPdxConverter.java:35)
        at 
org.springframework.geode.data.json.converter.support.JacksonJsonToPdxConverter.convert(JacksonJsonToPdxConverter.java:124)
        at 
org.springframework.geode.data.json.converter.support.JacksonJsonToPdxConverter.convert(JacksonJsonToPdxConverter.java:52)
        at 
org.springframework.geode.data.json.converter.JsonToPdxArrayConverter.convert(JsonToPdxArrayConverter.java:48)
        at 
org.springframework.geode.data.json.JsonCacheDataImporterExporter.toPdxArray(JsonCacheDataImporterExporter.java:479)
        at java.util.Optional.map(Optional.java:215)
        at 
org.springframework.geode.data.json.JsonCacheDataImporterExporter.doImportInto(JsonCacheDataImporterExporter.java:222)
        at 
org.springframework.geode.data.AbstractCacheDataImporterExporter.importInto(AbstractCacheDataImporterExporter.java:294)
        at java.lang.Iterable.forEach(Iterable.java:75)
        at 
java.util.Collections$SynchronizedCollection.forEach(Collections.java:2064)
        at 
org.springframework.geode.data.support.LifecycleAwareCacheDataImporterExporter.start(LifecycleAwareCacheDataImporterExporter.java:238)
        at 
org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:182)
        ... 38 more
Caused by: org.apache.geode.cache.client.NoAvailableServersException
        at 
org.apache.geode.cache.client.internal.pooling.ConnectionManagerImpl.borrowConnection(ConnectionManagerImpl.java:277)
        at 
org.apache.geode.cache.client.internal.OpExecutorImpl.execute(OpExecutorImpl.java:125)
        at 
org.apache.geode.cache.client.internal.OpExecutorImpl.execute(OpExecutorImpl.java:108)
        at 
org.apache.geode.cache.client.internal.PoolImpl.execute(PoolImpl.java:774)
        at 
org.apache.geode.cache.client.internal.GetPDXIdForTypeOp.execute(GetPDXIdForTypeOp.java:38)
        at 
org.apache.geode.pdx.internal.ClientTypeRegistration.defineType(ClientTypeRegistration.java:69)
        at 
org.apache.geode.pdx.internal.TypeRegistry.defineType(TypeRegistry.java:202)
        at 
org.apache.geode.pdx.internal.TypeRegistry.defineLocalType(TypeRegistry.java:250)
        at 
org.apache.geode.pdx.internal.PdxWriterImpl.completeByteStreamGeneration(PdxWriterImpl.java:540)
        at 
org.apache.geode.pdx.internal.PdxInstanceFactoryImpl.create(PdxInstanceFactoryImpl.java:64)
        at 
org.apache.geode.pdx.internal.json.PdxInstanceHelper.endObjectField(PdxInstanceHelper.java:209)
        at 
org.apache.geode.pdx.JSONFormatter.getPdxInstance(JSONFormatter.java:309)
        at 
org.apache.geode.pdx.JSONFormatter.toPdxInstance(JSONFormatter.java:199)
        ... 54 more

{code}

I know there are not servers because that was deliberate given my 
{{ClientCache}} (application) configuration only contains client {{LOCAL}} 
Regions.

This also proves that relying on the thrown {{Exception}} or the message is not 
reliable.


was (Author: jblum):
I also encounter this {{Exception}} as well, but this, like the 
{{CacheClosedException}} is not helpful/useful:

{code}
Caused by: org.apache.geode.pdx.JSONFormatterException: Could not parse JSON 
document: [Source: 
(String)"{"@type":"example.app.golf.model.Golfer","id":1,"name":"John 
Blum","handicap":9}"; line: 1, column: 81]
        at 
org.apache.geode.pdx.JSONFormatter.toPdxInstance(JSONFormatter.java:206)
        at org.apache.geode.pdx.JSONFormatter.fromJSON(JSONFormatter.java:134)
        at 
org.springframework.geode.data.json.converter.support.JSONFormatterJsonToPdxConverter.jsonFormatterFromJson(JSONFormatterJsonToPdxConverter.java:69)
        at 
org.springframework.geode.data.json.converter.support.JSONFormatterJsonToPdxConverter.convertJsonToPdx(JSONFormatterJsonToPdxConverter.java:57)
        at 
org.springframework.geode.data.json.converter.support.JSONFormatterJsonToPdxConverter.convert(JSONFormatterJsonToPdxConverter.java:42)
        at 
org.springframework.geode.data.json.converter.support.JSONFormatterJsonToPdxConverter.convert(JSONFormatterJsonToPdxConverter.java:35)
        at 
org.springframework.geode.data.json.converter.support.JacksonJsonToPdxConverter.convert(JacksonJsonToPdxConverter.java:124)
        at 
org.springframework.geode.data.json.converter.support.JacksonJsonToPdxConverter.convert(JacksonJsonToPdxConverter.java:52)
        at 
org.springframework.geode.data.json.converter.JsonToPdxArrayConverter.convert(JsonToPdxArrayConverter.java:48)
        at 
org.springframework.geode.data.json.JsonCacheDataImporterExporter.toPdxArray(JsonCacheDataImporterExporter.java:479)
        at java.util.Optional.map(Optional.java:215)
        at 
org.springframework.geode.data.json.JsonCacheDataImporterExporter.doImportInto(JsonCacheDataImporterExporter.java:222)
        at 
org.springframework.geode.data.AbstractCacheDataImporterExporter.importInto(AbstractCacheDataImporterExporter.java:294)
        at java.lang.Iterable.forEach(Iterable.java:75)
        at 
java.util.Collections$SynchronizedCollection.forEach(Collections.java:2064)
        at 
org.springframework.geode.data.support.LifecycleAwareCacheDataImporterExporter.start(LifecycleAwareCacheDataImporterExporter.java:238)
        at 
org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:182)
        ... 38 more
Caused by: org.apache.geode.cache.client.NoAvailableServersException
        at 
org.apache.geode.cache.client.internal.pooling.ConnectionManagerImpl.borrowConnection(ConnectionManagerImpl.java:277)
        at 
org.apache.geode.cache.client.internal.OpExecutorImpl.execute(OpExecutorImpl.java:125)
        at 
org.apache.geode.cache.client.internal.OpExecutorImpl.execute(OpExecutorImpl.java:108)
        at 
org.apache.geode.cache.client.internal.PoolImpl.execute(PoolImpl.java:774)
        at 
org.apache.geode.cache.client.internal.GetPDXIdForTypeOp.execute(GetPDXIdForTypeOp.java:38)
        at 
org.apache.geode.pdx.internal.ClientTypeRegistration.defineType(ClientTypeRegistration.java:69)
        at 
org.apache.geode.pdx.internal.TypeRegistry.defineType(TypeRegistry.java:202)
        at 
org.apache.geode.pdx.internal.TypeRegistry.defineLocalType(TypeRegistry.java:250)
        at 
org.apache.geode.pdx.internal.PdxWriterImpl.completeByteStreamGeneration(PdxWriterImpl.java:540)
        at 
org.apache.geode.pdx.internal.PdxInstanceFactoryImpl.create(PdxInstanceFactoryImpl.java:64)
        at 
org.apache.geode.pdx.internal.json.PdxInstanceHelper.endObjectField(PdxInstanceHelper.java:209)
        at 
org.apache.geode.pdx.JSONFormatter.getPdxInstance(JSONFormatter.java:309)
        at 
org.apache.geode.pdx.JSONFormatter.toPdxInstance(JSONFormatter.java:199)
        ... 54 more

{code}

I know there are not servers because that was deliberate given my 
{{ClientCache}} (application) configuration only contains client {{LOCAL}} 
Regions.


> Server should not be required to have an available PDX type registry for 
> ClientCache applications
> -------------------------------------------------------------------------------------------------
>
>                 Key: GEODE-8235
>                 URL: https://issues.apache.org/jira/browse/GEODE-8235
>             Project: Geode
>          Issue Type: Bug
>          Components: serialization
>            Reporter: John Blum
>            Priority: Major
>              Labels: JSON-PDX
>
> As an application developer using Apache Geode, if I create a {{ClientCache}} 
> application that contains client {{LOCAL}} 
> Regions only (i.e. with {{ClientRegionShortcut.LOCAL}}) and I attempt to 
> store objects in PDX serialized format, then Geode will throw an 
> inappropriate {{Exception}}:
> ACTUAL:
> {code}
> Caused by: org.apache.geode.pdx.JSONFormatterException: Could not parse JSON 
> document: [Source: 
> (String)"{"@type":"example.app.model.Customer","id":1,"name":"Jon Doe"}"; 
> line: 1, column: 63]
>       at 
> org.apache.geode.pdx.JSONFormatter.toPdxInstance(JSONFormatter.java:206) 
> ~[geode-core-1.12.0.jar:na]
>       at org.apache.geode.pdx.JSONFormatter.fromJSON(JSONFormatter.java:134) 
> ~[geode-core-1.12.0.jar:na]
>       at ...
>       ... 39 common frames omitted
> Caused by: org.apache.geode.cache.CacheClosedException: Client pools have 
> been closed so the PDX type registry is not available.
>       at 
> org.apache.geode.internal.cache.GemFireCacheImpl.getCacheClosedException(GemFireCacheImpl.java:1630)
>  ~[geode-core-1.12.0.jar:na]
>       at 
> org.apache.geode.internal.cache.GemFireCacheImpl.getCacheClosedException(GemFireCacheImpl.java:1619)
>  ~[geode-core-1.12.0.jar:na]
>       at 
> org.apache.geode.pdx.internal.ClientTypeRegistration.getAllPools(ClientTypeRegistration.java:153)
>  ~[geode-core-1.12.0.jar:na]
>       at 
> org.apache.geode.pdx.internal.ClientTypeRegistration.defineType(ClientTypeRegistration.java:63)
>  ~[geode-core-1.12.0.jar:na]
>       at 
> org.apache.geode.pdx.internal.TypeRegistry.defineType(TypeRegistry.java:202) 
> ~[geode-core-1.12.0.jar:na]
>       at 
> org.apache.geode.pdx.internal.TypeRegistry.defineLocalType(TypeRegistry.java:250)
>  ~[geode-core-1.12.0.jar:na]
>       at 
> org.apache.geode.pdx.internal.PdxWriterImpl.completeByteStreamGeneration(PdxWriterImpl.java:540)
>  ~[geode-core-1.12.0.jar:na]
>       at 
> org.apache.geode.pdx.internal.PdxInstanceFactoryImpl.create(PdxInstanceFactoryImpl.java:64)
>  ~[geode-core-1.12.0.jar:na]
>       at 
> org.apache.geode.pdx.internal.json.PdxInstanceHelper.endObjectField(PdxInstanceHelper.java:209)
>  ~[geode-core-1.12.0.jar:na]
>       at 
> org.apache.geode.pdx.JSONFormatter.getPdxInstance(JSONFormatter.java:309) 
> ~[geode-core-1.12.0.jar:na]
>       at 
> org.apache.geode.pdx.JSONFormatter.toPdxInstance(JSONFormatter.java:199) 
> ~[geode-core-1.12.0.jar:na]
>       ... 55 common frames omitted
> {code}
> First of all this is not even an appropriate Exception!  
> {{CacheCloseException}} because my client had no open Pools to an available 
> server with a PDX type registry.
> 1. Creating client local-only applications not connected to an entire cluster 
> or server is a very useful and practical arrangement during development.
> 2. My application should not have to be a peer {{Cache}} to have an available 
> PDX type registry to store PDX instances in client {{LOCAL}} Regions.
> 3. It is actually highly useful to run my application in local-only mode, in 
> a local-only context (i.e. with only client {{LOCAL}} Regions) without a 
> cluster or server for development, testing and debugging purposes.
> 4. It is also really useful if my application can also store PDX bytes, even 
> in client {{LOCAL}} (only) Regions for development, testing and debugging 
> purposes.
> Some find it hard to imagine why an application would want to do this, store 
> PDX instead of POJOs.  However, consider the fact that my application might 
> be part of a larger Microservices architecture that communicate via a RESTful 
> interfaces.  They pass JSON back and forth, which might either be complex or 
> unstructured.  Either way, it is possible I don't have or don't want to 
> create POJOs (types) matching the JSON that my Microservice consumes.  I 
> simply want access to certain bits of information which PDX is adequately 
> suited for.  These client LOCAL Regions might even be temporary.  When 
> connected, I might even want to share this data (or aggregated data) with 
> Native Clients which most certainly won't have Java types matching the JSON 
> content, raw or summarized.
> EXPECTED:
> As a developer using Apache Geode, I expected to be able to develop 
> (primarily) {{ClientCache}} applications, run them locally with client 
> {{LOCAL}} Regions, storing data in PDX format as necessary, all without 
> requiring a complex setup (e.g. such as a cluster or a server).



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to