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. es6总结(三)--数组

  2. Yii使用find findAll查找出指定字段的实现方法

    Yii使用find findAll查找出指定字段的实现方法,非常实用的技巧,需要的朋友可以参考下. 用过Yii的朋友都知道,采用如下方法: 查看代码   打印 1 modelName::model() ...

  3. 十六进制字符串jpg图片互转

    十六制字符串jpg图片互转(格式:FFD8FFE000104A******)如:FFD8FFE000104A46494600010100000100010000FFDB0043000806060706 ...

  4. ssm实现查看流程图

    jsp <!--显示数据列表--> <tbody id="TableData" class="dataContainer" datakey=& ...

  5. 邁向IT專家成功之路的三十則鐵律 鐵律十八:IT人求職之道-文化

    IT人所從事的工作是一個求新求變速度最快的行業,因此您所待的企業IT部門或資訊公司,其組織文化將關係到您在這間公司服務期間,是否能夠快速成長的決定因素.遇到不良的組織文化建議您三個就可以走人了,千萬別 ...

  6. 【spring boot】13.在spring boot下使用多线程

    使用场景: 方法处理到某一步,需要将信息交给另一个线程去处理!! =================================================================== ...

  7. Samp免流软件以及地铁跑酷的自校验分析

    [文章标题]:Samp免流软件以及地铁跑酷的自校验分析 [文章作者]: Ericky [作者博客]: http://blog.csdn.net/hk9259 [下载地址]: 自行百度 [保护方式]: ...

  8. c# Dictionary拓展2个key得到1个value

    using System.Collections.Generic; using System.Collections; Dictionary<Tuple<int, int>, int ...

  9. serialVersionUID的作用以及如何用idea自动生成实体类的serialVersionUID

    转载:http://blog.csdn.net/liuzongl2012/article/details/45168585 serialVersionUID的作用: 通过判断实体类的serialVer ...

  10. 使用cacheBuilder实现函数防抖

    在接口中出现的相同请求重复且连续发送的情况导致一些业务BUG,需要在接口上实现防抖 使用google的cacheBuilder import com.google.common.cache.Cache ...