EJB 3.0 和 EJB 3.1 部署概述
了解有关 Enterprise JavaBeans (EJB) 3.0 和 3.1 部署模型(包括即时 (JIT) 部署)的信息。
所有 Java™ Enterprise Edition (Java EE) 应用程序服务器产品都有某种形式的 EJB 部署阶段,在该阶段中,将定制应用程序以在应用程序服务器的该特定实现中运行。通常情况下,这是通过特定于应用程序服务器的部署工具来实现的,该部署工具生成代码以将 EJB 接口和实现代码桥接至应用程序服务器的 EJB 容器实现。某些应用程序服务器产品的部署工具会更改您的应用程序类的字节码,而不是生成代码,但最终结果是类似的。
应用程序服务器通过生成封装 EJB 实现类的代码并将这些类连接到应用程序服务器的 EJB 容器来桥接 EJB 接口及其实现。这使 EJB 容器能主管企业 Bean 并向它们提供服务。如果一个或多个企业 Bean 定义了远程接口,那么应用程序服务器将生成其他代码以提供远程功能。
有关封装 EJB 模块的更多信息,请参阅涵盖 EJB 3.x 模块打包概述的主题。
EJBDeploy 工具
以前,由 WebSphere® Application Server 附带并与 WebSphere 产品的开发工具一并封装的 EJBDeploy 工具执行应用程序服务器产品中的 EJB 部署。
EJBDeploy 工具自己检查企业 Bean 的外部接口,将包装器代码生成为 .java 文件,然后使用 javac 编译器来编译该代码以生成与应用程序代码一起封装在 EJB 模块中的 .class 文件。EJBDeploy 工具还对应用程序中的远程 EJB接口运行 rmic 工具,生成其他存根和连结类文件以与因特网 ORB 间协议上的远程方法调用 (RMI-IIOP) 对象请求代理 (ORB) 进行交互,从而提供远程对象支持。
对于版本低于 EJB 3.0 的模块,可以在应用程序服务器上安装应用程序时或从命令行工具或开发工具安装应用程序之前运行 EJBDeploy 工具。
即时 (JIT) 部署
应用程序服务器中的 EJB 3.0 支持引入了名为 JIT 部署的新功能。
使用 JIT 部署,EJB 容器可在应用程序运行时,动态生成包装器、存根和内存中连接类。此外,Web 容器和应用程序客户机容器也会动态生成远程 EJB 调用所需的存根类。
这实际上意味着您不需要通过 EJBDeploy 工具处理 EJB 3.0 或 3.1 模块、调用 EJB 3.0 或 3.1 Bean 的 Web 模块或调用 EJB 3.0 或 3.1 Bean 的客户机模块就可在应用程序服务器中运行这些模块。
createEJBStubs 工具
大多数情况下,即时部署功能都可动态生成调用远程 EJB 接口时所需的 RMI-IIOP 存根类。在有些实例中无法动态生成这些存根类。对于未在 EJB 3.x 启用的 Web 容器、EJB 容器或客户机容器中运行的 EJB 3.0 或 3.1 客户机,您必须使用 createEJBStubs 工具生成存根类,并确保生成的存根在客户机环境的类路径中可用。通常,通过将生成的存根复制到客户机的业务接口类所在的位置来实现此目的。
- Java Standard Edition (SE)“裸”客户机,其中 Java SE Java 虚拟机 (JVM) 是客户机环境。
- 未应用 Feature Pack for EJB 3.0 的 V7 之前的应用程序服务器环境中的容器。
- 不是 WebSphere Application Server 环境的环境。
互操作性
如果在不支持 EJB 3.0 或 3.1 的应用程序服务器版本上运行的 WebSphere 增值产品或其他产品尝试远程调用其他服务器(运行支持 EJB 3.0 或 3.1 的应用程序服务器版本)上符合 EJB 3.x 的企业 Bean 上的方法,那么会发生意外结果。如果这些产品尝试通过企业 Bean 的 EJB 3.x 远程业务接口调用方法,它们可能会遇到在 EJB 3.0 中引入的异常,这些异常将推送回不符合 EJB 3.x 的环境中。
对于包含增值产品组合(既包含符合 EJB 3.x 的产品又包含不符合应用程序服务器的实例的产品)的环境中的管理员,此情况可能也是个问题。
- javax.ejb.ConcurrentAccessException
- javax.ejb.EJBAccessException
- javax.ejb.EJBTransactionRequiredException
- javax.ejb.EJBTransactionRolledbackException
- javax.ejb.NoSuchEJBException
请参阅 EJB 模块部署步骤来解决潜在的互操作性问题。
EJB 2.x 模块
在 Application Server 产品中部署 EJB 之前,已转换为 EJB 3.0 或 EJB 3.1 模块的 EJB 2.x 模块应除去 WebSphere Application Server 生成的所有文件(包括存根和连结类)。