EJB QL 示例应用程序

目录


示例概述 应用程序

EJB QL (Enterprise JavaBeans Query Language) 是一种查询语言,用于浏览企业 bean 网络以及通过容器管理持久性定义的独立对象。EJB QL 在 EJB 2.0 规范中引入。EJB QL 使用容器管理持久性定义查找器方法,并可以在容器和持久性管理器间移植。EJB QL 使用两种类型的查找器方法:

  • 在实体 bean 的主接口中定义,并返回实体对象的查找器方法
  • 选择方法,这些方法未暴露给客户机,但是由 Bean 提供程序用于选择由持久性管理器维护的持续值,或者选择与定义该查询的实体 bean 相关联的实体对象。

根据 EJB 2.0 规范,EJB QL 用于使用容器管理持久性为实体 bean 定义查找器查询。EJB QL 允许 Bean 提供程序以可移植的方式指定查找器方法。它是一种规范语言,可以编译由持久性管理器使用的持续性存储的目标语言,如 SQL。 这就使得查找器查询的执行责任转移给为持久性存储(例如,RDBMS)提供的原生语言工具,而不用要求查找器查询直接在持久性管理器的实体 bean 状态表示上运行。因此,查找器方法既可移植又可优化。

Oracle 在它的 OC4J 容器中提供了对 EJB QL 规范的支持。从 OC4J 9.0.4 起,Oracle 还在 EJB QL 内增加了对 java.util.Date、java.sql.Date、java.sql.Time 和 java.sql.TimeStamp 对象的支持。 这些可以在 EJB QL 二进制表达式中使用,例如等式。

此示例应用程序演示了在 OC4J 中使用 EJB QL 的特性和方法。此示例应用程序演示了各种 EJB QL 查询,包括从基本的查询到更高级的使用 Date 对象的查询。它还演示了 ejbSelect 方法在 EJB QL 中的用法。
 

带有屏幕截图的用户附注

返回页首

此示例应用程序基于信用卡帐户情景。通过此应用程序,用户能够创建一个帐户并指定该帐户的信贷限额。本页的屏幕截图如下所示


此事务在映射到相关数据库记录的 CMP 实体 Bean 的帮助下发生。

在创建了帐户之后,用户可以使用不同的参数以多种方法查询所创建的帐户。本页的屏幕截图如下所示


下面描述了各种不同的搜索机制:

  • 显示所有帐户。此搜索使用非常基本的 EJB QL。它查询所有的实体 bean 并获取帐户信息,然后显示给用户。

下面是在 ejb-jar.xml 中指定的完成此任务的 EJB-QL 查询:

<query>
<description>This query retrieves all the accounts</description>
<query-method>
<method-name>findByAllAccounts</method-name>
</query-method>
<ejb-ql>select distinct object(ua) from UserAccount ua</ejb-ql>
</query>

  • 按信贷限额搜索帐户。此搜索使用了一个带有 BETWEEN 子句的 EJB QL。在此,用户传递较低的和较高的信贷限额。然后 EJB QL 将检索信贷限额在两个值之间的所有帐户。

下面是在 ejb-jar.xml 中指定的完成此任务的 EJB-QL 查询:

<query>
<description>This query retrieves all the accounts that are present within the entered Credit Limit</description>
<query-method>
<method-name>findByMinMaxCreditLimit</method-name>
<method-params>
<method-param>java.lang.Long</method-param>
<method-param>java.lang.Long</method-param>
</method-params>
</query-method>
<ejb-ql>select distinct object(ua) from UserAccount ua where ua.creditlimit between ?1 and ?2</ejb-ql>
</query>

  • 按日期搜索帐户。此搜索演示了日期对象在 EJB QL 中的用法。用户按照格式 DD-MON-YYYY 输入任意日期,此 EJB QL 将检索在该日期创建的所有帐户。

下面是在 ejb-jar.xml 中指定的完成此任务的 EJB-QL 查询:

