关于COM+中JIT激活的疑问

bucher 2001-02-21 07:57:00
近来在学习COM+,在JIT激活(Just In Time Activation)中碰到了一点疑惑。
从原理上来说,如果对象采用了JIT。当该对象的方法被调用以后就会被销毁(尽管调用者没有释放该对象的引用),部件的状态不会保存。
为了测试我写了一个部件,使用了JIT激活,该部件内部保存了一个adodb.connection对象。当我调用了它的GetRsbySQL以后第二次调用GetRsbySQL仍然可以返回正确的结果,我觉得这时候connection对象应该已经随着对象一起被销毁了,可事实上该对象仍然有效。真是奇怪?是不是对象仅仅被封存了起来,并没有被销毁?可这样的话对象占有的资源并没有释放,JIT激活的意义也就没有了。 难道是我理解错了?
一次只能给87分,只好给这么多了。
...全文
151 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
bucher 2001-02-22
  • 打赏
  • 举报
回复
一点补充:
我是用VB写的,使用sqloledb连接服务器SQL7。
可能是oledb的session pooling的关系,我再放一个静态变量进去应该就能够知道了。
不过如果connection对象被销毁了,oledb的pooling如何自动恢复到connection对象上的?
litchi 2001-02-22
  • 打赏
  • 举报
回复
bucher:
這樣你都要頂?
那你不是成日都要頂了?
怎麼還有空上這來轉啊。。。。。。
呵呵。。。。。


兩次調用的是同一連接嗎
沒有用Pooling嗎?(到MMC裡面看清除點啊!)
連接真的是共用的嗎?

還有。。。。。。。。

自己琢磨琢磨吧。。。。。
我也說不了這麼多啦。。。。。。

我也頂。。。。。。。。。。。。。

litchi 2001-02-22
  • 打赏
  • 举报
回复
bucher:
這樣你都要頂?
那你不是成日都要頂了?
怎麼還有空上這來轉啊。。。。。。
呵呵。。。。。


兩次調用的是同一連接嗎
沒有用Pooling嗎?(到MMC裡面看清除點啊!)
連接真的是共用的嗎?

還有。。。。。。。。

自己琢磨琢磨吧。。。。。
我也說不了這麼多啦。。。。。。
bucher 2001-02-22
  • 打赏
  • 举报
回复
如果已经实现了objectcontrol是不是意味着我无法为deactive调用写代码,所以导致了部件无法Deactive.我回去试验一下,我会把结果用新的贴子法上来的,这个贴自我要给分了.

to TechnoFantasy:你的那本电子书可不可以发给我 bucher@citiz.net
to GoldenLion:能不能推荐几本关于COM+的书,我看了<深入理解COM+>,可都是点到为止,不够看.

GoldenLion 2001-02-22
  • 打赏
  • 举报
回复
VB写的component已经by default实现IObjectControl了
bucher 2001-02-22
  • 打赏
  • 举报
回复
btw:我指的是JIT激活,不是组件的自动关闭功能。在组件属性的“激活”选项卡上可以看到“JIT激活”选项,我指的是这个。
估计只有组件实现了iobjectcontrol接口才能真正使用到JIT功能。
GoldenLion 2001-02-21
  • 打赏
  • 举报
回复
如果你指的是component service 中Server Process shut down 的设置, 的确是如果dllhost都shutdown了, 那资源就会被释放.
问题的关键应该是如果dllhost仍然在, 那object被deactivated 后是不是会保持原状态. 我还没有reproduce这问题, 不过理论上是应该不会保持的确 - 除非是object pooling(VC) 或OLEDB Session Pooling 的原因.
TechnoFantasy 2001-02-21
  • 打赏
  • 举报
回复
关闭服务器的时间间隔也是指资源释放的问题。你可以详细看一下一本
COM+组件编程技术内幕的书。有VC VB Java的范例。
GoldenLion 2001-02-21
  • 打赏
  • 举报
回复
1. 如果component是VC写的话, 有可能是object pooling的原因.
2. 如果后端是SQL的话, 用SQLOLEDB去连数据库. 在连之前disable OLEDB 的session pooling - 这是通过registry中OLEDB Service实现的. MSDN 中有详细步骤.

不过, 我觉得不是"关闭服务器的时间间隔"的原因.
TechnoFantasy 2001-02-21
  • 打赏
  • 举报
回复
这是我从电子书上抄来的一段:
6. 资源
由于对象一直在不停地被创建、关闭,事务处理到处都在进行,因此MTS 必须提供一条途径让多个
对象共享某些有限或重要的资源。利用资源管理器(resource manager)和资源分配器(resource dispenser),
MTS就可以完成这一点。资源管理器用于管理持久型数据,如收支余额和财产总量等。Microsoft在MSSQL Server 中提供了一个资源管理器。资源分配器管理非持久资源,如数据库连接等。Microsoft为
ODBC 数据库连接提供了资源分配器,而Borland 为BDE 数据库连接提供了资源分配器。
如果一项事务用到了某些类型的资源,它就取得这些资源,使其成为事务的一部分,这样在事务
过程中对资源所做的改变就能够参与事务的提交或回滚操作。

上面是抄的,按道理说链接应该是临时资源,但是应该MTS管理器不会立即关闭并释放
资源以便可以接受下一次的调用。你可以在MTS管理程序中设定关闭服务器的时间间隔。
上面是我根据书籍和自己编写程序的感觉。
bucher 2001-02-21
  • 打赏
  • 举报
回复
我顶

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