整体感知
概念
EJB是Java当中编写业务逻辑的Bean,是分布式系统中的业务组件。
分类
SessionBean
学习这部分,可结合Spring的Singleton和Prototype。有状态的Bean,即在类内部保存了实例变量,针对不同客户端,需要new出不同的有状态的Bean来保存各自的状态。
对于SessionBean的调用包括本地调用,远程调用和Web Service方式调用。关于前两种调用方式的总结,见【EJB系列】(二)——JBOSS7中EJB的远程调用和本地调用
WebService方式的调用会在后续博文中总结。
Message Driven Bean
关于JMS和MDB的总结,见【EJB系列】(三)——JMS和MDB
发展
版本 | 特点 | 缺点 |
---|---|---|
1.0 | SessionBean,EntityBean | 强制客户机采用远程方式调用EJB |
1.1 | 正式支持实体Bean;引入XML格式的部署描述文件 | |
2.0 | 引入本地接口;引入EJB-QL;MDB | |
2.1 | WebService,有利于异构系统的整合;计时器:按指定时间和固定间隔来调用EJB,(在任务调度中应用);增强EJB-QL | |
3.0 | 抛弃了Entity,引进JPA作为持久化的解决方案;SessionBean不再需要Home接口,只需提供本地或远程接口Annotation | |
3.1 | 无序提供接口,异步方式调用,允许直接将EJB类放到WAR文件 |
与Spring关系
Spring的两大特性就是AOP和DI,在EJB中对AOP思想的实现是拦截器。一下就是通过@Interceptors和@AroundInvoke实现了拦截器功能。
EJB的实现类
@Stateless
@Remote
@Interceptors(UserManagerInterceptor.class)
public class UserManagerBean implements UserManager {
public void addUser(User user) {
System.out.println("user.username="+user.getUsername());
user.setId(9);
}
public String sayHello(String name) {
return "你好,"+name;
}
}
拦截器
public class UserManagerInterceptor {
@AroundInvoke
public Object doit(InvocationContext context) throws Exception{
System.out.println("将要执行方法:"+context.getMethod().getName());
Object obj=context.proceed();
System.out.println(context.getMethod().getName()+"已经被执行");
return obj;
}
}
DI,主要是通过XML或Annotation的配置。
与持久层结合上面,Spring是与Hibernate结合,在JavaEE中有JPA规范,其中包括的知识点和Hibernate类似,这里不做过多说明。
高级
主要是EJB的事务管理。在学习Spring的时候,Spring对Hibernate事务管理进行了封装,在那里我们就学习了事务特性,事务隔离级别,以及传播特性。这部分内容也会在单独的博客中总结。
总结
在学习这部分内容的时候,发现只有JMS这部分内容自己比较生疏,其他内容都可以与Spring和Hibernate中的相关知识进行类比学习。这么多相似的内容,需要进行深入地学习和总结啦!