传智播客ejb学习,EJB中的三种bean及开发一个无状态会话bean

    今天继续学习ejb3.0,黎老师提到,ejb发展已经有十年了,现在国内ejb还不是很流行,学习它可能对刚开始找工作的人没什么用,不过可以了解他的原理,学习他的编程思想,更好的理解前面所学的内容。开拓知识面,站在一个更高的台阶去思考问题,ejb的发展前景会越来越好,他所占的市场份额是由分布式的应用在软件开发中的使用所决定的。黎老师主要讲了在jboss服务器上使用ejb3.0。
    EJB中的三种bean
  1.会话bean(session bean)
   负责与客户端交互,是编写业务逻辑的地方,在会话bean中可以通过jdbc直接操作数据库,但大多数情况下都是通过实体bean来完成对数据库的操作.
2.实体bean(entity bean)
   它实际上属于java持久化规范(简称JPA)里的技术, JPA的出现主要是为了简化现有的持久化开发工作和整合ORM技术(使用jpa开发的应用,在Hibernate、TopLink上都可以使用),结束现在Hibernate、TopLink等ORM框架各自为营的局面。
3.消息驱动bean(message-driven bean)
   它是专门用于异步处理java消息的组件.具有处理大量并发消息的能力.

   会话bean
无状态会话bean
平常,我们使用最多的是无状态bean,因为它的bean实例可供多个用户使用,所以它的性能比有状态bean高.正因为一个bean实例被多个用户使用.那么,前一个用户设置的值有可能被后一个用户所修改,所以它无法正确保存某个用户设置的值,因此是无状态的.
有状态会话bean
有状态bean平常使用的并不多,因为它的一个bean实例只供一个用户使用,所以性能开销比较大,正因为它的实例只被一个用户使用, 用户为它设置的值是不会被其他用户修改,所以可以正确保存用户设置的值,因此是有状态的.

 开发一个无状态会话bean
1   要面向接口(接口可以是远程接口或本地接口),并编写实现类,把编写的ejb生成jar包导入构建路径D:/jboss-4.2.3.GA/server/default/deploy;
2,编写客户端程序
  Properties props = new Properties();
  props.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
  props.setProperty("java.naming.provider.url", "192.168.0.200:1099");
  try {
   InitialContext ctx = new InitialContext(props);
   HelloWorld helloworld = (HelloWorld) ctx.lookup("HelloWorldBean/remote");
   System.out.println(helloworld.sayHello("佛山"));
  } catch (NamingException e) {
   System.out.println(e.getMessage());
  }
这样就可以调用ejb中的方法了
   Properties可以配置到类路径下的jndi.properties文件中,这样ejb应用程序的上下文初始化就可以使用下面的代码来实现
        InitialContext ctx = new InitialContext();
InitialContext()构造器默认会从java的系统属性的属性信息或者是类路径下面的jndi.proerties文件中得到当前应用程序的上下文信息.
Jboss启动时 ,会向java的系统属性中注入 当前应用程序的上下文信息。

客户端要调用ejb,他是通过jndi去寻找ejb的存根代理对象,这里编写的客户端程序完全可以部署在另外一台计算机上,只需要修改其中是连接的服务器的ip地址和启动jboss时绑定相应IP地址即可,这正是ejb的远程调用特性。
HelloWorld helloworld = (HelloWorld) ctx.lookup(“HelloWorldBean/remote”);   这句返回的helloworld实例对象并不是我们在服务器端编写的HelloWorldBean ,而是一个也实现了HelloWorld接口的代理对象,这个代理对象最终远程调用我们自己编写的HelloWorldBean,
Sysout(helloworld.getclass().getName())可以看到这个代理对象的类名.
  Bean实例的两种管理技术
 1.无状态bean使用实例池来管理,类似于数据库的连接池,原理上是相同的,
一个用户取得了实例池中的一个实例后,这个实例是不能被其他用户使用。
   2.  有状态bean,采用钝化和激活来管理,每个用户每次调用的都是他专属的bean,和Session的原理相似,用户取得bean后,bean会缓存一段时间 (如果默认时间10分钟内不使用就保存到硬盘(钝化),并释放内存,30分钟内不使用就彻底删除,在10分钟和30分钟之间调用bean,就激活(在内存中新建bean对象,然后把硬盘中对象的值还原到新建bean对象中)),用户以后每次调用都是同一个bean.时间可以在jboss中设置。(购物车)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值