COM+的Object Pooling是实现了,但好象还没有实现Database Pooling,每个连接的客户端都需要一个数据库Connection,如果客户端未退出,则该Connection不能为别的客户端所用,若客户端退出,新的客户端通过Object Pooling可以使用未释放的Connection,如果客户端有200人同时在线的话,那岂不是要200个Connection,如何做才可实现?我简单地将KeepConnection设为False,好象不行。
comanche(太可怕) 让你帮了不少忙了,再来看看吧
ihihonline(小小->爱被下载中……) ,书要早点写出来,但先帮我看看这个
还有摩托、苹果,这些Midas版块比较活跃的,都来看看

解决方案 »

  1.   

    不是在 msn messager 上问过了吗        #@$@#@#!@#$:[Database pooling 属于 Resource pooling 关于 resource pooling 和 object pooling 的问题可以看
    http://expert.csdn.net/Expert/topic/1254/1254252.xml?temp=.1164667一般来说一个 object 中一个 database connection, so object pooling 同时也 database pooling..设 KeepConnection 成 false 道理上说应该是可以的, 但在实现 object pooling 后除非非常的限的资源一般不要 pooling,因为 database pooling(or 任何形式的 resource pooling) 都会花一定的时间去确认这个连接是否有效!! 一般一个这样的有效确认是从 object 中的 connection 中发一个包到 sqlserver (reactive connection), sqlserver 回送一个包认可... 呵一个网络时间就浪费了.。。
      

  2.   

    能告诉苹果你怎么观察出Database Pooling的变化吗?苹果还真没想过这事,我去做实验:)
      

  3.   

    1. 在 object pooling 的 object 的任何操作前记一个 log, or...
       PostMessage 到 mainform 后 showmessage(...)
    2. 执行 sql monitor (事件查看器), 只过滤出 connection 相关事件是否有 object pooling 可以从 1 从得出, 注意比方 showmessage 中 'object 1 is service you', 多试几次...是否有 database pooling 可以从 sql monitor 中看出, connect & disconnect 事件记录如果想 object pooling 又想 database pooling 要结合一下, log 一记录的同时有没 connect & disconnect 发生so 就是如此简单就能发现
      

  4.   

    通过一个下午的七搞八搞,终于发现了问题的原因所在,但是为什么会出现这种现象,我就不知道了,请高手赐教
    我是通过一个代理对象连接到mts DataModule的,原来我将代理对象的事务属性设为require a transaction,所以如上所说,不能database pooling。下午抱着试试看的意思,将事务设为supports transaction,然后观察,发现可以database pooling了,为什么会这样呢?
      

  5.   

    TOMWLD(笑天) 
    你为什么不说一下,你是怎样七搞八搞的呢?
    也让我们学习一下?关于database pooling的问题,我以前也问过。
    : comanche(太可怕) 给了我一定的答复。他的答复是:object pooling 对象池化
    基本实现的方式是 建立一个对像池, 客户请求后从池中找出一个空闲中的对像服务, 完成请求后把对像放回池中等待下一次请求.resource pooling 资源池化
    跟对像池化的方式基本一样, 所不同的是有些资源是有限的,不像 object pooling 可以再建立一个临时的 object 服务后立即释放, so 只好排队, 有限资源可以用信号量 (Semaphore)表示.
    数据库中连接资原是有限的(有多少我不知道)
    事务资源是有限的, ms sqlserver, oracle, sybase 等数据库都少得可怕, 原因是使用了 table lock 事务机制, 一个表只能有一个事务, 呵呵吓到看官了没? 还好这类数据库的死锁机制作得好, 不起眼的 borland interbase 却是 record lock, 事务机制很好,可惜没什么人爱用以下开始讨论但肯定的是如果是 object pooling那么 KeepConnection 应是 true, 因为 pooling 后的对像不可能不频繁使用, 所有的客户请求都被分配到了空闲对像, 如果每次都 reconnection 那 object pooling 就没有意义, 除非非常有限的资源, 但Connection 基本上可以看作是无限数量如果是 resource pooling 
    那么此时只 pooling 了事务资源, 那就没什么意义了, KeepConnection 设成 false 只是进一步节约资源(主要节约内存资源), 资源占用的大户(内存) "COM + Object"而没有节约到. 但这种情况设 KeepConnection 为 false 仍是好习惯
    其实我也没太搞明白。
      

  6.   

    我的理解是:
    如果我们实现了object pooling 那么database pooling 也就在object pooling的基础上实现了。也就是共用数据库连接。虽然是通过共用对象实现的。因为我也不知道究竟应该怎样操作才能具体的实现database pooling.不过我毕竟是可以共用数据库连接了。因为object pooling.我认为在object pooling下 不应该将keepconnection:=true;
    避免频繁的reconnection;以上我基本上都已经实现。可是我遇到了一个新的问题:就是关于com+事务控制的问题。不知道各位大虾们看了我的问题没有?comanche(太可怕) 跟 del_c_sharp(摩托~◎~◎~◎) 是看了,并且给了一定的答复。
    可是我还是没有搞明白,下面我再具体的说一遍,希望大家能够给我帮助。先谢了!!!!!!
      

  7.   

    我的基本设想是:我在com+对象中建立一个方法:实现数据的更新,比如是:
    fuction updatedata()
    begin
    with adoquery1 do
    begin
    try
      close;
      sql.clear;
      sql.add('insert into table values(value1,value2,value3)')
      execsql;
      raise exception.create('sommessage');
      setcomplete;
    except
      setabort;
      raise;
    end;
    end;
    end;如果我的客户端调用这个方法。
    理论上
    插入数据的动作应该不能正确执行。
    可是事实上
    我的测试结果是:
    1:没有启用com+对象的对象功共用的情况下:插入动作没有正确执行。
    2:没有启用com+对象的对象功共用的情况下:插入动作正确执行.你认为我的这个测试结论普遍吗?还是我的实现方法错了?希望大家指正!谢谢
      

  8.   

    ytwxw(wxw) :我怎么七搞八搞的,上面已经说了,就是代理对象的事务属性设置的问题,现在知道了how,我想知道why,请高手答复
      

  9.   

    ado本来就不能实现数据连接的完全pooling
    要不ado.net怎么能叫划时代的东东~~~
      

  10.   

    ADO 在某种程度上来说,对于Pool技术还是相当支持的,要看你如何用了;
    也罢,回来再和各位聊
    TO  摩托  ado本来就不能实现数据连接的完全pooling 这句话如何理解 ?说说的的想法,要么,我们做一个例程来看一看?索性将各种Pooler技术都给融合进去成不成?让我来做,呵呵;
      

  11.   

    又出新问题了,在组件服务中将COM+组件启用对象池化后,启动第一个客户端程序正常,紧接再启动客户端程序报“分布式事务已完成。请将自事务登记到新事务或NULL事务中”,如果不启用对象池化,则一切OK,Why??????????
      

  12.   

    : TOMWLD(笑天) 是啊 
    跟我出的问题差不多啊
      

  13.   

    ihihonline(小小->爱被下载中……) 等待中。能不能说一下,我的那个问题究竟出在那里啊?
      

  14.   

    ytwxw(wxw) 事务能够正确处理,数据不会写入数据库,但我的那个问题仍然会发生,第二次调用就会出错
      

  15.   

    我的问题还是没有解决啊!
    没有人碰到我说的问题吗?在setabort后 不能够rollback 的情况?