public interface ServerDataIntegration
install
the Smart GWT Java Server Framework
into any J2SE/J2EE
environment, including any existing web application create DataSources
via an XML declaration,
possibly on-the-fly from existing metadata
. Client-side Data Integration
in which
client-side DataSources are configured to send and receive HTTP messages containing XML, JSON
or other content. Server-side Request Processing
Client-side DataBoundComponents
will send DSRequests
to the Smart GWT Server as background
communications transparent to the user. Integrating Smart GWT's DataSource layer with your
data model is a matter of handling these DSRequests and sending back DSResponses, in order to
fulfill the 4 basic operations of the DataSource Protocol
.
Out of the box, Smart GWT is set up to route all DSRequests through a
special servlet called IDACall
. Requests that go through IDACall
have the following lifecycle:
RPCManager
to manage
the processing of the entire queue of transactions. For every DSRequest in the queue, this
RPCManager:DMI
- in other words, your code - if this is
configured in the DataSource. As described later in this section, your code can perform
some custom logic here: either completely fulfilling the request, or alternatively
modifying the request and causing the default processing of the request to continueexecute
method to obtain a DSResponse.This basic request handling flow can be customized at a number of points:
IDACall
servletIDACall
flow by writing a
custom DataSource
. This approach lets you write and maintain the minimal amount of custom
code, while taking full advantage of DataSource-agnostic features of the Smart GWT Server, like
validation, queuing, transaction chaining, support for Velocity templating, and so on.validate()
method, as
described here
.OperationBinding
allow you to dynamically set data
values at transaction-processing time, using built-in Velocity support
execute()
method of the DataSource to add extra processing before and/or
after the Smart GWT processingTransaction Chaining
to dynamically set
data values according to the results of earlier transactions SQL Templating
to change, add to or
even completely replace the SQL sent to the database, including calling stored
proceduresDirect Method Invocation
to call directly into your own Java classes. DMIs allow you to modify the
DSRequest
before it executes, modify the DSResponse
before it
returns, or take unrelated actions. They can be used to add business logic to a
persistence operation without destroying the default behaviorDMI Scripts
to add small amounts of
business logic right in the <operationBinding> tag. DMI scripts allow you to add
business logic just like normal DMIs, but don't require the logic to be in a separate
.java file.RPCManager.processRequest()
within your Spring Controller, Struts Action, or
whatever the equivalent is in the framework in use. However, note carefully that taking
this approach is often a sign that the Smart GWT architecture has not been correctly
understood. Smart GWT is architected for client-server data communication, as
opposed to early web MVC frameworks which do everything on the server. In particular, it is
absolutely incorrect to represent every individual DataSource operation - or even every
DataSource - as a separate Struts Action or Spring Controller, because this implies different
URLs for different operations. All DataSource operations should go through a single URL in
order to allow transaction queuing
- see these
For more information on the DMI subsystem, see the {@link com.smartgwt.client.docs.DmiOverview DMI overview}, DMI class and the DMI example in the Feature Explorer.
Note that, as you continue to integrate your prototype with your backend, you can use a mixture of DataSources that have been fully integrated with your backend and DataSources that are running in "client-only" mode (see {@link com.smartgwt.client.docs.ClientOnlyDataSources}).
Important methods for handling DataSource requests
The basic flow of logic for handling DataSource requests is:
1. Determine operation type (Fetch, Add,
Update, Remove) for a single request. Not necessary if you follow the recommendations for
{@link com.smartgwt.client.docs.WriteCustomDataSource writing a custom DataSource} and provide
your implementation via executeFetch(), executeAdd() , et al. |
dsRequest.getOperationType() |
2. Get inbound values (Add, Update) and/or criteria (Fetch, Update, Remove) for this request. | dsRequest.getFieldValue() dsRequest.getValues() dsRequest.getCriteria() |
3. Business logic, validation, calls to data and service tiers... anything you can code. | execute custom logic |
4. Set status and data for the response. | dsResponse.setStatus() dsResponse.setData() |
For more
information, see the {@link com.smartgwt.client.rpc.RPCManager RPCManager documentation}, and
the Custom
ORM DataSource example.,
DataSource.getDataFormat()
,
DataSource.getDataProtocol()
,
DataSource.getRequestProperties()
,
DataSource.serverType
,
DataSource.tableName
,
DataSource.dbName
,
DataSource.configBean
,
DataSource.useAnsiJoins
,
com.smartgwt.client.data.DataSource#getServerObject
,
OperationBinding.getRequestProperties()
,
RestDataSource.getDataProtocol()
,
DSDataFormat
,
DSServerType