<query>
<description>This finds the Account by its Created Date</description>
<query-method>
<method-name>findByCreatedDate</method-name>
<method-params>
<method-param>java.util.Date</method-param>
</method-params>
</query-method>
<ejb-ql>select distinct object(ua) from UserAccount ua where ua.createddate = ?1</ejb-ql>
</query>

  • 搜索一个黄金客户。这里,用户可以搜索所有具有最高信贷限额的用户。此搜索演示了 ejbSelect 方法在后处理中的用法。ejbSelect 方法先获取所有帐户,然后处理它们以选出最重要的帐户。返回的帐户数量由用户指定。

下面是在 ejb-jar.xml 中指定的完成此任务的 EJB-QL 查询:

<query>
<description>This query selects all the accounts.Post Processing is done on here before displaying to the user</description>
<query-method>
<method-name>ejbSelectByTopAccounts</method-name>
</query-method>
<ejb-ql>select distinct object(ua) from UserAccount ua</ejb-ql>
</query> <query>

  • 获取某个客户的信贷限额。通过此功能,用户可以检索任意客户的信贷限额。用户输入他/她希望查询信贷限额的帐户号码。此搜索还要使用 ejbSelect 方法,但在这里 ejbSelect 方法不是像通常那样检索一个帐户的集合,而是直接检索指定帐户的信用限额字段。这不可能通过平常的 ejbFind(查找器方法)来实现。

下面是在 ejb-jar.xml 中指定的完成此任务的 EJB-QL 查询:

<query>
<description>This query retrieves the Credit Limit for the specified Account</description>
<query-method>
<method-name>ejbSelectCreditLimit</method-name>
<method-params>
<method-param>java.lang.Long</method-param>
</method-params>
</query-method>
<ejb-ql>select ua.creditlimit from UserAccount ua where ua.accountnumber = ?1</ejb-ql>
</query>

安装与配置

返回页首

请参考 Install.html 以获取有关解压缩文件、成功部署和运行应用程序的逐步指导。


示例文件的说明

返回页首

下面展示了可交付的 ejbqlsample.jar 文件的目录结构。

目录 文件 说明
Ejbql/docs Readme.html 本文件。
Install.html 此文件包含安装和部署示例应用程序所需的指导。
Ejbql/docs/images CreateAccounts.gif
SearcAccounts.gif
在本文件中使用的屏幕截图文件。
Ejbql/public_html 所有 JSP 文件
这些 JSP 文件为示例应用程序创建视图。
Ejbql/public_html/WEB-INF web.xml 此 XML 文件是按照 J2EE 标准定义的。此 XML 定义应用程序中的索引 JSP 文件和 EJB 引用。
Ejbql/sql
Install.sql 此 SQL 文件创建示例应用程序所需的表 (UserAccount) 和序列。
Ejbql/src/META-INF
ejb-jar.xml

此 XML 文件是按照 J2EE 标准定义的。此 XML 文件定义应用程序中使用的所有 EJB QL。
orion-ejb-jar.xml
此 XML 文件包含特定于 OC4J 的实体 Bean 映射信息。
data-sources.xml 此 XML 文件包含数据库连接信息。
application.xml 此 XML 文件通过定义应用程序中使用的 EJB jar 文件模块和 Web war 文件模块驱动该应用程序。
orion-application.xml 此 XML 文件用于为 OC4J 指定 data-sources.xml 的位置。
Ejbql/src/oracle/otnsamples/ejbql
所有 Java 文件 这些 java 文件构成数据库表 UserAccount 上的 EJB(CMP 实体 Bean)。
Ejbql/src/oracle/otnsamples/ejbql/classes
InvokeEJB.java
此 Java 类具有访问 EJB 的方法。从客户端发出的每条请求都要通过此类,该类再查询 EJB 并返回显示给用户的值。


寄送此页面
Printer View 打印机视图