|
Rinse Features
Support for Delphi data types
- Use real data types, such as
- String, Integer, Char, Boolean, Double, TDateTime, Currency, etc.
- Sets
- Enumerations
- Sub-Ranges
- Records
- Interfaces
- Static Arrays
- Dynamic Arrays
- Open Arrays
- Variants
- Smart Records (combining the best features of interfaces, records, and datasets)
- Smart Lists (automatically generated type-safe lists)
- Smart Iterators (automatically generated type-safe itertators)
- Support for all four parameter-passing modes: by value, const, var, out.
- Full support for distributed exception handling.
- Define remote methods using any Delphi calling convention.
- Define remote interfaces with overloaded methods.
- A network of objects is transmitted intact.
- String transmission is optimized to send a given string or object only once.
- In short, applications are designed with interfaces that have ideal parameter types.
Interface Definition Language
- Define interfaces in .rinse files, which use Delphi syntax.
- There are no binary .tlb files, making dependencies easy to determine, and simplifying deployment (no registry requirements).
- The Rinse tool translates .rinse files into .pas units.
- The Rinse tool is a command-line program and an IDE add-on for automatic translation.
- Refer to data types defined in external .pas units.
- Build applications with reusable .rinse files.
- Rinse can automatically generate an implementation class for a data interface.
- Rinse can automatically generate container interfaces and implementations.
Planned support for other languages (Java).
Planned support for Kylix (Delphi for Linux).
Runtime Support
- Compile the Rinse Runtime Library (implemented in Delphi) into the client and server applications.
- Optionally compile the server directly into the client, to debug the entire application as a single process.
- Rinse can be extended to support new network protocols.
Supported Protocols
- TCP (via Indy)
- HTTP (via Indy and/or DSP)
- Local (single process, for debugging)
- Wrapper (no streaming; single process; for single-tier apps)
- Other network protocols may be added (plug-in architecture)
Transport Layers
- Named Services
- Unique Services
- Stateful Services
- ZLib Compression
- Threaded Clients
- Synchronized Servers
- Status Clients and Servers
- Other transport layers may be added (plug-in architecture)
Communication Features
- TCP / HTTP can automatically launch server via Houston service (comes with Rinse).
- Automatic reconnect upon server/network failure, and automatic retry of
failed request.
- Using stateful services, the client application will be notified when
connected to a new server object (due to server/network failure or service timeout).
Client application can automatically re-login and re-submit the previous request.
- Client applications can easily implement fail-over and load balancing policies.
- Rinse offers centralized control over remote connections, making it easy to
disconnect and/or re-connect to a different server.
- QueryInterface is remotable.
- Full type information in each request (via a checksum), ensuring client and
server use same version of interfaces etc.
General Architecture
- Remotable interfaces may be used directly by the following different kinds
of consumers:
- 2-tier applications
- 3-tier clients
- 3-tier servers
- and web applications
- Rinse applications can easily use VDB connection pooling.
- Full DataSnap (formerly MIDAS) support, including design-time.
- Server objects are loosely coupled via Rinse context.
- The context object manages transactional resources, such as databases.
- A server object may support multiple remote interfaces.
- A server object may use Delphi’s delegation feature to re-use existing
implementations of other remote interfaces.
- A client may access the other interfaces implemented by a remote object
using QueryInterface or the as operator.
DSUtility Support
- Support for passing the following DSUtil types via remote methods:
- TStrArray (dynamic array of string)
- TIntArray (dynamic array of Integer)
- IMemStream (any TStream via TMemoryStream)
- IMap and IIntfMap
- ISet and IIntfSet
- IDataSet (any TDataSet via TClientDataSet)
- IStringList (interfaced wrapper around TStrings)
- IList (dynamic list of variant values)
- IStringList
- IPropertyBag
- ISmartRecord
- IIterator
|