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 并返回显示给用户的值。
|
|