JavaEE5学习笔记05-EJB之会话Bean总结

上传人:我*** 文档编号:135962144 上传时间:2020-06-21 格式:DOC 页数:28 大小:533.50KB
返回 下载 相关 举报
JavaEE5学习笔记05-EJB之会话Bean总结_第1页
第1页 / 共28页
JavaEE5学习笔记05-EJB之会话Bean总结_第2页
第2页 / 共28页
JavaEE5学习笔记05-EJB之会话Bean总结_第3页
第3页 / 共28页
JavaEE5学习笔记05-EJB之会话Bean总结_第4页
第4页 / 共28页
JavaEE5学习笔记05-EJB之会话Bean总结_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《JavaEE5学习笔记05-EJB之会话Bean总结》由会员分享,可在线阅读,更多相关《JavaEE5学习笔记05-EJB之会话Bean总结(28页珍藏版)》请在金锄头文库上搜索。

1、JavaEE5学习笔记05-EJB之会话Bean总结刘岩Email:1. EJB的自我反省精神只要是学Java的人,肯定都听过EJB。是的,在笔者看来,Java从初出茅庐到武林至尊,到被万人唾骂,直到虎落平阳,再到今天sun被Oracle收购。不得不说Java经历了它人生的大起大落,我们这些开发人员也随着他经历着各自的大起大落。对于现在的手机使用者来说Java对于他们来说就是手机游戏(JavaME),对开发人员来说最望而生畏的、最出名的、最受争议的、对哀其不幸也就是EJB了。笔者在学生时代就总听小飞侠(笔者的导师的外号)说着EJB的种种复杂、麻烦和他的种种抱怨。之后极力劝我们学习Spring和

2、Hibernate。从那时起笔者就一直很好奇,为什么那么出名的技术让那么多人都嗤之以鼻?李刚的书里面阐述了中国软件开发人员对于EJB2的心态,其最关键的就是提升了每个人的学习成本、提升了企业实施人员的水平(本质就是会的人工资都超高,企业养不起)、提升了软件的运营成本(一套Weblogic一年好几万美元)、开发时候需要配置的文件相当的多,使得开发人员不胜其烦、很多企业用不到那么严谨的并发、多线程、事务控制等等,仅仅是一个小小的,在线使用人数不是很多的MIS系统而已(不用一把屠龙刀去杀一只小蚊子吧?)。最后.NET框架出现了,配合微软的、超级优秀的VSS,那几乎把很多开发人员都转向了.NET平台。

3、以前笔者刚毕业的时候还总参与3个阵营(有时候还有PHP)的互相指责、诟骂、诋毁、抵触、挑衅现在想想真是:“很傻很天真。”其实技术是为了解决实际需求应用的,哪种技术适合哪种需求,其实是实际情况决定的。比如Java组件虽然是跨越平台,但是搭建应用的时候确实显得比较重量级,不够敏捷。比如.NET组件虽然是很多,但是要做出一个比较商业级应用的,还是要自己手工开发、或者是包装现有组件,而且只能在Windows下面跑,至于全球有多少黑客觊觎windows平台,咱们就不用说了吧。只能说各有各的优势、各有各的适用方向,不能绝对的同而化一,一概而论。呵呵说多了,有点哲学的辩证法了。之后EJB2看到了Spring

4、+ORM(尤其是Hibernate)的优点,sun吸收了它的核心思想,再加上JDK1.5之后的注解特性,到今天就是我们看到的EJB3.0标准。可惜,笔者有点可惜的就是sun公司之前确实损失了一大批的开发用户,而且坚持开源的路线,直到今天被Oracle收购,确实有点可惜。但是EJB3的这种自我检讨的精神、兼收并蓄的气度(用李刚老师的话)着实值得作为我们做人的学习典范。希望它在Oracle的带领下能再创辉煌吧。EJB3.0有以下一些规范1:使用注解Annotation来设置部署描述信息2:只需要提供远程Remote或者本地Local接口就可以3:用JPA,也就是ORM思想取代了原有的实体Bean它

5、和全世界的JavaEE开发者说,它几乎抛弃了以前的标准,这确实需要莫大的勇气。以下基本就是JavaEE5标准最基本的框架2. EJB的分类会话Bean(SessionBean):代表一个客户端调用的接口门面,客户端从获取会话Bean,到调用结束,叫做一次会话。它就好比Spring中的ServiceBean或者DAO。不过它和客户端耦合的仅仅只是一个接口。消息驱动Bean(MessageDrivenBean):实际上就是一个JMS的异步消费者,他也可以向消息目的发消息。这次咱们暂且不讨论消息驱动Bean。会话Bean比Spring中管理的POJO Bean功能更强,毕竟是依赖于商业的应用服务器啊

