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