package jp.co.esoro.cache.Cachestore;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Collection;
import java.util.Map;
import java.util.Map.Entry;
import jp.co.esoro.cache.EDM.TrnRequest;
import oracle.ucp.jdbc.PoolDataSource;
import oracle.ucp.jdbc.PoolDataSourceFactory;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import com.tangosol.net.cache.CacheStore;
/**
* 履歴テーブルキャッシュストア
* */
public class ReqCacheStore implements CacheStore {
protected static Logger logger;
private Connection con = null;
PreparedStatement storePs = null;
PoolDataSource pds;
private static String sql_TrnRequest = "MERGE INTO TrnRequest H "
+ "USING (SELECT ? trnDate, ? companyID, ? trnID FROM DUAL) U "
+ "ON (H.trnDate = U.trnDate "
+ "AND H.companyID = U.companyID "
+ "AND H.trnID = U.trnID) "
+ "WHEN MATCHED THEN "
+ "UPDATE SET canselFlg=? "
+ "WHEN NOT MATCHED THEN "
+ "INSERT (trnDate,companyID,trnID,canselFlg,userID,amount,requestType) "
+ " VALUES (?,?,?,?,?,?,?)";
public ReqCacheStore(String cacheName) {
super();
logger = LogManager.getLogger();
try {
pds = PoolDataSourceFactory.getPoolDataSource();
pds.setConnectionPoolName(cacheName);
pds.setConnectionFactoryClassName(
"oracle.jdbc.pool.OracleDataSource");
pds.setValidateConnectionOnBorrow(true);
pds.setURL("****************");
pds.setUser("user");
pds.setPassword("password");
pds.setInitialPoolSize(1);
pds.setMinPoolSize(1);
pds.setMaxPoolSize(20);
con = pds.getConnection();
storePs = con.prepareStatement(sql_TrnRequest);
} catch (SQLException e) {
logger.error(e.getMessage());
}
}
@Override
public Object load(Object arg0) {
//get時キャッシュに無い場合DB等から読込みが必要な場合記述
return null;
}
@SuppressWarnings("rawtypes")
@Override
public Map loadAll(Collection arg0) {
//get時キャッシュに無い場合DB等から読込みが必要な場合記述
return null;
}
@Override
public void erase(Object arg0) {
//削除が必要な場合記述
}
@SuppressWarnings("rawtypes")
@Override
public void eraseAll(Collection arg0) {
//削除が必要な場合記述
}
/**
* DB書込み
* */
@Override
public void store(Object arg0, Object arg1) {
try {
TrnRequest trn = (TrnRequest)arg1;
storePs.setString(1, trn.getTrnDate());
storePs.setString(2, trn.getCompanyID());
storePs.setString(3, trn.getTrnID());
storePs.setString(4, trn.getCanselFlg());
storePs.setString(5, trn.getTrnDate());
storePs.setString(6, trn.getCompanyID());
storePs.setString(7, trn.getTrnID());
storePs.setString(8, trn.getCanselFlg());
storePs.setString(8, trn.getUserID());
storePs.setLong(10, trn.getAmount());
storePs.setString(11, trn.getRequestType());
storePs.executeUpdate();
} catch (SQLException e) {
logger.error(e.getMessage());
}
}
@SuppressWarnings("rawtypes")
@Override
public void storeAll(Map arg0) {
for (Object entry :arg0.entrySet()){
store( (Object)((Entry<?, ?>) entry).getKey(),(Object)((Entry<?, ?>) entry).getValue());
}
}
}