EJB的缺点

foxsay 2003-10-29 12:35:24
我们以前用JSP/JavaBean/JDBC,后来接触了EJB,有些感想与大家讨论一下。

1、功能:远程方法调用、事务等东西早就有解决方案了,EJB有什么特别的?
2、负载平衡到底是什么意思。是说两台跑weblogic的机器,如果配置一下,就能协同工作吗?
3、CMP的O/R Mapping中文翻译是“对象关系映射”吗?
4、CMP对数据库操作:
(1)多表查询,是否只能用多表联结这个唯一方案实现?
如果表稍微多一些的话,bug频繁和编程艰难是无法想象的,
(2)updata,delete多个数据,如何实现?
(3)如果查询条件的个数每次都不一样,比如用户可以从10个条件中任选几个条件,不一定每次都是10个,是否只能BMP实现?

现在感觉CMP可能在性能上有些优势,但在数据库操作方面的灵活性几乎没有。或者说,很难用CMP编出实际应用的程序。用BMP的话,又跟JDBC差不多了。

所以我们的结论是,EJB现在没有使用价值。不知道理解是否正确,请大家陈述自己的意见。
...全文
400 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
coollzh 2003-11-02
  • 打赏
  • 举报
回复
cmp用作维联机事务处理比较好,而用过维联机分析处理就不合适了,两者简直就是完全不同的世界,我现在就在过分析处理,用了n多的group by rollup() cube() having...
n长的case when语句,一张报表的sql有近7k文本,分好几个函数才生成。其实应该用存储过程的,可技术经理说这样维护数据库不方面...
javawings 2003-11-01
  • 打赏
  • 举报
回复
J2EE只是一个架构,实现分布式系统的架构,你要理解分布式的概念,就能明白了!
z1980m 2003-11-01
  • 打赏
  • 举报
回复
用jdo
etre 2003-11-01
  • 打赏
  • 举报
回复
BMP比CMP很具有灵活性
etre 2003-11-01
  • 打赏
  • 举报
回复
CMP比BMP有效率,能用CMP就不要用BMP
AllError 2003-10-31
  • 打赏
  • 举报
回复
任何技术未真正掌握前都不会发挥其真正的作用
AllError 2003-10-31
  • 打赏
  • 举报
回复
呵呵,很多人说ejb对复杂查询支持不好,我想问一声.在分析的时候你们的分析真正是面向对象分析吗.java是面向对象的语言.如果分析不好就不能很好的发挥ejb的优势了
foxsay 2003-10-31
  • 打赏
  • 举报
回复
今天中毒了,网络崩溃。
我要对EJB开发数据库程序做个反省,到时会写一份简单的总结贴上来,估计要一段时间,然后马上给分。其实分数是次要的,希望大家都能这次讨论中受益。

感谢大家的帮助,尤其是ljrong和softbaylig。
ljrong 2003-10-30
  • 打赏
  • 举报
回复
cmp另一优点:做出来的东东可以不需要改代码即可部署在不同的数据库.只须稍改配置文件即可.
softbaylig 2003-10-30
  • 打赏
  • 举报
回复
越来越喜欢sun了,技术层出不穷,几乎都有点用处。虽然都不成熟,但可以启发我们对设计基础层面上的思考:究竟如何才是最好的?
建议不会灵活使用sun技术的同道先耐心的研究一下,然后再做结论拉。
softbaylig 2003-10-30
  • 打赏
  • 举报
回复
奇怪,为什么一定要CMP做查询,难道没有别的方法了吗?我个人非常喜欢CMP,但从来不用它做查询!其实技术经过不同组合就会完全不同的效果,你如果对数据库有更新操作,我建议你用CMP,因为它内建了很多优化策略。如果你想对数据库进行查询,你完全可以使用DAO。再次重申,CMP是Entity Bean的一种持久化机制而已,它做查询不方便就不用嘛,犯不着骂它啊,其实它对数据库更新比BMP强很多而且代码也少。
dwju1981 2003-10-30
  • 打赏
  • 举报
回复
jsp+bean+servlet简单好用,我们一直用它!呵呵
foxsay 2003-10-30
  • 打赏
  • 举报
回复
to ljrong:
多谢回帖。你的方法好像是CMP中的标准方法,我也是觉得太繁琐了,即使用jbuilder。
to 大家:
我在前面说过,EJB唯一特殊的地方就是“负载平衡”。在业务处理繁重的情况下,比较适合。但是CMP的编程极其复杂,更确切的说是愚蠢,最确切的说是变态。
我觉得CMP是sun为了体现O/R Mapping设计的,出发点是减轻编程复杂度。实际上TMD不但没减轻,反而几何级的加剧了复杂度。
下面是我摘抄的一段话:
“我遇到过数据库里面有80多张表的情况,其中绝大部分的表都会用到连接查询,如果是用CMP映射的话,必须把这些所有的关联关系都设计成CMR,那就意味着,这80多个CMP必须在一个EJB Deginer里面设计,并且只能打成一个jar包。这是非常恐怖的事情,稍微错一点点,全都完蛋了。后来那个项目果然失败了!”
所以CMP并不适合数据库编程。
如果要采用EJB的优势-负载平衡和分布式(其他的狗屁优势不说也罢),可以采用BMP或者Session Bean+O/R Mapping的工具,比如JDO。好像现在又蹦出个hibernate(第三方工具),还没研究。现在越来越讨厌sun了,技术层出不穷,有用的几乎没有。
诸位,看在我写这么多的份上,回帖啊!!!

heartlessbug 2003-10-30
  • 打赏
  • 举报
回复
靠,也许欧太差,虽然也是用的cmp,可一碰到复杂的我就用sql语句,哈哈
北极猩猩 2003-10-30
  • 打赏
  • 举报
回复
觉得没有是因为你没有碰到需要用的地方,结论不要下得那么早
ljrong 2003-10-30
  • 打赏
  • 举报
回复
对表中的要查询的字段每写个find方法及并在application配置ejb-ql,并返回collection,及可对这个collection进行相应操作。如对跨多表如A\B\C\D,如操作D,则从最开始的A的entity中的方法find(a.x)找出表B.y的collection,同理从b.y找出c.z的collection,同理从c.z找出d.mcollection并对此操作。是否还有更好的方法?
softbaylig 2003-10-30
  • 打赏
  • 举报
回复
使用EJB写数据库程序最好使用JDBC和CMP Entity Bean结合使用,将所有对数据库的请求(查询,更新,删除)传递到Session Bean(既是用BEAN来封装所有对数据库的请求),如果是查询,你可以使用DAO通过JDBC连接查询。如果是更新等操作,使用CMP进行处理,由于EJB天生的Catch设置,你可以有效地完成任何大规模的数据更新。
foxsay 2003-10-30
  • 打赏
  • 举报
回复
呵呵,看来是我对CMP过于倚重了。
前不久调查EJB是否适用于我们的项目,感觉BMP和CMP编程很不灵活,比如处理where条件复杂的操作。而且,在书上和网上都找不着好的资料,满篇的吹捧之辞,所以非常气恼。

如果是用EJB写数据库程序,在where条件复杂的情况下,比较好的结构是什么呢?
请大家不吝赐教。
orant 2003-10-29
  • 打赏
  • 举报
回复
7
whyxx 2003-10-29
  • 打赏
  • 举报
回复
现在差不多都改用BMP了,要简单得多,用CMP的实在代码太多而且复杂
加载更多回复(7)

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