Vova, Pavel, Sergey,

Thanks for you comments.

1) There one corner case with POJO objects in cache.
Binary marshaler convert by fields, not by getters. So if you have

class Person {
  private int orgId;
 ...

  public int getOrganizationId() {...}
}

POJO will be transformed to {"organizationId": 1} JSON
binary will be transformed to  {"orgId": 1} JSON

So in this case [keepBinary=true|false]  can make sense for end user.

We can have keepBinary=true by default, and left an option to user if he
needs to transform POJO to JSON for some reason.
But I agree that double transformation is just a waste of CPU and memory :)

3) How about to throw exception by default and output "$circular_ref" in
case of some option, for example, "allowCircularRefs=true".


On Mon, Feb 26, 2018 at 6:39 PM, Sergey Kozlov <skoz...@gridgain.com> wrote:

> Vova, Alexey
>
> 3) The exception is not enough for that case. We should return a proper
> error message in the json reply.
>
> On Mon, Feb 26, 2018 at 2:20 PM, Vladimir Ozerov <voze...@gridgain.com>
> wrote:
>
> > My 50 cents:
> > 1) Agree with Pavel, not need to deserialize at all
> > 2) May be you see everything in the upper case because this is how CREATE
> > TABLE works - every object name (table name, column name, etc.) are
> > converted to upper case by default. This is expected behavior of every
> SQL
> > engine. If you want to preserve cases please consider using qoutes around
> > column names (e.g. CREATE TABLE "myTable"("myColumn" INT PRIMARY KEY).
> > 3) I think we should throw an exception in this case - objects with
> > recursive dependencies cannot be expressed in text form (whether this is
> > XML, JSON or anything else).
> >
> > On Mon, Feb 26, 2018 at 10:00 AM, Pavel Tupitsyn <ptupit...@apache.org>
> > wrote:
> >
> > > Hi Alexey,
> > >
> > > 1) IMO for this task you should ALWAYS work in binary mode.
> > > What is the use case for deserializing with a real class and then
> > > serializing to JSON?
> > > Looks like a waste of resources to me.
> > >
> > > 2) This should not be the case, please re-check your code.
> > > Binary meta preserves original case (stores field names as is), just
> > > checked this with 2.4 build.
> > >
> > > 3) JSON serializers typically handle this by adding special fields ($id
> > and
> > > $ref in Json.NET, for example).
> > > But I believe this is a rare use case and can be skipped in initial
> > > implementation.
> > >
> > > Thanks,
> > > Pavel
> > >
> > > On Mon, Feb 26, 2018 at 7:38 AM, Alexey Kuznetsov <
> akuznet...@apache.org
> > >
> > > wrote:
> > >
> > > > Hi,
> > > >
> > > > I'm working on  IGNITE-7803 REST: Add support to get values inserted
> > via
> > > > API or SQL[1]
> > > >
> > > > And found following issues:
> > > >
> > > > 1. First, if server node that will handle REST request does not have
> > > class
> > > > of object that we want to get from cache I need to set
> > cache.keepBinary()
> > > > in order to avoid object deserialization and work directly with
> binary
> > > > metadata directly.
> > > >
> > > > But in some cases node could have class in classpath and user may
> need
> > to
> > > > use that class.
> > > >
> > > > How about to add option "keepBinary=true"  and let user handle this
> by
> > > > himself?
> > > >
> > > > 2. Second, in binary metadata all names stored in upper case. So,
> > binary
> > > > object converted to JSON will be like: {"ID": 1, "NAME": "Alex",
> > > "SALARY":
> > > > 300}
> > > >
> > > > It is OK?
> > > >
> > > > 3. Should we handle circular references in binary objects? If yes,
> then
> > > > how?
> > > >
> > > >
> > > > [1]   https://issues.apache.org/jira/browse/IGNITE-7803
> > > >
> > > >
> > > >
> > > > --
> > > > Alexey Kuznetsov
> > > >
> > >
> >
>
>
>
> --
> Sergey Kozlov
> GridGain Systems
> www.gridgain.com
>



-- 
Alexey Kuznetsov
GridGain Systems
www.gridgain.com

Reply via email to