これらをiBATIS2 のSqlMapClient を実行するようなキュースレッド、
キューデータは、SQLMap 記述のID 等、そして Google guice で立ち上げることを考えると。。。
public class SqlOperation implements Comparable<SqlOperation>{
public String sqlID;
public SqlOpe type;
public Object obj;
:
}
--------------------------------
public enum SqlOpe{
Insert
,Update
,Delete
}
--------------------------------
public abstract class SqlOpeCatcher extends QueCatcher<SqlOperation>{
:
を用意、
// SqlOpeCatcher実装を用意
public class SampleSqlOpeCatcher extends SqlOpeCatcher{
@Inject
public SampleSqlOpeCatcher(int readMax,long interruptCycle,SqlMapClient sqlmapclient){
super(readMax,interruptCycle,sqlmapclient);
}
@Override
public abstract void success(){
:
}
@Override
public abstract void failed(){
:
}
}
----------------------------------
// guice でインジェクト
Injector injecttor = Guice.createInjector(new AbstractModule(){
// readMax,interruptCycle,SqlMapClient インジェクト定義
}
);
BlockingQueue<SqlOperation> bque = new LinkedBlockingQueue<SqlOperation>();
QueContoroller qctl = QueContoroller.getInstance();
qctl.start(bque
,"sqlope"
,new QueEndProvider<SqlOperation>(){
@Override
public SqlOperation endElement(){
// キュー処理終了させる為のメソッド
return new SqlOperation(){};
}
}
,injector.getInstance(SampleSqlOpeCatcher.class)
);
// SQLMap 記述 ID="uptem" を実行
bque.put(new SqlOperation("upitem",SqlOpe.Update,"33"));