分享
 
 
 

使用EJB3.O简化EJB开发(三)

王朝java/jsp·作者佚名  2006-01-31
窄屏简体版  字體: |||超大  

简化持久化容器管理

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 独立软件供应商

作者Blog:http://blog.csdn.net/yiboo/

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有