Try ORM for HBase with DataNucleus HBase datastore
suppose you have read the last blog entry or you have already setup the env for hbase
1. download required jars datanucleus-core-2.0.0.m1.jar and datanucleus-hbase-1.0.1.jar
hadoop-0.19.1-core.jar
hbase-0.19.3.jar
jdo2-api-2.3-eb.jar
commons-logging-1.0.4.jar
commons-cli-1.2.jar
datanucleus.properties
javax.jdo.option.ConnectionURL=hbase
javax.jdo.option.ConnectionUserName=
javax.jdo.option.ConnectionPassword=
2. create a data model
package net.blogjava.gembin.hbase.model;
import java.util.Date;
import javax.jdo.annotations.IdGeneratorStrategy;
import javax.jdo.annotations.IdentityType;
import javax.jdo.annotations.PersistenceCapable;
import javax.jdo.annotations.Persistent;
@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class Entry {
@Persistent(primaryKey = "true", valueStrategy = IdGeneratorStrategy.UUIDHEX)
private String id;
@Persistent
private String title;
@Persistent
private String content;
@Persistent
private String description;
@Persistent
private Date postDate;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public Date getPostDate() {
return postDate;
}
public void setPostDate(Date postDate) {
this.postDate = postDate;
}
public String toString() {
return new StringBuilder()
.append("{id=")
.append(id + "\n")
.append("title=")
.append(title + "\n")
.append("content=")
.append(content + "\n")
.append("postDate=")
.append(postDate + "\n")
.append("description=")
.append(description + "\n}")
.toString();
}
}
3. create persistence service
package net.blogjava.gembin.hbase.service;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import javax.jdo.Extent;
import javax.jdo.JDOHelper;
import javax.jdo.PersistenceManager;
import javax.jdo.PersistenceManagerFactory;
import javax.jdo.Query;
import javax.jdo.Transaction;
import net.blogjava.gembin.hbase.model.Entry;
public class EntryPersistenceService {
private static final String DATANUCLEUS_PROPERTIES = "datanucleus.properties";
static PersistenceManagerFactory pmf = JDOHelper.getPersistenceManagerFactory(DATANUCLEUS_PROPERTIES);
private PersistenceManager persistenceManager;
public EntryPersistenceService() {
persistenceManager = pmf.getPersistenceManager();
}
/**
*
* @param entry
*/
public void saveEntry(Entry entry) {
Transaction tx = persistenceManager.currentTransaction();
try {
tx.begin();
persistenceManager.makePersistent(entry);
tx.commit();
} finally {
if (tx.isActive()) {
tx.rollback();
}
}
}
/**
*
* @param entry
*/
public void removeEntry(Entry entry){
Transaction tx = persistenceManager.currentTransaction();
try {
tx.begin();
persistenceManager.deletePersistent(entry);
tx.commit();
} finally {
if (tx.isActive()) {
tx.rollback();
}
}
}
/**
*
* @param id
* @return
*/
public Entry getEntry(String id){
Transaction tx = persistenceManager.currentTransaction();
Entry e=null;
try {
tx.begin();
e= persistenceManager.getObjectById(Entry.class,id);
tx.commit();
} finally {
if (tx.isActive()) {
tx.rollback();
}
}
return e;
}
/**
*
* @return
*/
public Collection<Entry> getEntries() {
Collection<Entry>entries = new ArrayList<Entry>();
Transaction tx = persistenceManager.currentTransaction();
try {
tx.begin();
Extent<Entry>extent = persistenceManager.getExtent(Entry.class);
Query q = persistenceManager.newQuery(extent);
Collection<Entry> c = (Collection<Entry>) q.execute();
if (c == null)
return null;
Iterator<Entry> iter = c.iterator();
while (iter.hasNext()) {
Entry p = iter.next();
entries.add(p);
}
tx.commit();
} finally {
if (tx.isActive()) {
tx.rollback();
}
}
return entries;
}
/**
*
*/
public void close() {
if (pmf != null && !pmf.isClosed())
pmf.close();
if (persistenceManager != null && !persistenceManager.isClosed())
persistenceManager.close();
}
}
4. create test client
persist a Entry
EntryPersistenceService mp=new EntryPersistenceService();
Entry entry=new Entry();
entry.setTitle("first entry");
entry.setPostDate(new Date());
entry.setDescription("it's first entry!!");
entry.setContent("It's first content of this entry");
mp.saveEntry(entry);
retrieve entries
EntryPersistenceService mp=new EntryPersistenceService();
Collection<Entry> entries=mp.getEntries();
Iterator<Entry>it=entries.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
output:
{id=4aea47a52328c7a0012328c7a0380000
title=first entry
content=It's first content of this entry
postDate=Mon Aug 17 22:34:14 CST 2009
description=it's first entry!!
}
enjoy it!!!
how to setup hbase env: http://www.blogjava.net/gembin/archive/2009/08/16/291290.html