开发企业 Bean
您通常将两种企业 Bean 开发方案中的一种与产品配合使用。第一个是在命令行上使用 Ant、Make、Maven 或相似的工具。第二个是基于 IDE 的开发和构建环境。本文中的步骤重点说明在不使用 IDE 的情况下进行开发。
开始之前
- 在开发具有容器管理的持久性 (CMP) 的实体 Bean 之前,请阅读“并行控制”主题。
- 在开发具有 CMP 的实体 Bean 之前,请阅读“并行控制”主题。请记住,EJB 3.x 模块不支持实体 Bean。您必须继续将实体 Bean 放在 EJB 2.x 级别的模块中。
关于此任务
- 可使用其中一种可用的 IDE 工具,这些工具可自动生成企业 Bean 代码的重要部分并包含打包和测试企业 Bean 的集成工具。Rational® Application Developer
产品是建议的 IDE。
将 install_root/dev/JavaEE/j2ee.jar 添加到 IDE 项目构建路径中,以解决对新的 EJB 3.x API 类的编译依赖性问题。将此 JAR 文件添加到项目构建路径后,代码辅助功能即生效。如果您定义了服务器(请参阅“J2EE 透视图”),请将该服务器指向产品安装目录。在 Rational Application Developer 中创建与 Java EE 相关的项目时,此项目将 install_root/dev/JavaEE/j2ee.jar 自动添加至项目构建路径。
- 如果您已确定开发没有 IDE 的企业 Bean,您至少需要一个 ASCII 文本编辑器。另外,也可以使用不支持企业 Bean 开发的
Java 开发工具。然后,您可以使用 Java 软件开发包 (SDK)
中提供的工具并在此产品中组装、测试和部署 Bean。
与组装工具类似,标准的 Java EE 命令行构建环境需要进行一些更改才能使用 EJB 3.x 模块。与先前的 Java EE 应用程序开发模式一样,编译器类路径上 install_root/dev/JavaEE 目录中必须包括 j2ee.jar 文件。在 install_root/samples/src/TechSamp 目录中可找到有关使用 Ant 的命令行构建环境的示例。
下列步骤主要支持第二种方法:没有 IDE 的开发。
过程
示例:使用只读实体 Bean
此使用方案和示例显示了如何编写使用只读实体 Bean 的 Enterprise JavaBeans (EJB) 应用程序。
- 使用方案
客户有一个包含分类定价和运费信息的数据库,每天在不迟于当地时间晚上 10:00 点钟(按 24 小时计就是晚上 22:00 点钟)对此数据库进行更新。他们想编写对此数据具有只读访问权的 EJB 应用程序。即,此应用程序从不更新定价数据库。通过某个其他应用程序执行更新。
- 示例
客户的实体 Bean 本地接口可能是:
public interface ItemCatalogData extends EJBLocalObject { public int getItemPrice(); public int getShippingCost(int destinationCode); }
调用此 EntityBean 来计算包括装运在内总成本的无状态 SessionBean 方法(假设它是 TxRequired),其中的代码类似于:
..... // Some transactional steps occur prior to this point, such as removing the item from // inventory, etc. // Now obtain the price of this item and start to calculate the total cost to the purchaser ItemCatalogData theItemData = (ItemCatalogData) ItemCatalogDataHome.findByPrimaryKey(theCatalogNumber); int totalcost = theItemData.getItemPrice(); // ... some other processing, etc. in the interim // ... // ... // Add the shipping costs totalcost = totalcost + theItemData.getShippingCost(theDestinationPostalCode);
应用程序汇编期间,客户按如下所示设置此 Bean 的 EJB 高速缓存参数:- ActivateAt = ONCE
- LoadAt = DAILY
- ReloadInterval = 2200
不推荐使用的功能部件: 建议不要使用 IBM 部署描述符扩展的 reloadInterval 和 reloadingEnabled 属性,这些扩展包括 WAR 文件扩展 (WEB-INF/ibm-web-ext.xmi) 和应用程序扩展 (META-INF/ibm-application-ext.xmi)。depfeat
每晚 22:00 时之后第一次调用 getItemPrice() 方法时 EJB 容器会从数据库重新装入定价信息。如果在调用 getItemPrice() 和 getShippingCost() 之间时间正好到达 22:00 时,那么 getShippingCost() 方法还是会返回 22:00 时可能已发生的对数据库作出的任何更改之前的值,这是因为此事务中的第一次方法调用发生在 22:00 之前。这样,商品价格和装运成本保持彼此同步地使用。
下一步做什么
组装一个或多个 EJB 模块中的 Bean。请参阅“组装 EJB 模块”主题,或者,如果您正在使用 EJB 3.x Bean,请参阅“组装 EJB 3.x 模块”主题。