Hi,
I'm an active user of TMS Aurelius and currently investigating TMS XData. I tested some service operations with XData and that is working quite well. I have a little difficulty to understand the differences and similarities of the products XData, XData Service Operations and RemoteDB in relation to Aurelius.
My assumptions: (are they correct?)
1. RemoteDB is used to expose an SQL database and it does not use Aurelius (objects).
2. XData is used to expose Aurelius objects.
3. XData Service Operations is used to expose custom-made objects and behavior.
My question is about the 'normal' XData implementation (2). In the manual I see json filtering options described. Is this the only (and preferred) way to query for Aurelius objects via XData? I thought that XData was a remote and transparent interface to an Aurelius object model (manager). Instead it seems that XData is "just" another way to retrieve Aurelius objects, remotely.
Is the TObjectManager exposed through the XData interface? What I would like to do is to run Aurelius criteria remotely as if they are locally executed. That way it would be easy to migrate a local Aurelius project to a client/server XData solution.
For example:
Client := TXDataClient.Create;
Client.Uri := 'http://server:2001/tms/xdata';
Client.Manager.Find<TCustomer>
.Add(TExpression.Eq('Country', 'US'))
.Add(TExpression.Eq('Age', 30))
.List;
I did not try this and I do not have source code available at the moment. Just trying to understand the different solutions provided by XData beforehand.
Any insight on this?
Thanks.
Your assumptions are almost correct.
Thanks for your elaboration. But what I understand is that XData Service Operations does not rely on Aurelius objects. I can have service operation (remotable) objects without an existing Aurelius object-model / data-model, right? So with the exception of the (memory) database for authentication there is no need for a database connection or object-model.
This raises a new question. If I intent to only implement service operations with XData but i also have a Aurelius object/data model in my server implementation for internal operations only, does this model become automatically "exposed" to the json/rest connection?
I agree that RemoteDB is only a quick and dirty (but smart) solution for bringing legacy projects to client/server or the cloud. I already decided not to use RemoteDB for new projects. (It should be called RemoteLegacyDB by the way ;-)
XData querying via json/rest is indeed very powerful and I can understand your road-map decisions. There are no limitations on the kind of clients being used. However, coming from a Delphi client that already uses Aurelius criteria queries, it would be a huge improvement if there was a IObjectManager interface that could point to a local Aurelius object-manager implementation or a remote one. I'm looking forward to see this functionality in the future.
For now I will go for your option 1 and use the TXDataClient. I guess it will be very straightforward to rewrite the json queries to Aurelius object-manager queries when this becomes available.
In theory for XData Service Operations you could use it without any Aurelius object, but only with scalar types. But it's not the purpose. The idea IS to use Aurelius objects because it's amazingly easy and straightforward to receive/send Aurelius objects through it. All the threading, pooling, serializing, memory management is all automatically so you just receive a TCustomer and that's it.
"Yes, idea is to have the IObjectManager and the switch will be
straightforward. Note that as I say, that's what RemoteDB already does
in a very easy way. It will just "feel better" (and be much more
complicated). Unless of course you have strong corporate needs like many
simultaneous users or need to access from other platforms."
Are you saying that RemoteDB is suitable for cloud solutions with a few (say 10-15 simultaneous) users and XData is more suitable for cloud solution with 100+ users? Does this depend on the server-side implementation (XData versus RemoteDB) or purely on the client-side implementation (i.e. many inefficient table/query operations)?
Is RemoteDB with a Aurelius-based client suited for many concurrent users?
I meant to say that RemoteDB is great for bringing legacy database applications to todays (cloud) requirements. I know that RemoteDB is not legacy by itself. I did not think about the option to use RemoteDB for a modern Aurelius-bases application. That can be a solution but for the project that I am currently working on this might be too "heavy".
Lets say for example that I need to implement a public newsreader solution with an free app / windows application and a cloud server with a FireBird server on Windows Server 2008. Would you recommend to use RemoteDB or XData and/or XData Service Operations.
For your example, I would recommend XData, especially because it's public and you might want to leverage other clients/platforms as well.
Hi to all,
firstly, thanks both of you because you have answered
some basic questions that I believe is for all new
aurelius/xdata/remotedb programmers.
I am at the design of a web
application and till know I selected the xdata/aurelius solution.
Moreover that last post of Wagner take me in deep thoughts if it is
worth it and should use remotedb.
But correct if I am wrong, if
someones uses RemoteDB will still have a heavy client because all the
logic will be at the client application?
Also scalability cannot be done...?
Thanks
Yes, in RemoteDB there is no server-side logic besides anything you might have in database server itself (triggers, stored procedures, etc.).