[ 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)