Java client via Scala - StringBinIndex.Name not accessible

Toby Corkindale toby at dryft.net
Wed Dec 16 19:14:41 EST 2015


Replying to myself, but with the solution.
After some discussion on a Scala list, I was able to get the below Scala
code to compile. There were two important changes.

1) Using StringBinIndex.named(name) to build the index rather than
StringBinIndex.Name(name), due to the interop issues.

2) Parameterising the getIndex function explicitly. Someone on the scala
list suggested that this was because the type signature of the Java client
code is not strictly correct. I will present their comments here in case
someone can confirm?
Instead of:
public <V extends RiakIndex, T extends RiakIndex.Name<V>> V getIndex(T
name)
It should be:
public <V extends RiakIndex<?>, T extends RiakIndex.Name<V>> V getIndex(T
name)


The complete Scala example for writing to a key with 2i indexing is as
follows:
(assumes "riak" is an already connected riak instance)

  def storeByKeyRaw(bucketName: String, key: String, data: Array[Byte],
indexes: Map[String,String] = Map()) = {
    val bucket = new Namespace("default", bucketName)
    val loc = new Location(bucket, key)
    val obj = new RiakObject
    obj.setValue(BinaryValue.create(data))

    indexes.foreach{ case (name, contents) =>
      val idx = StringBinIndex.named(name)

obj.getIndexes().getIndex[StringBinIndex,StringBinIndex.Name](idx).add(contents)
    }

    val response = riak.execute(new
StoreValue.Builder(obj).withLocation(loc).build)
   // ......
  }

On Wed, 16 Dec 2015 at 15:10 Toby Corkindale <toby at dryft.net> wrote:

> Hi,
> I'm having a lot of trouble getting a particular part of the Riak java
> client to work when called from Scala.
>
> There's a Java class which I'm not allowed to instantiate directly, but
> must instead call an embedded subclass's static constructor method.
>
> ie.
> import com.basho.riak.client.core.query.indexes.StringBinIndex
> val idx = new StringBinIndex.Name("colours")
>
> However, in Scala, I get this error reported:
> Constructor Name in class Name cannot be accessed in class [myclass]
>
> Docs for the class:
>
> http://basho.github.io/riak-java-client/2.0.1/index.html?com/basho/riak/client/core/query/indexes/StringBinIndex.html
>
> I don't suppose anyone can see what I'm doing wrong, or suggest how to
> make this work from Scala?
>
> Cheers,
> Toby
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.basho.com/pipermail/riak-users_lists.basho.com/attachments/20151217/78ec1dcc/attachment-0002.html>


More information about the riak-users mailing list