如果部署描述符声明bean使用容器管理的持久性,则不用ejbLoad()和ejbStore()来访问
数据库。容器会把数据从数据库中导入到bean中,然后调用bean的ejbLoad()方法来完成从数据库中接收数据。同样地,容器调用bean的ejbStore()方法来完成把数据回写到数据库中。这些方法实际 上没有执行任何数据库操作。当开发商用复杂的工具来提供容器管理持久性时,如自动产生能进行对象--关系映射的实体bean类,规范规定了厂商必须提供的容器管理实体持久性的最小需求集。部署描述符可以指定bean的一个public域来实现与数据库列简单映射。容器使用部署描述符读出bean的这个public域并写到相应的列,或从数据库列中读出数据写到public域中。容器管理的持久性对
EJB开发者来说是非常好的服务,且不需对象--关系影射等其他复杂的机制,开发者会发现它比自管理的持久性更有效率。
部署描述符
区分EJB开发的角色
EJB开发中两个主要的角色是bean开发者和bean部署者。有很多属性开发者不能预知,如数据库的网络地址,使用的数据库驱动程序等等。部署描述符作为由开发定义的特性表,由部署者添入正确的值。部署描述符有标准的格式,在开发和部署环境中是可移植的,甚至在不同EJB平台间也是可移植的。 Enterprise bean的行为控制除了为开发和部署的协同提供一个标准的属性单,部署描述符也应包含bean应如何执行有关事务和
安全的细节信息。一些如访问控制链(ACL)等属性,也应该由部署者来调整以保证适当的用户能在运行时使用bean.其它属性,如事务信息,有可能完全由开发者指定,因为一般由开发者创建数据库访问代码,并熟知bean的方法应如何运行事务。
定义部署描述符
部署描述符是一个标准的
Java类。创建一个实例,导入数据,然后串行化。这个串行化的部署描述符放在一个jar文件中并和enterprise bean类一起送到部署环境。部署者读取这个串行化的部署描述符,可能修改一些属性值,然后使用这个修改后的部署描述符来安装enterprise bean.
下面是部署描述符的一部分内容。它是两个其它的部署描述符类的超类。实际上超类是描述这个bean的描述符。
Javax.ejb.deployment.DeploymentDescriptor
?bean home name
?bean class name
?home interface class name
?remote interface class name
?environment properties
?control descriptors
?access control list
DeploymentDescriptor有两个子类:
javax.ejb.deployment.SessionDescriptor
?state management type
?session timeout
javax.ejb.deployment.EntityDescriptor
?list of ocntainer-managed fields
?primary key class name
描述符为实体bean和每个方法定义了事务和安全属性。这些对象的一个数组在
DeploymentDescriptor中指定。
javax.ejb.deployment.ControlDescriptor
?transaction isolation level
?Method object to which this descriptor applies
?run-as mode(for odentity mapping)
?run-as identity(for identity mapping)
?transaction attribute
部署一个enterprise bean时,分配对应的描述符,然后初始化,串行化,再将其与enterprise bean类一起放入到一个jar文件中。不同厂商在定义部署描述符时可能有不同的方式。例如,一个厂商可能使用文本方式,而另一厂商可能提供图形工具。但最后结果的部署描述符是一个标准的格式,并且在不同平台间是可移植的。
EJB Jar文件
为了包装一个enterprise bean,bean的类,接口和串行化的部署描述符放在一个jar文件中。这个jar文件必须有一个manifest文件的入口以声明一个enterprise bean的部署描述符。
9
7
3
1
2
3
4
5
6
7
8
9
10
4
8
: