kbmMW history of changes: ========================= 2.61.00 Dec. 29 2006. Important notes (changes that may break existing code) ====================================================== * Modified OnMessageDeliverySuccess to include count for how many spokes a message was delivered to. * Updated UIB adapter to support UIB v2 incl. stored procedures. * Added authentication validation to internal TkbmMWServer.Request call. If a service require authorization to run, it must provide permission mwapInternalExecute. * Modified TkbmMWServer.Request to support returning stateid in case one is returned. This may break existing code! New stuff ========= - Added new global function: kbmMWGenerateRequestSubscriptionSubject to kbmMWSubjectUtils. - Added support for message reference counting to allow for messages to be pushed onto multiple queues at the same time. - Added new method GetResponseSubscription:string to TkbmMWCustomMessagingClientTransport. - Added Locate, InternalObjectsEqual and InternalFreeObject to TkbmMWDblLinkList. - Added new method GetRequestSubscription:string to TkbmMWCustomMessagingServerTransport. - Added global method: kbmMWGenerateResponseTransportStream. - Added OnMessageToSpokeDeliverySuccess event to hub transports. - Added general support for datatype ftFixedWideChar and ftWideMemo. Requires use of kbmMemTable v. 5.51 or newer. - Added authentication validation to internal TkbmMWServer.Request call. If a service require authorization to run, it must provide permission mwapInternalExecute. - Added support in TkbmMWServer.Request to provide release function to release state from a stateful service. Use constant string KBMMW_RELEASESTATE_FUNCTION as the function name. - Added support for providing Host: value for ISAPI client. If the Params property of the transport contains a value for the name KBMMWHTTPHOST (use the string constant KBMMWHTTPHOST), a Host: ...value... is added to the client HTTP 1.0 request. Use is to allow access to virtual websites controlled by one physical webserver. Changes/minor additions ======================= - Modified TkbmMWCustomSDAC3Query.PerformRefreshDefinitions so that SDAC retrieves the local contraints data for fields i.e. The Required property of TField. - Changed request/response handling in kbmMW client to avoid leaks and ignore bogus responses for non issued requests. - Modified OnMessageDeliverySuccess to include count for how many spokes a message was delivered to. - Updated UIB adapter to support UIB v2 incl. stored procedures. - Published properties sfFiltered default [sfSaveFiltered], sfIgnoreRange default [sfSaveIgnoreRange] and sfIgnoreMasterDetail default [sfSaveIgnoreMasterDetail] on TkbmMWCustomStreamFormat. - Modified TkbmMWServer.Request to support returning stateid in case one is returned. This may break existing code! - Changed streaming of ftFMTBCD on PRE251 in kbmMWBinaryStreamFormat to use AsFloat instead of AsCurrency to avoid rounding to 4 digits. Fixes ===== - Fixed TkbmMWCustomPooledCursor.Populate to check for null Connection value, when exception occured and rollback was to be made. - Fixed A/V in TCPIP Synapse client and server transports when VerifyTransfer=true. - Fixed bug not sending userstream in SendPrioritizedMessage. - Fixed leak/bug in TkbmMWVariantList.Grow. - Fixed issues in procedure TkbmMWSAFServerMultipleEndpointsDeliveryThread.Deliver regarding skipping delivery to remaining spokes. - Fixed Stored procedure parameter fetching for IBX5 adapter. - Fixed missing assignment of OnSubInsert, OnSubDelete and OnSubModify events in TkbmMWCustomResolver.AssignEventsTo, thus making them work for the cross adapter. - Fixed bug in kbmMWXML.pas where CDATA elements couldnt be addressed via an XML path. - Fixed A/V on Execute when RunOnTransaction=false. - 'Unfixed' the service wizard regarding the VMT argument problem found in early releases of BDS2006. - Fixed NexusDB transport. - Fixed allowing multiple use of LogFieldValueChange on same field. - Fixed support for RequestTimeout on standard server and client side Synapse TCP transports instead of the default 45 sec timeout. - Fixed bug attempting commit on a transaction after a rollback on transaction resolver. - Fixed wrong rollback when LogFieldChange has been used in resolving. 2.60.00 Important notes =============== * Changed OnBeforeRequest, OnAfterRequest, OnServeRequest, OnServeResponse events on TkbmMWServer object to receive a TkbmmWVariantList instead of const array of variant. * Changed OnClientRequest and OnClientResponse events on TkbmMWCustomClient object to receive a TkbmmWVariantList instead of const array of variant. * Added Reference argument to OnMacro, ReplaceMacros, DoOnMacro events and methods. New stuff ========= - Added detection of invalid/non UTF8 strings when getting supposedly UTF8 data in TkbmMWCustomConnectionPool. - Added LoadFromStream and LoadFromString methods to TkbmMWCustomDOMXMLParser. - Added support for CDATA in both SAX and DOM XML parser. - Added support for getting SchemaName from client in query service. - Published AllowClientSchemaName property on Query Service. - Published EnableMacros on client datasets. - Added Assign, AssignConstArray and constructor taking a const array to TkbmMWVariantList. - Added copying of a couple missing events in AssignEventsTo method of TkbmMWCustomResolver - Added support for BDS2006 (C++ personality) TMetaData *vmt bug/feature. - Added general support for BDS2006 C++ personality. - Added support for registering hops on all transport streams for messaging use. - Added fully selfcontained state management on all transport streams. - Added Trace and SubjectData properties for all transport streams. - Added OnServeRequestException event to TkbmMWServer. - Added new messaging transport events: OnRequest, OnResponse, OnForwardResponse, OnForwardRequest, IsSubscribing, OnDeliveryFailed, OnDeliverySuccess - Published OnDeleteMessage on message queues. - Added better namespace support in XML. Changes/minor additions ======================= - Updated TkbmMWVariantList in kbmMWGlobal.pas. - Moved wizards to new category in BDS 2006. - Optimized requeststream and resultstream of the service instance. - Generally cleaned up logging of transport related information. Fixes ===== - Fixed BDS2006/C++ support in wizard registration. - Fixed A/V bug in FIB adapter when resolving. - Fixed bug in file service when root is set to empty string and client provides absolute file paths. - Fixed ReportBuilder DADE adapter. - Fixed blob update problem when destination blob parameter is ftVarBytes in ADOExpress adapter. - Fixed MetaList in kbmMWCustomSQLMetaData.pas to not raise exceptions when metadata not found. Returns true/false. - Fixed kbmMWInterbaseMetaData.pas to correctly create blob fields. - Fixed not copying username/password properties from template in IBO adapter. - Fixed cache cleaning algorithm in connection pools that resulted in leak. - Fixed DB adapter wizard Kylix 3 compilation. - Fixed .Net compilation - Generally checked and fixed some minor leaks - Fixed attribute name case problems in XML. - Fixed kbmMWGenerateUnsubscribeSubject method. 2.52.03 Fixes ===== - Fixed DBExpress and ADO Express compilation in D2006. 2.52.02 Changes/minor additions ======================= - Relaxed parameter type checking. Now parameter type ptUnknown is treated as an input type parameter when resolving. 2.52.01 Important notes =============== * Changed Replace parameter of AddToCache method. * Parameter types are now used by adapters when resolving. Only input or inputoutput type parameters are used when setting the parameter of a resolve statement. New stuff ========= - Added 3 new properties: ResolveResults, IsResolveError, IsResolveFieldValuesChanged on each dataset, which can be used to easier inspect the result of the resolve process. - Added 2 new cache options for datasets controling what to do with a cached item after a resolve. Default is to delete the cached item from the cache. If mwcfUpdateOnResolve is set, then the local updated copy of the dataset will be the new cached item. Else if mwcfLeaveOnResolve is set, then the old cached item will continue to exist. - Added TkbmMWClientTransaction class which allows for easy handling client side transactions on multiple client side datasets. Changes/minor additions ======================= - Added full support for respecting parameter type (input/output/inputoutput/result) when setting and getting parameter data in database adapters. Fixes ===== - Fixed TkbmMWClientTransactionResolver not to return false due to a fieldvaluechange. Now only returning false when the resolve truely have got a resolve error. - Fixed problem accessing metadata thru cross adapter saying MetaData not specified. - Fixed 'invalid handle' on close problem when freeing any connection pool. - Fixed bug not calling OnSubDelete event if no OnSubModified event defined. - Fixed bug when setting UpdateWhereAll when generated SQL clause wasnt correct. - Fixed some minor, non accumulating, memory leaks. - Fixed support for ftblob parameters in FIB adapter. - Fixed order of setting properties for UIB connections to solve amongst others, SQLDialect being overwritten. - Fixed UIB and FIB adapter transaction being closed on resolve finalization. - Fixed AfterOpen order. - Fixed potential deadlock on shutdown problem related to the delayed refresh scheduler. 2.52.00 Important notes =============== * Changed TkbmMWStringList.GetGroups to include argument AWithHeaders:boolean. * Fixed compilation problem in C++Builder 6 in kbmMWCustomDataset.pas. Please notice that this fix changes the Fields argument of OnResolveFieldValueChanged event. New stuff ========= - Added D2006 Win32 and .Net support for Standard/Pro/ProPlus/Enterprise editions. - Added OnBeforeObjectOperation, OnAfterObjectOperation, OnObjectOperationError events. - Added FallbackServers, AutoFallback, RedirectAlternatives to TkbmMWCustomClientTransport. Provides automated reconnect fallback and failover support. - Added TkbmMWStringList.FetchGroups, TkbmMWStringList.FetchGroup. Changes/minor additions ======================= - Updated ZEOS6 adapter to support Zeos6 v. 6.5.1. - Reverted ISAPI client transport to use HTTP/1.0 request types. Fixes ===== - Fixed not logging exceptions when resolve fails in transaction commit. - Fixed compile errors in ADS6, DBISAM3 and DBISAM4 adapters. - Fixed FIB adapter bug regarding setting Database to nil before closing cursor in cleanup. - Fixed CopyAndValidateFieldDefs to honor Attribute faHiddenCol. - Fixed cleanup code for dataset refresh scheduler. Should solve thread handle exception on close. 2.51.04 New stuff ========= - Added RequeryDetailsOptions and RequeryDetailsDelay which controls how soon after master record has changed, the detail data should be updated. 2.51.03 New stuff ========= - Added table options for TableName on resolvable datasets. The options include: O - Optional... failed operations on this table doesnt rollback AllOrNothing resolves, but lets the resolve continue on subsequent tables and records. K - Keyfields not null... Partial updates on tables where the keyfields are null will be skipped. Other remaining partial updates will be carried thru. These options are designed to make resolving results of outer joins easier. - Added resolver sub operation events. They allow for detailed control of the resolving operation for each resolver object participating in the resolve (usually one per table to resolve to). - Added OnApproveMetaDataResult event on Query Service to autorize and to allow for changes to results of metadata requests from clients. Changes/minor additions ======================= - Changed back to using HTTP/1.0 format default. Its possible to request another format by setting the KBMMWHTTPVERSION to 1.1 - Added support for NexusDB v2. Please add {$DEFINE KBMMW_USING_NEXUSDB2} to kbmMWConfig.h in addition to {$DEFINE KBMMW_NEXUSDB_SUPPORT}. - Updated Indy 10 support to default match latest Indy 10 snapshot. If previous (10.0.52) support is required, please add {$DEFINE KBMMW_SUPPORT_INDY_10_0_52} to kbmMWConfig.inc. - Added support for views in metadata components. - Added support for Windows 2003 Server in kbmMWGetOsVersion. - Added support for fmtBCD parameter types on client side. - Added support for retrieving metadata for tables and views in Zeos6 adapter. Fixes ===== - Fixed A/V bug in SOAP streamformat. - Fixed garbagecollection of connections. - Fixed thread problem with garbage collection thread when shutting down. - Fixed correctly dropping connections on garbage collect when connection has been forced marked for gc. - Updated so db adapter/database exceptions cannot prevent dropping the connection. - Fixed bug not assigning OnConnectionLost in client transport Assign - Fixed possible bug releasing wrong client states. - Fixed 'polymorphic constructor must be virtual' bug for .net - Removed local TkbmMWCustomClientCursor.FTableName variable as it already exists in base class. 2.51.00 Beta Important notes =============== * The TkbmMWBinaryTransportStream version has been upped to v.25100 due to changes in its format to handle TFMTBCD fields better. Because of that the server _must_ be recompiled. Older clients may optionally be recompiled. New stuff ========= - Added FinalizeObject and FinalizeObjects methods to TkbmMWCustomResolver. - Changed resolver operation to detect original NULL key field values. It will use the gained knowledge to generate new SQK statenents in the fly, when needed, with the relevant WHERE clause supporting updating WHERE somefield IS NULL... - Added AutoFieldOrigin property to all dataset components. - Added kbmMWStringToBCD and kbmMWBCDToString methods to kbmMWGlobal.pas. Fixes ===== - Fixed statemanagement for stateful services. - Fixed loadbalancer announcement Interval value and ServerProbeInterval value for Kylix. - Fixed garbagecollecting bad connections in the connection pool. - Updated TkbmMWBinaryStreamFormat and parameter handling mechanism of clientquery and customqueryservice to natively handle ftFMTBCD fields with full precision. Notice servers must be same version or newer than client). - Updated database wizard. 2.50.01 New stuff ========= - Added master/detail functionality to all adapter datasets, not only client dataset components. - Published OnSetupConnection event for TkbmMWClientConnectionPool. Fixes ===== - Fixed Synapse UDP messaging compile error. - Fixed TkbmMWPooledSimpleClient and descendants giving A/V when calling Connect. In reality Connect and disconnect should do nothing because the connections are obtained from a connection pool which itself manages the status of the connections. - Fixed FIB adapter compilation for Delphi 5 and added missing Unidirectional definition in PerformQuery. - Fixed missing buffer size specification on several transports. It, amonst other things, fixes the A/V in ReadSubject. - Fixed Kylix console mode compilation (hopefully ;)). - Fixed problem in SQL generation for resolving with WhereAll property set to true. - Fixed bug returning wrong fielddefinitions (ftString instead of ftWideString) for level4+ compilers. - Fixed SharedObjects property to require unique names. If a name given already exists, the old object is replaced. 2.50.00 Important notes =============== * Added automatic remote dataset update on server side resolve field value change. This may pose problems to clients older than the server. * Deprecated AddErrorRecord. Use instead LogError, LogErrorRecord and LogFieldValueChange methods. * Updated StreamSec TLS plugin to support StreamSec v2 (v1.16 no longer supported). New stuff ========= - 4 SKUs introduced: Standard, Pro, ProPlus and Enterprise. - D2005 Win32 support. - D2005 dotNet support. - Indy 10 support - SDAC 3 database adapter support. (Pro/Pro+/Ent) - Added Native DB adapter. (Pro/Pro+/Ent) - PostgreSQLDAC database adapter support. (Pro/Pro+/Ent) - Loadbalancer teaching/learning added. (Pro+/Ent) - Server announcement to loadbalancers added. (Pro+/Ent) - Added support for bracket handling of tablenames/fieldnames. (Pro/Pro+/Ent) - Removed old ConnectionString editor, and replaced with group and array capable stringlist editor. - Added support for statistics via Windows Performance Monitor (Ent) - Added TkbmMWLocalStats component for local statistics support (Pro/Pro+/Ent) - Added statistics support on transports and connection pools in addition to the server and service level stats. (Pro+/Ent) - Added OnMessageToSpoke event to have very fine runtime control of message distribution in hub/spoke transports. (Pro+/Ent) - Added OnMacro event to connection pools. Allow for adding macro (Pro/Pro+/Ent) functions and other automated - Added TkbmMWCustomServerThreadPoolTransport from which SAF (Pro+/Ent) transports inherits. - Added PoolSize property on messaging transports for control of how many threads are running to handle request/response scenarios. (Pro+/Ent) - Added internal transactional support on message queues. (Pro+/Ent) - Added optional rejection queues on message queues. - Added required registration of transport info classes. - Added streaming capabilities to transport info instances. - Added/updated TkbmMWFileStoreMessageQueue. (Ent) - Added support for ftLargeInt parameter types. - Added additional transport stream level security options. - Added doubly linked list class. - Added autoinc support for selected databases (DBISAM 3/4, MexusDB, DBExpress autoinc capable db's, SDAC3, SQLDirect, ADO Express, BDE). - Added LastAutoIncValueByIndex and LastAutoIncValueByTableName to TkbmMWCustomResolver. - Added automatic remote dataset update on server side resolve field value change. This may pose problems to clients older than the server. - Added OnResolveFieldValueChange event to all TkbmMWCustomPooledDatasets - Added TkbmMWMSSQLMetaData component. - Added ODAC v5 support (via the ODAC 4 adapter). - Added FieldByOrigin method for TkbmMWCustomPooledDataset and descendants. - Added StreamSec SSH messaging transport. (Ent) - Added global kbmMWDeleteDirTree procedure. - Added Func (function name to be called) to TkbmMWClientIdentity. - Added support for prioritized WIB messages. - Added support for disconnecting a spoke via new DisconnectSpoke method on Hub. - Added SharedObjects property to TkbmMWServer. It will hold managed and unmanaged objects which can be requested by for example services and other threads. Managed objects are automatically freed upon clearing SharedObjects. - Added TkbmMWThreadHashStringList to kbmMWGlobal.pas. - Added AddManagedObject to TkbmMWHashStringList. - Added TkbmMWPriorityDblLinkList to kbmMWGlobal.pas. Changes/minor additions ======================= - Updated transport streams, server and client to provide better check for stream version. - Transports split up in client part, server part and common part. - Enhanced TkbmMWStringList to support grouping of strings. - Updated client code to gracefully handle loadbalancing/failover while operating as a spoke. - Updated HTTP transport stream format to support HTTP v. 1.1 and support HTTP proxy basic authentication. - Updated DBISAM4 adapter to also compile with DBISAM v. 4.09 or newer. - Changed object streaming to not require definition of static or dynamic variant object type. - Published ConnectionPool property on all client datasets. - Deprecated AddErrorRecord. Use instead LogError, LogErrorRecord and LogFieldValueChange methods. - Updated metadata components to know about autoinc selection syntax/methods. - Published StringConversion on several transports. - Updated StreamSec TLS plugin to support StreamSec v2 (v1.16 no longer supported). - Fixed and optimized CopyRawRecords with custom descending fieldtypes. - Added virtual DoGarbageCollection method on TkbmMWCustomConnectionPool. - Added LookupFieldValueChange function to TkbmMWCustomPooledCursor. - Changed ISAPI transport to support HTTP/1.1 and thus provide higher performance. - Added protected DoGarbageCollection method to TkbmMWServer which is called when a regular service garbage collection is happening. - Made several methods on TkbmMWServer virtual/dynamic. - Made messaging thread properties public to allow for easier synchronzation with main vcl thread. - Changed not to call OnDisconnected on WIB transports unless a true disconenction has happened. Fixes ===== - Removed lots of hints and warnings. - Changed loadbalancer list locking while probing servers to be very shortlived. - Fixed OnResolve firing twice bug. - Fixed ADOX field origins bug. - Fixed OnGarbageCollect event bug. - Fixed NexusDB v2 NULL handling. - Fixed statehandling bug. - Fixed CreateParams. - Fixed threading bug in ISAPI server side transport. - Fixed Kylix3 support. - Fixed Synapse transport bugs related to not raising exceptions when occuring. - Changed SQL generation for resolvers to better cater for equally named fields in different tables when resolving multi table joins. - Fixed resolving bug related to cross adapter. - Fixed IBO adapter to set TimerInterval:=0 on IBO session components to ensure it behaves in a threaded environment. - Fixed Indy10 support for Win32. - Fixed loadbalancing bug. - Fixed RunInTransaction property on datasets. - Fixed double call to PrepareErrorTable. - Fixed PrivateDir handling in BDE adaptor to autocreate connection/specific subdir. - Fixed bad cast related to messaging transports. Could result in instability. - Removed not needed TQuery from kbmMWParamsEditor form. - Fixed invalid string reformat when string > 50 chars in SOAP streamformat. - Fixed not calling TkbmMWServer.Authenticate method in InternalServeStream. - Removed dependency on Windows for Linux installs in kbmMWTCPIPMessagingServerTransport.pas, kbmMWTCPIPMessagingClientTransport.pas and kbmMWCustomDataset.pas. - Fixed clearing current StateID when clearing all states in kbmMWClient.pas. - Fixed problem when resolving multiple datasets via cross adapter would use multiple transactions and connections instead of only one. - Fixed missing call to OnMacro if no static macros were defined. - Fixed TkbmMWIndyServerTransport to allow for reusing socket for Indy10. This list is not complete. Many more subtle changes and refactorings has happened internally. 2.03.04 Changes/minor additions ======================= - Updated client code to gracefully handle loadbalancing/failover while operating as a spoke. - Added OnMacro event to connection pools. Allow for adding macro functions and other automated functionality. - Updated transport streams, server and client to provide better check for stream version. If transport stream version is newer than the server/client itself, an exception will be raised. If equal or older it will gracefully be handled. - Added support for KBMMWPROXYUSERNAME and KBMMWPROXYPASSWORD HTTP transport stream format parameters. Can be set to get through an HTTP proxy which require Basic authentication. - Updated DBISAM4 adapter to compile with DBISAM v. 4.09. The adapter will still be compatible with DBISAM v.4.01+. Fixes ===== - Fixed compile errors when KBMMW_MESSAGING_SUPPORT is disabled. - Fixed statehandling which broke in 2.01 and later due to optimizations of service instance allocation. 2.03.03 New stuff ========= - Added support for KBMMW_CONSOLE_SUPPORT definition. Ensures that kbmMW runtime do not require any Forms/QForms packages, and thus allows for execution under Linux as a console app. Fixes ===== - Fixed Kylix3 installation. - Fixed A/V on Indy messaging transport destruction. - Published ClusterID on all messaging transports. - Fixed order of Subscriptions, NodeID, ClusterID properties. The previous order would overwrite any automatically generated res subscription. - Fixed connection pool via messaging transport destruction problem. - Fixed response subscripton creation. - Fixed closing messaging transport when inbound or outbound messagequeue is removed. 2.03 23. July 2004 Important notes =============== * Updated general transport stream to 203 to support new Sync value. Should be backwards compatible. * Standard message subject formats changed from REQ.> to REQ.ClusterID.> etc. * OnSubscription and OnUnsubscription events have been getting an extra ClusterID argument. * Added support for KBMMW_MESSAGING_SUPPORT definition. Existing customers should remember to define it in the kbmMWConfig.inc file to be able to use messaging capabilities. New stuff ========= - Added ClusterID to all transports. Its specially interesting on messaging where it allows to easily divide the WIB into several logical WIBS each running their own set of applications. Notice this has changed the standard message subject formats from REQ.> to REQ.ClusterID.> etc. - Added AsyncRequest, SendAsyncRequest and SendAsyncRequestEx to simpleclient. - Added OnAsyncResponse to client messaging transports. - Added DeleteServer, DeleteServerByID, SetServers methods to TkbmMWLoadBalancedServerList. - Added MaxConnectFailed property to loadbalancer components. It will together with new TkbmMWLoadBalancingNonConnectableOption value mwlbnoDiscardAtConnectFailLimit discard servers who have been failing too many times. - Added support for KBMMW_CONSOLE_SUPPORT for Kylix in kbmMWConfig.inc. If defined, kbmMW based applications will run fine without any X server installed. Notice that any debug dialogs will instead be routed to the syslog. Changes/minor additions ======================= - Modified REQ and RES subjects to add an extra part which can be SYNC or ASYNC. If the part is not specified, its considered SYNC. - Updated general transport stream to 203 to support new Sync value. Backwards compatible. - OnSubscription and OnUnsubscription events have been getting an extra ClusterID argument. - Made Servers property public on TkbmMWCustomLoadbalancer. - Changed to not use Suspend/Resume internally while threads are running in messaging transports. Instead relevant threads are created and destroyed when needed. Fixes ===== - Fixed Params in BCB6. - Fixed service wizard emitting GetServiceDefinition method for BCB even if relevant checkbox wasnt checked. - Fixed Indy TCPIP messaging spoke client workthread. 2.02 11. July 2004 Important notes =============== * The transport parameter setting KBMMWDISCONNECTAFTERRESPONSE has been discontinued. * Updated kbmMW.wsdl file. Stubs generated from old file needs to be regenerated. New stuff ========= - DOM based SOAP for requests/responses implemented. - Added Compression property to transports which can be used to add a custom compression to a transport. Notice that the streamformat may overrule the compression setting (eg. ZIPPED etc). - Added TkbmMWMemoryStream which is an optimized version of TMemoryStream. Its automatically used in many places in kbmMW if the line: {$DEFINE KBMMW_OPTIMIZED_MEMORYSTREAM} is defined in kbmMWConfig.inc. It will dramatically improve performance on moving large amounts of data within kbmMW. Changes/minor additions ======================= - Added TransportStateOptions to stateful non messaging transports like Indy TCPIP. mwtsoDisconnectAfterResponse instructs kbmMW to disconnect a client after it has been served its response. This option means that the previous transport parameter setting KBMMWDISCONNECTAFTERRESPONSE has been discontinued. mwtsoReadUntilDisconnect instructs kbmMW to not expect a request size header, but read until the client disconnects to gather a complete request. Rarely needed as its not possible to respond back to the client on the same socket. - Altered percentage calculation for GetStreamEx and PutStreamEx to handle super large files. - Updated kbmMW.wsdl file. - Published OnRelayMessage on Indy UDP server messaging transport. - Added support for copying RequestAttributes when using a simpleclient as a template. Fixes ===== - Fixed unlocking reference after freeing in file pool garbage collection. - Fixed detecting unused file references in file pool garbage collection. - Fixed messaging and encryption problem. - Fixed UIB adapter to compile under D5. - Fixed slow shutdown when min instances specified on services. - Fixed hanging messaging client if transport wasnt deactivated. - Fixed setting transports on cloned transportstreams before delivering from messaging system. - Fixed property warnings for D5/D6 on a couple of designtime forms. - Added RenameFile/RenameFileEx and SetFileStat/SetFileStatEx methods to file client and service. - Fixed SetFileStat in file client. 2.01a 13. June 2004 Changes/minor additions ======================= - Added new events to all TkbmMWCustomClient descendants: OnClientRequest - called before any request operation is happening. OnClientResponse - classed after the response for a request have been receive and parsed. OnClientTransmit - called after the request transport stream have been prepared. OnClientReceive - called before right after the client have reseived and parsed the response transport stream. Fixes ===== - Fixed Null handling in Absolute Database adapter. - Fixed operation of ZIPPED streamformat with messaging. 2.01 31. May 2004 New stuff ========= - Added Hub/Spoke messaging support. - Added support for single endpoint and multi endpoint message deliveries. - Added TCPIP Indy messaging. - Added Message action component. - Added automatic message relay options to all messaging transports. - Added automatic message gateway options to all messaging transports. - Added support for retrieving directory structure only in fileclient/service. Notice extra argument (DirsOnly:boolean) added to ListFiles/ListFilesEx method. - Added several new global functions: kbmMWCreateGUID, kbmMWGenerateUniqueNodeID, kbmMWGenerateResponseSubscriptionSubject, kbmMWExtractParameter, kbmMWQuoteString, - Added Apollo database adapter (VistaSoft). - Added Absolute Database Engine adapter (ComponentAce). - Added support for singleton message transports. Ie transports who are used directly and not replicated within the connection pool. - Added support for using blobs as parameters. - Added negated subscriptions. I.e. a particular subject you definitely dont want to receive. Start subscription with !. Remember that the order of subscriptions determine what override what. Changes/minor additions ======================= - Improved wizard looks in K3. - Changed wizard forms not to scale. - Improved simpleclient (and thus all descendends of it) with regards to automatic generation of node ID, activation, async request/response message handling. - Virtualized several setter methods on TkbmMWCustomTransport. Fixes ===== - Fixed DB wizard output. - Fixed IBX5 adapter with regards to limited transaction handling. - Fixed IBX5 adapter's description to behave nicely in service wizard. - Fixed compilation bugs in K3. - Fixed Null parameter bug in UIB. - Fixed problem requesting non existing service name. - Fixed resolving joins. - Fixed D5 compilation. - Fixed StrSecII byteswap problem. - Fixed having ; in parameter values. 2.01 beta 2 8. Mar. 2004 Important notes =============== * Fixed several severe bugs introduced in 2.01 beta 1. Upgrade highly recommended! Changes/minor additions ======================= - Optimized service instance and connection allocation algorithms to ensure more level distribution. - Added ConnectionList property to TkbmMWCustomConnectionPool to give access to allocated connections (and thus their statistics) in the connectionpool. - Optimized several internals. Fixes ===== - Fixed bug in loadbalancing service referencing wrong list. - Fixed FreeNotification leaks in all units. - Fixed several severe bugs introduced in 2.01 beta 1. Upgrade highly recommended! 2.01 beta 1 29. Feb. 2004 Important notes =============== * Added new StringConversion property to client and server transports. Default mwscFixed (breaks backwards compatibility with clients and servers!!!) When set to fixed all date/time and float to string conversion and back will be handled by kbmMW in a safe consistent format which is generally not influenced by locale settings. Its specially of interest for pre D7 developers. To keep backwards compatibility, please set the property to mwscLocale, or add the following string to kbmMWConfig.inc and recompile: {$DEFINE KBMMW_V200_COMPAT_STRINGCONVERSION} * Changed XML dateformat conversion to follow XML standard layout: YYYYMMDDTHHMMSS.NNN * GetBestConnection _automatically_ locks the connection. Thus dont lock it again, just unlockconnection after use. * Notice that SOAP DOM implementation in this release is still not complete. New stuff ========= - Added SOAP transport stream. For operates directly with ISAPI transport. To use it in combination with other transports, one must select if the streamformat operates via the HTTP protocol (default false). To specify that it is used over the HTTP protocol, add a transport parameter: KBMMWSOAPVIAHTTP=1 Like with the HTTP streamformat, the SOAP format via HTTP allow for using a proxy server by setting the KBMMWHTTPPOSTURL parameter. - Added new MimeType property for all transport streams. Default value is 'application/octet-stream'. For SOAP and XML transports its default 'text/xml'. - Added mimetype override parameter to SOAP and HTTP formats. Override by setting transport parameter KBMMWMIMETYPE=some_other_mimetype - Added general transport parameter: KBMMWDISCONNECTAFTERRESPONSEDELIVERY which can be set to 1 to force a close of the connection after response delivery. Specially interesting when a kbmMW app server should mimic a webservice/webserver. - Added new StringConversion property to client and server transports. Default mwscFixed (breaks backwards compatibility with clients and servers!!!) When set to fixed all date/time and float to string conversion and back will be handled by kbmMW in a safe consistent format which is generally not influenced by locale settings. Its specially of interest for pre D7 developers. To keep backwards compatibility, please set the property to mwscLocale, or add the following string to kbmMWConfig.inc and recompile: {$DEFINE KBMMW_V200_COMPAT_STRINGCONVERSION} Changes/minor additions ======================= - Performance optimized UIB adapter and fixed with regards to RowsAffected after execsql. Now UIB is seriously fast... much faster than IBO. - Performance optimized kbmMW's resolving process. Initial preparation for each resolve call now takes approx. 1/3 the time compared to 2.00. - Optimized not removing a cached entry after resolve, but only the dataset related to it. Its done like this to further optimize the resolve speed to avoid repeatedly fetching new field defs from the database. - Changed XML dateformat conversion to follow XML standard layout: YYYYMMDDTHHMMSS.NNN - Added support for automatic deletion of partially received files on server side at garbage collection by setting the TkbmMWFileServiceDefinition.KeepPartialFileOnFailure to true. - GetBestConnection _automatically_ locks the connection. Thus dont lock it again, just unlockconnection after use. Fixes ===== - Fixed compilation of ODAC4 and MyDAC adapters. - Fixed wrongfull commit of transaction in finalizeresolve method of the IBX5 resolver. - Fixed serious clienttransaction resolver bug which would result in wrongfully continuing resolving and commiting updates regardless of a dataset fails being resolved. - Fixed XML bug with symbols/tags longer than 255 bytes. - Fixed bug with stored procedures and parameters in the cross adapter. - Fixed A/V when shutting app server down due to stats garbagecollect. - Fixed bug not allowing for inserting values in keyfields if updatekeyfields was false. - Fixed bug not checking for nil in kbmMWBinaryStreamFormat. - Fixed missing check in fileservice PUT operation. 2.00 Final 12. Jan. 2004 New stuff ========= - Added OnRequestTimeout event to TkbmMWServer and TkbmMWCustomService. Its triggered during a garbage collection sweep if the service definition Timeout property is > 0 and the current request has been running for more than Timeout secs. First the service's own event is called (to allow it to clean up or potentially overrule automatic shutdown of the service instance). Then the servers event is called which may choose to override what the has been decided in the service. Changes/minor additions ======================= - Added support for ftFMTBCD fields in query service and binary dataset stream format. - Added full transaction support for InternalInitFieldDefs the same way as for populate and execute. Should solve IB transactions being left over at occations. Fixes ===== - Fixed range check error in subject helper functions in kbmMWGlobal.pas - Fixed TkbmMWFileClient when transferring files of zero size. - Fixed problem with not getting data when query statement empty (easily seen with MT adapter) - Fixed A/V due to client/server serving thread or delivery thread running while message queue is destroyed during app. close and deletion of a messagequeue while transport active. - Fixed timing problem with messaging transports being activated or deactivated while data in queues in both Indy and Synapse transports. - Fixed D5 Update 1 compatibility which caused variant conversion exception. - Fixed D5 compatibility in ConnectionString dialog. - Fixed bug missing setting of formatsettings when doing assign of transport. - Fixed bug when the parts of a subject was hashed into a word array. Should be a longint array. - Fixed repositioning to current record after resolving. - Fixed bug in TkbmMWClientTransactionResolver where the datasets streamformat was used instead of the transaction resolvers own while loading resolving errors. 2.00 Gold 4 6. Jan. 2004 Important notes =============== * Modified RES subject format. Changes/minor additions ======================= - Added global kbmMWUniqueIDString to kbmMWCustomTransport. It will contain a GUID uniquely identifying that particular application instance for for the duration of the application runtime. Fixes ===== - Fixed D5 compatibility. 2.00 Gold 3 5. Jan. 2004 Changes/minor additions ======================= - Added support for using FormatSettings of transport when moving parameters from clientquery/storedproc to queryservice. Require LEVEL7 compilers. - Added kbmMWVariant2String and kbmMWString2Variant conversion functions (LEVEL7 compilers only). - Removed unused BuildKeyFieldValueString method from clientquery. - Added ClientIdent property to TkbmMWCustomService. It is set to point to a TkbmMWClientIdentity object for the duration of the request and nilled after. Fixes ===== Fixed UIB and FIB adapters. 2.00 Gold 2 1. Jan. 2004 New stuff ========= - Added EarlyAuthentication on the TkbmMWServer component. If set to true (default false) will call OnAuthenticate event with TkbmMWServer as sender. If false will operate as usual doing authentication when the service require that. - Added ServiceName and ServiceVersion to TkbmMWClientIdentity. - Added UIB and FIB database adapters. Require UIB v 1.2 or newer from www.progdigy.com respectively FIB v. 5 or newer from www.devrace.com. Changes/minor additions ======================= - Slightly optimized binary transport stream format to store integer values little endian first for Win32 (INTEL 32 bit only CPU's). - Updated TkbmMWCustomServiceDefinition to contain service flags too. - Updated Inventory service and TkbmMWServer to utilize Flags in service definition. - Added OK and Cancel buttons to connectionstring editor. Fixes ===== - Fixed ADOX D5 compatibility. - Fixed bogus warning. 2.00 Gold 1 29. Dec. 2003 PLEASE NOTICE THAT v2 CONTAINS NUMEROUS INTERNAL CHANGES NOT MENTIONED HERE Important notes =============== * Transport stream format changed. New format clients wont work agains old format servers, however new format servers support old format clients. * Changed setting the StoredProcName only to fetch fielddefs at designtime. At runtime will require you to manually FetchDefinitions. * OnResolveError event parameters added. Will require updating your source. * Moved lots of properties from the resolver components to the new meta data components. Notice its important to add a matching metadata component to the form on which the connection pool is placed. Hook up the metadata component to the MetaData property of the connection pool. New stuff ========= - Severely reworked internal transport class structures. - Added TkbmMWCustomTransportController, TkbmMWCustomTransportStreamFormatter and inherited components matching existing transports. - Added advanced publish/subscribe messenging support via a completely new SAF (Store and Forward) buffered framework. - Added fragmented package messenging support. - Added TkbmMWPooledFileClient which operates through a client connectionpool. - Added TkbmMWPooledInventoryClient. - Added support for multiple statements in same query/stored procedure. To seperate a statement from the next, the line _must_ start with either ! or = = indicates that the statement is the statement that will return a resultset. Only one resultset statement is allowed in a multiple statement. All statements are automatically run in the same tranaaction. - Updated service wizard to handle service oriented wizard plugins. - Added unicode support in transports, datasets and more. - Added TkbmMWUnicodeOptions (mwucAutoUTF8,mwucStringsAsUnicode) to metadata components. mwucAutoUTF8 will if set ensure that all widestring fields are converted from/to UTF8 on storage/retrieval. mwucStringsAsUnicode will automatically make ftString and ftWideChar from backend storage to ftWidestring for all kbmMW related operations. mwucAutoParamUTF8 which will convert ftwidestring param datatype to ftString and automatically convert the unicode data to an UTF8 encoded string. - Added true request/response support through messaging. - Added subscription announcement features to client and server transports: procedure AnnounceSubscriptions; and event: OnSubscription and OnUnsubscription - Added preliminary support for Cache and Throttle messages. No logic yet, but the framework will accept them. - Added several global functions for generating subjects and extracting information from them. - Added superfast XML transport stream format. (Add kbmMWXMLTransStream to the uses clause). Define KBMMW_XML_TRANSPORTSTREAM_SUPPORT in kbmMWConfig.inc to enable XML support. - Added DBISAM4 support with support for remote procedures via the standard kbmMW stored procedure support. Define KBMMW_DBISAM4_SUPPORT in kbmMWConfig.inc for DBISAM 4.01+ support. - Added Synapse TCPIP transport. Download Synapse from http://www.ararat.cz/synapse/ - Added Synapse UDP messaging transport. - Added a couple of debug placement values: mwddOneTextFile and mwddOneRawFile. Dumps in same format as mwddTextFile and mwddRawFile, but always appends to the same file given via the global string variable kbmMWDebugFile. Default 'kbmMW_Debug.log'. - Added UndoByRecordID(ARecordID:integer):boolean function to TkbmMWCustomPooledDataset. Will allow undoing a change on a record based on the recordID. Thus the record do not need to be in the current index to be undone. - Added new Metadata components which should be placed centrally together with the connection pool. The metadata component now contain lots of the property settings earlier placed on the resolver, and contains functionality for manipulating tables, indexes and sequences. Currently the following metadata components are supported: TkbmMWNullMetaData, TkbmMWGenericSQLMetaData, TkbmMWOracleMetaData, TkbmMWInterbaseMetaData, TkbmMWDBISAM3MetaData, TkbmMWDBISAM4MetaData, TkbmMWNexusMetaData. - Added new sequence handling system on the server side. The sequence handling system is designed for obtaining unique numbers in a database independant way. If the database supports sequences or generators, those will be used. If not a special pivot table will automatically be created. A sequence is obtained by a sequence name which the developer choose. Multiple sequences can be handled simultaniously. Two sequence components are bundled: TkbmMWTemporarySequencer and TkbmMWDatastoreSequencer. Temporary sequencer operates in memory only (the internal pivot tables can be stored and reloaded if needed). Datastore sequencer operates directly against a datastore using the abilities of the datastore if possible, else automatically operating a pivot table. Changes/minor additions ======================= - Added proper support for AutoReleaseConnections in TkbmMWTransaction. - Added Subject property to TkbmMWCustomTransportStream. - Altered virtual to dynamic for C++Builder only for public developer access methods in kbmMWCustomDataset. - Altered property order for QueryService and QueryServiceVersion in TkbmMWClientQuery and TkbmMWClientStoredProc. - Modified strategy for resolver exception handling. If OnResolveError is specified, it will always be used and no exceptions are raised. If its not specified, an exception is raised on resolve error. - Updated all database adapters (except NexusDB, DBISAM3, X, MT and FF2) to allow for RowsAffected/RecordsAffected=-1 Usually it means that an exception has been thrown which is handled anyway by kbmMW. But in rare cases some databases can be set to not report back the number of rows affected even if an operation went well, and would then return -1. - Changed setting the StoredProcName only to fetch fielddefs at designtime. At runtime will require you to manually FetchDefinitions. - Changing to allow for raising exception after resolve only if OnResolveError is not set. - Improved M/D relation handling on client side to prevent refreshing detail unless master/detail keyfields has changed. - Generally improved M/D which fix some bugs and improves performance. - Published several properties on the TkbmMWClientBriefcaseStreamFormat component. - Added UpdateMacros method to TkbmMWCustomConnectionPool which is controlled by new property AutoUpdateMacros. If true, UpdateMacros is called automatically when the connectionpool is activated. Added OnUpdateMacros event which is called when UpdateMacros is called. - Added Target argument to SendMessage. If empty will broadcast, otherwise will target to the node specified in the target string which is formatted as a connectionstring. eg. for UDP messaging: IP=someip;PORT=someportno If parts of the target is missing, the default send values from the transport are used. - Made using a resolver during resolving threadsafe (protected by locking/unlocking). - Updated ZEOS6 adapter to support stored procedures and fix some bugs (Roger Nyberg). - Updated custom transports, client and server to handle stream envelopes. - Updated Populate to surround opening a cursor with transaction handling. - Updated StreamSec Plugin to match latest StreamSec release. - Updated NexusDB MetaData to use dblquotes instead of single. - Added RecordID and Current arguments to OnResolveError event. Current is true if the current record is the one pointed to by RecordID, else false. Fixes ===== - Fixed tedious bug with C++Builder which do not handle virtual definitions correctly. - Changed ThreadSessionName from being published to being public only. - Fixed 'Record not found' exception during ProcessErrorTable in certain circumstances. - Fixed checking for if ServerTransport given before use in TkbmMWLocalClientTransport. - Fixed copying Null parameter in CopyParamsValueAndType. - Fixed macros not being expanded around fetching definitions. - Generally improved/fixed bugs returning exceptions to client. - Fixed problem when ftTime/ftDate and ftDateTime values =0 would result in null value. - Added check for transport set on client connection pool to avoid AV. - Fixing handling of exceptions during definition fetching when opening a dataset to allow for more correct message to appear at caller. - Fixed specifying stored procedure names. - Fixed resetting IsDataChanged and checkpointing when no error. Solves problems when resolving twice. - Published SQL property in ZEOS6 adapter. - Fixed missing registration of DBISAM4 components. - Fixing D6 and D5 compatibility. - Fixed several minor errors found in v1. - Fixed Kylix3 and C++Builder 6 compatibility. 1.07e 13. Sep. 2003 Fixes/changes ============= - Fixed D6 and D7 runtime project files missing NexusDB transport and adapter references. - Fixed handling of ftGUID in params. - Fixed using AliasName from template in connection creation for NexusDB database adapter. - Fixed installer supporting ISAPI transport even though neither Indy nor DXSocks was selected. - Fixed compatibility with NexusDB v. 1 RC7 as a parameter has changed since RC3. - Added support for GetMetaData in NexusDB adapter. - Fixed problem with client providerflags not respected by resolve operation. 1.07d 11. Sep. 2003 Fixes/changes ============= - Fixed eventtrain when resolving master of a client side master/detail relation. 1.07c 10. Sep. 2003 Fixes/changes ============= - Fixed so Client property on client datasets and client transaction resolver are persistently stored on form. - Added ActiveClient readonly property which returns the client actually in use depending on the ClientAsTemplate settings. - Fixed D6 commercial project file. 1.07b 9. Sep. 2003 Fixes/changes ============= - Fixed C++ Builder compilation. 1.07 8. Sep. 2003 New stuff ========= - Added support for using NexusDB transport (TkbmMWNexusDBClientTransport and TkbmMWNexusDBServerPluginCommandHandler). - Added GetTransportInfo class functions to transport classes. - Added a few more properties on transport stream formats to cross reference request and response streams if needed. - Added support for timestamp parameters. - Added TransactionOperation property to all TkbmMWCustomPooledCursor descendants. Controls if the dataset will be resolved (default) or executed during a transactional resolve operation. Fixes/changes ============= - Fixed dataset caching problem. - Fixed another M/D problem. - Fixed HTTP stream format parsing bug for non WinProxy setups. - Changed to prepare in IBX after setting stored proc name, but before setting params to make sure they are fetched. - Improved TkbmMWClientTransactionResolver to post datasets in edit mode before resolving. Makes easier and more natural M/D resolving with M/D in grids. 1.06b 1. Sep. 2003 Fixes/changes ============= - Fixed client side Master/Detail. - Fixed stored procedures returning resultsets. - Fixed MYDAC database adapter compilation. - Fixed Zeos Oracle database adapter compilation. - Fixed client side transaction resolver checkpointing after resolve. 1.06 31. Aug 2003 New stuff ========= - Added GetStreamEx and PutStreamEx to TkbmMWFileClient. Altered GetFileEx and PutFileEx to use them. - Improved caching mechanism in connection pools to allow for caching metadata also. - Added mwcfDefsOnly to CacheFlags to signal only caching of metadata, not of resultsets for specific query/storedprocedure. Fixes/changes ============= - Fixed HTTP Proxy support for proxies not sending CONTENT: LFCRLFCR. - Fixed assigning params in TkbmMWCustomTransport.Assign. - Moved FetchDefinitions to TkbmMWCustomPooledCursor from TkbmMWCustomClientCursor. - Fixed handling of parameters in stored procedures generally and specifically for DBX adapter. - Fixed a couple of minor caching bugs. - Fixed StreamSec SSL kbmMW transport plugin. 1.05b 27. Aug 2003 Fixes/changes ============= - Fixed Kylix compile bugs. - Fixed comments in kbmMWBinaryStreamFormat.pas. - Updated installation to selectively support kbmMemTable Std 1.05 22. Aug 2003 Important notes =============== * Moved ErrorTable from resolver to TkbmMWCustomPooledCursor. * Removed keyfields from errortable. They are not needed to locate a record which didnt resolve. New stuff ========= - Added OnResolveError event to all database adapter cursorclasses. - Added SQLDirect database adapter. Fixes/changes ============= - Fixed D5 compability when kbmMemTable Pro version is used. - Fixed adding kbmList to kbmMWBinaryStreamFormat. - Removed public property OK from resolvers. - Moved ErrorTable from resolver to TkbmMWCustomPooledCursor. - Moved ProcessErrorTable to TkbmMWCustomPooledCursor from TkbmMWCustomClientCursor. - Added PrepareErrorTable to TkbmMWCustomPooledCursor. - Removed keyfields from errortable. They are not needed to locate a record which didnt resolve. - Fixed not overriding field origins on predefined fields if not empty. - Improved catching user thrown exceptions in OnDelete, OnInsert and OnModify event handlers of the resolvers. Now it automatically adds an error record in case of an exception in the events. - Fixed TCPIP Indy client side transport where ConnectTimeout which is given in secs was was not correctly recalculated to msecs. - Fixed ADOX resolver which was broken in 1.04. 1.04 14. Aug 2003 Important notes =============== * Added support for resolving multiple table joins. To support joined multitable resolves, the binary stream format used for streaming datasets unfortunately had to be changed in a non backward compatible way. If you do not need to resolve multiple joined tables automatically or use the Origin property of fields on the client side, you can retain backward compability by defining KBMMWBINARYSTREAMFORMAT_PRE104 in kbmMWBinaryStreamFormat.pas * Moved updating stats to UpdateGlobalStats and UpdateServiceStats. The change result in slightly different stats between service and global stats. Global stats still contain transport time, service stats do not. New stuff ========= - Added FillInsertObjectParams, FillModifyObjectParams and FillDeleteObjectParams to TkbmMWCustomSQLParamsResolver which handles filling TParams with correct values. - Optimized filling of values during resolving which should give a significantly performance improvement specially when resolving many altered/new/deleted records. - Now enforcing that parameter names must never contain 'illegal' characters. If they do, they are automatically converted to valid names. - Added ListAttributesOptional:boolean to TkbmMWFileServiceDefinition. Default false. If set to true, the files do not have to match the list attributes exactly to be included in a file list. - Added OnAccessFile and OnReleaseFile events to TkbmMWFilePool. Via the OnAccessFile its possible to f.ex. compress a file first for get and return a new temp filename for the compressed file. The OnReleaseFile is called when all references to a file has been released, and a cleanup can be made. - Added support for returning attributes as Result[4] in PerformSTATUS in TkbmMWFileService. - Added StatFile(ARemotePath:string):TkbmMWFileStatus and StatFileEx to TkbmMWFileClient. - Added public read only property InternalClient to TkbmMWCustomClientCursor and TkbmMWClientTransactionResolver. Returns the internal client instance. - Added public InternalClient property in client datasets to get access to the internally used client. - Added support for resolving multiple table joins. To support joined multitable resolves, the binary stream format used for streaming datasets unfortunately had to be changed in a non backward compatible way. If you do not need to resolve multiple joined tables automatically or use the Origin property of fields on the client side, you can retain backward compability by defining KBMMWBINARYSTREAMFORMAT_PRE104 in kbmMWBinaryStreamFormat.pas - Added support for SchemaName and PackageName for stored procedures, and SchemaName for queries. The changes are both in base classes and on the DBX and X adapter. - Added NexusDB v1 database adapter. Fixes/changes ============= - Changed TkbmMWServer.ProcessRequest from virtual abstract to virtual. Default it now raises an exception with function not known. - Fixed TkbmMWCustomTransportStream.ReadVariant not correctly reading null and empty values. - Reordered properties on all database adapters to make sure Params and ParamCheck comes _after_ any StoredProcName or SQL property to load in correct order. - Fixed setting CookedStoredProc in the setting of the stored proc name in TkbmMWCustomDataset. - Improved checking for empty streams in ZIP decompression. - Split TkbmMWServer.ServeRequest into InternalServeStream, ServeStream and ServeRequest. - Moved updating stats to UpdateGlobalStats and UpdateServiceStats. The change result in slightly different stats between service and global stats. Global stats still contain transport time, service stats do not. - Fixed version on Zipped and HTTP transport stream formats to allow for extended standard stream attributes. - Fixed bug returning nil instead of InternalClient in client property of TkbmMWCustomClientDataset and TkbmMWClietnTransactionResolve after setting the client property to nil. - Fixed A/V when deleting a client connected used by a client dataset. - Fixed HTTP streamformat that would result in never getting a response back from a request. - Fixed A/V in PerformDefinitions in DBX adapter. - Updated DB Adapter wizard to match new resolver layout. - Fixed bug in SQL generation which would result in an extra invalid delimiter in update or insert statements if prior field was partly excluded from either update or insert in OnExcludeFromUpdateInsert event. - Fixed Indy 8 compability problem in Indy transport. - Fixed D5 compability problem. - Fixed not checking for parameters when ParamCheck:=false even during designtime. 1.03 12. July 2003 Important notes =============== * Altered Java service to require the import of kbmmw.* (kbmmw.kbmMWRequest and kbmmw.kbmMWClientIdentity) classes. Now client identity is provided for the Java service call. Eg. Object ProcessRequest(String Func, kbmmw.kbmMWClientIdentity Ident, Object [] Args) * Added support for Java requesting a service on the kbmMW server. kbmmw.kbmMWRequest.kbmMWRequest(String ServiceName, String ServiceVersion, String AFunction, kbmmw.kbmMWClientIdentity Ident, Object [] Args) Several variants of the kbmMWRequest functions exist for easy access with simple arguments. New stuff ========= - Added BeforeResolve and AfterResolve events to all resolvable datasets. - Added kbmMWCreateCallbackFunction and kbmMWDisposeCallbackFunction in kbmMWGlobal.pas. These methods allow for making callback to a method in a class. - Altered Java service to require the import of kbmmw.* (kbmmw.kbmMWRequest and kbmmw.kbmMWClientIdentity) classes. Now client identity is provided for the Java service call. Eg. Object ProcessRequest(String Func, kbmmw.kbmMWClientIdentity Ident, Object [] Args) - Added support for Java requesting a service on the kbmMW server. kbmmw.kbmMWRequest.kbmMWRequest(String ServiceName, String ServiceVersion, String AFunction, kbmmw.kbmMWClientIdentity Ident, Object [] Args) Several variants of the kbmMWRequest functions exist for easy access with simple arguments. Fixes/changes ============= - Fixed bug in kbmMWStats.pas loading Min value instead of Max. - Fixed bug in kbmMWVariantToStream saving one byte to little. - Changed so AfterPost/AfterDelete event always happens _after_ any potential resolve due to ResolveOnChanged being true. - Updated dbadapter wizard. - Updated to respect Enabled property of the service definition. If service is disabled, no new requests to that service will be allowed. - Moved all array of variant handling to kbmMWGlobal.pas from kbmMWFileClient.pas. - Added support for controlling gathering of service statistics from the service definition. Now both the servicedefinition.GatherStatistics and the service property GatherStatistics must be true for service statistics to be gathered. GatherStatistics on the servicedefinition is default true. GatherStatistics on the service is default false. - Changed MaxConnections property to allow for -1 value for not limiting the number of connections (generally not recommended since it could be exploited by malicious clients to cause a 'meltdown' of the database by spamming it with requests opening new connections all the time. 0 means that no connections are available in the connectionpool, and all attempts to get them will fail. - Fixed so Shutdown respect calling DestroyLastService method right before last service is destroyed. 1.02 7. July 2003 New stuff ========= - Added ZEOS6 support. Define KBMMW_ZEOS6_SUPPORT in kbmMWConfig.inc to enable it. - Added OLEDBCompatible boolean property to TkbmMWDBXConnectionPool (WIndows only). Set it to TRUE if you are using any OLEDB drivers, like MSSQL etc. - Added public OK function to all resolvers. Return true if last resolving was successful (no records in ErrorTable). - Added protected virtual functions GetRequireTableName and GetRequireKeyFieldNames which both return boolean. Default returnvalue is true. - Updated TkbmMWCustomResolver to throw an exception if TableName not set and GetRequireTableName is true, or if KeyFieldNames is not set and GetRequireKeyFieldNames is true instead of failing silently. - Added public RequestAttributes and ResponseAttributes TStrings properties to TkbmMWCustomClient and published them on TkbmMWSimpleClient. They allow for sending and receiving additional information via the kbmMW request/response header without affecting the service call. - Added OnSend and OnReceive events to all transports. Fixes/changes ============= - Fixed compilation problem of BDE adapter in Delphi5. - Fixed D7 runtime project which accidentally included requirement of ReportBuilder. - Fixed DADO compilation problem. - Improved TkbmMWBinaryStreamFormat to be able to skip data for fields which are not existing in the receiving table. This is not 100% foolproof if the field to be skipped is a memo or blob. There is no way to make it foolproof without breaking backwards stream compability. - Modifed wizard registration to work better with CLX setups. - Fixed Indy8 compile problems with .Connect method. - Fixed calling OnServeResponse even when exceptions happen on the server. 1.01 3. July 2003 New stuff ========= - Published AutoAddIndexes on TkbmMWClientxxxx dataset components. - Added GetMetaData support on adapters and clientquery. - Added OnAuthenticateMetaData to TkbmMWQueryService and descendants. Return Permissions:=[mwapExecute] to allow a client to get metadata information. - Updated ADOX, ADS6, BDE, DAO, DBISAM3, DBX, DOA, IBO and IBX5 database adapters to support GetMetaData. Its not required for a database adapter to support it, but ReportBuilder will not be able to use a database for which the adapter do not support it. - Added ReportBuilder DADE support. - Added TdakbmMWDatabase component of which at least one must be placed on the client form on which ReportBuilder designing happens (end use report design). Its searched and used by the RB DADE to determine which databases are available. A database is a combination of the name of the TdakbmMWDatabase component and the names of the published queries on the given query service. This way its possible to have access to multiple, different databases from the RB client at the same time. - Updated database wizard to support GetMetaData. Fixes/changes ============= - Fixed compilation problem when installing in Indy v. 8.0.23. - Fixed compilation problem in ADO Express adapter. - Fixed compilation problem in DOA adapter. 1.00 1. July 2003 Important notes =============== * V. 1.00 require kbmMemTable v. 3.12. New stuff ========= - Added copying StateID when ClientAsTemplate:=true. - Added ConnectTimeout property to custom client transport. Added support for it in the Indy client transport. Default value is 60 (one minute). - Added support for kbmX database adapter. Its a cross database adapter where the database type can be changes by simply pointing the connectionpool property to another connectionpool. - Added EnableMacros and Macros properties on all real database adapters allowing to use macros in the form inside query statements. Set Macros to contain eg. MACRONAME=somevalue. - Updated database adapter wizard to handle new cross database setups. - Updated database adapters with new class functions, GetQueryClass, GetStoredProcClass and GetResolverClass for cross adapter compatibility. - Published AutoAddIndexes on all adapter datasets. - Added AssignTo and AssignEventsTo to TkbmMWCustomResolver and descendents. - Added public readonly ConnectionPool property to TkbmMWCustomConnection. - Virtualized EnsureMinConnections, GetBestConnection, TimeoutConnections, KillConnections, TimeOutConnection, KillConnection, IncCacheHits, IncCacheMisses. - Prepared code for Freeware edition. Fixes/changes ============= - Fixed wrong order of decompressing/decrypting on both server and client. - Fixed C6 installation problem. 1.00rc3c 15. June 2003 Fixes/changes ============= - Fixed important bug in TkbmMWFileClient where Getting a file would accidentally call a delete of a file on the server side due to naming conflict of SysUtils.DeleteFile and TkbmMWFileClient.DeleteFile. - Fixed important server problem with service version which were case sensitive. Now case insensitive. 1.00rc3b 13. June 2003 Important notes =============== * Added TkbmMWFileServiceDefinition to TkbmMWFileService. Removed several published properties from TkbmMWFileService module to include them in the file service definition instead. This require opening all file service modules and ignoring any property errors, then recompile. Also remember to set the correct settings on the servicedefinition returned by RegisterService. New stuff ========= - Added kbmMWDebugTypes global variable which can be set to a set of debug types that should be included in the debug output. Currently mwdtTransport,mwdtService,mwdtServer and mwdtDataset are defined. - Added support for KBMMW_NODEBUG compile flag which (if defined) will ensure that only empty debug functions are compiled in. - Added debug for generated SQL in SQL params resolver. Fixes/changes ============= - Fixed caching problem which resulted in empty recordset from cached item. - Fixed retaining current record after resolve. - Added TkbmMWFileServiceDefinition to TkbmMWFileService. Removed several published properties from TkbmMWFileService module to include them in the file service definition instead. - Modified JNI.pas to support Delphi 5. Removed need for JNI_MD.pas. Delphi 5 do not currently support TDateTime variants to Java conversion. 1.00rc3 7. June 2003 Important notes =============== * Added InsertKeyFields property to resolvers. This is default false. It controls if new records are allowed to provide values for the key fields. Notice that since UpdateKeyFields until now also was in control of insert situations, this will possibly require changes in property settings for all application servers. * Removed publising unused properties like DateLayout, TimeLayout, DateTimeLayout, TrueValue and FalseValue from all SQL params type resolvers. The properties may only be interesting with non params resolvers. Notice this change _require_ you to open _all_ datamodules containing resolver components, and ignore all property errors, save and recompile. * Modified OnExcludeFromUpdateInsert event to return a set of field provider flags instead of a boolean. * Split TkbmMWServiceDefinition into TkbmMWCustomServiceDefinition and TkbmMWServiceDefinition. RegisterService now returns a TkbmMWCustomServiceDefinition instead of a TkbmMWServiceDefinition. New stuff ========= - Added kbmMWDebugLevel and kbmMWDebugWhere global variables which controls how debug are made. If to a file, a temporary file is generated in the default temp directory. - Added kbmMWDebugDumpTransportStream global method. - Added ReceivedCount virtual function to TkbmMWCustomTransport. Should be overridden to return the number of bytes waiting to be handled in the transport. Returns default -1 which means that there are no knowledge about the number of waiting bytes. Updated TCPIP Indy transport to support ReceivedCount. Updated TCPIP Indy Client transport to allow for RequestTimeout (in secs), -1 is indefinitely. Added ReceivedCount to transport plugins too. - Added InsertKeyFields property to resolvers. This is default false. It controls if new records are allowed to provide values for the key fields. Notice that since UpdateKeyFields until now also was in control of insert situations, this will possibly require changes in property settings for all application servers. Updated all relevant resolvers to publish InsertKeyFields. Updated db adapterwizard to support it. - Added ConstructFirstService and DestroyLastService protected service methods which can be overriden. They are called on creation of first service instance in service pool, and destruction of last service instance in service pool. - Added protected BeforeRequest and AfterRequest methods to TkbmMWCustomService. They can be overridden, but remember to call inhertied. - Added TkbmMWCustomJavaService which makes integration with Java very easy. Requires LEVEL6+ compiler. Thus it will not compile under Delphi 5. The Java support uses Jedi's JNI support code modified slightly to enable dynamical loading of the Java library. The modified JNI.pas unit is included in the kbmMW distribution. - Added Attribs:TStringList property to TkbmMWCustomServiceDefinition. - Added additional field provider flag, mwpfInInsert. - Rewrote HTTP streamformat to interact correctly with proxy servers. Using HTTP streamformat now also automatically disconnects client after receiving each response. - Split TkbmMWServiceDefinition into TkbmMWCustomServiceDefinition and TkbmMWServiceDefinition. Fixes/changes ============= - Modified OnExcludeFromUpdateInsert event to return a set of field provider flags instead of a boolean. - Removed publising unused properties like DateLayout, TimeLayout, DateTimeLayout, TrueValue and FalseValue from all SQL params type resolvers. The properties may only be interesting with non params resolvers. Notice this change _require_ you to open _all_ datamodules containing resolver components, and ignore all property errors, save and recompile. - Updated db adapter wizard to only publish those properties on non params SQL resolver components. - Updated TkbmMWEventService with two new events, OnConstructFirstService and OnDestroyLastService. - Fixed Kylix compilation. - Fixed trying to reconnect if client fails receiving data on a request. - Improved transport stream handling of null and empty variants. 1.00rc2e 17. May 2003 Important notes =============== * Altered OnReconnect's Sender to be a client transport instead of a client component. New stuff ========= - Added OnConnected and OnDisconnected events to server and client transports. - Added OnConnectionLost event to client transports. Its called when all reconnection attempts has failed. - Added InStream and OutStream arguments to TkbmMWServer.Request function. If the streams are of TMemoryStream type, the streams are used directly. If not, the stream contents are copied as needed. Fixes/changes ============= - Fixed Div by zero bug in fileservice when file transferred is of zero size. - Fixed A/V when setting BoundTransport:=nil. - Altered reconnection algorithm for clients to allow for MaxRetries=0 and MaxRetriesAlternative>0 to allow connecting to alternative host immediately after connection failed. - Altered OnReconnect's Sender to be a client transport instead of a client component. 1.00 RC2d 10. May 2003 Fixes/changes ============= Includes missing ressource file. 1.00 RC2c 10. May 2003 Fixes/changes ============= Changed the AQuery parameter of OnGetNamedQuery on the query service to be of var type. Added a Request function to TkbmMWServer which makes calling a service much easier on server side. Fixed some A/V's possible when a service was not obtained. Fixed a few other minor things. Fixed DADO adapter which wouldnt compile due to a renamed object in CreateModifyObject. 1.00 RC2b Fixes/changes ============= Fixed ZIPPPED transport which was not updated correctly. 1.00 RC2 29. Apr 2003 New stuff ========= - Added OnResolveInitialization and OnResolveFinalization events to all resolvers. - Updated database adapter wizard accordingly. - Added OnGarbageCollectQuery event to TkbmMWServer which will be called for each service instance being evaluated for garbagecollection. This way garbage collection of a specific service can be forced or canceled at developers will. - Added Timeout property to service definition. Set > 0 (secs) to define a timeout for how long time a request may run in a service before the service instance gets terminated. - Added support for STATUS request in file service. Accepts one argument (filepath) and returns variant array (Size,creationtime,accesstime,modificationtime) or null if no file found. - Added support for sub format control of the standard transport format. Set an Params on transport to 'KBMMW_STANDARDTRANSPORTSTREAN_FORMAT' (const mwstsfAttrName) to 'RAW' or 'STANDARD' (default). Setting to RAW means floats and datetimes are transported in a raw binary format which may not be portable while all other variant types are transported as text. Setting to STANDARD or not setting it at all means that the standard transport format is used which transports floats, datetimes and all other variant types as text. - Added DoInitializeState/InitializeState and DoFinalizeState/FinalizeState methods which are called when a stateful service needs to be initialized for a client (default values set) and finalized when the state is released. - Updated service wizard to support the new methods. - Added support for FastZLib in ZIPPED transport stream format. Define KBMMW_ZIPPED_USE_FASTZLIB in kbmMWConfig.inc file to enable. Notice that the compression is not compatible with ZLib. Thus servers and clients must all use same library. - Added support for transport parameter KBMMW_ZIPPEDTRANSPORTSTREAM_COMPRESSION which should be set to a value (-1=default, 0=no compression, 1=fastests, 2=default, 3=max. (These values are not used by the standard ZLib library). - Added several new events to TkbmMWEventService: OnConstructService, OnDestroyService, OnInitializeService, OnFinalizeService, OnInitializeState, OnFinalizeState Fixes/changes ============= - Fixed bug in kbmMW ADS6 db adapter. - Changed OnGetNamedQuery from function to procedure to be compatible with C++Builder. - Updated IBO database adapter to include support for IBO_Session which should solve threading problems. - Took care of platform warnings and hints. - Fixed DOA db adapter compile bugs and problems due to inconsistency between DOA Delphi and BCB version. - Published Params property on TkbmMWTCPIPIndyServerTransport, TkbmMWTCPIPDXSockServerTransport, TkbmMWISAPIServerTransport and TkbmMWISAPIClientTransport. - Fixed not returning StateID from newly started stateful service. 1.00 RC1 18. Apr 2003 New stuff ========= - Added ID property to servicedefinition. Its used to assign a unique (for that specific pool) number to a service. - Added WriteFloat, WriteDateTime, WriteObject and ReadFloat, ReadDateTime and ReadObject to transport stream format. Allows for moving special objects and improved streaming customization for floating point and date time values. - Added IkbmMWObject interface which can be used to prepare a class of your own for automatic streaming via kbmMW. - Added TkbmMWObject class which can be used as base for custom streamable classes. - Added following functions for supporting new custom variant type for dealing with objects. (New variable variant type only for D6+) function kbmMWVarObjectCreate(AObject:TObject):Variant; function kbmMWVarObjectCreateAutoDispose(AObject:TObject):Variant; function kbmMWVarObject:TVarType; function kbmMWObjectFromVar(AVariant:variant):TObject; - Altered registration of custom objects. - Added/altered the following functions for registration purposes: procedure kbmMWRegisterStreamableObject(AObjectClass:TClass; AObjectReader:TkbmMWObjectReader; AObjectWriter:TkbmMWObjectWriter); overload; procedure kbmMWRegisterStreamableObject(AObjectClass:TClass); overload; function kbmMWGetStreamableObjectClass(AObjectClassName:string):TClass; Fixes/changes ============= - Fixed A/V if Database template not set on DB adapter. Now will throw an exception instead if trying to open a connection. - Fixed to raise an exception after rollback if resolving goes wrong in TkbmMWTransactionResolver. - Fixed bug in ADO Express adapter when fetching field origins. - Changed so Sender of OnAuthenticate event on TkbmMWServer is the requested service. - Fixed bug which could lead to IDE hanging on project close. - Fixed not checkpointing on all or nothing client resolving. 1.00 Beta 3.5 2. Apr 2003 Fixes/changes ============= - Fixed kbmMWWaitSemaphore which used ATimeout instead of t for Windows. - Fixed several hints about declared variables not being used in kbmMWClientDataset.pas. - Fixed IBX adapter to be able to compile under Delphi5. - Fixed Connection string editor uses clause to better cope with Kylix and Delphi5 at the same time. - Fixed Indy 8 compatibility issue in kbmMWTCPIPIndyTransport.pas. - Fixed FileVersion declared twice problem in kbmMWStreamFormat and kbmMWBinaryStreamFormat. - Added kbmMWStripQuotes function to kbmMWGlobal.pas. It takes a string and returns a string removing all " and ' from it. - Modified so all field origins are delivered without quotes. - Fixed BDE adapter to keep connection even when last query closed. - Fixed bug in client receiving errortable after resolve. 1.00 Beta 3.4 1. Apr 2003 New stuff ========= - Added TkbmMWClientTransactionResolver component. - Made several changes in transaction handling in the customqueryservice and queryservice to allow for client side multidataset resolving under transactional control. - Added OnGetNamedQuery event on TkbmMWQueryService and descendants. - Added support for OnGetNamedQuery event on all relevant places in the query service. - Added Active boolean property to TkbmMWCustomConnectionPool (and all descendants). If set false, connections cannot be obtained through the connection pool, and garbage collection is suspended. Thus remember to set to true (default) before opening any queries. - Added AdsCharType property to TkbmMWADS6Query and TkbmMWADS6StoredProc. - Published property SkipFieldsWithoutOrigin on all relevant resolvers. It controls if a field without any origin setting should be resolved or not. Default false. Updated db wizard to support it. - Added IgnoreRowsAffected property to DBExpress adapter. Default false. If set to true, the resolver will not test how many rows was affected during the update/insert/delete operation. This is due to DBX not fully supporting a correct RowsAffected value for several databases. Fixes/changes ============= - Fixed TkbmMWSessionPool.Shutdown which were missing a conversion to secs. - Fixed TCPIP Indy server transport to gracefully be able to bind to specific IP on a multiple IP server. - Fixed bug in file service and file client on transferring files which sizes matching a full multiplum of a blocksize. - Fixed A/V if requesting named query which do not exist. - Fixed client briefcase not storing deleted records. That would result in the records not being deleted on the backend db on a resolve. - Fixed idlecheck to make garbage collection of long running services work correctly. - Fixed handling of datetime and float values conversion for streaming in custom transport. Now will use new FormatSettings public property on custom transport (Delphi7+ only) or use the local locale settings for the client. Pre Delphi7 the local settings can be changed using the global format variables in Delphi/BCB (notice that this change the format globally for the complete application, thus the D7 FormatSettings is the better way to do it. - Fixed A/V when query/st.proc tries to obtain connection but cant. - Changed EnableVersioning on all TkbmMWCustomPooledDataset descendants to True. - Fixed compile bugs under Kylix3 for Delphi. - Fixed ADOExpress adapter to correctly handle calculated fields like Count(xx) etc. 1.00 Beta 3.3 11. Mar 2003 Fixes/changes ============= - Fixed designtime dialogs not working in D5. - Changed so loadbalancer not running probe during designtime. - Added OnProbeConnectFailed event to the loadbalancers. Its called when its not able to connect to a server. - Fixed invalid reference to FDeleteQuery in autogenerated adapters via the DB adapter wizard. - Fixed a few misspellings in helper texts here and there. - Fixed LoadBalancer property when loadbalancer being deleted. - Fixed Transport property on loadbalancer when transport being deleted. - Fixed fetching parameters for SP's/Queries having persisitent fields. - Changed PerformRefreshDefinitions to include a boolean parameter controling if definition update only is for parameters or also includes fields. - Altered DB adapter wizard to take PerformRefreshDefinitions change into account. - Altered way fielddefinitions are fetched in case persistent fields are already defined. Now allows for fetching parameters anyway. - Fixed not allowing blob fields to be part of the key in update and delete statements. - Altered DBISAM queries to be live instead of readonly of performance reasons. - Fixed loadbalancer transport exception when loading application where loadbalancer active. 1.00 Beta 3 24. Feb 2003 Important notes =============== * The dataset streaming format has changed. Thus all clients and servers using dataset streaming must be recompiled. * GetStateful method in services now removed in favor for flag in GetFlags. * Reversed order of encryption and compression in the server and client to improve performance. This change require clients and servers to be recompiled with latest release if they are using both encryption and compression. New stuff ========= - Added TkbmMWCustomPooledSimpleClient and TkbmMWPooledSimpleClient. They supports using a transport connection pool instead of a transport directly. - Added ClientAsTemplate boolean property to control if ClientQuery/ClientStoredProc property Client should be used as is or as a template (default). - Added ListenerThreadPriority, SpawnedThreadPriority, UseThreadPool ThreadCacheSize to DXSocks transport. Use according to DXSocks docs. - Added ConnectionString property to client transports. - Added virtual EncodeConnectionString and DecodeConnectionString methods which are called to encode and decode the connectionstring for the specific transport. - Added support for persistent services. A persistent service will never time out or be owned by any client like a stateful service. Thus the service can contain a global state, but not a client specific state. - Added PrivateDir and NetFileDir properties to TkbmMWBDEConnectionPool. - Added backward compability support for 0.93a-c on the binary streamformat. The server will automatically answer with the version of the streamformat used by the client. Current binary (default) stream format is 101. - Added new services: TkbmMWSimpleService and TkbmMWEventService. Simple service is the same as TkbmMWCustomService but publish a few events like OnBeforeRequest, OnAfterRequest and OnAuthenticate. Event service is the same as TkbmMWSimpleService except it publish a new event OnRequest which can be used to write the business code instead of overriding ProcessRequest. Changed bundled services to descent from TkbmMWSimpleService instead of TkbmMWCustomService. - AutoCreateDirectories property added to TkbmMWFilePool. If set to true, directories will automatically be created when files are uploaded to the server. - Added OnServeResponse event to kbmMW which is called right before the response is served back to the client. - Added support for Origin property on fields. Require kbmMemTable v. 3.08 or newer. - Added new functions CreateInsertObject, CreateModifyObject, CreateDeleteObject and FreeResolverObject to resolvers. Added AObject;TObject argument to DoInsertRecord, DoModifyRecord, DoDeleteRecord resolver functions. - Updated all datastore adapters to use the new object style resolvers. - Added optional PerformFieldOrigins method to TkbmMWCustomPooledDataset which may be overriden by database adapters to set correct origin of field in form Tablename.Fieldname based on an actual query. 1) Verified that the following adapters do not require change to give correct origin: IBX (IB Express), DBISAM3 2) Updated the following adapters to support returning the correct origin: ADOX (ADO Express) 3) The following datastores/API's do not allow for any reliable way to get correct origins automatically which means that the origin info must be set manually in multitable resolving: BDE, DBX (DB Express) 4) The following adapters do not support multitable updates at all, unless a customized resolver is created and used: MT (kbmMemTable), FF2 (FlashFiler 2) Other adapters not listed here has not been verified at this time with regards to correctness of origin handling and may fall into any of the 4 categories. The purpose of all the datastore adapter changes is to allow for complex transaction handling and automated multitable resolving in for example join situations etc. - Added support for pfInUpdate and pfInKey field provider flags on both server and client side. - Added kbmMWSetAffinityMas and kbmMWGetAffinityMask to kbmMWGlobal.pas. - Added experimental support for Kylix 3 for Delphi. - Added new TkbmMWCustomTransportPlugin class which can be subclassed to create advanced plugins that can be connected to the transport. - Added Plugin property to all transports. - Added DoConnected and DoDisconnected to TkbmMWCustomTransport which should be called whenever a client connect or disconnect. - Added Certificate and Attributes to TkbmMWCustomTransportInfo. - Added TkbmMWClientTransportInfo. - Added StreamSecII transport plugin for SSL/TLS support. Require StreamSecII v. 1.6.87 or newer. Uncomment KBMMW_TRANSPORTPLUGIN_SS2_TLS in the configuration file to include its support. - Added StreamSecII crypt component. Uncomment KBMMW_CRYPT_SS2 in the configuration file to include its support. - Added support for DiamondAccess. Uncomment KBMMW_DOA_SUPPORT in the configuration file to include its support. - Added CreationTime:TDateTime, StartServingTIme:TDateTime, StopServingTIme:TDateTime, LastRequestTime:TDateTime, AccRequestTime:TDateTime and AccRequestCount:longint to TkbmMWServer. The properties gives timing and count information. - Added UniqueIdentifier to TkbmMWServer which contains a server generated string which should be worldwide unique. - Added BoundTransport to TkbmMWCustomService. Optionally set it to the server transport component which this service is only allowed to be run via. - Added MinCount to TkbmMWServiceDefinition which defines how many instances as minimum there must be running of a service at any time. MinCount should be less or equal to MaxCount. Setting MinCount>MaxCount automatically bumps up MaxCount. -1 means no MinCount set. - Added class function GetMinInstances:integer to TkbmMWCustomService. Override this in a service to let the service define how many instances should always run of it. - Added class function GetMaxInstances:integer to TkbmMWCustomService. Override this in a service to let the service define the max number of instances to run. - Added Loadbalancing service (TkbmMWCustomLoadBalancing) and loadbalancer components (TkbmMWRoundRobinLoadBalancer, TkbmMWRandomLoadBalancer, TkbmMWBestFitLoadBalancer) based on TkbmMWCustomLoadBalancer. The loadbalancing service is used by other servers to obtain availability and performance information from the server. The information is used to deterimine which server to loadbalance to. Updated TkbmMWCustomClient components to handle loadbalancing replys from servers. Fixes/changes ============= - Fixed db adapter wizard code generation. - Fixed bug in query ExecSQL/Execute on client which resulted in variant exception. - Fixed serious bug in connection pooling mechanism which resulted in allocation of too many connections despite maxconnections set in some situations. - Fixed bug in ADOExpress adapter which resulted in lost db connections. - Fixed garbagecollection timeout comparison on service garbagecollection. - Fixed so FinalizeService is guaranteed to be called when current request has finished using the service. - Added a little more exception handling in DXSocks transport to guarantee release of some temporary allocated memory. - Altered the way the HTTP header is removed in ISAPI transport. - Moved Stateful from being a seperate function (GetStateful) to being a serviceflag (mwsfStateful) in GetFlags. Updated wizard accordingly. - Changed use of affinitymask in kbmMWServer.pas to use newly added functions. Will make a kbmMW based server run on Win95 provided WinSock2 is installed. - Made several small changes and fixes here and there to allow for Kylix 3 support. - Fixed bug setting Inventory value which would A/V the IDE. - Rearranged TkbmMWCustomTransportInfo and TkbmMWServerTransportInfo to make it the responsibility of the transport to create an instance when a client connects and destroy it when the client disconnects. - Fixed a few bugs in transport handling. - Reversed order of encryption and compression in the server and client to improve performance. This change require clients and servers to be recompiled with latest release if they are using both encryption and compression. - Fixed client datasets FetchDefinitions to fetch definitions regardless of AutoFieldDefsOnOpen. - Fixed Params property (missing setter method) on TkbmMWCustomTransport. - Published properties DetailFields, MasterSource and MasterFields on database adapters. Updated wizard to include them on new adapters. 1.00 Beta 2 10. Nov 2002 Important notes =============== * The transport format has changed. Thus all clients and servers must be recompiled. * RegisterService calls have changed. Instead of the many arguments to them, set the properties of the returned TkbmMWServiceDefinition object. New stuff ========= - Added testing for Windows ME in kbmMWGetOSVersion. - Added CacheFlags to all database adapters and client datasets. Setting mwcfDontAge to true doesnt remove a cached entry even if its too old. it will however be removed if the number of cached entries are bigger than the MaxCacheEntries allowed. This can be prevented by setting mwcfDontGarbageCollect. - Published AutoFieldDefsOnOpen on all database adapters. - Added support for defining stateful services. This breaks transport compability with v. 1.00beta1 app servers or clients. - Added GetStateful method to service. Return true if a service should be stateful. Default false. - Added StateID property to client which is -1 if client doesnt hold a stateid from server. - Changed RegisterService and RegisterServiceByName to functions returning a TkbmMWServiceDefinition. Removed several arguments from Register.... Instead set options on the returned service definition. - Added MaxIdleStatefulTime property to TkbmMWServiceDefinition. Stateful services are garbage collected according to this value instead of the MaxIdleTime value. - Added property StateIDs to TkbmMWCustomClient which contains information about all stateful services the client has running on the server. - Added ReleaseAllStates, ReleaseState and ReleaseStateID methods to TkbmMWCustomClient to gracefully release all, current or specific state on server. - Added ClearAllStates to clear states info on client without gracefully releasing them on the server. - Added support for special function named '__RELEASESTATE' in all services. Its purpose is to allow a client to release the state of a stateful service owned by the client. - Added support for transport stream format attributes which can be used to extend the header with additional information. The new state support and the attribute support require all clients and servers to be recompiled. - Added OnConnect and OnDisconnect events to TCPIP Indy server transport. - Added support for DXSocks 3.0 as transport. Define KBMMW_DXSOCKTCPIPTRANSPORT_SUPPORT in kbmMWConfig.inc. - Added support for using DXSocks 3.0 as ISAPI transport. Define KBMMW_ISAPITRANSPORT_USING_DXSOCK in kbmMWConfig.inc. If not defined uses Indy as always. Fixes/changes ============= - Published Client property of TkbmMWClientQuery and TkbmMWClientStoredProc - Fixed spelling of Generel tab to General. - Fixed wrong count and missing raise in TkbmMWCustomDataset.Resolve. - Fixed not calling GetProcessAffinityMask and SetProcessAffinityMask on Win95,Win98,WinME. - Fixed missing Connected:=true and Connected:=false in InternalOpenConnection and InternalCloseConnection in the ADOX adapter. - Fixed file service file exclusive locking for files opened for read. - Fixed minor bug where Stat garbagecollection could give A/V during shutdown of server. - Fixed bug giving exception about databasename multiple defined in MYSQLDAC adapter. - Changed so exceptions even during fielddefinitions are propogated to client. This results in client not displaying 'There must be at least one field', but instead displays the reason for it. - Fixed transaction handling in IBX datastore adapter. - Fixed bug where exception during resolving would not be propogated back to client. 1.00 Beta 1 31. Oct 2002 Important notes =============== * This release require kbmMemTable v. 3.06 or newer. * RegisterService and RegisterServiceByName now has additional parameters which must given. false,false are giving old behaviour. * The eventhandlers of the resolver has changed parameters and thus needs to be recreated. - Published AutoPopulateOnOpen:boolean on all database adapters and clientcursors. Controls if opening a dataset should perform requests to populate it with data. - Changed internal AutoFieldDefsOnOpen:boolean to AutoFieldDefsOnOpen:TkbmMWAutoFieldDefsOnOpen; - Published AutoFieldDefsOnOpen:TkbmMWAutoFieldDefsOnOpen on all database adapters and clientcursors. Controls when fielddefs should be updated when opening the dataset. - Moved connection features from TkbmMWCustomPooledCursor to parent TkbmMWCustomPooledDataset. - Added ObtainConnection and ReleaseConnection to TkbmMWCustomPooledDataset to simplify connection handling. - Added TkbmMWTransaction and TkbmMWTransactions for internal 2 phase commit transaction handling. - Added Default and DontQueue argument to RegisterService/RegisterServiceByName, Default can be set to false or true depending on if that specific service should be run in case no service match the clients request. DontQueue can be set to false (default) or true depending on if an error should be returned to the client in case no free service slots are available. - Added EnableDefaultService on TkbmMWServer which controls if a default service should be run in case no match for requested service is made. - Surfaced ServicePool:TkbmMWServicePool and TransportList:TkbmMWTransportList as public properties on TkbmMWServer. - Fixed a few minor bugs in the service wizard. - Added new standard service which should be extended: TkbmMWProxyService Its purpose is to work as a proxy between kbmMW clients and kbmMW app. servers. It should be used as default service, ie the one being called when no other service names matches. - Added MinClientPort and MaxClientPort to TkbmMWTCPIPIndyClientTransport when using Indy 9. Restricts the ports the client will use to communicate with the server. - Altered exception handling to allow returning Data and Token client identity parameters to client even if request was not ok. - Published OnGarbageCollection property on TkbmMWServer. It can be used to add some code which should be run regularly async of client requests. - Fixed bug when Query service always believed a request is a stored proc. when the service is being used for mixed purposes. - Made NamedQueryName and IsNamedQuery public properties of TkbMMWCustomQueryService writable. - Changed so all resolving will be using transactions if supported regardless of if AllOrNothing has been set. If AllOrNothing is false the transaction will be committed even when an exception was raised during resolve. - Removed invalid commit from IBO adapter. - Added property KillConnectionOnException:boolean which is default true to TkbmMWCustomPooledCursor. - Setting it to false forces kbmMW not to timeout a datastore connection even if last operation resulted in an exception. - Fixed case bug when locating a service in servicedefinitions. Wrong case could cause creating new service instances. - Fixed bugs in TkbmMWInventoryClient which would not accept and use version of neither inventory service or selected service.. Now issue Refresh each time to get updated inventory data. - Fixed IBO adapter to not include IBO generated DBKEY field. - Fixed MT adapter to check for template attachmaxcount on connection open if template is closed. - Fixed service wizard to include kbmMWGlobal and service and dbadapter wizards to include kbmMW.inc to get compiler level defines. Change from testing for VER140 to testing for LEVEL6. - Fixed not calling SetProcessAffinityMask on Win95/Win98 OS. - Fixed bug deleting crypt component while transport active. - Fixed bug not detecting missing TransportStreamFormat which resulted in AV. - Added FetchMaxRecords property to client datasets to limit the number of records fetched from server. This is different from FetchRecordsOnDemand as the later will in a later release fetch records on demand from server in blocks depending size of the value. - Added MinConnections to all connectionpools to allow preallocation of connections during runtime. Not active during designtime. - Added support for RowsAffected in all database adapters and the datastore adapter wizard. - Added support for RowsAffected in client dataset. - Published Client property of client datasets. It allows for pointing it to a TkbmMWCustomSimpleClient which will be used for communication towards the app. server. Notice that the transport property of that simple client is automatically set and reset by the client dataset connection pool. If Client is nil (not set) an internal generated simple client will be used (old behaviour). This change allows for one common setup place for client orientated settings like user, pwd etc. - Added datastore adapter for DOA (Direct Oracle Access from www.allroundautomations.com) Define KBMMW_DOA_SUPPORT in the kbmMWConfig.inc file to enable it. Requires kbmMemTable v. 3.06 or newer. - Added support for returning parameters from query execution. - Added datastore adapter for ODAC v. 4 (Oracle Direct Access Components from www.crlab.com) Define KBMMW_ODAC4_SUPPORT in the kbmMWConfig.inc file to enable it. - Added OnQueryStatement to TkbmMWCustomQuery which is called on each query/execute/definition/resolve request from clients. Its purpose is to allow the application server to rewrite the name of the named query or the statement before execution. - Fixed problem Token getting reset in client when server throws exception. - Added additional check for resolver inserts/updates/deletes are performed as expected. - Updated all database adapters to handle that check. - Updated datastore wizard to handle new check. 0.93c 29. Aug. 2002 Fixes/changes ============= Fixed A/V when kbmMWServer removed before transport. Fixed Zeos MySQL adapter with resolve issues. Moved needed initialization and destruction code out of ConstructService and DestroyService to make it easier when subclassing TkbmMWCustomService. 0.93b 28. Aug. 2002 Fixes/changes ============= - Fixed D6 project file which mistakenly included a non delivered file. - Fixed service stream problem where multiple copies or garbage would be included in the stream. - Fixed TIBDatabase bug in IBX5 database adapter. 0.93a Important notes =============== * This release require kbmMemTable v. 3.04 or newer. * Notice that due to changes in the streaming format between Delphi/BCB 5 and Delphi/BCB 6, TkbmMWBinaryStreamFormat had to be modified to support streaming those fields in a compatible way. This requires all clients and servers to be recompiled using this new format unless a define is uncommented. For more info, please check the header of the kbmMWBinaryStreamFormat.pas file. * Notice due to renaming of service functions within the CustomQueryService, pre v. 0.93a servers will not be compatible with clients running 0.93a or newer. * ExcludeFromUpdateInsert and ExcludeFromWhere events now as Sender as type TkbmMWCustomQueryResolver. * Notice due to addition of extra Data value, the streamformat between client and server have been changed which require a recompilation of all clients and servers. * Due to addition of garbage collection, an additional parameter has been added to all RegisterService methods. To not have garbage collection set the parameter to 0. Fixes/changes ============= - Fixed Stored procedure parameters not fetched problem. - Renamed PerformRefreshFieldDefs to PerformRefreshDefinitions throughout all sources to reflect the scope not only being field definitions but also possibly parameters. - Updated all database adapters supporting stored procedures to correctly reflect parameters. - Fixed problem not allowing for using Interbase Local driver with the BDE in kbmMW. - Improved IBX transaction support. - Fixed bug in resolvers in case of multiple key fields. - Fixed problem in CopyRawRecords which would affect caching of records not happening as it should. - Fixed problem with BCB (actually C++) not allowing virtual static's (class functions in Delphi). For a lengthy description see TkbmMWCustomService declaration. - Improved catching exceptions and propogating them to the client earlier on. - Made substantial inner changes in the TkbmMWClient component including the auto reconnect on error code. - Moved ExcludeFromUpdateInsert and ExcludeFromWhere events from TkbmMWCustomSQLResolver to TkbmMWCustomQueryResolver. This breaks existing eventhandler code since the Sender argument changed type to TkbmMWCustomQueryResolver. - Changed Token property to read/write on TkbmMWCustomClient. - Fixed returning the Token value to the client. - Updated transport formats from 100 to 101. This require all servers and clients being rebuild to operate. Additions ========= - Added support for BCB 6 both for compilation/installation and in the service wizard. Currently a problem persists with the C++ autotranslation of the OnServeRequest. The call is not translated correctly by current versions of BCB. Thus in BCB servers please avoid using that event. - Added UniqueDBName property to TkbmMWBDEConnectionPool (default true) which controls if databasename should be made unique or not. - Added new TkbmMWClientStoredProc. Use as a normal TStoredProc after setting the default StoredProc to a TkbmMWxxxStoredProc on the queryservice, or use named stored procedures via the @NAME format (similar to the TkbmMWClientQuery operation). - Added support for default Stored procedure on query service. - Added FetchDefinitions to TkbmMWCustomClientCursor which therefore is available for TkbmMWClientQuery and TkbmMWClientStoredProc. It will fetch fielddefs and params from app server. This is required after setting f.ex. stored proc name and/or overload during runtime. During designtime, the definitions are fetched automatically. - Added support for using real instantiated objects as arguments and results for in client requests towards a service via the new functions in kbmMWGlobal.pas: function kbmMWObject2Variant(AObject:TObject):Variant; function kbmMWVariant2Object(AVariant:Variant):TObject; procedure kbmMWRegisterStreamableObject(AObjectClass:TClass; AObjectReader:TkbmMWObjectReader; AObjectWriter:TkbmMWObjectWriter); - Added ZIPPED-HTTP transport stream format combining HTTP with compression. Add this definition to kbmMWConfig.inc to enable it: {$DEFINE KBMMW_ZIPPED_HTTP_TRANSPORTSTREAM_SUPPORT} - Added support for streaming calculated/lookup fields by setting the sfCalculated/sfLookup properties of TkbmMWBinaryStreamFormat. - Added ConstructService and DestroyService as alternative constructor/destructor methods in case something needs to be initialized/finalized for a service to work. The point of putting it here is to avoid needless initialization/finalization in cases where C++/BCB just needs to access some static info from the service like service flags/name/version etc. - Added InitializeService and FinalizeService virtual methods to a service. InitializeService is called after the service has been created and internal initialization is finished. FinalizeService is called right before the service ressources are freed and the serviceinstance is disposed. - Added new TkbmMWISAPIServerTransport and TkbmMWISAPIClientTransport. Put a ISAPI server transport on your datamodule and it will automatically be able to work as an ISAPI dll under any ISAPI compliant caching web server like IIS, WebServer etc. Put a ISAPI client transport on your clients and they can get to the application server via your standard web server. Thus no firewall problems :) Add the following definition in kbmMWConfig.inc to add support for it: {$DEFINE KBMMW_ISAPITRANSPORT_SUPPORT} // ISAPI support. - Made several changes to the inner workings of the transport and the transport stream. Added BeginReceive, ReceiveStream, ReceiveBuffer, ReceiveTransmissionHeader, EndReceive, BeginTransmit, TransmitStream, TransmitBuffer, TransmitTransmissionHeader, EndTransmit to TkbmMWCustomTransport. Removed DoEncrypt, DoDecrypt. Removed A transport _must_ provide at least ReceiveStream, ReceiveBuffer and TransmitStream, TransmitBuffer. ReceiveTransmissionHeader and TransmitTransmissionHeader should (optionally) be used for sending verification data for the transported data, and routines to verify the transported data early on without having to receive all data. The earlier the transport can be verified the better. - Added BeforeFetch, Fetch, AfterFetch, BeforeDeliver, Deliver, AfterDeliver, BeforeSigning, AfterSigning, BeforeVerify, AfterVerify, BeforeEncrypt, AfterEncrypt, BeforeDecrypt, AfterDecrypt, BeforeWriteHeader, AfterWriteHeader, BeforeReadHeader, AfterReadHeader to kbmMWCustomTransportStream. Removed Get, Put, Receive and Transmit from TkbmMWCustomServerTransport and TkbmMWCustomClientTransport. - Added direct support for DCPCrypt v. 2 in the new TkbmMWDCPCrypt component. Add the following definition in kbmMWConfig.inc to add support for it: {$DEFINE KBMMW_CRYPT_DCPCRYPT2} // DCPCrypt 2 Make sure to download and install DCPCrypt v. 2 Beta 2 from http://www.cityinthesky.co.uk/cryptography.html - Added the following properties to TkbmMWCustomQueryResolver which means they are available for resolvers wanting to support those features: InsertOnFailedUpdate:boolean - If true will insert if update fails. IgnoreFailedInsert:boolean - If true will ignore insert errors. IgnoreFailedUpdate:boolean - If true will ignore update errors. IgnoreFailedDelete:boolean - If true will ignore delete errors. UpdateWhereAll:boolean - If true will use all original fieldvalues as key when searching for original record instead of only keyfields. - Added protected DisposeCursor:boolean method to TkbmMWCustomPooledCursor which controls if the internal cursor returned by PerformQuery etc are disposed after use or not. Default is true. Override and set to false if the database adapter does not create a new cursor on each PerformQuery, but instead reuses one. - Added new kbmMWMT database adapter which allows a central TkbmMemTable to be used as a database. The Query property defines the filtering on the memtable. - Updated all relevant database adapters to support/publish new properties. - Published AttachMaxCount and AttachedAutoRefresh properties on all relevant database adapters. - Updated database adapter wizard to reflect database adapter changes. - Updated service wizard to handle 3rdparty services. - Added GetExtendable:boolean, GetDescriptionAbstract:string and GetDescriptionDetail:string class functions to TkbmMWCustomService. They are all used for making the service self describing for the service wizard. - Added procedure kbmMWRegisterServiceType(AServiceClass:TkbmMWCustomServiceClass), procedure kbmMWUpdateServiceType(AServiceClass:TkbmMWCustomServiceClass) function kbmMWGetServiceTypeRegistryIndex(AServiceClass:TkbmMWCustomServiceClass):integer function kbmMWIsServiceTypeRegistered(AServiceClass:TkbmMWCustomServiceClass):boolean procedure kbmMWRegisterServiceTypes(AServiceClasses:array of TkbmMWCustomServiceClass) procedure kbmMWUpdateServiceTypes(AServiceClasses:array of TkbmMWCustomServiceClass) procedure kbmMWRegisterServices(AServiceClasses:array of TkbmMWCustomServiceClass) procedure kbmMWRegisterService(AServiceClass:TkbmMWCustomServiceClass) function kbmMWGetServiceByClassName(AServiceClassName:string):TkbmMWCustomServiceClass; for services to register themself for use by the service wizard. The servicetype procedures/functions will register service types in the registry for use by the wizard. The service procedures/functions will add the serviceclass to the list of known service classes. - Added Data property of variant type to TkbmMWCustomClient which allows sending additional userdefined data to the service called. On the server side, the Data can be obtained via the ClientIdent argument on the ProcessRequest method and other methods. Any settings the server will make to the Data variant will be propogated back to the Data property on the client. - Added service garbage collection. - Added OnGarbageCollect event to TkbmMWServer. - Added boolean GarbageCollection property to TkbmMWServer - Added integer GarbageInterval property to TkbmMWServer Specify interval in seconds. - Added parameter MaxIdleTime to RegisterService(s). Set it to 0 for letting a service instance live forever or to any number of seconds the service is allowed to be idle before being garbagecollected. - Added LastRequestTime:TDateTime property to TkbmMWCustomService. Gives information about when last request was serverd using that specific instance. - Added StartTime:TDateTime property to TkbmMWCustomService. Gives information about when that specific instance was started. - Added TotalRequests:integer property to TkbmMWCustomService. Gives information about how many requests that specific instance have served. - Published Params of Indy client transport. - Added protected WriteRequest, ReadRequest to TkbmMWCustomRequestTransportStream - Added protected WriteResponse and ReadResponse to TkbmMWCustomResponseTransportStream - Added dbExpress database adapter. 0.92a Changed the license agreement to protect against viral licenses for other libraries. Please make sure to read it! Added QueryServiceVersion property to client query to supplement the QueryService property. Made service name and version not case sensitive when asking for service from client. Created new kbmMW service creation wizard. Fixed stats not being cleaned from time to time. Added thread checking every 10 secs. to clean. Added AutoResolveOnChange to ClientQuery. This will force an automatic resolve after each Post. Added AutoResolveOnClose to ClientQuery. This will force an automatic resolve when the dataset is closed. Made protected properties CurConnections, CurConnectionOwnerIDs and CurRequests public in connectionpool. Using those properties information about current number of connections, ID's of owners of current request and number of outstanding requests can be obtained. Added support for FetchFieldOnDemands on backend database components. Setting it >0 will request data from backend database in chunks. Simplified database adapters. Added support for database adapters stored procedure components returning datasets. Improved speed fetching data from backend datastore. Added GetPublishedQueries to TkbmMWClientQuery. Will return a commatext list of names of queries that has been published on the server. Running the actual query still require that the client is authorized to do so. Replaced MaxStatelessConnections and MaxStateFullConnections with MaxConnections on the connection pool. This will break existing code which means all forms/datamodules/services where a connection pool is placed needs to be opened in the IDE designer. Ignore any errors related to those two properties. Then set the MaxConnections property to the desired value and recompile. Added experimental support for the ZEOS database library. Thus now there is direct support for: MSSQL, DB2, Oracle, Progress, MySQL and IB via the Zeos library. The Zeos library can be found at: http://sourceforge.net/projects/zeoslib and http://www.zeoslib.org Please notice that the Zeos library is LGPL'ed or GPL'ed. Before using the kbmMW Zeos support files _MAKE SURE_ to read the new kbmMW license (license.txt). Added experiemental support for MySQLDAC from microOLAP (http://www.microolap.com) Added database adapter wizard for creation of new custom database adapters. Added GetDescription class function to TkbmMWCustomConnectionPool and all descendants. Its purpose is to give a text description of the type of connectionpool. Added better automatic reconnection support to client transports via the properties: MaxRetries, MaxRetriesAlternative and OnReconnect. This is a step in the direction of automatic failover and loadbalancing. 0.91h Fixed encryption not fully implemented in kbmMWServer.pas and related bug in kbmMWClient.pas. Improved kbmMWADOX.pas with regards to resolving and connection parameter assignment. Extended named query syntax to allow specification of client side statement on specified named query. Normal syntax: @namedqueryname Extended syntax: @namedqueryname@statement Added support for client side Execute of query statements in addition to opening a query dataset. Changed from using ICE (www.nevrona.com) to InnoSetup (www.innosetup.com). 0.91g Fixed a M/D event situation when detail memo field was edited and the detail data was fetched from cache in client. This would result in unexpected eventcalls and detail reload which would interfere with the edit mode. Requires kbmMemTable v.3.00f7 Beta or newer. 0.91f Added Client property to TkbmMWCustomClientDataset and thus to TkbmMWClientQuery which allows you to access the actual client connection properties like Username and Password and others. Fixed small bug where the config flag (kbmMWConfig.inc) KBMMW_INDYTCPIP_SUPPORT was not respected. Added idTCPServer property to TkbmMWTCPIPIndyServerTransport. Added idTCPClient property to TkbmMWTCPIPIndyClientTransport. Thus its now possible to go behind the scenes to obtain more Indy related information. Added VerifyTransfer to client and server transports. Published it for Indy client/server transports. If set kbmMW will create a verification header which will be verified at arrival. If it doesnt match, garbage data was send to the reciepient, and the data will be discarded. Added new TkbmMWLocalServerTransport and TkbmMWLocalClientTransport for allowing a server to have an embedded client. Fixed problem when resolving a cached resultset would replace the cached resultset with a wrong one. Now instead removes the cached resultset. Fixed massive leak in kbmMWBinaryStreamFormat also require update of kbmMemTable to v.3.00f6. Fixed a few small bugs. 0.91e Fixed ADOX exception 'parameter not found' and 'parameter setup invalid'. 0.91d Fixed typo in CopyParamsValueAndType. Fixed problems during resolve of client side queries with params. Fixed setting the datatype of KBMMW_KEY_ parameters which affected resolving. Fixed resetting UpdateStatus of cached datasets. Fixed ADOX database adapter. Some database types (the BDE f.ex.) require you to set PrependTableName to true if any fields contain space in their names. Improved Master/Detail support. Added RequeryDetail property of TkbmMWClientQuery. Set it to false if the complete detail table is fetched and the M/D is done 100% on the client. Set it to true if the client should fetch the detail records by querying the server. Speed can be improved by enabling caching on the detail table. Improved resolving to also update local cache if cache is enabled. Added kbmMWConfig.inc which contains descriptions of the kbmMW install configuration. Modify it to fit your choise of databases. Changed install to a unified install. All database adapters is now included in the install. Only the ones enabled in the kbmMWConfig.inc file will be available for development. Added experimental HTTP streaming support in addition to ZIPPED and STANDARD. It will wrap the data with normal HTTP POST/HTTP OK messages. In combination with setting the TCPIP port to f.ex. 80 it should allow access through a firewall. Fixed all database adapters when resolving. Fixed datatype 24 (widestring) error during query and resolve. Fixed load from briefcase not remembering updatestate of whole dataset. 0.91c Fixed TkbmMWCustomPooledQuery.CreateParams not to create multiple instances of params having same name. Fixed Param not set in query bug when using same paramname several times in query. Fixed updating key fields on resolve. Fixed keeping record position in clientdataset after resolve. Fixed date/time in params problems. Fixed IBX5 transaction bug. 0.90b Added support for FlashFiler 2. 15. Dec. 2001 Fixed resolving server to client bug when database error occured. Requires recompilation of all clients and servers since stream format changed. Published Crypt property on IndyTCPIP transport format. Currently only crypt component is the TkbmMWEventCrypt which enabled events for encryption and decryption. Other components with build in encryption/decryption can be derived from TkbmMWCustomCrypt. 0.90a Fixed several A/V situations during removal of a component. Added support for DBISAM v. 3.xx. Added support for IBX v. 5.xx. Fixed bug where fkInternalCalc fields didnt get transferred correctly. Fixed bug where fieldnames was corrupted while checking for fields to load from stream. Fixed several other resolving bugs. 0.90 First public alpha prerelease. 08. Dec. 2001