答案:
简化持久化容器管理 CMP实体bean将成为EJB3.0使得开发人员强制使用的一个主要的检查方式。持久化框架象如OracleAS TopLink, 开源的Hibernate已经成为不像实体bean本质上的复杂和重量级的开发J2EE持久化框架应用的被大家喜爱的方式。 EJB3.0采纳了如TopLink和Hibernate轻量级的持久化模式来简化容器持久化管理,这些听起来更让开发人员们欣喜。让我们简单的浏览一下实体bean的计划,我们将在另外的文章中讨论持久化改进的细节。 实体bean作为POJOs已经改头换面,实体bean将不在需要组件接口。实体bean现在看起来是支持继承和多态的纯粹的对象。 下面的是关于实体bean源代码 @Entity public class Employee{ private Long empNo; private String empName; private Address address; private Hashmap projects = new Hashmap(); private Double salary; @Id(generate=SEQUENCE) public Long getEmpNo() { return empNo; } protected void setEmpNo(Long empNo) { this.empNo = empNo; } public String getEmpName() { return EmpName; } public void setEmpName(String EmpName){ this.EmpName = EmpName; } @Dependent public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; } public Set getProjects() { return projects; } public void setProjects(Set projects) { this.projects = projects; } public Double getSalary() { return salary; } public void setSalary(Double salary) { this.salary = salary; } .... } 如果你仔细看这些代码,你可以发现在现在的实体bean中bean类是一个具体的类而不再是一个抽象类。 EJB QL和实体bean的SQL查询做了多项改进。类似于Hibernate的新的实体管理API和简化版的TopLink的会话API被建议用来处理实体bean的操作,也就是实体bean的创建,释放,查找。 我们将在深入的文章中进一步对建议CMP实体bean的细节做更多的验证。 简化EJB客户端 即使应用中EJB是序列化的,使用EJB也就是寻找和调用也是非常复杂的。J2EE 1.4 和 EJB 3.0规范致力于简化EJB客户端。 如果目前你希望使用EJB你必须在部署描述中定义EJB引用或者EJB本地引用,寻找到EJB然后调用。如果我们希望调用HelloWorld 的EJB,你可以按照下面的简单方法调用EJB使用已存在的实现。 如下在部署描述中找到EJB指示的定义 <ejb-ref> <ejb-ref-name>HelloWorldEJB</ejb-ref-name> <ejb-ref-type>Session</ejb-ref-type> <home>hello.HelloWorldHome</home> <remote> hello.HelloWorld</remote> </ejb-ref> 然后按照如下方法寻找EJB.你需要明确处理EJB查找和建立一个bean实例时的异常。 try { Context context = new InitialContext(); HelloWorldHome helloHome = (HelloWorld)PortableRemoteObject.narrow(context.lookup ("java:comp/env/ejb/HelloWorldEJB"), HelloWorldHome.class); HelloWorld hello = helloHome.create(); .... } catch(RemoteException e) { System.err.println("System/communication error: " + e.getMessage()); } catch(NamingException e) { System.err.println("Communication error: " + e.getMessage()); } catch(CreateException e) { System.err.println("Error creating EJB instance: " + e.getMessage()); } 如一个环境变量的变化一样,EJB3.0建议使用安放injection的方法查找和调用EJB. 下面我们使用安放injection的方法在另一个EJB查找HelloWorldEJB。 @Inject private void setSessionContext(SessionContext ctx) { this.ctx = ctx } ... myHello = (HelloWorld)ctx.lookup("java:comp/env/ejb/HelloWorldEJB"); 如果你仔细查看上面的代码,它依赖的injection使用@Injectset来的指定对SessionContext方法的annotations。injection 方法将可以在业务方法被EJB调用前被容器调用来设定EJBContext。 另一个injected 的HelloWorld会话bean的直接的范例可以简化为使用 @EJB public HelloWorld myHello,这将使得myHello被HelloWorld bean的实例injected 。 你可以使用依赖的injection来查询任何类型的环境和资源参考如DataSource, JMS, Mail, Web Service等等。 容器外部测试可行性 一个现在EJB开发者所关注的不仅仅是EJB开发的复杂,也包括了测试的可怕之处。开发和测试EJB必须需要一个EJB容器并且开发人员必须熟悉最终部署平台才可以执行测 上一个:J2EE的13种核心技术(一) 更多图片编程知识:
访问www.zzzyk.com 试试 CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络, |