We are happy to announce v5.06.20 of our popular middleware for Delphi and C++Builder.

If you like kbmMW, please let others know! Share the word!

We strive hard to ensure kbmMW continues to set the bar for what an n-tier product must be capable of in the real world!

Notice that kbmMemTable v. 7.80.00 or newer is a prerequisite to this update.

This is the wrap up of the 5.06.xx beta release with some additional features, improvements and bugfixes. Major new features in this release includes::

  • Added support for hardware based true random numbers via the new unit kbmMWInfTRNG (Enterprise Edition)
  • Added ORM stage function Split for splitting data into separate groups.
  • Added TkbmMWMultithreadMessageActionProcessor.
  • Added optional non destructive ORM table upgrade feature.

Please check the end of this post for a detailed change list.

Professional and Enterprise Edition is available for all with a current active SAU. If your SAU has run out, please visit our shop to extend it with another 12 months.

CodeGear Edition is available for free, but only supports a specific Delphi/Win32 SKU, contains a limited feature set and do not include source.

Please visit https://portal.components4developers.com to download.


kbmMW is the premiere n-tier product for Delphi, C++Builder and FPC on .Net, Win32, Win64, Linux, Java, PHP, Android, IOS, embedded devices, websites, mainframes and more.

Please visit http://www.components4developers.com for more information about kbmMW.


Components4Developers is a company established in 1999 with the purpose of providing high quality development tools for developers and enterprises. The primary focus is on SOA, EAI and systems integration via our flagship product kbmMW.

kbmMW is a portable, highly scalable, high end application server and enterprise architecture integration (EAI) development framework for Win32, ..Net and Linux with clients residing on Win32, .Net, Linux, Unix, Mainframes, Minis, Embedded and many other places. It is currently used as the backbone in hundreds of central systems, in
hospitals, courts, private, industries, offshore industry, finance, telecom, governements, schools, laboratories, rentals, culture institutions, FDA approved medical devices, military and more.


5.06.20 July 11 2018

        Important notes (changes that may break existing code)
        * Remote Desktop require Seattle or newer to compile.

        New stuff

        - Added TkbmMWONObject.AssignObject which assigns another ON object
          values to the current one, clearing the original values.
        - Added TkbmMWONObject.MergeObject which merges another ON object
          values into the current one, potentially preserving the original
        - Added function kbmMWWildcard2RegEx(const AWildCard:string):string;
          in kbmMWGlobal.pas. It converts a file wildcard string to a valid
          regular expression string. It supports * and ?.
        - Added boolean triggerModified option to kbmMW_Field attribute.
          It controls if changes to that particular ORM field in the class
          should indicate that the data has been modified and thus resolves.
          Default true.
        - Added mwoctfNonDestructive to TkbmMWORMCompatibleTableFlag.
          Can be used in CompatibleTable, UpgradeTable and CreateOrUpgradeTable
          to control if only non destructive changes should be made to
          make an existing table compatible. If set, fields will not be removed,
          renamed, its field type changed or made smaller in size or precision.
          Indexes, primary or unique constraints will also not be changed.
        - Added SkipNoNameColumns property to TkbmMWCSVStreamer. Default false.
          If false and property Header is true, columns with an empty name will
          be given a name using DefaultNamePrefix and a column number.
          If true and property Header is true, columns with an
          empty name will be skipped.
        - Added property AutoActivate:boolean to TkbmMWCustomConnectionPool.
          Default true. If true and a connection is attempted to be obtained
          the connection pool is automatically set to active, else an exception
          is thrown.
        - Added TkbmMWMultithreadMessageActionProcessor which works similar to
          TkbmMWMessageActionProcessor except all messages are executed
          completely asynchronously. Be aware that execution order may be different
          than message post order.
        - Added new kbmMWProcess unit containing process related classes.
          (currently only for Windows).
        - Added function Split(const AGroupFields:string; const AHaving:string=''):IkbmMWLinqStages;
          to IkbmMWORMStage. It will split data in the stage into multiple
          stages according to Group By and Having like rules.
          Eg. stages:=Linq.Using(..).Split('fld1,fld2','fld2>2');
        - Added OnLogin2, OnLoginSuccess2,OnLoginFail2,OnLogout2,OnAuthorize2,OnTrace2 events
          to TkbmMWAuthorizationManager. They are alternatives to existing events and are
          called after the "old" events. The events take a context instance which
          contains all information known during the autorization operation.
          The data in the context can be modified on the fly to override default
        - Added unit kbmMWInfTRNG (Enterprise Edition) which provides support for
          hardware based true random noise generators for generating random numbers.
          This is usually considered the cryptographically most secure random generator.
          Default it supports https://13-37.org/en/infinite-noise-trng but
          others can be used aswell as long as they can generate random data
          into a file. TkbmMWInfTRNG32 and TkbmMWInfTRNG64 are surfaced as
          default random number generator classes.

       	Changes/minor additions
        - Updated unittests.
        - Added (const AWaitUntilStopped:boolean=true) argument to Stop method
          in TkbmMWCustomMessageProcessor.
        - Added property TopIfExists:TkbmMWDOMXMLNode to TkbmMWDOMXML.
          Returns top (non declarative) node if it exists, else nil.
        - Updated TkbmMWORM.ModifiedValuesToDataset to attempt to leave record position
          the same.
        - Updated kbmMWFastCGI unit to use kbmMWProcess unit.
        - Added function DiffMinutes(const AValue:TkbmMWDateTime):integer; to
        - Added optional ATopName:string to PrepareXMLStorage in TkbmMWConfiguration.
          Default 'config'.
        - Remote Desktop require Seattle or newer to compile.


        - Fixed TkbmMWDateTime.DiffDays, DiffHours and added DiffMinutes.
        - Fixed TkbmMWConfiguration bug introduced in 5.06.10 by the
          case insensitive object notation changes.
        - Fixed TkbmMWONCustomObject.Path issue when instantiating
          final ON custom object.
        - Fixed nasty string sharing bug in TkbmMWStringBuilder when isntance
          was reused with preceded by Clear.
        - Fixed A/V in TkbmMWYAMLStreamer.LoadFromUTF16String when
          not able to parse due to empty or syntax error.
        - Fixed incorrect calculation in kbmMWMimeDecodedSize which cound result
          in buffer overruns.
        - Fixed A/V in TkbmMWBPParser.Create and TkbmMWBPParser.CreateFromString
          when syntax error or empty definition.
        - Fixed TkbmMWCustomConnectionPool to ensure all properties are read
          during component load, before it is set to active.
        - Improved AMQP client disconnect handling and fixed channel leak.
        - Fixed IkbmMWLinqStage.GroupBy to require , between field names.
        - Fixed incorrect TkbmMWDateTime DiffHours and DiffDays.
        - Fixed bugs in TkbmMWConfiguration.



Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.