4.1.3 ClusterJ API 和数据对象模型

本节讨论 ClusterJ API 和用于表示应用程序处理的数据的对象模型。

应用程序接口。  ClusterJ API 依赖于 4 个主要接口: SessionSessionFactoryTransactionQueryBuilder

会话界面。  所有对 NDB Cluster 数据的访问都是在会话的上下文中完成的。该 Session 接口表示用户或应用程序与 NDB Cluster 的单独连接。它包含以下操作的方法:

会话工厂接口。  会话是从 中获取的 SessionFactory,对于您要从 Java VM 访问的每个 NDB Cluster,通常有一个实例。 SessionFactory存储有关集群的配置信息,例如 NDB Cluster 管理服务器的主机名和端口号。它还存储有关如何连接到集群的参数,包括连接延迟和超时。有关 SessionFactory 及其在 ClusterJ 应用程序中的使用的更多信息,请参阅 获取 SessionFactory 和获取会话

交易接口。  事务不由Session 接口管理;与其他现代应用程序框架一样,ClusterJ 将事务管理与其他持久性方法分开。事务划分可能由容器或在 Web 服务器 servlet 过滤器中自动完成。从中删除事务完成方法Session 有助于实现这种关注点分离。

Transaction 接口支持事务数据库所需的标准开始、提交和回滚行为。此外,它使用户能够将事务标记为仅回滚,这使得不负责完成事务的组件可以指示(由于应用程序或数据库错误)不得允许该事务才能正常完成。

查询生成器接口。 QueryBuilder 接口使动态构建标准查询成为可能,使用域对象模型属性作为查询建模元素。可以指定参数和数据库列值之间的比较,包括等于、大于和小于、介于和在操作。可以使用与布尔运算符 AND、OR 和 NOT 对应的方法组合这些比较。NULL还支持 对值进行比较 。

数据模型。  ClusterJ 使用域对象提供对 NDB Cluster 中数据的访问,在许多方面类似于 JPA 数据建模的方式。

在ClusterJ中,领域对象映射具有以下特点:

  • 所有表都映射到持久接口。对于集群中的每个 NDB表,ClusterJ 使用一个或多个接口。在许多情况下,使用单个接口;但是对于应用程序的不同部分需要不同列的情况,可以将多个接口映射到同一个表。

    然而,这些类本身并不是持久的。

  • 用户将列的子集映射到界面中的持久属性。因此,所有属性都映射到列;但是,并非所有列都必须映射到属性。

    所有 ClusterJ 属性名称默认为列名称。该接口为每个属性提供 getter 和 setter 方法,具有可预测的相应方法名称。

  • 接口上的注释定义映射。

下图说明了应用程序环境和域对象的用户视图,它显示了 ClusterJ 接口的建模元素之间的逻辑关系:

图 4.2 应用程序和环境的 ClusterJ 用户视图

应用程序和环境的 ClusterJ 用户视图

SessionFactory由属性对象配置,该对象可能已从文件加载或由应用程序使用其他方式动态构造(请参阅第 4.2.2.1 节,“执行 ClusterJ 应用程序和会话”)。

应用程序从 中获取Session实例SessionFactory,一次最多有一个线程处理 a SessionSession如果某些应用程序需要多个数据库连接,则 一个线程可以管理多个实例。

每个会话都有自己的域对象集合,每个域对象代表数据库中一行的数据。域对象可以表示以下任何状态的数据:

  • 新的; 尚未存储在数据库中

  • 从数据库中检索;可用于应用程序

  • 更新; 存储回数据库

  • 从数据库中删除