发帖    主题    评论    推荐    标签    作者    订阅    查搜    注册   登陆   关注
 
面向对象 设计模式 领域驱动设计 企业架构 框架 开发教程 微服务 大数据 扩展性 并发编程 事件驱动 分布式 SOA

benq,你好!框架中有关 池的使用问题请教一下

         
2005-07-25 13:03
赞助商链接

请问两下问题:
(1)实现对象池拦截的类PoolInterceptor里
有这么一段代码.
if (commonsPoolFactory == null) {
commonsPoolFactory = getCommonsPoolFactory(targetMetaDef);
}
Pool pool = commonsPoolFactory.getPool();
Object poa = null;
Object result = null;
try {
poa = pool.acquirePoolable();
Debug.logVerbose(" borrow a object:" + targetMetaDef.getClassName()
+ " from pool", module);
//set the object that borrowed from pool to MethodInvocation
//so later other Interceptors or MethodInvocation can use it!
proxyMethodInvocation.setThis(poa);
result = invocation.proceed();
} catch (Exception ex) {
Debug.logError(ex, module);
} finally {
if (poa != null) {
pool.releasePoolable(poa);
Debug.logVerbose(" realease a object:" + targetMetaDef.getClassName()
+ " to pool", module);
}
}

有点不太明白,在取commonsPoolFactory时,为什么要先判断if (commonsPoolFactory == null)
是否为空.PoolInterceptor是个在PicoContainerWrapper中已经注册的一个单例类.
commonsPoolFactory又是在PoolInterceptor类中的一个类变量.
这样要执行另外一个POJO的targetMetaDef时,就不会在调用getCommonsPoolFactory(targetMetaDef),
产生一个新的工厂了.那么下面 Pool pool = commonsPoolFactory.getPool();再得到的池不就不批配了嘛.
(2) PicoContainerWrapper类中的getComponentNewInstance()方法,会不会使picoContainer中产生多个相同的对象.
如果产生的话,那么他们的依赖的对象是不是也会产生多个.
也是说如果产生两个TestServicePOJOImp会不会也产生两个JdbcDAO呢?

2005-07-25 22:18

非常好。你的第一个问题已经在最新版本中更新了,这是原来的一个Bug;
2. getComponentNewInstance()是每次产生新的实例,TestServicePOJOImp类也将每次产生新的实例;jdbcDao是TestServicePOJOImp类的字段实例。

2005-07-25 22:20

第一个问题:commonsPoolFactory时,为什么要先判断if (commonsPoolFactory == null)
这是一种lazy 初始化,应该一个targetDef对应一个commonsPoolFactory,所以更新版本中使用了map来装载。

2005-07-26 10:18



谢谢.我刚才下了7月8日的框架版本,发现已经没有这个问题!!

2005-07-28 10:34

zzcopy111 是有心人,如果发现任何问题请在这里指出,共同完善源码质量,这也是开源软件质量能够经得起考验的原因所在。



对象池      JdonFramework     

赞助商链接

赞助商链接

返回顶部

移动版 关于本站 使用帮助 联系管理员 最佳分辨率1366x768
OpenSource JIVEJDON Powered by JdonFramework Code © 2002-20 jdon.com