2017-07-01 5 views
0

J'utilise Riak KV avec le client Java et je suis incapable d'écrire sur le RiakNode, bien que j'ai créé un Bucket avec le nom de l'espace Je veux créer un objet.ERREUR com.basho.riak.client.core.RiakNode - Échec de l'écriture sur RiakNode

J'ai essentiellement la classe TasteOfRiak.java, qui a été fourni par le site du développeur de basho: https://raw.githubusercontent.com/basho/basho_docs/master/extras/code-examples/TasteOfRiak.java

import com.basho.riak.client.api.RiakClient; 
import com.basho.riak.client.api.commands.kv.DeleteValue; 
import com.basho.riak.client.api.commands.kv.FetchValue; 
import com.basho.riak.client.api.commands.kv.StoreValue; 
import com.basho.riak.client.api.commands.kv.UpdateValue; 
import com.basho.riak.client.core.RiakCluster; 
import com.basho.riak.client.core.RiakNode; 
import com.basho.riak.client.core.query.Location; 
import com.basho.riak.client.core.query.Namespace; 
import com.basho.riak.client.core.query.RiakObject; 
import com.basho.riak.client.core.util.BinaryValue; 

import java.net.UnknownHostException; 

public class TasteOfRiak { 
    // A basic POJO class to demonstrate typed exchanges with Riak 
    public static class Book { 
     public String title; 
     public String author; 
     public String body; 
     public String isbn; 
     public Integer copiesOwned; 
    } 

    // This will allow us to update the book object handling the 
    // entire fetch/modify/update cycle. 
    public static class BookUpdate extends UpdateValue.Update<Book> { 
     private final Book update; 
     public BookUpdate(Book update){ 
      this.update = update; 
     } 

     @Override 
     public Book apply(Book t) { 
      if(t == null) { 
       t = new Book(); 
      } 

      t.author = update.author; 
      t.body = update.body; 
      t.copiesOwned = update.copiesOwned; 
      t.isbn = update.isbn; 
      t.title = update.title; 

      return t; 
     } 
    } 

    // This will create a client object that we can use to interact with Riak 
    private static RiakCluster setUpCluster() throws UnknownHostException { 
     // This example will use only one node listening on localhost:10017 
     RiakNode node = new RiakNode.Builder() 
       .withRemoteAddress("127.0.0.1") 
       .withRemotePort(8087) 
       .build(); 

     // This cluster object takes our one node as an argument 
     RiakCluster cluster = new RiakCluster.Builder(node) 
       .build(); 

     // The cluster must be started to work, otherwise you will see errors 
     cluster.start(); 

     return cluster; 
    } 

