怎样在MTS(中间层为Dll)中实现Pooler? ( 积分: 200 )

  • 主题发起人 主题发起人 kite20020304
  • 开始时间 开始时间
K

kite20020304

Unregistered / Unconfirmed
GUEST, unregistred user!
环境:Delphi7
MTS(TMtsDataModule)、BDE、Oracle9i
-------------------------------
中间层为一个dll,请问如何实现pooler?
我以delphi7自带的例子中Pooler为参考,做了些修改(基本上没怎么改,只是实现自己的接口)。
-------------------------------
问题1、客户端每发起一个连接,中间层PoolManager.Create都会执行一次(做成exe时只会执行一次),怎么让它只执行一次?
问题2、几个客户端同时调用时,事务会嵌套,不知怎么解决?
 
环境:Delphi7
MTS(TMtsDataModule)、BDE、Oracle9i
-------------------------------
中间层为一个dll,请问如何实现pooler?
我以delphi7自带的例子中Pooler为参考,做了些修改(基本上没怎么改,只是实现自己的接口)。
-------------------------------
问题1、客户端每发起一个连接,中间层PoolManager.Create都会执行一次(做成exe时只会执行一次),怎么让它只执行一次?
问题2、几个客户端同时调用时,事务会嵌套,不知怎么解决?
 
我的疑问跟你差不多,也正在看pooler Demo
 
关注,我也在考虑这个问题
留下自己的QQ 7140041 MSN RenRandom@msn.com
希望大家讨论
 
http://www.netyi.net/in.asp?id=yanleiyi有好多网络书下载和源程序好网站
 
Demo中的PoolManager是适合EXE用的, 管理生成的自动化对象的池, MTS的DLL不适用.
但MTS的Pool是由MTS执行环境实现的, 并不用自己管理, 但有个前提,就是需要实现了IObjectControl接口的自动化对象, 它的CanBePooled属性,就是指定MTS执行环境是否要对这个对象进行Pool.
TMtsAutoObject这个类已经实现了,直接继承它并实现你自己的接口即可(用向导就可以生成了,先生成一个ActiveXLibrary).
如果你要对TMtsAutoObject的生成个数进行计数(Demo中就是实现这个), 在自己的类中, 覆盖Initialize和Destory方法
public
procedure Initialize;
override;//生成时执行
destructor Destory;
override;//销毁时执行
推荐李维的那本ADO/MTS高级开发(D5三部头之一),说得非常清楚,不过要对COM编译有一定的了解.
 
组件的线程模型必须为Both类型,否则组件服务无法设置启动对象池功能。
 
请问SZF,如果是TMtsDataModule这个类型的
要进行计数怎么设置?
是引入constructor Create(AOwner: TComponent);
override;么?
谢谢!
 
OnCreate事件就可以了吧,不用想得太复杂.
 
OnCreate应该是不行的吧
我测试过了,如果在OnCreate设置计数的话
达不到要求的,比如审明一个Public的Int类型的变量,每次OnCreate的时候,都是从0开始计数的。不知道你是怎么实现的?
 
现在想实现一个计数功能
但就是不清楚怎么实现!
 
OnCreate中记数肯定是不对的,COM+提供了”共享数据管理“功能,李维的ADO/MTS一书中有详细说明。
 
"共享数据管理"这个概念我也清楚
现在我想实现一个数据连接的组件
想在其中实现控制与数据库的连接数目!!
不知道直接池化,并设置池大小是否可行?
 
to wozhuchuanwei:
你声明的变量应该是全局公用变量,你说的public变量如果是这个类的,当然每次都被初始化为0了.
 
我想用池能解决数目的问题
但现在想实现一个返回TAdoConnection实例的组件。现在就是不清楚具体实现!
 
MTS沒有搞過﹐
聽課
 
正在做开发,欢迎盗5138508讨论
 
多人接受答案了。
 
后退
顶部