Try ORM for HBase with DataNucleus hbase plugin
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();
}
}
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();
}
}
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);
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!!
}
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