最近这段时间一直在做分布式系统的开发,分布式系统的特点在百度上的解释是高度的内聚性和透明性,内聚性是指每一个数据库分布节点高度自治,有本地的数据库管理系统,透明性是指每一个数据库分布节点对用户的应用来说都是透明的,看不出是本地还是远程。然而分布式系统不仅仅局限在数据库的多地点分布。
现在从事的项目中分布式的实现方式是通过EJB来部署分布式应用程序,这样一来提高了开发的效率,突破了项目开发的很多限制,而且EJB具有很好的拓展性,支持分布式、事务处理、数据存储,具有很高的安全性。
下边结合自己实际在项目中对EJB的使用来介绍一下如何实现EJB中各个bean之间的调用。不同bean之间的调用分为本地调用@local和远程调用@remote,本地调用即自己开发接口,自己使用;而远程调用即去调用别人已经开发好的接口,这也是前边提到的提高开发效率的所在!
一、本地调用
@Stateless(name = "publicChooseCourseBeanImpl")
@TransactionManagement(TransactionManagementType.CONTAINER)
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public class PublicChooseCourseBeanImpl extends
BaseBeanImpl<PublicChooseCourse> implements PublicChooseCourseBean {
@EJB(name = "publicChooseCourseDaoImpl")
private PublicChooseCourseDao publicChooseCourseDao;
public PublicChooseCourseDao getPublicChooseCourseDao() {
return publicChooseCourseDao;
}
public void setPublicChooseCourseDao(
PublicChooseCourseDao publicChooseCourseDao) {
this.publicChooseCourseDao = publicChooseCourseDao;
}
List list = new ArrayList();
list = publicChooseCourseDao.queryinstitutionList(dataBaseName);
}
通过本地的EJB注解,实现对本地的调用。
二、远程调用
<span style="font-family:KaiTi_GB2312;font-size:18px;">@Stateless(name = "publicChooseCourseBeanImpl")
@Remote(PublicChooseCourseBean.class)
@TransactionManagement(TransactionManagementType.CONTAINER)
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public class PublicChooseCourseBeanImpl extends
BaseBeanImpl<PublicChooseCourse> implements PublicChooseCourseBean {
ChooseCourseRoundBeanImpl chooseCourseRoundBeanImpl = new ChooseCourseRoundBeanImpl();
private ChooseCourseRoundBean chooseCourseRoundBean = null;
private ChooseCourseRoundGradeCollegeBean chooseCourseRoundGradeCollegeBean;
private CourseRoundBean courseRoundBean;
public PublicChooseCourseBeanImpl() {
/* 轮次地址 */
String ronndAddress = "itoo-basic-publicchoosecourse-ear/itoo-basic-publicchoosecourse-core-0.0.1-SNAPSHOT/ChooseCourseRoundBeanImpl!com.tgb.itoo.basic.service.ChooseCourseRoundBean";
try {
chooseCourseRoundBean = (ChooseCourseRoundBean) this
.lookupRemoteBean(ronndAddress);
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ChooseCourseRound roundResult = new ChooseCourseRound();
roundResult = chooseCourseRoundBean.saveRound(roundid, beginTime,
endTime, leaststTime, dataBaseName);
}
}</span>
这里的远程调用需要根据远程接口的地址来完成对接口的远程访问,远程地址的获取方式可以通过JBoss Management来获取。
拓展:
EJB通过hibernate实现了数据层的持久化,使开发人员从繁琐的数据持久化解脱出来,而且hibernate在数据查询、更新、数据池、事务处理、实体关系处理方面都做的非常好,之后也会做出细致的分享。
以上便是自己总结的EJB中bean之间的调用关系,初次接触难免会有疏漏之处,还望大家多多指教!