呵呵,说曹操,曹操到。昨天刚写完kbmMW 的配置,今天kbmMW 4.00 正式版就发布了。
We are happy to announce the immediate availability of kbmMW Enterprise Edition v. 4.00.00.
This is a major release with many new features like Remote Desktop,
JSON and JSON dataset streaming, new advanced file queue and buffered file streams and much much more.
Please check further down for more detailed info about new features.
kbmMW Enterprise Edition v4.00.00 is available for immediate download for all holders of a valid SAU (Service and Update) subscription.
Please visit: https://portal.components4developers.com and login with your credentials to download.
If your subscription has expired you can purchase additional 12 months SAU periods via our shop
at www.components4developers.com
Important notes (changes that may break existing code)
======================================================
* kbmMW Enterprise Edition Message Bundling require update of all nodes.
New stuff
=========
- Added message bundling in WIB. To enable, send message with SubjectJeader.QoS value
KBMMW_TRANSPORT_QOS_BATCHABLE. To force a break between batchable messages, send a message
with SubjectJeader.QoS KBMMW_TRANSPORT_QOS_PRIMARY_IF_BATCHED.
PushMessage on queues now have optional argument AUnBatch:boolean=false which if set to true
will automatically unbatch messages into singular messages on the queue.
Only messages with equal priority, HopCount, Subject, Data property, MaxHopCount, Hops and Trace can
be batched. By Setting MaxBatchedCount on SubjectHeader, you can determine how many messages of batchable
type, can be batched into one.
- Added Delphi XE2, C++Builder XE2 support.
- Added support for Win32, Win64, MacOS.
- Added Remote desktop components and samples for Win32 (not tested with Win64).
- Added native full JSON support. Check new kbmMWJSON unit.
- Added JSON dataset stream format. Check new kbmMWJSONStreamFormat unit.
- Added Lazarus support. No wizard support at the moment.
- Added RemapOptions and OnRemapFielddef event to metadata components. It
can be used for specifying how field type remapping should happen.
mwroStringAsUnicode - All normal string fields are treated as unicode string fields.
It covers ftString, ftFixedChar that is mapped to ftWideString, and ftMemo that
is mapped to ftWideMemo.
mwroOracleAsRegular - ftOraBlob is mapped to ftBlob, and ftOraClob is mapped to ftMemo.
mwroDateTimeAsDate - ftDateTime is mapped to ftDate.
- Added ParamNameFix to metadata components to control if kbmMW should remove "illegal"
characters from the parameter name. Default true.
- Added functionality so macros on X connection pool is expanded after macros on
chained connection pool.
- Added support for CommandTimeOut property in ADOX adapter.
- Added Cookies property to TkbmMWHTTPTransportStreamHelper.
- Added NoCache property to TkbmMWHTTPTransportStreamHelper.
- Added support for redirection/loadbalancing using HTTP protocol in
TkbmMWHTTPTransportStreamHelper.
- Added support for template parameters in TkbmMWxxxHTTPService and
TkbmMWHTTPServiceDefinition via property Parameters.
Control when parameters should be expanded via
ParametersEnabledFor property. Control format of template parameter
via ParameterType (mwtvtStandard: [!--PARNAME--!] / mwtvtHTML: <!-- PARNAME -->)
PreserveParameterWhenUndefined:boolean controls if the parameter should be
preserved if a parameter with that name cant be found and thus the parameter
not be expanded.
- Added function FileCategoryFromMimeType(const AMimeType:string):TkbmMWHTTPFileCategory
to TkbmMWxxxHTTPService.
- Added
function Request(ARequestTransportStream:IkbmMWCustomRequestTransportStream; AResponseTransportStream:IkbmMWCustomResponseTransportStream; const AServiceName,AServiceVersion:string; var AStateID:integer; AClientID:TkbmMWClientIdentity; AInStream,AOutStream:TStream; const AFunc:string;const Args:array of variant):variant;
function Request(const AServiceName,AServiceVersion:string; var AStateID:integer; AClientID:TkbmMWClientIdentity; AInStream, AOutStream:TStream; const AFunc:string; const Args:array of variant):variant;
function Request(const AServiceName,AServiceVersion:string; AClientID:TkbmMWClientIdentity; AInStream, AOutStream:TStream; const AFunc:string; const Args:array of variant):variant;
to TkbmMWServer to make it easy to make a server internal request to a service.
- Added keep alive type Ping/Pong to TkbmMWServer. From a client call SendPing(value) where value is
an optional value that will be send back to you. Result of the SendPing call is an array
consisting of __PONG at index 0, provided argument (or null) at index 1, the servers UTC offset
(in seconds) at index 2, and the servers UTC time at index 3.
- Added advanced high performance paged stream buffering: TkbmMWBufferedStream.
- Added TkbmMWFileStream that allows for providing more flags than regular TFileStream.
- Added TkbmMWBufferedFileStream that combines the above to bypass Windows file caching
and instead use internal caching mechanism that allows finetuning to a specific
use pattern, thus signtificantly improving performance. Will internally access
file on disk directly and read/write sectorbased.
- Added PurgeAndDisconnect method to TkbmMWCustomSAFClientTransport.
Can be called with parameter that defines which queues (inbound/outbound) that should
be purged before the connection is closed and how. It can be set to process or flush
Default is [mwpacProcessInbound,mwpacProcessOutbound].
- Added MoveToStart/MoveToEnd in TkbmMWDblLinkList.
- Added LocateFirstPrioritized and LocateLastPrioritized to TkbmMWPriorityDblLinkList.
- Added DeleteItem to TkbmMWCustomHashList.
- Added LoadFromBytes to TkbmMWMemoryStream.
- Added Append(const AChar:char) to TkbmMWStringBuilder.
- Added global methods: function kbmMWUTCLocalOffset:integer;
function kbmMWGetCurrentTimeNS:int64;
function kbmMWInterlockedIncrement(var AValue:integer):integer;
function kbmMWInterlockedDecrement(var AValue:integer):integer;
function kbmMWInterlockedIncrement64(var AValue:int64):int64;
function kbmMWGetFileSize(const AFilePath:string; var ASize:cardinal; AHandle:THandle = 0):boolean;
function kbmMWGetFileInfo(const AFilePath:string; var ASize:Cardinal; var ACreateTime:TDateTime; var AModifyTime:TDateTime; var AAccessTime:TDateTime; var AAttribs:cardinal; AHandle:THandle = 0):boolean;
- Added global kbmMWFormatSettings: TFormatSettings that is used when format settings are needed in kbmMW.
- Optimized TkbmMWMemoryStream.CopyFrom when copying from other TkbmMWMemoryStream.
- Added TkbmMWXMultiDBConnectionPool which is like a regular TkbmMWXConnectionPool, but
supports handling multiple databases at the same time.
- Improved TkbmMWCustomStreamStorage with regards to performance, verify and repair.
- Added SampleSizes to TkbmMWCustomStreamStorage which scans a number of non deleted segments to
determine max size of metadata header and content. Those values can be used as indicators when
optimizing disk I/O when using a TkbmMWBufferedFileStream for the stream storage.
- Added new methods to TkbmMWCustomMessageQueue:
procedure DeleteMessages(const ASubjectMatch:string);
procedure DeleteMessages(const APriority:byte; const AMatch:TkbmMWPriorityMatch = mwpmEqual);
They will search and delete messages that have a certain subject (allows for subscription wildcards)
or a certain priority level.
- Changed TkbmMWFileStoreMessageQueue to use TkbmMWBufferedFileStream, for optimum performance.
AutoTuneCache:boolean controls if the file queue should try to auto estimate cache for best performance.
ScanPageSize:integer defines the page size of cached pages used while scanning a file. It should normally
be around the expected size of the generally largest metadata header segments.
PageSize:integer defines the page size of cached pages used while accessing the file in normal non scan mode.
It should normally be around the expected size of the generally largest content size + metadata size.
PagesInCache controls how many pages of above sizes that max can be cached in memory.
Memory used for cache depends on the above numbers and sector size of file system that contains the queue,
If PageSize, ScanPageSize and/or PagesInCache is 0, a regular TFileStream is used instead with Windows
standard caching mechanism.
Changes/minor additions
=======================
- Deprecated mwucStringsIsUnicode in UnicodeOptions. Instead use
mwroStringAsUnicode in RemapOptions.
- Updated internal cache hit/miss counters to be int64 instead of longint.
- Updated TkbmMWLocalStats to use Int64 for its internal counters.
- Updated TkbmMWServer to use Int64 for its internal counters.
- Improved HTTP response generation in TkbmMWHTTPTransportStreamHelper.
- Added support for ICO as a graphics file in TkbmMWxxxHTTPService.
- Added mwdtApplication as a debug type. It can be used for application specific debugging/logging.
Fixes
=====
- Fixed bug when requesting service from within same thread.
- Fixed TkbmMWHTTPTransportStreamHelper to handle HTTP payloads correctly.
看看,变化还真不少。