We are happy to announce v5.06.00 BETA 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!

This is a major release with new features in addition to fixing reported bugs and enhancing existing features:

  • NEW! kbmMW Native High Performance, Scalable and  Cross Platform socket library now included!
  • NEW! Advanced CSV object notation streamer with optional autotyping!
  • NEW! Optional support for automatic cross table lookup of values and records in ORM even with result based on a complex expression!
  • NEW! Dynamic table support in ORM. An ORM dynamic table is not bound to any specific class, but can be defined completely at runtime, also by analyzing an existing table in the datastorage!
  • NEW! Advanced date/time formatting and parsing for all sorts of custom date/time layouts!
  • NEW! Reboot and advanced clipboard copy/cut/paste of files in kbmMW Remote Desktop.
  • NEW! Ability to attach multiple remote desktop clients to same connection for example for read only icon view vs full scale interactive view.
  • NEW! Smart local client for use within same application that hosts TkbmMWServer instance.
  • NEW! Binary parser visualizer with interactive debugging and stepping features.
  • Lots of ORM improvements, including:
    • Enhanced generator support with definition of when generators fire (insert/update/delete) (default insert) and if they fire if the field already have a value (default no)
    • QueryON directly returning an object notation object instead of class instances
    • QueryDataset directly returning a TDataset instead of class instances.
    • Execute for DDL support.
    • CreateOrUpgradeTable now fully handles indexes and detects added, deleted and modified indexes and automaticaly creates and upgrades those as needed.
  • Lots of new features and improvements to LINQ, including:
    • Query – Run full fledged query expression on the source data
    • Use CSV data as source
    • Use object notation instance as source
    • AsON – Return LINQ stage result as object notation
  • Lots of new features and improvements to Scheduler, including:
    • Enhanced Cron format support. Standard, With seconds, With Year and With Seconds and Year.
    • New EndingAfterStalls and EndingAfterRuns methods which deactivates a scheduled event.
    • New optional automatic unscheduling of scheduled event when event is ending (see above).
  • Lots of improvements and additional features in:
    • Date/Time
      • TkbmMWDateTime
      • TkbmMWGregorianCalendar (New!)
      • TkbmMWDateTimeCompiledFormat (New!)
      • Improvements of correct handling of time vs date vs date/time thru whole n-tier chain.
    • REST
      • Optional automatic provision of object notation objects when HTML body contains XML or JSON data.
      • Default values and more
    • Plenty of other areas.

Notice that kbmMemTable v. 7.79.00 is a prerequisite to this update.

