ANN: kbmMW Professional and Enterprise Edition v. 5.04.20 released!

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

This release is primarily bugfix release, but does also contain a number of new things:

  • Support for scheduling multiple parallel child jobs for recurrent runs.
  • XML <> Object Notation conversion improvements
  • kbmMW Configuration improvements

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.04.20 Nov 12 2017

New stuff
 =========
 - Added ability to Schedule batches of tasks as one job, similarly as Run.
 Using Schedule, it can be recurrent.

Fixes
 =====
 - Updated several database adapters with various fixes.
 - Fixed error popping up in TkbmMWCustomHashItem when range check is enabled in compiler.
 - Fixed bugs in kbmMWScheduler.
 - Fixed leaks in kbmMWScheduler related to scheduling of batches of tasks.
 - Fixed TkbmMWLockFreeHashArray2.Enum not returning AKey2 value.
 This shows up if one enable the nice debug flag
 KBMMW_MREW_NOTIFY_LONG_LOCKS_DEBUG (generally not to be used in production).
 It ensures that deadlocks due to locking will show up in the Windows monitor
 with exact info about which thread(s) held the lock and the type of lock.
 - Fixed off by one in counting when to GC a service instance resulting
 in leaving one too little left when minimum of instances has been defined.
 - Fixed service GC issue when a service has a very long running operation
 that times out and thus should be removed, resulting in less than
 defined minimum number of instances.
 - Fixed kbmMWMT database adapter's resolver to not require a table name.
 - Fixed TkbmMWConfiguration.

Changes/minor additions
 =======================
 - Updated MT demo to match current kbmMW version.
 - Significantly improved XML SaveToObjectNotation and LoadFromObjectNotation.
 Amongst other s added the following options:
 mwxonoAutoIdentifyArrayElement - Set to include i=IndexNumber of array
 attribute.
 mwxonoReservedNameAsElement - Set to not interpret id and type names but
 instead treat them as elements.
 mwxonoAutoNumberUnnamedArrays - Set to add array level to unnamed arrays.
 If not set, sub array will have same name as parent.
 - Added BSON as storage format for TkbmMWConfiguration.
 - Added Prepare...Storage utility methods to TkbmMWConfiguration to easily
 setup specific storage type.
 - Added kbmMWConfiguration sample.
 - Added SetDateTimeTimeZone to TkbmMWDateTime, which specifically sets a
 datetime with a specific timezone.

ANN: kbmMW Professional and Enterprise Edition v. 5.04.10 released!

We are happy to announce v5.04.10 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 release is primarily bugfix release, but does also contain a number of new features:

  • Local and remote checksum support for file service and client
  • Scheduler improvements with support for run of a batch of multiple parallel child jobs
  • AMQP improvements

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.04.10 Nov 3 2017

Fixes
=====
– Fixed bugs and improved XML<>ON conversion.
– Fixed bugs in TkbmMWConfiguration.

Changes/minor additions
=======================
– Added KeepAliveTimeout and KeepAliveInterval to Indy TCP server transports

5.04.00 Nov 2 2017

