Breaking Changes
From RemObjects Wiki
This is a Technical Glossary topic
Feel free to add your notes to this topic below.
Breaking Changes in the Hydra 4 Release
Hydra_Core package split
In order to provide support for the new FireMonkey framework we've divided Hydra_Core_D16 package into three package:
- Hydra_Core_D16 - core package that contains units shared between framework packages.
- Hydra_VCL_D16 - package with classes that provides support for a VCL framework.
- Hydra_FMX_D16 - package with classes for a new FireMonkey framework.
In some cases it may be required to manually tune your runtime packages list to reflect this change.
Please note that this change involves only packages for Delphi XE2, packages for previous versions remains untouched.
THYPluginType moved
Definition of a THYPluginType moved to a new unit uHYPluginDescriptors.pas. If you use this type, please include uHYPluginDescriptors into the uses section of your units.
Breaking Changes in the Summer 2012 Releases
RemoteService class property CloneMesage removed
Misspelled property CloneMesage was removed from the RemoteService. Please use the CloneMessage property instead.
Removed property was marked as obsolete since 2009.
Breaking Changes in the Spring 2012 Releases
Relativity Server Default Channel type changed to SuperHttp
Relativity default channel now registers itself as superhttp in ZeroConf environment, not as http like earliser.
This change does not break server access for existing Relativity clients because Relativity default channel now accepts both SimpleHttp and SuperHttp connections.
OlympiaServerSessionManager.GetAllSessions result changed
The OlympiaServerSessionManager.GetAllSession(IList) method now puts only session identifiers in the list provided instead of downloading entire sessions objects from the Olympia server as earlier.
It is highly recommended to use the strongly-typed IList<Guid> GetAllSession() method overload instead.
RemoteDataAdapter ReconcileDialog events changes
- Obsolete RemoteDataAdapter.ShowReconcleDialog event was removed
- RemoteDataAdapter.ShowReconcileDialog event handler signature changed from
delegate(RemoteDataAdapter, DataSet, List, Boolean) to delegate(Object, ShowReconcleDialogEventArgs)
- RemoteDataAdapter.ShowReconcileRecordInAppUI event handler signature changed from
delegate(RemoteDataAdapter, DataSet, DeltaChange, Boolean, ReconcileDialogAction) to delegate(Object, ShowReconcileRecordInAppUIEventArgs)
- Obsolete delegate types ShowReconcleDialogEventHandler and ShowReconcileRecordInAppUIEventHandler
are no longer available
Breaking Changes in the Fall 2011 Releases
RemObjects.SDK.Server.Session class renamed to SessionRolesHelper
The RemObjects.SDK.Server.Session class has been renamed to RemObjects.SDK.Server.SessionRolesHelper and changed to be a static class. This change affects code that checked Session security roles using one of the RemObjects.SDK.Server.Session.ValidateRoles methods directly. Please consider using method Service.ServiceValidateRoles instead or fix code that called RemObjects.SDK.Server.Session.ValidateRoles by replacing RemObjects.SDK.Server.Session with RemObjects.SDK.Server.SessionRolesHelper.
Breaking Changes in the Winter 2010 Releases
Default port changed for the IpSuperHttpServerChannel
Default port was changed for the IpSuperHttpServerChannel server channel from 80 to 8099. This potentially affects RemObjects SDK for .NET server applications created using pre-Winter 2010 releases if they were using IpSuperHttpServerChannel server channel on port 80. To resolve this, simply set port 80 in the Server Channel's properties explicitly, if you want to keep using this port.
Pre-compiled binaries for Hydra / RemObjects SDK Integration
Starting from the Winter 2010 release we no longer provide pre-compiled *.bpl's for the Hydra - RemObjects SDK Integration Library, in order to minimize build dependencies between the products. To use RemObjects SDK for Delphi functionality in Hydra, you will need to manually compile and install Hydra_RO_D1* and Hydra_RO_IDE_D* into the Delphi IDE.
Poll Interval on ROEventReceiver in RO/Xcode now uses Seconds
For consistency with other Cocoa APIs, the poll interval setting on the ROEventReceiver is now specified in seconds, not milliseconds. If you were manually setting this value in code, your numbers might need adjustment to be 1/1000 of the values in use now.
Breaking Changes in the Summer 2010 Releases
Obsolete RemObjects.Common.Pooling namespace removed from RO/.NET
The obsolete namespace RemObjects.Common.Pooling was removed from RemObjects SDK for .NET. This potentially affects RemObjects SDK DataAbstract for .NET server applications created using pre-Spring 2010 releases. Members of this namespace were used to specify PoolingBehavior for the ConnectionManager component. Build error may occur in case non-default values like RaiseError or IgnoreAndReturn were used for this property. To resolve this error it is enough to just replace RemObjects.Common.Pooling with RemObjects.SDK.Pooling.
RemObjects.Common.Pooling had already been marked as "obsolete" and emitted warnings, in previous releases.
BPDX Channels Have Been Discontinued for RO/Delphi
As per request form the original author, we are no longer shipping the BPDX based server channels in RemObjects SDK for Delphi, nor the underlying RO/DXSock libraries. This affects the \BPDX and \RODX folders of the source tree, as well as the RemObjects_RODX_* and RemObjects_BPDX_* packages.
If you are upgrading from a previous version of RemObjects SDK, the source files will not be removed, and you can of course continue using them, while they still work with the current RO code base (Over time, and as RemObjects SDK for Delphi adapts to newer versions of Delphi and different platforms supported by Delphi or FPC, they may cease working).
We recommend that users migrate to one of the other choices of channels we provide, such as Indy, Synapse or IP based channels.
We are working with the authors of DXSock to create new channels based on their latest DXSock 6.0, for a future release, but do not as of yet have a definitive timeline to announce.
RO/.NET Variant Serialization Incompatibly was Fixed
In RemObjects SDK for .NET, the Variant class is designed to provide compatibility with the Delphi variant type. When the variant instance contains boolean value, it was erroneously (de)serialized as Int32 by error, i.e. the boolean value occupied 4 bytes in a stream. This was incompatible with the behavior of RemObjects SDK for Delphi. This has been changed in the current release, so variants containing boolean values are now serialized as Byte occupying 1 byte in the stream.
Gthis change restores binary compatibility with RemObjects SDK for Delphi (and also the new Variant support in RemObjects SDK for Xcode added in this release, but may break in the unlikely event of variants being sent between .NET servers and .NET clients, if not both client and server are updated to use Summer 2010 release.
Breaking Changes in the Spring 2010 Releases
Method Signature Changes in Data Abstract for Xcode
The [DADataTable getDataTables*] methods have been changed to return an NSDictionary instead of an NSArray. We realize this is a breaking change, but given the relative newness of the DA/OX API and that a return value of an array was really quite unhelpful (there's no easy way to get at the appropriate tables by name), we decided this was worth changing now, while the product is still young.
Only the synchronous versions of the methods are affected.
Events Subscription and Compatibility between Delphi and .NET
Overview
If you have used both RemObjects SDK for Delphi and .NET simultaneously, you may have noticed that the callback events processing approach differs slightly and it was impossible to, for example, build a Delphi server that sends callback events to a .NET client application.
In this release we have fixed this problem, but discovered a security flaw in the Delphi events approach: the client application was allowed to manipulate with its own events subscription. It allows to create a malicious client application that will flood the server with millions of subscriptions causing the denial of service and the server has no ability to resist it. That's why we have decided to not propagate the Delphi events approach to the .NET side. The .NET approach has been implemented in RO SDK for Delphi instead.
Summary:
- RemObjects SDK for .NET was not affected at all.
- The LegacyEvents property of boolean type was added to the TROEventReceiver class. This property is true by default and allows to switch the receiver's operation mode from the legacy Delphi style to the new .NET style.
- The LegacyEvents property of boolean type was added to the TRORemoteDataModule class. This property is true by default and when set to false disallows the self-subscription of events for the client applications.
Directions for developers
- In order to provide compatibility between a Delphi client and a .NET server, the TROEventReceiver.LegacyEvents property must be set to false and the client application has to be recompiled with version 6.0.45 or later of RemObjects SDK for Delphi.
- To provide compatibility between a .NET client and a Delphi server, the server application must be recompiled with with version 6.0.45 or later. It is also advised to set the LegacyEvents property of the service implementation class to false if there are no legacy clients (ie clients written with prior versions of RemObjects SDK for Delphi) connecting to the server.
- Even in the single platform scenario (both client and server applications are Delphi-written), it is advised to set both mentioned properties to false and recompile both applications with the latest version of RemObjects SDK. This will remove the events security flaw. NOTE: If the client application can't be upgraded for some reason, there is nothing to be done, because setting LegacyEvents to false on the server side will only make the server incompatible with legacy clients.
- After the server upgrade it is vitally important to take control over the clients subscription/unsubscription on the server side. The TRORemoteDataModule.RegisterEventClient method must be called from inside the service before any events are sent to the client. The opposite method is TRORemoteDataModule.UnRegisterEventClient. In the most common case, developers don't need to pay no attention to the unsubscription because the client will be unsubscribed automatically when its session dies.
Example (based on the File Broadcast sample) of how to change the method in the FileBroadcastService_Impl.pas file:
procedure TFileBroadcastService.uploadfinished(const filename: Unicodestring; const filesize: Int64); begin // This line should be added so the event can reach the client: RegisterEventClient(GuidToString(ClientID), EID_FileEvents); (EventRepository as IFileEvents_Writer).OnNewFileAvailable(Session.SessionID, filename, filesize); end;
WideString vs UnicodeString types in Unicode versions of Delphi (2009 and later)
Overview
In Delphi 2009, a new data type for wide strings - UnicodeString was introduced, which is more efficient than the old WideString. During the migration RemObjects SDK to Unicode, a mistake was made, and RODL codegen was not changed to use the new UnicodeString type (with an alias being provided for Delphi 2007 and below), as was intended; instead WideString was still used. Starting with the Spring 2010 releases, this has been rectified, and RODL-generated code now uses UnicodeString.
Summary:
- For fields, parameters and array elements in RODL with type "WideString", generated code will now use UnicodeString type.
- This will affect all auto-generated sources: interface, async interface and implementation files.
Directions for developers
- For developers using Delphi 2007 or older, no change is required. Your Intf files will ge rewritten to contain "UnicodeString", but that is defined as an alias to WideString, and remains compatible.
- For developers using Delphi 2009 or newer, you may need to manually adjust your Impl files (which are not updated automatically) to replace "WideString" with "UnicodeString", to match regenerated Intf units.