Please look in 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.00 Beta June 2 2018

        NOTICE! Require kbmMemTable v. 7.79.00

        Important notes (changes that may break existing code)

        * Compiled with XE5 and up.
        * Officially pre XE5 is no longer supported starting with this release of kbmMW.
          Project files for XE2, XE3 and XE4 will continue to be included for a while
          in case someone finds ways to compile and run on those SKU versions stabily.
          Reason is that generics and anonymous methods will throw compiler errors due to bugs
          in the compiler. Code that compile with those unsupported SKUs, may fail at
          runtime due to compiler bugs. We recommend XE7 and up.
        * Remote Desktop not supported pre XE7 due to missing Windows definitions
        * Renamed TkbmMWMetaDataDateTimeStyle to TkbmMWDateTimeStyle and moved it to kbmMWDateTime.pas
        * Changed name of kbmMW auto generated indexes from I_.... to I_KBMMW_....
          by using new KBMMW_DB_AUTO_INDEX_PREFIX constant.
        * Changed all ORM methods previously taking dynamic const arrays, to take
          dynamic array of TValue. It may require you to change code to

        New stuff

        - Added new native Socket library which C4D have perpetually licensed for use
           under the kbmMW license terms from WiNDDRiVER(soulawing@gmail.com)
           This library provides the fastest most scalable and most efficient socket
           communication across all platforms. We have included Alpha versions of new
           TkbmMWTCPServer and TkbmMWTCPClient transports which we expect to work more
           on in the future kbmMW releases, and which we expect will be our default
           transport classes some time out in the future.
           Please notice that our bundled version of the perpetually licensed socket library
           is fully copyright Components4Developers, and adheres in full to the kbmMW license.
        - Added new advanced CSV object notation streamer with support for custom date/time,
           optional type detection, header/noheader, skip/limit and much more in kbmMWCSV.pas
        - Added support for messagepack timestamp extended type.
        - Added new TkbmMWONFormat class for object notation formatting.
        - Added ClientInterface property to IkbmMWServerTransportInfo and IkbmMWClientTransportInfo.
        - Added 'strict' flag to kbmMW_ServiceAttribute. Eg. kbmMW_Service('name:biolife, flags:[strict]')]
          It is currently only used by services descending from TkbmMWCustomHTTPSmartService.
          If set, the service will not attempt to call back to parent versions of a service, in case
          there is no match for the function being called by the client. Instead it will except.
        - Added support for Accept HTTP header type in TkbmMWHTTPTransportStreamHelper.
        - Significantly improved ORM index structure detection and create/upgrade support, including
          detection of system indexes (indexes created by the DB to support a constraint).
        - Further improved SQL rewriter and metadata handling, including support for detecting
          reserved keywords, improved field and table name quoting and more.
        - Updated LINQ support.
          Added ID property to LINQ stage which purpose is to be able to identify data
            for a stage. Default value 'data'.
          Added new Query method to LINQ stage. It takes a complete SQL statement.
            Use the LINQ stage ID as tablename. Default 'data'.
          Added AsON method to LINQ stage which converts data in current LINQ stage to
            an object notation object.
          Added UsingCSV methods to LINQ, which supports loading CSV data.
          Added UsingON method to LINQ which takes an object notation object.
        - Added kbmMWSize2PrettySize to kbmMWGlobal.pas and updated many methods/functions
          for performance and features.
        - Improved kbmMWScheduler.pas:
          Added TkbmMWScheduleCronMode to kbmMWScheduler.pas. Is used with Cron method
            to determine exactly which Cron format to support.
          Added method WithOwnedObject which can be used to bundle an object with an event
            and ensure that the object is automatically freed on event destruction.
          Added EndingAfterRuns method which can be used for ending and deactivating an
            event after x number of successful runs.
          Added EndingAfterStalls method which can be used for ending and deactivating
            an event after x number of stalls.
          Added UnscheduleAtEnd method which controls if an event that is ending will
            be automatically unscheduled and thus freed. Default false.
          Added OwnedObject, MaxRuns, MaxStalls, Unschedule properties.
        - Improved ORM in definition of when generators fire (insert/update/delete) (default only insert)
          and if they fire if the field already have a value (default no).
          Use with kbmMW_Field:
             generatorMode:"when null"
             generatorMode:null (alternative to when null)
             generatorStates: [insert, update, delete]
        - Added ORM auto fetch joined objects.
          Will automatically attempt to join related data when defined in kbmMW_Field attribute.
          The joined data may be another object, a list of objects or a simple field.
          Check blogpost and demo for more details.
          source:xxxx, value:xxxx, sourceKeyFields or sourceKey:xxx or [xxx,..xxx]
          keyFields or key:xxx or [xxx,..xxx]
          Value can contain an expression referincing other fields in the class.
        - Added support for adding dynamically created TkbmMWORMTable which are not
          related to a specific class or record.
          Its useful for some advanced dynamic table handling situations, where you
          want to specifically define fields/indexes and let the ORM handle
          creating/upgrading a datastorage to match.
        - Added support for auto detection of XML and JSON bodies sent to a REST server.
          All other mimetypes are still provided as an array of bytes.
          Hence an argument to a method, now take a TkbmMWONCustomObject in case
          JSON or XML is sent in the body along with a correct mimetype.
        - Added SurfaceDynamicTable to TkbmMWORM. It will take a tablename of
          any table accessible in the datastorage, and attempt to surface it as
          a TkbmMWORMTable (with relevant fields and indexes). It makes it possible
          to access data in datastorage without compiletime binding to a class/record.
        - Added new overloaded methods to TkbmMWORM to be able to operate on
          dynamic TkbmMWORMTable instances.
        - Added Execute overloaded methods to TkbmMWORM to allow executing DDL SQL.
        - Added QueryON methods to TkbmMWORM to return result as TkbmMWONCustomObject
          in object notation format.
        - Added QueryDataset methods to TkbmMWORM to return result directly as a TDataset.
        - Added TkbmMWDateTimeCompiledFormat to kbmMWDateTime.pas. It supports parsing and
          producing strings according to a specific format.
          Syntax: %Y  = 4 digit year                       ([12]\d{3})
                  %Y1 = 2 digit year 19xx                  (\d{2})
                  %Y2 = 2 digit year 20xx                  (\d{2})
                  %Y3 = 2 digit year >=50=19xx, <50=20xx   (\d{2})
                  %M  = 1 or 2 digit month                 (0[1-9]|1[0-2]|[1-9])
                  %M1 = 3+ char US month name              ...
                  %M2 = 3+ char locale month name          ...
                  %D  = 1 or 2 digit day                   (0[1-9]|[12]\d|3[01]|[1-9])
                  %H  = 1 or 2 digit hour                  ([0-1]\d|[2][0-3])
                  %N  = 1 or 2 digit minute                ([0-5]\d))
                  %S  = 1 or 2 digit second                ([0-5]\d))
                  %Z  = 1,2 or 3 digit millisecond         (\d{1,3}))
                  %T  = Timezone                           ([\+\-]\d{1,2}\:\d{2})|((([a-zA-Z][a-zA-Z0-9_]*)(\/[a-zA-Z][a-zA-Z0-9_-]*)*)([\+\-]\d{1,2}\:\d{2})?)
                  %P  = A/P/AM/PM                          (AM|PM|A|P)
                  %i  = Ignore one character               .
                  %Ix = Ignore all characters until x      [^\x]*
                  %%  = %

            %Y-%M-%D %H:%M:%S                               // Automatically generate matching regexp
            %D.%M.%Y %H:%M:%S                               // Automatically generate matching regexp
            %D.%M.%Y=(\d{2}).(\d{2}).(\d{4})                // Use provided regexp when parsing. Parses and outputs: 20.05.2018
            Dato\=%D.%M.%Y='Dato='(\d{2}).(\d{2}).(\d{4})   // Use provided regexp when parsing. Parses and outputs: Dato=20.05.2018
        - Added UTCAsFormat, LocalAsFormat, UTCDate, UTCTime properties to TkbmMWDateTime.
        - Added TrySetAsLocalFormat, TrySetAsUTCFormat methods to TkbmMWDateTime.
        - Added TkbmMWGregorianCalender to TkbmMWDateTime. Currently it can calculate
          western and eastern Easter start/end dates for any year.
        - Updated remote desktop client/server code:
          Added support for attaching one TkbmMWRemoteDesktopClient to another to make them
            share a connection. One could for eaxmple show a readonly live iconic view.
            When clicked on, a larger form could be shown with another non readonly TkbmMWRemoteDesktopClient
              attached to the iconic one.
            Attach/unattach using the Attach method.
          Added Reboot method that client can call server to request a reboot.
          Added OnTransferFile event in client. Called when a file transfer is in progress.
          Added hugely improved clipboard transfer. Now files can be cut/copied/pasted
            between client and server.
        - Updated TkbmMWBinaryParser to support debugging/stepping.
        - Added new TkbmMWBPVisualizer control which can visualize the binary parser protocol
          and parsed data and allows for debugging/stepping.
        - Added support for honoring Accepts header field in smart HTTP service.
        - Added support for basic authorization in kbmMWHTTPSysServerTransport.pas
        - Added kbmMWSmartLocalClient.pas which contains a smart client
          which can be used directly within the same application that
          hosts the TkbmMWServer instance.
          Use TkbmMWSmartLocalClientFactory.GetClient to instantiate a client to use.


        - Fixed assigning transport parameters to constructed messages in WIB transports.
        - Fixed returning RowsAffected upon Resolve.
        - Fixed compilation of kbmMW UIB adapter.
        - Fixed several issues and made improvements to TkbmMWHTTPTransportStreamHelper.
        - Fixed issues in TkbmMWMarshalledVariantType when using interface type variants.
        - Fixed bug not escaping \ correctly in some scenarios in kbmMWJSON.pas.
        - Fixed name clashing in kbmMWScheduler.pas when compiling under some C++ versions.
        - Fixed some initialization bugs in TkbmMWDateTime.
        - Fixed TCPIP and UDP Synapse transport compile error.
        - Fixed bugs in kbmMWHTTPSysServerTransport.pas.

       	Changes/minor additions

        - Updated transport stream format to 506 to support messagepack temporenc date/time
           streaming instead of ISO8601.
        - Improved handling and differentiating between Date/Time, Date and Time in
          Object notation SQL API.
        - Renamed TkbmMWMetaDataDateTimeStyle to TkbmMWDateTimeStyle and moved it to kbmMWDateTime.pas
        - Changed name of kbmMW auto generated indexes from I_.... to I_KBMMW_....
           by using new KBMMW_DB_AUTO_INDEX_PREFIX constant.
        - Added global variable: kbmMWOSVersion which directly informs about current OS version.
        - Improved comment handling in XML, including preserving them as nodes, which
          can be restreamed and/or converted to object notation.
        - Changed so AddXMLDeclaration always inserts the declaration in root of XML.
        - Added optional default/defaultValue to kbmMW_Rest attribute. Can be used for
          providing a default value for an argument in a method definition.
        - Improved kbmMWRTTI.pas with more features and enhancements including faster
          generic list support.
        - Changed all ORM methods previously taking dynamic const arrays, to take
          dynamic array of TValue. It may require you to change code to
        - Updated TkbmMWONNative with many more methods to ease access and support of default values.
        - Updated TkbmMWONArray to support enumeration and added many more methods to ease access.
        - Updated TkbmMWONObject with many more methods to ease access.
        - Improved TkbmMWHTTPCustomValues and parsing/generation of HTTP header fields and options.
        - Added 'scenario:xxxx' to kbmMW_Ignore attribute. It makes it possible to ignore marshalling
          of a particular field/property in specific scenarios.
          A scenario is a string. The marshalling classes supports a Scenario property which
          can be set before marshalling/unmarshalling to enable a specific scenario.
        - Updated kbmMWDecodeEscapes in kbmMWHTTPUtils.pas to properly handle



