Using Multiple Server Data Modules

From RAD Studio
Jump to: navigation, search

Go Up to Creating the Server Application

You may want to structure your application server so that it uses multiple remote data modules. Using multiple remote data modules lets you partition your code, organizing a large application server into multiple units, where each unit is relatively self-contained.

Although you can always create multiple remote data modules on the application server that function independently, a special connection component on the DataSnap category of the Tool palette provides support for a model where you have one main "parent" remote data module that dispatches connections from clients to other "child" remote data modules. This model requires that you use a COM-based application server, which means that the model does not support TSoapDataModule nor dbExpress DataSnap modules.

To create the parent remote data module, you must extend its IAppServer interface, adding properties that expose the interfaces of the child remote data modules. That is, for each child remote data module, add a property to the parent data module's interface whose value is the IAppServer interface for the child data module. The property getter should look something like the following:

 function ParentRDM.Get_ChildRDM: IChildRDM;
   if not Assigned(ChildRDMFactory) then
     ChildRDMFactory :=
       TComponentFactory.Create(ComServer, TChildRDM, Class_ChildRDM,
                                ciInternal, tmApartment);
   Result := ChildRDMFactory.CreateCOMObject(nil) as IChildRDM;
   Result.MainRDM := Self;

For information about extending the parent remote data module's interface, see Extending the application server's interface.

Tip: You may also want to extend the interface for each child data module, exposing the parent data module's interface, or the interfaces of the other child data modules. This lets the various data modules in your application server communicate more freely with each other.

Once you have added properties that represent the child remote data modules to the main remote data module, client applications do not need to form separate connections to each remote data module on the application server. Instead, they share a single connection to the parent remote data module, which then dispatches messages to the "child" data modules. Because each client application uses the same connection for every remote data module, the remote data modules can share a single database connection, conserving resources. For information on how child applications share a single connection, see Connecting to an Application Server That Uses Multiple Data Modules.

See Also