New stuff
=========
– Added OnAccessException event to TkbmMWCustomFileClient.
– Added Checksum, ChecksumEx, SameFile, SameFileEx, LocalChecksum to TkbmMWCustomFileClient
Checksum(Ex) and LocalChecksum use SHA256 to calculate checksum.
SameFile(Ex) calculates checksum on both local and remote file and compares those.
On platforms supporting TkbmMWScheduler, the calculations are run in parallel.
– Added WithObject and WithInterface to TkbmMWScheduledEvent to allow
piggybacking additional data to events.
– Added additional overloaded SynchronizedAfterRun and AfterRun for anonymous
procedures to TkbmMWScheduledEvent.
– Added WhenException methods to TkbmMWScheduledEvent to allow handling exceptions.
– Added WaitRun(s) to TkbmMWScheduledEvent to allow pausing a thread until an
event has finished running.
– Added additional Run/RunNow methods to TkbmMWScheduler to allow for scheduling
multiple parallel jobs that will be run under control of one scheduled event.
Only when all jobs has run, the scheduled event is considered to have run.
– Added mwxonoPreferAttributes and mwxonoAutoIdentifyArrayElement to
TkbmMWXMLObjectNotationOption.
mwxonoPreferAttributes controls if conversion from object notation
should prefer defining XML node values as attributes or as elements.
mwxonoAutoIdentifyArrayElement controls if conversion from object notation
should include index (i) attribute to precisely identify a row in an array.
– Updated many database adapters to prevent certain leaks on exceptions.
– Added MaxFileSize to TkbmMWFileServiceDefinition to define maximum size of file
that is allowed to be received by the server. Default no limit.
– Added TkbmMWVirtualConfigurationStorage to kbmMWConfiguration unit.
It allows for getting and storing configuration from any type of medias.
– Added TkbmMWMarshal.Bytes2Memory function in kbmMWGlobal.
– Added ToString to IkbmMWAutoValue.
– Added kbmMWExplode function to kbmMWGlobal. It allows for exploding
strings with start and end tags as delimiters.
– Added PrettyChar2String function to IkbmMWLogFormatter.
– Made Char2PrettyChar function in IkbmMWLogFormatter implementers public.
– Added support for detecting version of databases for some databases in
TkbmMWCustomConnectionPool.
– Added TkbmMWThreadONObject and TkbmMWThreadONArray to kbmMWObjectNotation.
They allows for multithreaded access to the same base object notation object or array.
– Added additional support for CoInitialize and CoUnInitialize for UNIDac adapter.
– Added BasicProperties property to IkbmMWAMQPChannel.
– Updated database adapter wizard to generate up to date code.
– Improved stability of TkbmMWFileService, TkbmMWFileClient and TkbmMWFilePool.
– Improved error handling in kbmMWORM.

Fixes
=====
– Fixed bugs in TkbmMWScheduler.
– Fixed compilation errors in AMQP on some IDE SKU versions.
– Fixed header properties not available under some circumstances in AMQP.
– Fixed bugs in TkbmMWAuthorizationManager.
– Fixed bugs in kbmMWConfiguration.
– Fixed bugs in kbmMWHTTPUtils resulting in stack overflow.
– Fixed some null handling issues in TkbmMWObjectNotation.
– Removed leftover debug code from TkbmMWBPStringMaskPart.
– Fixed bugs in TkbmMWAMQPChannel.
– Fixed NULL marshalling issue in TkbmMWONNullableMarshal.
– Fixed kbmMWServer not instantiating minimum number of services at startup.
– Fixed IDE Debug visualizers.

Changes/minor additions
=======================
– Improved GetStreamEx and PutStreamEx to allow for retry on failure in TkbmMWCustomFileClient.
– Generally improved exception and error handling in TkbmMWCustomFileClient.
– Improved PutStreamEx to include offset and total file size in server call.
– Improved TkbmMWSQLiteMetaData to support obtaining version meta data and index info
from older SQLite versions (pre 3.8.3)

kbmMemTable v. 7.77.30 Standard and Professional Edition released

This is a bugfix release fixing the following issues:

  • Fixed compilation in D2009/D2010.
  • Fixed ftString PopulateField and CompareFields bug affecting NextGen compilers (locate/sort).
  • Fixed order of destruction of FRowOrderIndex.

kbmMemTable is the premier high performance, high functionality in
memory dataset for Delphi and C++Builder with kbmMemTable Professional
topping the scales as being the worlds fastest!

If you have an up to date Service and Update (SAU) subscription, then
you can immediately visit https://portal.components4developers.com to
download the latest kbmMemTable release.

If not, please visit our shop at http://www.components4developers.com
and extend your SAU with another 12 months.

kbmMW Scheduler Tidbits #5 -Synchronize multiple parallel jobs

Next release of kbmMW further improves on the TkbmMWScheduler. The scheduler supports adding jobs to run given a quite extensive set of time conditions. It also already supports running jobs in the background, and when they are done, handle some foreground update of the GUI in a safe and consistent way.

However what if you want to run a number of jobs in parallel in the background and only call the job a success when all the background sub jobs has finished.

kbmMW will allow you to do that in a simple way in next release. Here is some example code.

procedure TForm1.Button10Click(Sender: TObject);
var
  d1:int64;