6、。1):大并发的线程安全2):容器式、声明式事务管理3):JAAS安全权限管理4):SessionBean支持基于SOAP的Web Service,只需要极少的配置即可3. 无状态的会话Bean和helloworld程序无状态的会话Bean,顾名思义,无需维护与客户端之间的会话状态。所以通常该类没有实例变量,就算有也只能保证再一次会话中调用时才有效,调用结束了也就over了。一般开发SessionBean需要遵循以下规范:1):需要一个接口和一个实现类,这个和Spring的思想是一样的。2):接口实现类不能是抽象类,可以是一个类的子类,当然可以在父类中就实现了接口定义的方法。3):建议自己实现

7、无参数构造函数,这样执行效率更好,当然就算没有提供,应用容器会为其自动提供一个无餐构造器。4):方法名不要以ejb开头,有特殊含义5):业务与方法无需再抛出RemoteException下面看代码:Hello接口package ejb.sessionBean;import javax.ejb.Remote;Remotepublic interface Hello public String hello(String name);HelloEAOImpl实现类package ejb.sessionBean.impl;import javax.ejb.Stateless;import ejb.se

8、ssionBean.Hello;Statelesspublic class HelloEAOImpl implements Hello Overridepublic String hello(String name) return 欢迎你: + name;之后打包发布到JBoss中,打包细节稍后会说的。启动JBoss看到它的控制台信息如下:21:45:55,296 INFO SessionSpecContainer Starting jboss.j2ee:jar=helloSessionBean.jar,name=HelloEAOImpl,service=EJB321:45:55,296 IN

9、FO EJBContainer STARTED EJB: ejb.sessionBean.impl.HelloEAOImpl ejbName: HelloEAOImpl21:45:55,311 INFO JndiSessionRegistrarBase Binding the following Entries in Global JNDI:HelloEAOImpl/remote - EJB3.x Default Remote Business InterfaceHelloEAOImpl/remote-ejb.sessionBean.Hello - EJB3.x Remote Business

10、 Interface就证明EJB发布成功了之后还可以登录JBoss控制台界面查看EJB部署情况注:helloSessionBean.jar是打包的名字。下面在客户端建立一个测试代码如下:import java.util.Properties;import javax.naming.Context;import javax.naming.InitialContext;import javax.naming.NamingException;import junit.framework.TestCase;import ejb.sessionBean.Hello;public class TestSe

11、ssionHelloWorld extends TestCase public Context init() String init_factory = org.jnp.interfaces.NamingContextFactory;String serverURL = jnp:/127.0.0.1:1099;Context context = null;Properties properties = new Properties();properties.put(Context.INITIAL_CONTEXT_FACTORY, init_factory);properties.put(Con

12、text.URL_PKG_PREFIXES,org.jboss.naming:org.jnp.interfaces);properties.put(Context.PROVIDER_URL, serverURL);try context = new InitialContext(properties); catch (NamingException e) / TODO Auto-generated catch blocke.printStackTrace();return context;public void test01() throws NamingException Context c

13、ontext = init();Hello hello = (Hello) context.lookup(HelloEAOImpl/remote);System.out.println(hello.hello(剑君十二恨);运行junit单元测试,结果如下欢迎你:剑君十二恨证明客户端调到了远程服务器的Bean(原理是RMI)。导致现在客户端的调用好像就在本地调用似的。下面我们修改客户端代码来验证一下无状态会话Bean的变量是怎么回事。服务端代码修改如下,修改后重新打包部署。package ejb.sessionBean.impl;import java.util.HashMap;import

14、java.util.Map;import javax.ejb.Stateless;import ejb.sessionBean.Hello;Statelesspublic class HelloEAOImpl implements Hello / 访问次数private int num;private Map buyInfo = new HashMap();Overridepublic String hello(String name) return 欢迎你: + name;Overridepublic int countNum() num+;return num;public void addItem(String item) if (buyInfo.containsKey(item) buyInfo.put(item, buyInfo.get(item) + 1); else buyInfo.put(item, 1);System.out.println(Stateless-buyInfo: + buyInfo);测试代码增加几个方法如下public void test02() throws NamingException context = init();Hello hello = (Hello) context.lookup(HelloE

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 事务文书

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号