ejb一直是一个让我很纠结的技术,虽然ejb作为sun推荐的最佳实践,在sun的J2EE教程中,推荐jsp和servlet作为view层,ejb作为业务逻辑层。

上述就是J2EE教程讲J2EE体系中J2EE的EJB示意图了,讲了EJB的位置,详情可以看:http://docs.oracle.com/javaee/1.4/tutorial/doc/

然而我所接触使用ejb开发的程序员(都是国内),用了ejb,都没什么特别好感,甚至我以前的项目经理说,很多人被sun给欺骗了。

目前ejb已经出到了3.x了,然而国内已经几乎没有使用ejb3.x,有的也是ejb2.x,都是老系统遗留,有的是银行项目,有的是erp项目(都是大型项目)。

之前jboss出名就是因为它支持ejb,并且支持得最好,然而现在随着ejb的使用份额下降,这几年jboss在国内的使用份额也下降了,用tomcat和其他开源服务器多了很多。

我也很少用ejb,在开发中根本不用,除非是以前为了支持一些老系统,才会接触,而且为了应付ejb的,学了ejb3.0,但是遇到的项目全部是 ejb2.x,ejb3.0相比ejb2.0,简单了很多,不想ejb2.0那么繁琐,为了一个业务逻辑类,要写业务接口类,home类啥啥的,我觉得进 步很大,但是在国内依然没什么人使用。

这里就谈一下我对ejb的一些看法:

1.ejb是比较重量级:实现ejb是一件很复杂的事情,J2EE规范中ejb规范的实现是一块硬骨头,而ejb实在复杂,很多开发人员都喜欢简单的东西,复杂的东西,会带来未知风险。

2.ejb的移植性低:虽然ejb是遵循J2EE规范的,但是各个厂家在实现J2EE EJB的规范的同时,也会加入自己的一些实现,例如你要让一个EJB查找一个数据源,这个数据源如何配置,几乎所有的应用服务器厂商都不一 样,weblogic,websphere,jboss,apusic都有自己的一套实现方式。我每次想到移植ejb的应用,最怕是去找这些不同点,然后 一一修改相应配置。这无疑加大了开发人员的负担,java的东西,平台可移植性就是一大亮点。

3.ejb调用流程:ejb是支持远程调用,客户端值需要ejb的业务类接口,服务端值需要ejb的业务类实现,然后客户端只需要调用jndi(这 个规范实现很复杂,使用比较简单,还是很多人用)的lookup方法,就可以使用业务类接口直接调用服务端实现类的方法了,这中间,应用服务器做了很多处 理,基本流程都是:客户端通过jndi和业务类接口,调用对应ejb应用服务器厂商jndi的lookup服务端实现类方法,然后ejb应用服务器生成业 务类的存根和代理,存根从服务端序列化到客户端,客户端调用的ejb业务接口就是调用这个存根,然后这个存根又通过rmi协议或者iiop协议发送命令到 业务类的代理,代理再调用业务类实现,最终把执行结果返回到客户端。

3.ejb难以调试:看到ejb的调用流程,虽然看上去ejb让用户不用了解远程调用细节,使用简单,但是由于里面的调用过程复杂,一旦有一个环节 错了,用户都难以调试,排错,开发过程中出现问题不可避免,而解决ejb的问题,解决周期要比较久。出错的时候,错误信息也千奇百怪。

4.ejb的性能问题:ejb的调用涉及太多类的序列化和反序列化,本来通过网络传输已经很慢了,还要传递对象,数据量又更大了,还要涉及了对象的序列化和反序列化,这中间有太多的开销了。

5.ejb的替换开源产品太多了:现在业务逻辑,在java上要用框架的有spring,远程调用,有webservice(apache cxf已经做得很好了,而且webservice又是通用标准),mina(一个apache的NIO框架),netty(现在性能最快的NIO框架,来 自jboss).而且这些产品都是可移植,社区交流多,出了问题,google就找到了。

