使用EJB3.O简化EJB开发(三)
|
简化持久化容器管理 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容器并且开发人员必须熟悉最终部署平台才可以执行测试。这对于许多只在一个主要平台开发的企业开发人员来说不是主要问题,但是对于支持多个开发商平台并且要在维护的多个环境中测试EJB的ISV们来说是个大问题。EJB3.0规范承诺将提供在容器外测试的功能,但是这点在这次的规范中遗漏掉了。 结论 虽然还有很多关于打包,装配和重要的API细节没有在这个规范中提及,但是诸多的建议使得EJB3.0规范让企业级Java开发人员看起来是恨有前途的。通过这些无疑是从开发人员到服务供应商都将帮助减少开发的复杂性。下面就要看服务提供商们怎么实现,并使得EJB3.0成为企业级应用一个引人瞩目的选择。 Author Bio 作者自述 Debu Panda是Oracle应用服务开发小组的主要管理者,他的在EJB容器和事务管理上取得过很多成就。他已经有13年的IT产业的经验并在多家杂志和技术出版社刊登过很多著作。
翻译问题: 由于部分英文名词未敢枉自翻译,所以留英文原词在文中 Cleaning up the Dirty Laundry 整理缺陷 low carb Atkins diet metadata annotations 元数据描述 Simplifying Client View for EJBs 简化EJB客户端 dependency injection 依赖型injection setter injection 安放injection ISV Independent software vendor 独立软件供应商 |
- · 使用EJB3.O简化EJB开发(二)
- · 一个经典的JAVA APPLET程序(二)
- · J2EE编程起步(一)
- · j2ee-j2me tips
- · Java中的类反射机制
- · 使用sitemesh建立复合视图 - 2.装饰器 decorator
- · J2EE1.4中的Servlet部署
- · J2EE项目危机【翻译】 -避免这10项J2EE危机来确保你的企业JAVA项目成功
- · J2EE应用中与Oracle数据库的连接
- · J2ME Polish学习心得(一)----Device Optimization
- · J2EE框架标准OpenSource大战拉开序幕!
- · J2EE学习过程
- · J2EE的13种核心技术(二)
- · J2EE项目中开发团队的组建
- · J2EE开发过程中的异常处理
- · 谈谈J2SE中的序列化(三)
- · J2EE初学者需要理解的问题
- · J2EE deployment files(web.xml)
- · J2EE deployment files (ejb-jar.xml)
- · j2sdk 与 Tomcat5配置方法与注意事项
- · J2ME学习笔记(七)
- · 开发J2EE应用应遵循的几点原则
- · [J2EE]项目艰辛笔记
- · J2EE程序中使用oracle数据库LOB字段的总结(elathen)
- · J2EE编程起步(一)
- · 走向J2EE,漫长的道路
- · [J2SE 5.0专题][3]虚拟机
- · J2EE clustering 1---有些老了
- · [J2SE 5.0专题][2.7]注解
- · [J2SE 5.0专题][2.1]泛型
- · J2EE 探险者:持久数据管理,第 2 部分
- · J2EE 探索者:使用 Java Servlets 2.4 来执行过滤
- · J2EE 探险者:持久数据管理,第 2 部分
- · 用J2EE开发N层应用
- · Oracle9iAS Containers for J2EE独立版指南--(部署servlet和JSP的方法)
- · Oracle9iAS Containers for J2EE独立版指南--(简介、安装、启动、关闭和帮助)
- · J2EE项目10大风险
- · J2EE全面介绍(一)
- · J2EE设计模式:CMP到BMP模式(一)
- · Spring Framework标记库初学指南
- · j2ee程序员应该掌握的linux知识
- · J2ME打包--解决移动平台api 问题
- · J2EE平台介绍
- · 应用Rational工具简化基于J2EE项目(五)架构与设计
- · 应用Rational 工具简化基于J2EE的项目 (三)转换到系统模型

