We are happy to announce v. 5.22.00 of the most complete development toolkit for Delphi and C++Builder for building native modular and fast multi-tier solutions.
5.22.00 is a release with containing new stuff, refinements and bugfixes.
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 significant new release with new high performance transports, OpenSSL v3 support, WebSocket support, further improvements to SmartBind, new high performance hashing algorithms, improved RemoteDesktop sample and much more.
This release require the use of kbmMemTable v. 7.97.00 or newer.
The release includes:
- Optionally grab host mouse and keyboard actions in RemoteDesktop server (default not enabled, and can be completely left out of the final compiled application as it is should be used carefully!)
- Updated native socket support
- Updated application configuration framework
- Lots of improvements to existing features
- Bug fixes
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.
Community Edition (CE) can be used as a 60 day trial, alternatively as a free product, provided the license is followed. Please read license.txt file for details. CE supports a large subset of the Enterprise Edition features, but may have technical and artificial limitations in certain areas. It only supports a specific Delphi/Win32 SKU, produce Win32 executables and do not include source.
Please visit https://portal.components4developers.com to download.
Notice that Community Edition (CE) is currently only available on request, and after signing up with COMPLETE and CORRECT info on the portal, due to export restrictions to Russia and Belarusia.
kbmMW is the premiere n-tier product for Delphi, C++Builder and FPC on Win32, Win64, Linux, Java, PHP, Android, IOS, .Net, 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 currently used as the backbone in hundreds of central systems, in hospitals, courts, private, industries, offshore industry, finance, telecom, governments, schools, laboratories, rentals, culture institutions, FDA approved medical devices, military and more.
5.22.00 Jun 11 2023 New stuff ========= - Added ShowHostMouseActions:boolean (default false) to kbmMWRemoteDesktopClient.pas. If set to true, it will live track the hosts mouse position and show its position on the remote client. - Added TrackHostMouseEvents:boolean (default false) and TrackHostKeyboardEvents:boolean (default false) to kbmMWRemoteDesktopServer.pas If set to true, system wide mouse and/or system wide keyboard events will be tracked and reported to remote clients. The features can be completely turned off by defining KBMMW_REMOTEDESKTOP_NO_SYSTEM_HOOKS before compiling applications using kbmMWRemoteDesktopServer.pas. - Added kbmMWCreateTimestampedFile function to kbmMWGlobal.pas. - Added function kbmMWXMLContainsInvalidCharacter to kbmMWXML.pas Will check if string contains invalid XML character. - Added StrictSyntax:boolean property to TkbmMWCustomSAXXMLParser class (default false) Will check if tag or attribute contains invalid characters and throw KBMMW_ERR_TRANSPORT_XML_INVALIDCHARACTER if so. Will also check if attribute names are duplicated and throw KBMMW_ERR_TRANSPORT_XML_DUPLICATEATTRIBUTE if so. - Added MaxOutstandingSends:integer (default 0) and Options:TkbmMWSocketOptions (default [mwsoSkipOnMaxOutstandingSend]) to TkbmMWCustomTCPMessagingClientTransport and TkbmMWCustomTCPMessagingServerTransport. Governs how many non acknowledged outstanding sends can be queued up before new sends are either dropped or a disconnection is happening. Default there are no limit (except for OS restrictions). - Added property AdditionalBindings to TkbmMWCustomTCPMessagingServerTransport. It allows for adding additional ports and/or network cards to listen and accept connections from. - Added AddSampleLanguage method to TkbmMWI18N. Adds an "empty" language with the given name and description. That way it is possible to learn from scratch. A new instance of TkbmMWI18N will always contain a single sample langauge called 'Default'. - Added BatchSize:integer (default 0) to TkbmMWCustomResolver. If set to >0, the resolver will resolve in batches. Notice that in that case AllOrNothing will only have effect on the last handled batch. - Added property XRequestedWith:string to TkbmMWHTTPTransportStreamHelper. - Added property IsXMLHttpRequest to TkbmMWHTTPTransportStreamHelper. It will specifically be used for checking if the optional (but defacto standard) XRequestedWith indicates that the request was made by a JSON XMLRequest call (REST). If so, and the request could not be authorized, it will not require the client browser to popup a username/password dialog. - Added TryGetValue to TkbmMWCustomLockFreeHashArray<K,T> and TkbmMWCustomLockFreeHashArray2<K,T> (kbmMWLockFree.pas). - Updated kbmMWSQLite.pas to support SQLite custom functions. - Added new UCUpper and UCLower SQLite custom functions to do proper unicode upper and lower case if mwsloAddCustomFunctions is set in SQLiteOptions. - Added OnOpenedDBConnection to TkbmMWSQLiteConnectionPool. - Added LogException:boolean property to TkbmMWCustomMessageProcessor. If true, it will log whatever exception has happened while executing the message processor. Else it will ignore it. - Added option to define section name for TkbmMWBinaryParser. Allows for having multiple separate configurations in the same storage. - Added class function TkbmMWBPParser.CreateFromString - Added mwlbpmRawFile as a new "pretty mode" option to kbmMWLog. If used, it will output data in binary raw form in a separate file. Copies/backups are governed by MaxRawFileCount:integer; - Added class function IskbmMWDateTime(const ATypeInfo:PTypeInfo):boolean; to TkbmMWRTTI. - Added class function IskbmMWNullable(const ATypeInfo:PTypeInfo):boolean; to TkbmMWRTTI. - Added class function GetValueFromPath(const APath:string; const AInstance:TValue):TValue to TkbmMWRTTI. - Added class function GetValuesFromPath(const APaths:array of string; const AInstance:TValue):TArray<TValue>; to TkbmMWRTTI. - Added protected function GetConfigName(const ADefaultExtension:string):string; to TkbmMWConfiguration. It will be called to figure out what the name of the configuration should be. Default it is the same as the executables name + _config, but now all applications automatically supports /config (Windows) or -config (others) command line parameter, which should be followed by the name or full path and name of the configuration file to use. Changes/minor additions ======================= - Added SaveToAnsixxx and LoadFromAnsixxx to TkbmMWYAMLStreamer (kbmMWYAML.pas) where xxx is String, Stream and File. - Added LoadFromxxx variants to TkbmMWYAMLStreamer (kbmMWYAML.pas) where xxx is String, Stream and File, that accepts a default encoding. - Added support for decoding \uNNNN and \UNNNNNNNN syntax in TkbmMWYAMLStreamer. - Added property &Variant:variant to kbmMWNullable. allows getting or setting basic nullable datatypes as a variant. - Improved garbage collection of sent async requests in kbmMWCustomClientMessagingTransport.pas Now will also detect (and GC) orphaned reponses for requests that has already timed out. - Added Tag optional argument to TkbmMWLog and many log methods and to TkbmMWRemoteLog. - Changed use of specific thread code in kbmMWCustomTransport.pas to instead use the Scheduler. That results in the removal of: TkbmMWTransportIdleThread and TkbmMWTransportHeartbeatThread classes. - Added Scheduler:TkbmMWScheduler property to TkbmMWCustomTransport. Default it retrieves the kbmMW system scheduler, but it is possible to instantiate a separate scheduler and use that instead. - Improved TkbmMWCustomThread.WorkDone. - Changed TkbmMWCustomConnectionPool to not use its own thread for garbage collection. Instead it will use a recurring scheduled event. - Added property Scheduler:TkbmMWScheduler that default returns the system scheduler. It allows setting to a different instantiated scheduler if needed. - Removed class TkbmMWPooledGarbageThread. - Added optional Replace:boolean argument to TkbmMWI18N.Load method. If set to true, the loaded language will completely replace already existing languages in TkbmMWI18N. If not it will append extra language(s). - Updated the native socket code. - Added Data property to TkbmMWDIB class. - Updated TkbmMWCustomGroupedMultithreadMessageQueueProcessor (kbmMWCustomMessagingTransport.pas) to use a scheduled event instead of its own thread for GC. - Removed TkbmMWMessageGroupsGarbageThread class from kbmMWCustomMessagingTransport.pas. Fixes ===== - Fixed \xNN decoding in TkbmMWYAMLStreamer. - Fixed decoding exponential numbers in TkbmMWYAMLStreamer. - Fixed decoding exponential numbers in TkbmMWJSONStreamer. - Fixed incorrect conditional compiling in TkbmMWYAMLStreamer.LoadFromStream when KBMMW_SUPPORTSENCODING not defined. - Fixed TkbmMWMSSQLRewriter methods: ExistsTable, RewriteExistsIndex, RewriteListIndexes, RewriteDescribeIndex - Fixed detecting system wide kbmMW shutdown in kbmMWSmartEvent.pas. - Fixed setting smartevent as done (when it has been run), even if OnDone is not used. - Fixed FMX compilation of kbmMWRemoteDesktopClient.pas - Fixed shutdown scenarios in TkbmMWInnerThread. - Fixed TkbmMWThreadEntry.Destroy. - Fixed TkbmMWCustomThreadPool.Reserve not attempting to reuse thread which has been marked for shutdown. - Fixed TkbmMWDOMXMLNode.GetData function so it will decode data before returning it. - Fixed TkbmMWCustomSQLParamsResolver.BuildSQLStatements that used wrong tablename. - Fixed socket close on TkbmMWCustomTCPMessagingClientTransport. - Improved kbmMWORM. - Fixed kbmMWDIB.pas. - Improved shutdown detection in TkbmMWCustomMessageQueueProcessorThread.Execute. - Improved shutdown detection in TkbmMWMessageQueueProcessorThread.ProcessAll, ProcessBlockAll, ProcessOne, ProcessBlockOne. - Fixed parsing data starvation issue in TkbmMWBinaryParser. - Fixed trailing spaces being removed when getting string data from an XML based configuration.