We are happy to announce the release of kbmMW v. 4.80.00
We are happy to announce the release of kbmMW v. 4.80.00
Professional, Enterprise and CodeGear Edition.
kbmMW continues to set the bar for what an n-tier product must be
capable of in the real world!
Keywords for this release:
- XE8 support!
- Improved performance!
- New features!
- Bug fixes!
Look at end of post for detailed list of additions, changes and fixes.
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.
kbmMW CodeGear Edition is available for free for
Delphi XE6/Win32, XE7/Win32, XE8/Win32 and includes kbmMemTable CodeGear
Edition. It can be used for commercial work.
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 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.
Changes:
===========
Important notes (changes that may break existing code)
======================================================
* Changed messaging transport event OnServerRequestException to
OnServerException.
* Removed NeverTimeout property from TkbmMWActor. Replaced by
MaxIdleTime.
* Removed threaded distributed delivery from hub as it was defunct and
needs to be created from new using the new processor classes.
New stuff
=========
- Added support for XE8.
- Changed server messaging transport to use a queue and a processor for
server request/service calls instead of the old custom way.
- Added public property ServerQueue on server messaging transport to
optionally allow for providing a custom queue (eg. memory or file
based) instead of the default used TkbmMWMemoryMessageQueue for
server request/service call messages.
- Added public properties ServerQueueProcessor, InboundQueueProcessor,
OutboundQueueProcessor on server messaging transport to optionally
allow for other custom processors instead of the default defined by
the transport (typical TkbmMWSAFServerInboundQueueProcessor,
TkbmMWSAFHubOutboundQueueProcessor,
TkbmMWCustomServerMessageQueueProcessor).
Various options are available via the properties at runtime to setup
forexample PoolSize and PoolQueueSize which defines number of
threads and allowed outstanding number of requests on a thread).
This replaces old server transport PoolSize property. Default is
PoolSize=1 and PoolQueueSize=5.
- Added mwsloPreferWideMemoOverMemo and mwsloPreferWideStringOverString
options to kbmMWSQLite. Makes it optional to auto map string/memo
field types to widestring/widememo field types.
As string/memo is already unicode aware, its less reason for
remapping to the wide versions automatically.
- Added new Distribution property to SubjectHeader of messages. It will
allow for indicating grouping and thus sequence of messages when
being processed server side by group aware processors.
In the future it will also allow for designating a named queue for a
message or an exchange.
Syntax:
name - Push message on named queue
Q:name - Push message on named queue
E:name - Push message via given exhange
G:name - Push message on default queue under group
name and process message sequential via group.
G:name/H(OLD) - Push message on default queue under group
name and hold message in that group.
G:name/C(OMMIT) - Push message on default queue under group
name and commit all held messages in that
group sequentially.
G:name/R(OLLBACK) - Push message on default queue under group
name and rollback (delete) this and all
held messages in that group.
Q:name:group - Push message on named queue under given
group name and process message
sequential via group.
Q:name:group/H(OLD) - Push message on named queue under given
group name. Hold message.
Q:name:group/C(OMMIT) - Push message on named queue under given
group name. Commit all held messages in
that group in that queue sequentially.
Q:name:group/R(OLLBACK) - Push message on named queue under given
group name. Rollback (delete) this and
all held messages in that group in that
queue.
E:name:group - Push message via given exchange under
given group name and process message
sequential via group.
E:name:group/H(OLD) - Push message via given exchange under
given group name. Hold message in
receiving queues.
E:name:group/C(OMMIT) - Push message via given exchange under
given group name. Commit all held
messages in that group in receiving
queues sequentially.
E:name:group/R(OLLBACK) - Push message via given exchange under
given group name. Rollback (delete)
this and all held messages in receiving
queues.
name and group are case insensitive.
Holding messages means that they are pushed on a queue, but not made
available for processors until commit.
- Removed QUE. message type as named queues will be handled by the
distribution subject header, in the future.
- Added kbmMWGetUserLoginName, kbmMWGetUserFullName,
kbmMWGetDomainServerName, kbmMWGetDomainUserFullName in
kbmMWGlobal.pas (the later two only for Windows)
- Added property MaxIdleTime on TkbmMWActor. Can be -1 to use default,
0 for never to time out, or another value to indicate timeout for that
actor when logged in.
- Added Distribution string property to TkbmMWCustomClient when WIB is
licensed.
- Reintroduced new fast TkbmMWEvent lockfree event. Thus 3 different
event mechanisms can be used in kbmMW depending on settings in
kbmMWConfig.inc.
Define {$DEFINE KBMMW_SUPPORT_FASTEVENT} for using C4Ds fast
lockfree event mechanism.
Define {$DEFINE KBMMW_SUPPORT_LIGHTWEIGHTEVENT} for using
Embarcadero's lightweight event mechanism.
Define none of the above to fall back and use Embarcaderos TEvent.
Notice it has been seen that Embarcaderos TLightWeightEvent is not
stable in a production environment and may end up vast amounts of
CPU cycles due to it entering some sort of deadlock situation.
C4Ds own TkbmMWEvent is very fast and seems to be stable, but it
shouldnt be enabled on a production environment before having tested
the system under load for a period of time. Internal tests indicates
it to be stable, however better be safe than sorry.
TEvent is the old mutex based event mechanism which is very slow and
results in large amounts of context switches when used often. Its
stable but performs quite bad.
- Added TkbmMWDuration record which holds a duration value to
kbmMWDateTime.pas.
It can be used by it self or in combination with TkbmMWDateTime
which now fully supports duration values, including calculations.
- Added a number of message and queue processor components:
TkbmMWSyncMessageProcessor, TkbmMWAsyncMessageProcessor,
TkbmMWSyncMessageQueueProcessor,
TkbmMWAsyncMessageQueueProcessor,
TkbmMWMultithreadMessageQueueProcessor,
TkbmMWGroupedMultithreadMessageQueueProcessor
- Added mwmqoDisableBatching message queue option to actively disable
batching of messages that is requested to be batched and can be
batched.
- Added support for tentatively pushing messages on a queue by
additional optional boolean argument to PushMessage.
- Added CommitMessagePush and RollbackMessagePush.
A tentatively pushed message is on the queue, but not visible to
processors popping messages off the queue, until the message push is
committed.
- Added public property SubjectHeaderVersion on client and server
messaging transports. If set to <>0, will force the outbound messages
to be streamed with the given subject header version regardless of
what the message itself is set to or what has been defined as default.
Changes/minor additions
=======================
- Published LargeAsNative in TkbmMWBinaryStreamFormat.
- Modified kbmMWDebugDumpMemory to output 32 bytes per line nicely
formatted instead of only 8 bytes.
- Changed messaging transport event OnServerRequestException to
OnServerException.
- Removed NeverTimeout property from TkbmMWActor. Replaced by
MaxIdleTime.
- Removed threaded distributed delivery from hub as it was defunct and
needs to be created from new using the new processor classes.
- Improved messaging transports to be able to auto adapt to older
subject header versions.
- Improved precision on kbmMWGetCurrentTimeNS for Windows. Now its
precise to approx 15ms.
- Ensured that REQ/SRV messages are not committed on the inbound queue
until they have been processed by the TkbmMWServer instance even
though they are pushed on intermediate queues.
- Added Count and Instance properties to TkbmMWServiceInstances to
enable easier access from C++.
Notice you should lock before and unlock after if you will attempt
to loop through all instances as the number may change at any time
if not locked.
Fixes
=====
- Fixed thread leak in TkbmMWCustomThread.
- Fixed memory leak in TkbmMWJSONStreamFormat.
- Fixed case issue with 'hidden' attribute in TkbmMWJSONStreamFormat.
- Fixed SQLiteServer demo which was referencing unneeded AMF3
streamformat.
- Fixed C++ XE2-XE5 unable to link with TPerlRegEx.
- Fixed transaction sharing issue in FireDAC adapter which caused
instability.
- Fixed thread leak issue related to transport heartbeat thread.
- Added ValueFromUTF16String and ValueToUTF16String methods to
TkbmMWJSONMarshal. Existing ValueFromString and ValueToString
encodes/decodes in UTF8 format.
https://portal.components4developers.com
Professional, Enterprise and CodeGear Edition.
kbmMW continues to set the bar for what an n-tier product must be
capable of in the real world!
Keywords for this release:
- XE8 support!
- Improved performance!
- New features!
- Bug fixes!
Look at end of post for detailed list of additions, changes and fixes.
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.
kbmMW CodeGear Edition is available for free for
Delphi XE6/Win32, XE7/Win32, XE8/Win32 and includes kbmMemTable CodeGear
Edition. It can be used for commercial work.
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 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.
Changes:
===========
Important notes (changes that may break existing code)
======================================================
* Changed messaging transport event OnServerRequestException to
OnServerException.
* Removed NeverTimeout property from TkbmMWActor. Replaced by
MaxIdleTime.
* Removed threaded distributed delivery from hub as it was defunct and
needs to be created from new using the new processor classes.
New stuff
=========
- Added support for XE8.
- Changed server messaging transport to use a queue and a processor for
server request/service calls instead of the old custom way.
- Added public property ServerQueue on server messaging transport to
optionally allow for providing a custom queue (eg. memory or file
based) instead of the default used TkbmMWMemoryMessageQueue for
server request/service call messages.
- Added public properties ServerQueueProcessor, InboundQueueProcessor,
OutboundQueueProcessor on server messaging transport to optionally
allow for other custom processors instead of the default defined by
the transport (typical TkbmMWSAFServerInboundQueueProcessor,
TkbmMWSAFHubOutboundQueueProcessor,
TkbmMWCustomServerMessageQueueProcessor).
Various options are available via the properties at runtime to setup
forexample PoolSize and PoolQueueSize which defines number of
threads and allowed outstanding number of requests on a thread).
This replaces old server transport PoolSize property. Default is
PoolSize=1 and PoolQueueSize=5.
- Added mwsloPreferWideMemoOverMemo and mwsloPreferWideStringOverString
options to kbmMWSQLite. Makes it optional to auto map string/memo
field types to widestring/widememo field types.
As string/memo is already unicode aware, its less reason for
remapping to the wide versions automatically.
- Added new Distribution property to SubjectHeader of messages. It will
allow for indicating grouping and thus sequence of messages when
being processed server side by group aware processors.
In the future it will also allow for designating a named queue for a
message or an exchange.
Syntax:
name - Push message on named queue
Q:name - Push message on named queue
E:name - Push message via given exhange
G:name - Push message on default queue under group
name and process message sequential via group.
G:name/H(OLD) - Push message on default queue under group
name and hold message in that group.
G:name/C(OMMIT) - Push message on default queue under group
name and commit all held messages in that
group sequentially.
G:name/R(OLLBACK) - Push message on default queue under group
name and rollback (delete) this and all
held messages in that group.
Q:name:group - Push message on named queue under given
group name and process message
sequential via group.
Q:name:group/H(OLD) - Push message on named queue under given
group name. Hold message.
Q:name:group/C(OMMIT) - Push message on named queue under given
group name. Commit all held messages in
that group in that queue sequentially.
Q:name:group/R(OLLBACK) - Push message on named queue under given
group name. Rollback (delete) this and
all held messages in that group in that
queue.
E:name:group - Push message via given exchange under
given group name and process message
sequential via group.
E:name:group/H(OLD) - Push message via given exchange under
given group name. Hold message in
receiving queues.
E:name:group/C(OMMIT) - Push message via given exchange under
given group name. Commit all held
messages in that group in receiving
queues sequentially.
E:name:group/R(OLLBACK) - Push message via given exchange under
given group name. Rollback (delete)
this and all held messages in receiving
queues.
name and group are case insensitive.
Holding messages means that they are pushed on a queue, but not made
available for processors until commit.
- Removed QUE. message type as named queues will be handled by the
distribution subject header, in the future.
- Added kbmMWGetUserLoginName, kbmMWGetUserFullName,
kbmMWGetDomainServerName, kbmMWGetDomainUserFullName in
kbmMWGlobal.pas (the later two only for Windows)
- Added property MaxIdleTime on TkbmMWActor. Can be -1 to use default,
0 for never to time out, or another value to indicate timeout for that
actor when logged in.
- Added Distribution string property to TkbmMWCustomClient when WIB is
licensed.
- Reintroduced new fast TkbmMWEvent lockfree event. Thus 3 different
event mechanisms can be used in kbmMW depending on settings in
kbmMWConfig.inc.
Define {$DEFINE KBMMW_SUPPORT_FASTEVENT} for using C4Ds fast
lockfree event mechanism.
Define {$DEFINE KBMMW_SUPPORT_LIGHTWEIGHTEVENT} for using
Embarcadero's lightweight event mechanism.
Define none of the above to fall back and use Embarcaderos TEvent.
Notice it has been seen that Embarcaderos TLightWeightEvent is not
stable in a production environment and may end up vast amounts of
CPU cycles due to it entering some sort of deadlock situation.
C4Ds own TkbmMWEvent is very fast and seems to be stable, but it
shouldnt be enabled on a production environment before having tested
the system under load for a period of time. Internal tests indicates
it to be stable, however better be safe than sorry.
TEvent is the old mutex based event mechanism which is very slow and
results in large amounts of context switches when used often. Its
stable but performs quite bad.
- Added TkbmMWDuration record which holds a duration value to
kbmMWDateTime.pas.
It can be used by it self or in combination with TkbmMWDateTime
which now fully supports duration values, including calculations.
- Added a number of message and queue processor components:
TkbmMWSyncMessageProcessor, TkbmMWAsyncMessageProcessor,
TkbmMWSyncMessageQueueProcessor,
TkbmMWAsyncMessageQueueProcessor,
TkbmMWMultithreadMessageQueueProcessor,
TkbmMWGroupedMultithreadMessageQueueProcessor
- Added mwmqoDisableBatching message queue option to actively disable
batching of messages that is requested to be batched and can be
batched.
- Added support for tentatively pushing messages on a queue by
additional optional boolean argument to PushMessage.
- Added CommitMessagePush and RollbackMessagePush.
A tentatively pushed message is on the queue, but not visible to
processors popping messages off the queue, until the message push is
committed.
- Added public property SubjectHeaderVersion on client and server
messaging transports. If set to <>0, will force the outbound messages
to be streamed with the given subject header version regardless of
what the message itself is set to or what has been defined as default.
Changes/minor additions
=======================
- Published LargeAsNative in TkbmMWBinaryStreamFormat.
- Modified kbmMWDebugDumpMemory to output 32 bytes per line nicely
formatted instead of only 8 bytes.
- Changed messaging transport event OnServerRequestException to
OnServerException.
- Removed NeverTimeout property from TkbmMWActor. Replaced by
MaxIdleTime.
- Removed threaded distributed delivery from hub as it was defunct and
needs to be created from new using the new processor classes.
- Improved messaging transports to be able to auto adapt to older
subject header versions.
- Improved precision on kbmMWGetCurrentTimeNS for Windows. Now its
precise to approx 15ms.
- Ensured that REQ/SRV messages are not committed on the inbound queue
until they have been processed by the TkbmMWServer instance even
though they are pushed on intermediate queues.
- Added Count and Instance properties to TkbmMWServiceInstances to
enable easier access from C++.
Notice you should lock before and unlock after if you will attempt
to loop through all instances as the number may change at any time
if not locked.
Fixes
=====
- Fixed thread leak in TkbmMWCustomThread.
- Fixed memory leak in TkbmMWJSONStreamFormat.
- Fixed case issue with 'hidden' attribute in TkbmMWJSONStreamFormat.
- Fixed SQLiteServer demo which was referencing unneeded AMF3
streamformat.
- Fixed C++ XE2-XE5 unable to link with TPerlRegEx.
- Fixed transaction sharing issue in FireDAC adapter which caused
instability.
- Fixed thread leak issue related to transport heartbeat thread.
- Added ValueFromUTF16String and ValueToUTF16String methods to
TkbmMWJSONMarshal. Existing ValueFromString and ValueToString
encodes/decodes in UTF8 format.
https://portal.components4developers.com
Comments
Post a Comment