GAE/J のPersistenceManager の使い回しでサンプルとして紹介されてる PMF.java を
Wicket + Google guice で以下のように使用する。
import javax.jdo.JDOHelper;
import javax.jdo.PersistenceManagerFactory;
/**
* PMF.java
*/
public final class PMF{
private static final PersistenceManagerFactory pmfInstance
= JDOHelper.getPersistenceManagerFactory("transactions-optional");
private PMF(){}
public static PersistenceManagerFactory get(){
return pmfInstance;
}
}
Wicket のWebApplication に init() で以下のようにバインド定義する
public class SampleApplication extends WebApplication{
@Override
protected void init(){
final PersistenceManager persistenceManager = PMF.get().getPersistenceManager();
// Guice インジェクション
addComponentInstantiationListener(new GuiceComponentInjector(this,new Module[]{
new AbstractModule(){
@Override
protected void configure(){
binder().bind(PersistenceManager.class).toInstance(persistenceManager);
// Dao のバインド定義
}
}
}));
}
}
Dao は、以下を継承することにする
import javax.jdo.PersistenceManager;
import com.google.inject.Inject;
/**
* PersistDao
*/
public abstract class PersistDao{
@Inject private PersistenceManager persistenceManager;
protected PersistenceManager getPersistenceManager(){
return this.persistenceManager;
}
}
Paper というエンティティのPersistDaoクラスは、、、
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import javax.jdo.Query;
import org.datanucleus.store.query.AbstractQueryResult;
/**
* PaperDao
*/
public class PaperDaoImpl extends PersistDao implements PaperDao,Serializable{
@Override
public void insert(Paper paper){
getPersistenceManager().makePersistent(paper);
}
@Override
public void update(Paper paper){
this.insert(paper);
}
@Override
public Paper select(long id){
return getPersistenceManager().getObjectById(Paper.class,id);
}
@Override
public List<Paper> getAll(){
AbstractQueryResult result
= (AbstractQueryResult)getPersistenceManager().newQuery(Paper.class).execute();
List<Paper> list = new ArrayList<Paper>();
for(Iterator<?> it=result.iterator();it.hasNext();){
list.add*1;
}
return list;
}
@Override
public int count(){
Query query = getPersistenceManager().newQuery(Paper.class);
query.setResult("id");
query.execute();
return *2.size();
}
}