7 thoughts on “ANN: kbmMW Professional and Enterprise Edition v. 5.06.00 BETA released!”
  1. —-
    Added support for adding dynamically created TkbmMWORMTable which are not
    related to a specific class or record
    Does this mean I can Build a TkbmMWORMTable object with definition and query them with the ORM?
    For example define a table at client side, and use it to query records from the server, so the server doesnt need to have the table class definition anymore.

    1. Yes and perhaps 🙂
      The “yes” is for the statement that you can create a TkbmMWORMTable instance and populate it with field info and attribute settings at runtime. Whoever holds the TkbmMWORMTable instance will be able to use it to generate/upgrade datastorages, query, insert/delete/update and so forth, but obviously not via a class (since you decided in this case not to have one), but instead via object notation or TDataset data.
      The “perhaps” is because as long as you can get the appropriate settings from the client to a server side instance of a TkbmMWORMTable, you can essentially let the client manipulate the datastorage via the ORM.

    1. Hi,
      The purchase includes 6 months of updates from time of purchase.
      If you want to get access to updates after that, you can buy a SAU extension of 12 months which is approx. 1/2 the price of a new license (kbmMW).
      But you can choose to just use the version you have perpetually, but only for the developer for which it was originally licensed for.

  2. I´d like to know if I can pay the software by wire transfer?
    It is possible?


    My name is Alyne Moreira and I’m contacting you on behalf of OSB Software .OSB Software is a software reseller company, with over than 2000 partnerships with suppliers all over the world. We are in the business since 2004, and we have a team with over 20 years of experience on software resale. We also count with OSB+, which is an extension of OSB Software, and it is dedicated on services such as training, development, implementation and technical support.

    Currently, I am working on an opportunity for the product below:
    Could you please, inform me our reseller cost for this opportunity?
    How could we turn your partners in Brazil?
    I also would like to know whether the license is perpetual or annual, if it is standalone or a server software, available via download or if it comes with a CD and if you accept wire transfer payments.

    I look forward to hearing from you.
    Atenciosamente | Cumprimentos | Kind Regards

    1. Hi,
      We use FastSpring for all our transactions, and they technically support Wire transfer, so it should be possible to set that up.
      We usually do not use resellers, but if you have a good amount of business opportunity, then please feel free to email me at kbm@components4developers.com
      The licenses are perpetual, but linked to a specific named developer and thus only transferable to another developer if accepted by us by email, and the original developer no longer in any way use the product.
      The initial purchase of kbmMW Enterprise or kbmMW Pro Edition includes 6 months of updates from time of purchase. The access to updates can be extended by 12 months at a time for roughly 1/2 price of the original purchase.

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.