A database application that requests information from a data source such as a database is known as a client application. A DBMS (Database Management System) that handles data requests from various clients is known as a server application.
JBuilder's DataExpress architecture is focused on building all-Java client/server applications and applets for the inter- or intranet. Because applications you build in JBuilder are all-Java at run time, they are cross-platform.
JBuilder applications communicate with database servers through the JDBC API, the JavaSoft database connectivity specification. JDBC is the all-Java industry standard API for accessing and manipulating database data. JBuilder database applications can connect to any database that has a JDBC driver.
The following diagram illustrates a typical database application and the layers from the client JBuilder DataExpress database application to the data source:
The major components in a database application are:
DataSet is an abstract class. A large amount of the public
API for all DataSets is surfaced in this class. All navigation,
data access, and update APIs for a DataSet are surfaced in this
class. Support for master-detail relationships, row ordering,
and row filtering are surfaced in this class. All of our data-aware JBCL controls have a dataSet property. This means a GridControl
can have its dataSet property set to the various extensions of
DataSet: DataSetView, QueryDataSet, ProcedureDataSet, and TableDataSet.
StorageDataSet can use in-memory storage (MemoryStore) to cache its data. The StorageDataSet store property can also be set to a DataStore component to provide persistence for the DataSet data. The StorageDataSet manages the
storage of DataSet data, indexes used to maintain varying views
of the data, and persistent Column state.
All structural APIs (add/delete/change/move column) are surfaced
in this class. Since StorageDataSets manage the data, it is where
all row updates, inserts, and deletes are automatically recorded.
Since all changes to the StorageDataSet are tracked, we know
exactly what needs to be done to save (resolve) these changes
back to the data source during a resolution operation.
The DataStore component provides high performance data caching and compact persistence for DataExpress DataSets, arbitrary files, and Java Objects. The DataStore component uses a single file to store one or more data streams. A DataStore file has a hierarchical directory structure that associates a name and directory status with a particular data stream.
This component can be used to provide independent navigation (a cursor) with row ordering and filtering different than that used by the base DataSet. To use this component, set the storageDataSet property of the DataSetView component. Use this component when multiple controls need to dynamically switch to a new DataSet. The controls can all be wired to the same DataSetView. To force them all to view a new DataSet, the DataSetView storageDataSet property can be changed.
This is a JDBC specific DataSet. It manages a JDBC
provider of data. The data to be provided is specified in a query
property. The query property specifies a SQL statement.
This is a JDBC specific DataSet. It manages a JDBC
provider of data. The data to be provided is provided with a
procedure property. The procedure property specifies a stored procedure.
This is a generic DataSet component without a built-in provider mechanism. Even though it has no default provider,
it can be used to resolve its changes back to a data source.
TableDataSets, Columns, and data can be added through DataSet methods
or by importing data with a DataFile component like TextDataFile.
The next section discusses the JBuilder DataExpress architecture in more detail.