1、EJB模块
一个EJB模块通常被包装和部署为EJB Java档案文件和一个带有jar扩展名的Java 档案文件。这是ejb最小的可部署和可使用单位。一个标准的EJB模块包括:
- Java类文件,包含enterprise bean定义及其本地和远程接口;
- EJB代码中所依赖的Java类文件。这里是指在J2EE平台之外的代码文件;
- EJB部署描述文件,其提供了应用程序中用于enterprise bean的结构和整合信息。通常来说整合信息是可选的,并且只包含在整合应用程序中。
应该说明的是,ear文件与标准的jar文件存在显著的区别:ear文件包含一个部署描述文件,它包含了一个或多个enterprise bean的主要形容信息。
EJB Java档案文件除了可以在服务器端使用之外,一个EJB Java档案文件开发人员还可以开发包含用户程序需要访问的EJB类文件,这些类大多数包含在EJB Java档案文件。应该注意的是,服务器端的组件实现类文件通常不会包含在客户端的Java档案文件。在EJB Java档案文件中或client Java档案文件中的类可以直接在类文件中引入,或在外部引用中声明。
2、EJB模块打包准则
- 如何将组件打包成EJB模块
一个典型的商业应用通常包括多个ejb,其中一些ejb可能是商用组件,或是其他的第三方库函数;而应用集成人员可能从以下方法中选择:
1) 将应用程序中的每个ejb包装在自己的EJB模块中。在这种方法里,每个ejb具有自己的部署描述文件并与其依赖的类文件一起打包在ejb模块中。这个方法的好处在于它可以最大化每个ejb的可重用性,并留给应用集成人员很大的自由在ejb模块中选择以建立J2EE应用程序。如果开发人员的ejb具有很强的可重用性,这种方法是值得推荐的。在这种情况下,应用集成人员可以准确地重复利用他们希望重复利用的那些ejb。
2)在同一个EJB模块里包装应用程序中所有ejb。在这种方法中,所有ejb和它们的依赖类被一起包装在一个EJB模块里。这种方法较其他方法实施起来是最简单的。
3)将所有与一个应用程序有关系的ejb打包在一个EJB模块里。在这种方法中,所有的ejb将根据它们功能上的特性分类并放置在同一个ejb模块中。
在以上几种方法中,第三种选择模块性最好,并被许多J2EE应用程序采用。这主要是因为这种方法可以取得可重用性和简单性的平衡。同时它也促进了第三方组件的黑箱操作,这对于包含很多数字签名的组件的应用系统是十分重要的。另外这种方法在J2EE服务器需要部署在不同Java虚拟机上的各个ejb模块时尤其有效,它可以将相关联的ejb编组在一起,同时允许远程调用。
- JNDI命名空间内的本地接口
大多数EJB实现程序都是通过Java命名和目录接口(Java naming and directory interface)来定义ejb本地接口的,一个部署描述文件通常会将组建的ejb命名编入进其JNDI命名中。不过由于通常没有对本地接口的远程访问,本地接口是无需在全局的JNDI命名空间内公布的。在组件通过JNDI寻找本地接口时,ejb容器并不需要通过JNDI命名空间到处提供本地bean 的实现,相反地,ejb容器需要实现所有本地接口的JNDI查找,并根据请求返回相应的对象。
- EJB模块部署建议
ejb类文件通常会有没在bean本地和组件接口声明的公共方法。部署描述文件不应该为这些方法制定事务或安全属性。由于ejb容器只会作用于公共组件或本地接口的方法调用,所以它可以为这些方法提供事务支持或安全限制。
在某些时候,容器管理的实体bean的主键类可能对于组件提供商来说是未定义或未知的,这时,开发人员可以将实体bean的部署描述文件中的主键设置为java.lang.Object。
一些实体bean可能作用于数据库中的商业数据,包括在容器管理的持久性下管理和更新这些数据。开发人员需要认识到如果取消这些bean的部署,那么它们所管理的数据表格也将会被删掉。同时,相同的组件也可能在一个应用程序的多个地方被应用,而当这些bean使用容器管理的持久性时,开发人员需要考虑是否将该组件的所有实例存储在一个表中或多个表中,并适当地配置其持久性行为。
