EJB讲解-1

背景

众所周知EJB是javaEE的核心,EJB为什么是javaEE的核心 ,并且为什么EJB帮助开发人员减少了很大部分的麻烦?

  • why did EJB have bean?
  • 什么是有状态会话bean?
  • 什么是无状态会话bean?
  • 有状态会话bean于无状态会话bean的区别?
  • 有状态于无状态会话bean的有缺点?
  • 代码体现有状态会话bean于无状态会话bean?
  • 什么是单利会话bean?
  • 什么是消息驱动bean
  • 消息驱动bean于会话bean的区别?
  • 什么是事物?事物在那用?事物是上下文

体悟

写博客的目的是为了分享,然后让别人看懂自己写的博客,并不是一味的发博客,一大堆的理论知识,相信我,看我的博客足够让你与生活关联


  • why did EJB have bean?
    1Ejb是基于组件的分布式应用程序开发和部署
    2EJB通常包括业务逻辑或者服务信息,所以会包含很多东西,所以我们使用xml或者是注解的方式Bean实例的运行实在容器中进行管理的,在任何情况下EJB都提供了所有企业应用程序需要的管道

举例:以前我们没有水龙头的时候,我们需要从井拉水非常的麻烦,从上到下所有的工作都是我们来做,非常麻烦,但是我们有了水龙头和管道的时候发现超级简单!我只需要那个盆接水就可以了,其实EJB里我们只需要管他的业务逻辑就可以了,不需要管他其他的辅助功能,容器统统帮助我们完成了,bean在里面就是我们使用注解来实现的,如果不明天注解可以看我前言的博客


  • 什么是有状态会话bean?

有状态会话bean是一个特定的客户端会话状态,生命状态会话bean使用@stateful,这个表示公共的方法,如果是单独的一个接口使用的是@remote,如果加上@remote则表示可以进行远程调用,远程视图,如果没有则默认为@local注解,@postAcivate生命周期回调方法在bean钝化之前被调用,用于清理资源,
相反的是@PostActivate回调方法被调用之前恢复资源

什么是钝化:有状态会话bean的实例保存有客户端状态,当容器需要使用该实例为其他客户端服务的时候,她会吧这个状态保存在硬盘上,而保存的时候容器会按照LRU(最近最少被使用)的算法将bean的以前的状态钝化


举例:举一个购物车的例子,如果当我们买东西的时候,需要加入购物车,而这个时候会有很多人都在加入购物车,当我们不需要的时候我们可以删除,只有这个时候购物车才会被清空,体现出了有状态bean可以保留用户的状态信息,直到用户做了相应的操作!


  • 有状态会话bean代码?
public interface ShoppingCart{
  public void add();
  public void remove();
}

@Stateful
public class Shopping implements ShoppingCart{
   public void add(){
     XXX
   }
}

  • 什么是无状态会话bean?

无状态会话bean不包含特定客户端的所有会话状态,他的所有实例都是等价,所以容器诉客户端可以使用任何的实例,由于无状态会话bean不包含任何状态,所以不需要被钝化, 使用@Stateless定义无状态bean,可以通过@EJB来访问无状态会话bean这种方式属于无接口视图,bean只能被同一个客户端本地访问,如果想要进行远程访问必须使用@Remote注解一个独立的业务接口,@PostConstruct和@PreDestroy的生命周期回调支持无状态会话bean,由于无状态的bean不存储任何状态,容器可以使用实例池


@PostConstruct表示bean的第一个业务方法被调用之前调用,这种方式需要bean的所有资源都需要被初始化
@PreDestroy生命周期在实例被容器删除之间被调用,这个时候@PostConstruct释放这个期间所有获得的资源


举栗子:对于有状态和无状态我们可以理解为我们C#代码中的public喝private,一个共有一个私有,而我们的共有的就是我们的无状态bean,既然是共有肯定不可以保留用户的状态,实例池就相当于一个游泳池每个人都可以游泳


  • 有状态会话bean无状态会话bean区别?

有状态会话bean会保存 用户的信息和状态,但是如果用户消失则bean的生命周期也就结束, 无状态会话bean,一旦某个用户进入会话池,则每个用户都会公用,即使是用户消除,bean的生命周期也不会结束,他依然在会话池中,让其他用户进行调用,,这就是为什么叫做无状态会话bean,既没有用户也没有接触生命周期或状态,对于有状态的会话bean,也许每一次使用的时候都上一次使用的,但是对于无状态的会话bean,也许就不是,因为每次从实例池中取出的都是不一样的,所以不会保存信息。


  • 优缺点?

共享实例体现了有状态会话bean的缺点解决方案,如果状态bean一直都在创建新的实例并且爆粗,那么服务器性能会受影响,所以我们会限制住一定的数量,不创建实例还对用于响应


  • 何时用?

1.对于经常访问懂得我们可以使用有状态bean
2.对于不经常访问的我们使用无状态bean


  • 什么是单利会话bean?

每个应用程序实例化一次,使用@singleton定义一个简单的单利会话bean,初始化所有启动的单利使用@PostConstruct,单利bean支持PostConstruct和perDestroy生命周期回调方法,单利bean支持并发访问读可以并发,但是写必须等一次调用处理完成之后才可以再次被调用,@perDestroy表示实例正处于被容器移除的过程


举栗子:对于单利模式大家应该很熟悉,于单利会话于单利模式非常的相似,首先我们都是共享,单利会话只实例化一次,而我们的单利模式也是只实例化一次,所以大家会发现他们很相似,他的出发点都是为了节省空间,实习共享技术


- 什么是消息驱动bean

他是容器管理的bean,用于异步处理消息,他可以实现任何类型的消息,最常用的是处理JMS,这些bean是无状态的,等到jms消息到达目的的时候由容器调用,会话bean于消息驱动bean,会话bean可以同步接受jms消息,而消息驱动bean可以异步接受消息,单一的消息驱动bean可以同时处理来自多个客户端信息,就像无状态会话bean,容器可以使用实例池,并分配足够多的实例来处理给定时间内一定数量的消息


举个栗子:其实就是管理我们消息的bean,说道消息肯定是基于我们Jms规范的,并且还是无状态的,因为我们要接受里来自不同客户端发送的消息,你可以理解为我们的电话,他就是管理通信消息,并且可以远程进行通信


  • 消息驱动bean于会话bean的区别?

消息bean只管理与消息,实习jms的接口,不没有会话状态,所以的bean实例都是相等的,而会话bean则是包括有状态于无状态,所以他们的本质就是不同的


  • 什么是事物?事物在那用?事物是上下文

什么是持久化: 在程序退出后信息可以长期保存的一种数据存储技术。
我们这里说的事物不是针对数据库的事物,而是指容器管理的事物和bean管理的事物,如果是使用容器管理事物,那么肯定我们的不需要做太多的操作因为容器都帮助我们干完了,事物的上下文值得是于事物有关的方法



EJB讲解-1_第1张图片

  • **总结

还有很多需要前进的地方!加油!下一篇会根据代码里来具体的讲解EJB事物

你可能感兴趣的:(java,ee,ejb,bean)