4.1.2 Java and NDB Cluster

A NDB Cluster is
defined as one or more MySQL Servers providing access to an
NDBCLUSTER storage engine—that
is, to a set of NDB Cluster data nodes (ndbd
processes). There are three main access paths from Java to
NDBCLUSTER, listed here:

JDBC and mysqld. JDBC
works by sending SQL statements to the MySQL Server and
returning result sets. When using JDBC, you must write the
SQL, manage the connection, and copy any data from the
result set that you want to use in your program as objects.
The JDBC implementation most often used with the MySQL
Server is MySQL
Connector/J.

Java Persistence API (JPA) and JDBC. JPA
uses JDBC to connect to the MySQL Server. Unlike JDBC, JPA
provides an object view of the data in the database.

ClusterJ. ClusterJ uses
a JNI bridge to the NDB API
for direct access to
NDBCLUSTER. It employs a style
of data access that is based on a domain object model,
similar in many ways to that employed by JPA. ClusterJ does
not depend on the MySQL Server for data access.

These paths are shown in the following API stack diagram:

Figure 4.1 Java Access Paths To NDB

JDBC and mysqld.
Connector/J provides standard access through the MySQL JDBC
driver. Using Connector/J, JDBC applications can be written to
work with a MySQL server acting as an NDB Cluster SQL node in
much the same way that other Connector/J applications work with
any other MySQL Server instance.

ClusterJ.
ClusterJ is a native Java Connector for
NDBCLUSTER (or
NDB), the storage engine for NDB
Cluster, in the style of
Hibernate,
JPA,
and
JDO.
Like other persistence frameworks, ClusterJ uses the
Data
Mapper pattern, in which data is represented as domain
objects, separate from business logic, mapping Java classes to
database tables stored in the
NDBCLUSTER storage engine.

Note

The NDBCLUSTER storage engine is
often referred to (in MySQL documentation and elsewhere) simply
as NDB. The terms
NDB and NDBCLUSTER are
synonymous, and you can use either ENGINE=NDB
or ENGINE=NDBCLUSTER in a
CREATE TABLE statement to create
a clustered table.

ClusterJ does not need to connect to a mysqld
process, having direct access to
NDBCLUSTER using a JNI bridge that is
included in the dynamic library libnbdclient.
However, unlike JDBC, ClusterJ does not support table creation and
other data definition operations; these must be performed by some
other means, such as JDBC or the mysql client.
Also, ClusterJ is limited to queries on single tables, and does
not support relations or inheritance; you should use another kind
of access paths if you need support for those features in your
applications.