New stuff
        =========
        - Added kbmMWSmartBind.pas unit with optional kbmMWSmartBindVCL.pas and kbmMWSmartBindFMX.pas
          Provides new easy to use multiway databinding between data, controls and objects.
        - Added support for XML-RPC and JSON-RPC. Include kbmMWJSONRPCTransStream and/or kbmMWXMLRPCTransStream units
          and select JSONRPC or XMLRPC as transport stream format in request/response transports.
        - Updated TkbmMWONArray, added:
          procedure MoveAppend(const AValue:TkbmMWONArray);
          procedure MoveInsert(const AIndex:TkbmNativeInt; const AValue:TkbmMWONArray);
          procedure CopyAppend(const AValue:TkbmMWONArray);
          procedure CopyInsert(const AIndex:TkbmNativeInt; const AValue:TkbmMWONArray);
          procedure Insert(const AIndex:TkbmNativeInt; const AValues:array of variant); overload;
        - Updated TkbmMWONObject, added:
          property PropertyValueAsVariant[const AIndex:TkbmNativeInt]:variant read GetPropertyValueAsVariant write SetPropertyValueAsVariant;
        - Added function IkbmMWScheduledEvent.SyncQueued:IkbmMWScheduledEvent which works similar to Synchronized
          except it will queue the operation and not block to prevent certain deadlock scenarios.
        - Added IkbmMWScheduledEvent.AfterEnd and IkbmMWScheduledEvent.SynchronizedAfterEnd optional handlers
          which will be called when the event has run and it is never to be run again (it is truely ending).
        - Added IkbmMWScheduledEvent.Executed:boolean property that returns true if the event has been executed
          at least once.
        - Added properties OnAnonymousAfterEndProcedure:TkbmMWOnAnonymousScheduledProcedure and OnSimpleAnonymousAfterEndProcedure:TkbmMWOnSimpleAnonymousScheduledProcedure
          to IkbmMWScheduledEvent. See AfterEnd explanation.
        - Added property IkbmMWScheduledEvent.IsSynchronized which indicates if an event is running synchronized (or syncqueued).
        - Added new methods to TkbmMWRTTI:
          class function IskbmMWONCustomObject(const AVariant:variant):boolean;
          class function GetkbmMWONCustomObject(const AVariant:variant; var ACustomObject:TkbmMWONCustomObject):boolean;
          class function CompareValue(const AValue1,AValue2:TValue):integer;
          class function GetIsInteger(const AValue:TValue):boolean;
          class function GetIsInt64(const AValue:TValue):boolean;
          class function GetIsBoolean(const AValue:TValue):boolean;
          class function IsDesigntime:boolean;
        - Added TkbmMWThreadList<T>.Count property in kbmMWGlobal.pas
        - Added TkbmMWThreadDictionary<TKey,TValue> and TkbmMWThreadObjectDictionary<TKey,TValue> class
          in kbmMWGlobal.pas
        - Added function kbmMWSafeDelphiIdentifier(AIdentifier:string):string; to kbmMWGlobal.pas
        - Added new functions to TkbmMWJSONMarshal:
          class function GenerateDelphiClassFromUTF8File(const AFileName:string; const AUnitName:string; const AMainClassName:string):string;
          class function GenerateDelphiClassFromUTF16File(const AFileName:string; const AUnitName:string; const AMainClassName:string):string;
          class function GenerateDelphiClassFromUTF8Stream(const AStream:TStream; const AUnitName:string; const AMainClassName:string):string;
          class function GenerateDelphiClassFromUTF16Stream(const AStream:TStream; const AUnitName:string; const AMainClassName:string):string;
          They generate Delphi source code that is able to marshal/demarshal provided JSON data.
        - Added new functions to Use (kbmMWSmartUtils.pas):
          class function IsObject(const AVariant:Variant):boolean
          class function IsObject<T>(const AVariant:Variant):boolean
          class function IsDateTime(const AVariant:Variant)
          class function IsString(const AVariant:Variant):boolean
          class function IsDouble(const AVariant:Variant):boolean
          class function IsInteger(const AVariant:Variant):boolean
          class function IsInt64(const AVariant:Variant):boolean
        - Added new functions to TkbmMWYAMLMarshal:
          class function GenerateDelphiClassFromUTF8File(const AFileName:string; const AUnitName:string; const AMainClassName:string):string;
          class function GenerateDelphiClassFromUTF16File(const AFileName:string; const AUnitName:string; const AMainClassName:string):string;
          class function GenerateDelphiClassFromUTF8Stream(const AStream:TStream; const AUnitName:string; const AMainClassName:string):string;
          class function GenerateDelphiClassFromUTF16Stream(const AStream:TStream; const AUnitName:string; const AMainClassName:string):string;
          They generate Delphi source code that is able to marshal/demarshal provided YAML data.
        - Added TkbmMWLockFreeCountLock to kbmMWLockFree.pas
          Provides a simple way to count interests in a resource.
        - Added class function TkbmMWONCustomMarshal.GenerateDelphiClass(const AUnitName:string; const AMainClassName:string; const AON:TkbmMWONCustomObject):string;
        - Added support for ORM to detect primary key field changes and automaticaly update datastorage accordingly.
        - Added support for marshalling/demarshalling data of type variant.
        - Added new function to kbmMWHTTPUtils.pas
          function kbmMWIsMimetypeTextual(const AMimeType:string):boolean;
        - Added support for rewriting ALTER TABLE PRIMARY KEY SQL
        - Added new functions to TkbmMWXMLMarshal:
          class function FromFile<T>(const AFileName:string):T; overload;
          class function FromFile(const AFileName:string; AResultClass:TClass):TObject; overload;
            Provides easy access to marshalling and demarshalling in one line.
          class procedure SaveToFile(const AFileName:string; const AValue:TValue); overload;
          class function GenerateDelphiClassFromFile(const AFileName:string; const AUnitName:string; const AMainClassName:string):string;
          class function GenerateDelphiClassFromStream(const AStream:TStream; const AUnitName:string; const AMainClassName:string):string;
            They generate Delphi source code that is able to marshal/demarshal provided YAML data.