    public static void main(String[] args) { 
     try { 
      // First, we'll create a basic object storing a movie quote 
      RiakObject quoteObject = new RiakObject() 
        // We tell Riak that we're storing plaintext, not JSON, HTML, etc. 
        .setContentType("text/plain") 
          // Objects are ultimately stored as binaries 
        .setValue(BinaryValue.create("You're dangerous, Maverick")); 
      System.out.println("Basic object created"); 

      // In the new Java client, instead of buckets you interact with Namespace 
      // objects, which consist of a bucket AND a bucket type; if you don't 
      // supply a bucket type, "default" is used; the Namespace below will set 
      // only a bucket, without supplying a bucket type 
      Namespace quotesBucket = new Namespace("quotes"); 

      // With our Namespace object in hand, we can create a Location object, 
      // which allows us to pass in a key as well 
      Location quoteObjectLocation = new Location(quotesBucket, "Iceman"); 
      System.out.println("Location object created for quote object"); 

      // With our RiakObject in hand, we can create a StoreValue operation 
      StoreValue storeOp = new StoreValue.Builder(quoteObject) 
        .withLocation(quoteObjectLocation) 
        .build(); 
      System.out.println("StoreValue operation created"); 

      // And now we can use our setUpCluster() function to create a cluster 
      // object which we can then use to create a client object and then 
      // execute our storage operation 
      RiakCluster cluster = setUpCluster(); 
      RiakClient client = new RiakClient(cluster); 
      System.out.println("Client object successfully created"); 

      StoreValue.Response storeOpResp = client.execute(storeOp); 
      System.out.println("Object storage operation successfully completed"); 

      // Now we can verify that the object has been stored properly by 
      // creating and executing a FetchValue operation 
      FetchValue fetchOp = new FetchValue.Builder(quoteObjectLocation) 
        .build(); 
      RiakObject fetchedObject = client.execute(fetchOp).getValue(RiakObject.class); 
      assert(fetchedObject.getValue().equals(quoteObject.getValue())); 
      System.out.println("Success! The object we created and the object we fetched have the same value"); 

      // Now update the fetched object 
      fetchedObject.setValue(BinaryValue.create("You can be my wingman any time.")); 
      StoreValue updateOp = new StoreValue.Builder(fetchedObject) 
        .withLocation(quoteObjectLocation) 
        .build(); 
      StoreValue.Response updateOpResp = client.execute(updateOp); 
      updateOpResp = client.execute(updateOp); 

      // And we'll delete the object 
      DeleteValue deleteOp = new DeleteValue.Builder(quoteObjectLocation) 
        .build(); 
      client.execute(deleteOp); 
      System.out.println("Quote object successfully deleted"); 

      Book mobyDick = new Book(); 
      mobyDick.title = "Moby Dick"; 
      mobyDick.author = "Herman Melville"; 
      mobyDick.body = "Call me Ishmael. Some years ago..."; 
      mobyDick.isbn = "1111979723"; 
      mobyDick.copiesOwned = 3; 
      System.out.println("Book object created"); 

      // Now we'll assign a Location for the book, create a StoreValue 
      // operation, and store the book 
      Namespace booksBucket = new Namespace("books"); 
      Location mobyDickLocation = new Location(booksBucket, "moby_dick"); 
      StoreValue storeBookOp = new StoreValue.Builder(mobyDick) 
        .withLocation(mobyDickLocation) 
        .build(); 
      client.execute(storeBookOp); 
      System.out.println("Moby Dick information now stored in Riak"); 

      // And we'll verify that we can fetch the info about Moby Dick and 
      // that that info will match the object we created initially 
      FetchValue fetchMobyDickOp = new FetchValue.Builder(mobyDickLocation) 
        .build(); 
      Book fetchedBook = client.execute(fetchMobyDickOp).getValue(Book.class); 
      System.out.println("Book object successfully fetched"); 

      assert(mobyDick.getClass() == fetchedBook.getClass()); 
      assert(mobyDick.title.equals(fetchedBook.title)); 
      assert(mobyDick.author.equals(fetchedBook.author)); 
      // And so on... 

      // Now to update the book with additional copies 
      mobyDick.copiesOwned = 5; 
      BookUpdate updatedBook = new BookUpdate(mobyDick); 
      UpdateValue updateValue = new UpdateValue.Builder(mobyDickLocation) 
        .withUpdate(updatedBook).build(); 
      UpdateValue.Response response = client.execute(updateValue); 

      System.out.println("Success! All of our tests check out"); 

      // Now that we're all finished, we should shut our cluster object down 
      cluster.shutdown(); 

     } catch (Exception e) { 
      System.out.println(e.getMessage()); 
     } 
    } 
} 

Chaque fois que Eclipse exécute ce code: « StoreValue.Response storeOpResp = client.execute (storeOp); System.out.println ("L'opération de stockage d'objets s'est terminée avec succès"); "

Je reçois une erreur que "ERROR com.basho.riak.client.core.RiakNode - Échec de l'écriture sur RiakNode".

Avant d'exécuter ce programme, j'ai déjà créé un compartiment quotesBucket et l'ai activé.

Est-ce que quelqu'un sait où est le problème?

Répondre

0

Pouvez-vous stocker un objet via http? Essayez ceci dans le terminal:

curl -XPUT \ 
-H "Content-Type: text/plain" \ 
-d "You're dangerous, Maverick" \ 
http://localhost:8098/types/default/buckets/quotes/keys/Iceman?returnbody=true