2014-11-04 11 views
6

Ho esaminato il progetto couchbase-java-client e mi chiedevo se fosse possibile utilizzarlo all'interno di un progetto dropwizard.Come utilizzare Couchbase Java Client in un progetto Dropwizard?

Sembra che sarebbe una scelta naturale, perché couchbase è fondamentalmente un database JSON, ma il client java non sembra essere compatibile con Jackson. Per quanto ne so, la libreria del client couchbase include its own internal implementation of a JSON library che è incompatibile con tutte le altre librerie java JSON, il che è davvero strano.

Ho trovato una classe JacksonTransformers che all'inizio sembrava promettente. Ma dopo un'attenta ispezione, la libreria utilizza una versione ombreggiata di Jackson (con un pacchetto riscritto di com.couchbase.client.deps.com.fasterxml.jackson.core).

In ogni caso, poiché dropwizard utilizza Jackson e Jersey per il marshalling di documenti JSON tramite l'API REST, qual è il modo meno attrattivo per utilizzare la libreria java-client di couchbase? È possibile anche in questo caso?

risposta

3

E 'sicuramente possibile usare Couchbase con Dropwizard. Il client SDK fornisce oggetti di manipolazione JSON per la convenienza dello sviluppatore, ma consente anche di delegare l'elaborazione JSON a una libreria come Jackson o GSON. Dai un'occhiata alla classe RawJsonDocumenthere. In sostanza, è possibile utilizzare una stringata JSON (che esce di un quadro) per creare uno di quegli oggetti e l'SDK client capirà come documento JSON per qualsiasi ie operazione:

String content = "{\"hello\": \"couchbase\", \"active\": true}"; 
bucket.upsert(RawJsonDocument.create("rawJsonDoc", content)); 
0

Dovrebbe essere possibile farlo funzionare.

  1. Richieste client al server dw per Persona risorsa.
  2. Il server DW richiede a couchebase, ottiene un Pojo che rappresenta la Persona o JSON che rappresenta la persona.
  3. Se si tratta di JSON, creare un POJO con Jackson annotazioni a DW e tornare che a cliente
  4. Se si tratta di uno speciale POJO couchebase, la mappa che ad un POJO Jackson e tornare al cliente
0

Una soluzione basata su @CamiloCrespo risponde:

public static Document<String> toDocument(String id, Object value, 
     ObjectMapper mapper) throws JsonProcessingException { 
    return RawJsonDocument.create(id, mapper.writeValueAsString(value)); 
} 

Tenete a mente, che non è possibile utilizzare un semplice Maper, come ObjectMapper mapper = new ObjectMapper(), con Dropwizard.

È possibile ottenerlo dal Environment#getObjectMapper() nel metodo Application#run() o utilizzare Jackson.newObjectMapper() per i test.

Un esempio di utilizzo:

ObjectMapper mapper = Jackson.newObjectMapper(); 
User user = User.createByLoginAndName("login", "name"); 
bucket.insert(toDocument("123", user, mapper));