Changes/minor additions
        =======================
        - Improved TkbmMWONNative.SetAsFmtString to correctly use AFormat.FormatSettings when handling decimal comma.
        - Improved TkbmMWONArray.GetAsVariant and TkbmMWONObject.GetAsVariant to allow for returning embededded kbmMW supported object/record
          as variant when needed for kbmMW SKUs supporting SmartService.
        - Improved TkbmMWONArray.GetAsValue and TkbmMWONObject.GetAsVariant to allow for returning embededded kbmMW supported object/record
          as TValue when needed for kbmMW SKUs supporting SmartService.
        - Improved TkbmMWONArray.SetAsVariant and TkbmMWONObject.SetAsVariant to handle variant embededded kbmMW supported object/record
          when needed for kbmMW SKUs supporting SmartService.
        - Improved TkbmMWONArray.SetAsValue and TkbmMWONObject.SetAsValue to handle TValue embededded kbmMW supported object/record
          when needed for kbmMW SKUs supporting SmartService.
        - Improved TkbmMWONArray.Add(const AValues:array of variant) to handle variant embededded kbmMW supported object/record
          when needed for kbmMW SKUs supporting SmartService.
        - Updated class function TkbmMWProcess.ExecuteProcess to support optional TEncoding argument.
        - Improved TkbmMWJSONStreamer to differenciate between number and integer, although JSON standard only knows about number.
          It is of interest when converting object notation to other formats.
        - Added optional argument const ABestMatch:boolean = false to TkbmMWRTTIKnownTypes.Get and GetClass functions.
          If true and no known exact type is found, it will attempt to find usable parent type.
        - Added optional const AWait:boolean = true argument to several TkbmMWScheduler.Unschedule and Clear methods.
        - Updated kbmSQLite.pas adapter to respect default Journal mode and default page size.
        - Improved updating SQLite journal mode and page size.
        - Improved TkbmMWLinqStage.AsStrings to attempt better formatting of data.
        - Improved REST transport stream format.
        - Improved kbmMWCustomServerMessagingTransport.pas to allow encrypted subscription and unsubscription
          message to be proxied without knowing key.
        - Improved TkbmMWNullableReplacementVisualizer.
        - Updated TkbmMWRESTAttribute, added Required property default false.
          Indicates if an argument is required or not.
        - Improved TkbmMWRTTI.GetQualifiedName to attempt to generate qualified names for non registered types too.

Fixes
        =====
        - Fixed TkbmMWProcess.ExecuteProcess to terminate job on function end, if AJob handled given in arguments.
        - Fixed various bugs and some leaks in kbmMW Scheduler.
        - Fixed bugs in TkbmMWRTTI methods.
        - Fixed TkbmMWRemoteDesktopClient.Connect to unsubscribe from previous subscription if any.
        - Fixed bugs in TkbmMWOracleMetaData.
        - Fixed bugs in kbmMWGlobal.pas.
        - Fixed bugs and leaks in kbmMWORM.pas.
        - Fixed typo bug in TkbmMWORM.GenerateDelphiClass.
        - Fixed access violation when reregistering kbmMW in Delphi due to internal Delphi RTTI bug.
        - Fixed AutoCommit issue in UniDAC database adapter.
        - Fixed bugs in kbmMWCustomServerMessagingTransport.pas.