《转》浅谈EJB的更多相关文章

  1. 浅谈PHP代码设计结构

    浅谈PHP代码设计结构 您的评价:       还行  收藏该经验       coding多年,各种代码日夜相伴,如何跟代码友好的相处,不光成为职业生涯的一种回应,也是编写者功力的直接显露. 如何看 ...

  2. 【转】浅谈.net remoting 与webservice

    1. .NET Remoting .NET Remoting是微软随.NET推出的一种分布式应用解决方案,被誉为管理应用程序域之间的 RPC 的首选技,它允许不同应用程序域之间进行通信(这里的通信可以 ...

  3. 浅谈C++三层架构

    浅谈C++三层架构 三层架构并不是MVC,MVC是一个很早就有的经典的程序设计模式,M-V-C分为三层,M(Model)-V(View)-C(Control). web开发中的三层架构是指:数据访问层 ...

  4. [转帖]浅谈IOC--说清楚IOC是什么

    浅谈IOC--说清楚IOC是什么 Need Study https://www.cnblogs.com/DebugLZQ/archive/2013/06/05/3107957.html 博文目录 1. ...

  5. 浅谈 Fragment 生命周期

    版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Fragment 文中如有纰漏,欢迎大家留言指出. Fragment 是在 Android 3.0 中 ...

  6. 浅谈 LayoutInflater

    浅谈 LayoutInflater 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/View 文中如有纰漏,欢迎大家留言指出. 在 Android 的 ...

  7. 浅谈Java的throw与throws

    转载:http://blog.csdn.net/luoweifu/article/details/10721543 我进行了一些加工,不是本人原创但比原博主要更完善~ 浅谈Java异常 以前虽然知道一 ...

  8. 浅谈SQL注入风险 - 一个Login拿下Server

    前两天,带着学生们学习了简单的ASP.NET MVC,通过ADO.NET方式连接数据库,实现增删改查. 可能有一部分学生提前预习过,在我写登录SQL的时候,他们鄙视我说:“老师你这SQL有注入,随便都 ...

  9. 浅谈WebService的版本兼容性设计

    在现在大型的项目或者软件开发中,一般都会有很多种终端, PC端比如Winform.WebForm,移动端,比如各种Native客户端(iOS, Android, WP),Html5等,我们要满足以上所 ...

随机推荐

  1. 从微观到宏观,遍历网络安全这幅有向图——By Me

    “可视化”是网络安全领域的前沿技术与可靠保障.笔者所在的西电捷通是一家领先的网络安全基础技术国际研究机构.一直从事网络安全基础技术研发与技术转移.笔者在2011年底入职典型技术之上的西电捷通公司,那时 ...

  2. easymake cmake xmake nmake ...

    最简单的Makefile,但是还是大程序少不了makefile工具 #CC=arm-linux-gnueabihf-CC=target:    $(CC)gcc -o algo_main algo_m ...

  3. 3 TensorFlow入门之识别手写数字

    ------------------------------------ 写在开头:此文参照莫烦python教程(墙裂推荐!!!) ---------------------------------- ...

  4. 中文Appium API 文档

    该文档是Testerhome官方翻译的源地址:https://github.com/appium/appium/tree/master/docs/cn官方网站上的:http://appium.io/s ...

  5. Java并发(6):concurrent包中的Copy-On-Write容器

    一. concurrent包介绍 在JDK1.5之前,Java中要进行业务并发时,通常需要有程序员独立完成代码实现,而当针对高质量Java多线程并发程序设计时,为防止死蹦等现象的出现,比如使用java ...

  6. Wireshark(一):Wireshark基本用法

    转载:https://community.emc.com/message/818739#818739 按照国际惯例,从最基本的说起. 抓取报文: 下载和安装好Wireshark之后,启动Wiresha ...

  7. JavaScript创建类的三种方式

    //第一种 创建类方法. // 用方法模拟 构造函数. function classobj() { this.name = 'xiaoming'; } classobj.text = 'text'; ...

  8. 联合体union

    1.一般而言,共用体类型实际占用存储空间为其最长的成员所占的存储空间: //4*7==282.若是该最长的存储空间对其他成员的元类型(如果是数组,取其类型的数据长度,例int a[5]为4)不满足整除 ...

  9. [Android]自定义控件LoadMoreRecyclerView

    RecyclerView是加强版的ListView,用于在有限的窗口中展示大量的数据,而LoadMoreRecyclerView则是为RecyclerView增加了加载更多的功能,先来看效果: 三种加 ...

  10. Spring_使用 NamedParameterJdbcTemplate

    applicationContext.xml <?xml version="1.0" encoding="UTF-8"?><beans xml ...