ClientAsTemplate用法
kbmMW提供了TkbmMWClientQuery查询组件,作为kbmMW开发者都知道,这是一个内存数据集,基于服务端的查询服务(Query Service),可以直接执行sql得取想要的记录,因为是内存表,可以直接增、删、改记录,并利用Resolve方法提交修改到服务器,同时,也支持事务,利用kbmMWClientTransactionResolve组件,在事务中一次提交多个数据集。
利用ClientQuery组件,就可以轻松将原来的两层应用,如基于ADO设计的系统,移置到kbmMW多层架构上来,方便快捷,无缝升级旧有系统,这不得不佩服kbmMW作者的功力,做出如此易用的kbmMW多层架构。
如果你还不知kbmMWClientQuery的用法,可以学习以前一的文章,在这里:kbmMW实现sql查询。在这篇文章里,没有提及到kbmMWClientQuery.Client属性,也实现了查询,那这个Client有什么作用呢?这正是本文要解释的内容。
kbmMWClientQuery.Client是TkbmMWCustomSimpleClient类型,TkbmMWSimpleClient是继承自TkbmMWCustomSimpleClient的组件,其作用是向服务端发送请求,并可取得服务端返回的结果。更具体说,就是调用服务端实现的方法,这是kbmMW框架中最基础的类。在窑洞洞主的系列文章中第一个例子就是介绍如何实现服务端方法并通过SimpleClient来调用,不清楚可以先去看看,先理解SimpleClient的作用。
当理解了SimpleClient的作用,对于kbmMWClientQuery.Client属性就不难理解,实际上kbmMWClientQuery就是通过Client属性,调用服务端查询服务的方法,以执行sql取得返回结果集。那问题来了,当我们不设置Client属性,kbmMWClientQuery又是怎么发送的查询请求呢?通过源码,就会明白,不管kbmMWClientQuery.Client属性是否为nil,都会自己在内部建立一个SimpleClient实例。当ClientQuery.Client为nil,则通过这个实例与服务端通信,执行服务端查询服务的各种内置方法。如果为kbmMWClientQuery.Client指定了一个SimpleClient,kbmMWClientQuery就会使用指定的SimpleClient与服务端通信,为什么要这样设计呢?其目的就是多个ClientQuery共享一个SimpleClient。而共享一个SimpleClient的好处就是开发者可以为SimpleClient设置好需要传递给服务端的数据,而不用每次都做重复处理,这又是哪些数据呢?比如:用户名与密码,还有就是自己特定的数据。
说了这么多,我想已经说清了kbmMWClientQuery.Client的作用,并且如何使用他。但这都是在主线程中去实现,没有问题,如果在多线程中使用ClientQuery,并且共享一个SimpleClient,那问题就来了,SimpleClient不是线程安全的,我们不能这么干,否则你的应用就不稳定了,会出现各种地址错误。很多kbmMW初级开发者会因为这个问题认为kbmMW框架不稳定。
解决这个问题,就是利用ClientAsTemplate属性,将他设置为True,通过源码,我们会看到,如果ClientAsTemplate为True,当ClientQuery获取SimpleClient时,会使用内部的SimpleClient,同时复制Client属性对应的实例内容到内部的SimpleClient。然后再用内部的SimpleClient调用服务端的方法。
上面所说的逻辑在ClientQuery.GetActiveClient实现代码中,当ClientQuery要执行服务端方法时,就是通过这个方法取得SimpleClient,然后用他去调用服务端方法。可以进一步参考ClientQuery.GetMetaData等方法,这些方法中,可以清晰的看到使用GetActiveClient方法取得SimpleClient。
ClientAsTemplate用法的更多相关文章
- EditText 基本用法
title: EditText 基本用法 tags: EditText,编辑框,输入框 --- EditText介绍: EditText 在开发中也是经常用到的控件,也是一个比较必要的组件,可以说它是 ...
- jquery插件的用法之cookie 插件
一.使用cookie 插件 插件官方网站下载地址:http://plugins.jquery.com/cookie/ cookie 插件的用法比较简单,直接粘贴下面代码示例: //生成一个cookie ...
- Java中的Socket的用法
Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...
- [转载]C#中MessageBox.Show用法以及VB.NET中MsgBox用法
一.C#中MessageBox.Show用法 MessageBox.Show (String) 显示具有指定文本的消息框. 由 .NET Compact Framework 支持. MessageBo ...
- python enumerate 用法
A new built-in function, enumerate() , will make certain loops a bit clearer. enumerate(thing) , whe ...
- [转载]Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结
本文对Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法进行了详细的总结,需要的朋友可以参考下,希望对大家有所帮助. 详细解读Jquery各Ajax函数: ...
- 【JavaScript】innerHTML、innerText和outerHTML的用法区别
用法: <div id="test"> <span style="color:red">test1</span> tes ...
- chattr用法
[root@localhost tmp]# umask 0022 一.chattr用法 1.创建空文件attrtest,然后删除,提示无法删除,因为有隐藏文件 [root@localhost tmp] ...
- 萌新笔记——vim命令“=”、“d”、“y”的用法(结合光标移动命令,一些场合会非常方便)
vim有许多命令,网上搜有一堆贴子.文章列举出各种功能的命令. 对于"="."d"."y",我在无意中发现了它们所具有的相同的一些用法,先举 ...
随机推荐
- 浅谈cookie、session
揭秘Cookie: cookie说的直白点就是保存在用户浏览器端的一个键值对,举个例子,你现在登录了京东商城,你把浏览器关闭之后,你再打开京东,你还是可以对你的账户继续操作,已经购买的商品,订单都是可 ...
- poj-2888-矩阵+polya
Magic Bracelet Time Limit: 2000MS Memory Limit: 131072K Total Submissions: 6195 Accepted: 1969 D ...
- SQL 查询语句
4.2 单表查询 4.2.1 列名(表名)的别名(as 可以不加) 给列名取别名既可以加 as 也可以不加. (2008 - Sage.lower(Sdept)等可计算但无列名,需要指定列名) 原列名 ...
- select 练习语句
select * from scott.dept; /查看scott.dept表中的全局信息. describe scott.emp: ...
- [转]JVM内存模型
最近排查一个线上java服务常驻内存异常高的问题,大概现象是:java堆Xmx配置了8G,但运行一段时间后常驻内存RES从5G逐渐增长到13G #补图#,导致机器开始swap从而服务整体变慢.由于Xm ...
- 套接字编程,建立连接connect,绑定套接字bind
1.建立连接 int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen); 参数sockfd是由函数socket创建 ...
- chrome google mozilla firefox bookmarks import export
chrome导出导入bookmarks 1◆ google帐号 自己申请,脑补 2◆ google访问 脑补 suggestion Lantern 3◆ 步骤 4◆ 导入 sample ...
- List.contains()与自动拆箱
最近项目引入sonarQube这种代码静态检查的东东,以前没有人力和精力review,现在只要扫描一下项目,就发现很多有趣的地方. 有这么一段代码: List<Long> list = L ...
- 异步socket处理
服务器端: #include <boost/thread.hpp> #include <boost/asio.hpp> #include <boost/date_time ...
- How to calculate bits per character of a string? (bpc) to read
http://stackoverflow.com/questions/17797922/how-to-calculate-bits-per-character-of-a-string-bpc up ...