[
https://issues.apache.org/jira/browse/GEODE-8235?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
John Blum updated GEODE-8235:
-----------------------------
Priority: Major (was: Critical)
> 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)