kbmmw 5.09 发布的更多相关文章

  1. 开启kbmmw 5.09 中的XML-RPC和 JSON-RPC 服务

    kbmmw 5.09 里面增加了XML-RPC和 JSON-RPC 服务支持,但是默认没有开启. 需要在安装前,修改kbmMWConfig.inc文件. 加入以下定义 {$DEFINE KBMMW_J ...

  2. koahub.js 0.09 发布,新增钩子机制

    koahubjs发布0.09 新增钩子机制添加钩子机制,控制器钩子和函数钩子修复自动加载bug,实现除自动加载导出的default外,还能自动加载其他的方法记koahubjs钩子开发过程在使用koah ...

  3. kbmMW 5.09测试报告(1)-Scheduler

    这个版本除了增加新的SmartBinding功能,同时提供了大量的功能更新以及bug修正.其中,SmartBinding的介绍,xalion已经第一时间写了初识kbmmw 中的smartbind功能, ...

  4. kbmmw 5.04 发布

    增加了一大波功能,消灭了一大堆问题,也肯定引进了一大票BUG.We are happy to announce the release of our latest version of kbmMW. ...

  5. kbmmw 5.02发布

    5.02.00 May 27 2017 Important notes (changes that may break existing code) ========================= ...

  6. kbmmw 5.01 发布

    Important notes (changes that may break existing code) ============================================= ...

  7. KbmMW 4.5 发布

    We are happy to announce the release of kbmMW v. 4.50.00 Professional, Enterprise and CodeGear Editi ...

  8. kbmMW 5.09.00是个必须升级的版本!

    这几天遇到的几个问题,从5.08.10升级到5.09.00,自然解决了! 所以建议大家都升级到这个版本. 例如我遇到的问题: 1.在线程中使用ClientQuery注意的问题 2.Invalid pr ...

  9. 使用kbmmw 实现图形验证码

    首先感谢图形验证码的提供者  晴空无彩虹  https://blog.csdn.net/u011784006/article/details/80827181 他用FMX 实现了验证码的生成,我修改成 ...

随机推荐

  1. Linux System Programming 学习笔记(九) 内存管理

    1. 进程地址空间 Linux中,进程并不是直接操作物理内存地址,而是每个进程关联一个虚拟地址空间 内存页是memory management unit (MMU) 可以管理的最小地址单元 机器的体系 ...

  2. LOJ#2304. 「NOI2017」泳池

    $n \leq 1e9$底边长的泳池,好懒啊泥萌自己看题吧,$k \leq 1000$.答案对998244353取膜. 现在令$P$为安全,$Q$为危险的概率.刚好$K$是极其不好算的,于是来算$\l ...

  3. Javascript 开启浏览器全屏模式

    作者:伯乐在线/前端空城师 通常在某些情况下,我们需要让浏览器开启全屏模式,以便获得更好的视觉体验,先看下全屏模式简单的几个API. 浏览器默认绑定 非全屏模式下, document的F11按键绑定开 ...

  4. Lua开发环境搭建(Mac OS X)

    1. 安装Rudix Rudix: http://rudix.org curl -O https://raw.githubusercontent.com/rudix-mac/rpm/2015.4/ru ...

  5. ‘cnpm' 不是内部或外部命令,也不是可运行的程序

    昨天用npm 安装环境,实在太慢了,就想用cnpm,然后发现提示‘cnpm' 不是内部或外部命令,也不是可运行的程序.  看了很多方法,选择了下面这个,运气好到爆棚,就直接可以用了.其他的方法暂未去了 ...

  6. BZOJ——2134: 单选错位

    http://www.lydsy.com/JudgeOnline/problem.php?id=2134 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: ...

  7. Cookie安全与CSRF和XSS攻击知识点收集

    个人简单理解: 1.XSS最简单的理解就是可以在表单提交的内容上嵌入JS执行代码,然后页面渲染的时候没有过滤时会自动执行这个脚本. 2.CSRF可以理解为当你登录了京东,浏览器上保存了你登录的Cook ...

  8. 手动安装windows的磁盘清理工具

    All you really need to do is copy some files that are already located on your server into specific s ...

  9. jdk8之永久区Permanent区参数设置分析

    jdk8之永久区Permanent区参数设置分析 学习了:https://blog.csdn.net/wuhenzhangxing/article/details/78224905 jdk7中可以进行 ...

  10. PS 基础知识 .atn文件如何使用

    ANT文件就是Frames.atn类动作文件 具体安装步骤如下 : (以CS4 为例) 启动Photoshop 点击"窗口" 选"动作" 在弹出的动作面板里,点 ...