ofbiz实体引擎(一) 获取Delegator
时间:2022-05-03
本文章向大家介绍ofbiz实体引擎(一) 获取Delegator,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
public abstract class DelegatorFactory implements Factory<Delegator, String> {
public static final String module = DelegatorFactoryImpl.class.getName();
private static final ConcurrentHashMap<String, Future<Delegator>> delegators = new ConcurrentHashMap<String, Future<Delegator>>();
private static final ThreadGroup DELEGATOR_THREAD_GROUP = new ThreadGroup("DelegatorFactory");
private static final ScheduledExecutorService executor = ExecutionPool.getScheduledExecutor(DELEGATOR_THREAD_GROUP, "delegator-startup", Runtime.getRuntime().availableProcessors(), 10, true);
/**
*@author 郑小康
*
* 根据delegatorName调用getDelegatorFuture方法,获取当前delegator的 Future<Delegator>
*
* 而后调用get方法获取Delegator实例
*
* */
public static Delegator getDelegator(String delegatorName) {
Future<Delegator> future = getDelegatorFuture(delegatorName);
try {
return future.get();
} catch (ExecutionException e) {
Debug.logError(e, module);
return null;
} catch (InterruptedException e) {
Debug.logError(e, module);
return null;
}
}
/**
* @author 郑小康
*
* 根据delegatorName获取Future<Delegator> 如果为空,新创建一个FutureTask<Delegator>将其加入到缓存中去
*
* 将这个futureTask给提交到线程池,futureTask中存放的是DelegatorConfigurable实例对象
*
*
* */
public static Future<Delegator> getDelegatorFuture(String delegatorName) {
if (delegatorName == null) {
delegatorName = "default";
//Debug.logWarning(new Exception("Location where getting delegator with null name"), "Got a getGenericDelegator call with a null delegatorName, assuming default for the name.", module);
}
do {
Future<Delegator> future = delegators.get(delegatorName);
if (future != null) {
//Debug.logInfo("got delegator(future(" + delegatorName + ")) from cache", module);
return future;
}
FutureTask<Delegator> futureTask = new FutureTask<Delegator>(new DelegatorConfigurable(delegatorName));
//Debug.logInfo("putting delegator(future(" + delegatorName + ")) into cache", module);
if (delegators.putIfAbsent(delegatorName, futureTask) != null) {
continue;
}
executor.submit(futureTask);
} while (true);
}
public static final class DelegatorConfigurable implements Callable<Delegator> {
private final String delegatorName;
public DelegatorConfigurable(String delegatorName) {
this.delegatorName = delegatorName;
}
/**
* 获取delegator的具体方法
* 并做了分布式缓存和ECA Handler FIXME:未研究
* */
public Delegator call() throws ClassNotFoundException {
try {
Delegator delegator = UtilObject.getObjectFromFactory(DelegatorFactory.class, delegatorName);
// setup the Entity ECA Handler
delegator.initEntityEcaHandler();
// setup the distributed CacheClear
delegator.initDistributedCacheClear();
return delegator;
} catch (ClassNotFoundException e) {
Debug.logError(e, module);
throw e;
}
}
}
}
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Django Form的使用
- Python每日一题:装饰器(完整篇)
- Vue视图渲染原理解析,从构建VNode到生成真实节点树
- Vue你不得不知道的异步更新机制和nextTick原理
- 手摸手带你理解Vue的Watch原理
- rollup环境搭建(es6转es5、压缩、本地服务器、热更新)
- Vue - 解决路由过渡动画抖动问题
- TypeScript - 泛型
- TypeScript - 类型声明、枚举、函数、接口
- Vue - 简单实现一个命令式弹窗组件
- Vue - 组件通信之$attrs、$listeners
- 多线程系列(一)多线程基础
- Python自动化运维之iptables和安全概述
- Python自动化运维之shell终极指南
- SQL 中判断条件的先后顺序,会引起索引失效么?