question about java client

Brian Roach roach at basho.com
Tue Jul 30 17:44:00 EDT 2013


Paul,

Ugh ... ok, makes sense now. Jackson is like that. We actually had
someone do a PR for secondary indexes to allow method annotation, but
... we hadn't done it for links. It's now on the todo list.

Thanks,
- Roach

On Tue, Jul 30, 2013 at 3:37 PM, Paul Ingalls <paul at fanzo.me> wrote:
> I figured out what I was doing.  I had a getter/setter for the fields in
> addition to the fields themselves, since they were private.  I had to
> JsonIgnore the getters/setters since I couldn't tag them with the riak
> annotations.
>
> Paul Ingalls
> Founder & CEO Fanzo
> paul at fanzo.me
> @paulingalls
> http://www.linkedin.com/in/paulingalls
>
>
>
> On Jul 30, 2013, at 2:34 PM, Brian Roach <roach at basho.com> wrote:
>
> Paul,
>
> The annotated fields are not included in the Serialization using the
> JSONConverter (at least, not in the current version of the client; I
> think I did some fixes around that way back in like v1.0.7). If they
> are, you've got something odd going on in your domain object.
>
> Here's a (very basic) example:
>
> public class App3
> {
>
>    public static void main(String[] args) throws RiakException
>    {
>        IRiakClient client = RiakFactory.pbcClient();
>        Bucket b = client.fetchBucket("test_bucket").execute();
>
>        MyPojo mp = new MyPojo();
>        mp.key = "key0";
>        mp.value = "This is my value";
>
>        Set<RiakLink> links = new HashSet<RiakLink>();
>        for (int i = 1; i < 4; i++)
>        {
>            RiakLink link = new RiakLink("test_bucket", "key" + i,
> "myLinkTag");
>            links.add(link);
>        }
>        mp.links = links;
>        b.store(mp).execute();
>
>        mp = b.fetch("key0", MyPojo.class).execute();
>
>        System.out.println(mp.key);
>        System.out.println(mp.value);
>        for (RiakLink link : mp.links)
>        {
>            System.out.println(link.getKey());
>        }
>
>        client.shutdown();
>    }
>
> }
>
> class MyPojo
> {
>    public @RiakKey String key;
>    public @RiakLinks Collection<RiakLink> links;
>    public String value;
>
> }
>
> -----------------------
> That outputs:
>
> key0
> This is my value
> key2
> key3
> key1
>
> Checking it with curl shows it as it should be:
>
> roach$ curl -v localhost:8098/buckets/test_bucket/keys/key0
> * About to connect() to localhost port 8098 (#0)
> *   Trying ::1... Connection refused
> *   Trying 127.0.0.1... connected
> * Connected to localhost (127.0.0.1) port 8098 (#0)
>
> GET /buckets/test_bucket/keys/key0 HTTP/1.1
> User-Agent: curl/7.21.4 (universal-apple-darwin11.0) libcurl/7.21.4
> OpenSSL/0.9.8x zlib/1.2.5
> Host: localhost:8098
> Accept: */*
>
> < HTTP/1.1 200 OK
> < X-Riak-Vclock: a85hYGBgzGDKBVIcypz/fga+nNWUwZTInMfK4Lcq5zRfFgA=
> < Vary: Accept-Encoding
> < Server: MochiWeb/1.1 WebMachine/1.10.0 (never breaks eye contact)
> < Link: </buckets/test_bucket/keys/key1>; riaktag="myLinkTag",
> </buckets/test_bucket/keys/key3>; riaktag="myLinkTag",
> </buckets/test_bucket/keys/key2>; riaktag="myLinkTag",
> </buckets/test_bucket>; rel="up"
> < Last-Modified: Tue, 30 Jul 2013 21:21:18 GMT
> < ETag: "1ikpRECrH40O93LxiTmnKz"
> < Date: Tue, 30 Jul 2013 21:21:57 GMT
> < Content-Type: application/json; charset=UTF-8
> < Content-Length: 28
> <
> * Connection #0 to host localhost left intact
> * Closing connection #0
> {"value":"This is my value"}
>
>
>
> On Tue, Jul 30, 2013 at 2:38 PM, Paul Ingalls <paul at fanzo.me> wrote:
>
> Hey Brian,
>
> After a bit of messing around, I'm now dropping objects into the correct
> bucket using the links annotation.  However,  I am noticing that the json is
> including the metadata from the domain object, i.e. things tagged with
> @RiakKey, @RiakIndex or @RiakLinks.  I was under the impression this data
> would be left out.  I wouldn't care a whole lot, but when I'm getting data
> back in via a fetch, the JSONConverter is crashing saying it doesn't know
> how to convert the RiakLink object since there isn't an appropriate
> constructor for it.
>
> Do I need to specifically @JsonIgnore fields tagged with one of the Riak
> tags?
>
> Thanks!
>
> Paul
>
>
> Paul Ingalls
> Founder & CEO Fanzo
> paul at fanzo.me
> @paulingalls
> http://www.linkedin.com/in/paulingalls
>
>
>
> On Jul 30, 2013, at 11:20 AM, Paul Ingalls <paul at fanzo.me> wrote:
>
> Ok, thats perfect.  I totally missed the annotation for links…
>
> Will give that a shot…
>
> Thanks!
>
> Paul Ingalls
> Founder & CEO Fanzo
> paul at fanzo.me
> @paulingalls
> http://www.linkedin.com/in/paulingalls
>
>
>
> On Jul 30, 2013, at 11:16 AM, Brian Roach <roach at basho.com> wrote:
>
> Paul,
>
> I'm not quite sure I understand what you're asking.
>
> If you do a fetch and have siblings each one is converted to your
> domain object using the Converter and then passed as a Collection to
> the ConflictResolver. Each sibling is going to include its links
> and/or indexes as long as the Converter is injecting them into the
> domain object and you can resolve them in the ConflictResolver.
>
> The default JSONConverter, for example, injects them into your domain
> object via annotations from the com.basho.riak.client.convert[1]
> package.
>
> Thanks,
> Brian Roach
>
> http://basho.github.io/riak-java-client/1.4.0/com/basho/riak/client/convert/package-summary.html
>
>
> On Tue, Jul 30, 2013 at 11:41 AM, Paul Ingalls <paul at fanzo.me> wrote:
>
> Newbie with Riak, and looking at the java client.
>
> Specifically, I've been digging into the domain mapping apis.  Looking into
> the code, it appears to me that, if I'm using links a bunch or even
> secondary indexes, that I could lose some data during the conflict
> resolution phase.  I see where links and other relevant user data gets
> cached during the conversion phase from the fetch and then patched back in
> during the conversion phase for the store.  However, it doesn't look like
> you have the opportunity during the resolution phase to merge metadata.
> Should I focus on using the raw client, or am I missing something?
>
> Thanks!
>
> Paul
>
>
>
>
> Paul Ingalls
> Founder & CEO Fanzo
> paul at fanzo.me
> @paulingalls
> http://www.linkedin.com/in/paulingalls
>
>
>
>
> _______________________________________________
> riak-users mailing list
> riak-users at lists.basho.com
> http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com
>
>
>
>




More information about the riak-users mailing list