package policy.rule; import foundation.dao.preload.Bucket; import foundation.data.entity.Entity; import foundation.data.entity.EntitySet; import foundation.data.meta.MetaMonitor; import foundation.data.meta.ReloadCheckResult; import foundation.persist.NamedSQL; import foundation.persist.SQLRunner; public class RuleBucket extends Bucket { private static RuleBucket instance; private MetaMonitor monitor; private RuleBucket() { monitor = new MetaMonitor("getOrderSettingLastUpdateTime"); } public static synchronized RuleBucket getInstance() { if (instance != null) { return instance; } instance = new RuleBucket(); return instance; } public static RuleRuntimes getRuleRuntimes(String buId) { getInstance(); RuleMetas metas = instance.get(buId); RuleRuntimes result = metas.getCheckRuntimes(); return result; } @Override public RuleMetas get(String buId) { try { monitor.setParam("parentId", buId); ReloadCheckResult checkResult = monitor.getReloadCheckResult(true); if (checkResult.isNeedReload()) { synchronized (this) { RuleMetas metas = super.get(buId); metas = loadOneBUCheckers(buId, metas); loadOne(buId, metas); return metas; } } } catch (Exception e) { e.printStackTrace(); } return null; } private RuleMetas loadOneBUCheckers(String buId, RuleMetas metas) throws Exception { if (metas == null) { metas = new RuleMetas(buId); } else { metas.clear(); } NamedSQL namedSQL = NamedSQL.getInstance("getOneBUCheckRules"); namedSQL.setParam("buId", buId); EntitySet entitySet = SQLRunner.getEntitySet(namedSQL); RuleMeta meta; for (Entity entity: entitySet) { meta = new RuleMeta(); meta.load(entity); metas.loadOne(meta); } return metas; } }