begin
  d1:=TkbmMWTiming.GetTimeUS;
  Scheduler.Run([
   procedure(const AScheduledEvent:IkbmMWScheduledEvent)
   var
      i,n:integer;
      d:int64;
   begin
        AScheduledEvent.Data:=0;
        n:=500;
        d:=TkbmMWTiming.GetTimeUS;
        for i:=0 to n-1 do
        begin
             if AScheduledEvent.Terminating then
                break;
             sleep(10);
        end;
        d:=TkbmMWTiming.Diff(d);
        AScheduledEvent.Data:=d;
   end,
   procedure(const AScheduledEvent:IkbmMWScheduledEvent)
   var
      i,n:integer;
      d:int64;
   begin
        AScheduledEvent.Data:=0;
        n:=400;
        d:=TkbmMWTiming.GetTimeUS;
        for i:=0 to n-1 do
        begin
             if AScheduledEvent.Terminating then
                break;
             sleep(10);
        end;
        d:=TkbmMWTiming.Diff(d);
        AScheduledEvent.Data:=d;
   end]
  )
  .NamedAs('MultipleWithSync')
  .SynchronizedAfterRun(
   procedure(const AScheduledEvent:IkbmMWScheduledEvent)
   begin
        mData.Lines.Add('Run multiple with sync - anonym (uS):'+VarToStr(AScheduledEvent.ChildEvent[0].Data)+','+VarToStr(AScheduledEvent.ChildEvent[1].Data));
        mData.Lines.Add(' Total passed time (uS):'+IntToStr(TkbmMWTiming.Diff(d1)));
   end)
  .Activate;
end;

One interesting part is the Run method, which now takes an array of procedures or functions to run. What happens internally, is that a scheduled event is defined, which in turn defines a number of child scheduled events that each process the given jobs.

Only when all jobs are done, the AfterRun method is executed.

Another interesting thing to notice, is that the AfterRun method can tap into data provided by any of the child events. In this case the child events time how long time they ran. The AfterRun method displays that, along with the total run time.

In this case, the total time is only slightly longer than the time for the longest running job because the jobs ran in parallel.

A few more fluent methods has also been added:

WithObject(AObject:TObject) and WithInterface(AInterface:IInterface) which allows you to tag on an object or an interface to an event. It could be used to provide data for the job, or to receive data from the job.

Only remember, that jobs are run multithreaded. Thus your object or interface must be threadaware.

Finally this example shows how a long running job should check for termination. Termination happens when the Terminate method is called on the running scheduled event, or when the scheduler is closing down, for example due to the application being shutdown.

That’s all for now.

kbmMemTable 7.77.20 Std/Pro bugfix release and kbmFMX 1.03.00 Tokyo support release

We are happy to announce a bugfix release for kbmMemTable Standard and Professional Edition, fixing a couple of bugs reported by users:

Whats new in 7.77.20 Oct 1 2017
---------------------------------
 - Fixed offset bug in PopulateField on 10.2 (Tokyo) IOS/Android.
 - Fixed Unicode comparison issues in SQL.
 - Fixed LIKE incorrect match bug in SQL.
 - Added support for ftFMTBcd in PopulateField.

Further we have released a RAD Studio 10.2 (Tokyo) compatible version of kbmFMX, which is our high performance Firemonkey controls for Windows, IOS, Android and OSX, which includes:

  • TkbmFMXDBGrid – A high performance, readonly, TDataset dataaware grid.
  • TkbmFMXDBMemo – A TDataset dataaware memo control.
  • TkbmFMXDBImage – A TDataset dataware image control.
  • TkbmFMXImageControl – A super versatile image control with build in support for pan, zoom (pinch and mousewheel) and rotate. In addition it supports adding active hotspots (zones) on the image.
  • TkbmFMXNumberEdit – A simple to use numeric editor control, which visually formats the number according to FormatSettings.
  • TkbmFMXVerticalLayout – A layout that automatically resizes vertically to contain all child controls. Useful in combo with a scrollbox.
  • TkbmFMXMemo – A regular TMemo, which correctly supports caret position.
  • TkbmFMXPaintBox – A paintbox, great for capturing signatures.
  • TkbmFMXProgress – A progress overlay.

kbmFMX is available as a free bundle with kbmMemTable Standard Edition, kbmMemTable Professional Edition, kbmMW Professional Edition and kbmMW Enterprise Edition.

Please visit https://portal.components4developers.com to download the
latest and greatest versions of our paid for and free products.