关于对J2EE几点误解和错误认识的澄清
.Net和J2EE的争论一直没有停止,我也参加过“程序员”杂志主持的“.Net和Java之争”之类的讨论,本来这两种技术都是为用户提供了竞争性的选择,对于用户来说是一件好事,多种选择远胜于单一选择。
但是,一些个别人员或狂热者因为一些目的,故意扭曲J2EE,一叶遮目,因此必须针对这些谣言和误导澄清一些技术细节如下:
误导一:Java阵营对EJB的看法
(1)J2EE项目中只有10%使用EJB
“EJB makes Java look bad. ”
(2)Sun’s Java PetStore:
“write your data persistence twice” . “bi-modal data access layer”
(3)IBM Redbook: 不要使用EJB, 用存储过程
(4)James Gosling, Borland Developer conference, May 2002
You have to manage it by ignoring it. The complexity of J2EE is pretty extereme…There’s a dirty little secret about J2EE; most people don’t need J2EE;
(1)“J2EE项目中只有10%使用EJB”
这是很早以前的过去式统计,过去有10%使用EJB,不代表将来就只有10%使用EJB。
对EJB反感主要来自于Java阵营中那些Web层所谓轻量级开源软件开发者,他们的理想是将所有业务(包括持久层)都包括在Web层中,用JavaBeans完成,自己实现缓存、对象池以及事务机制等等,这些底层技术很明显是发烧级别的技术,在一般商业应用中如果也要靠程序员自己完成这些低层机制,那么最后Java都没有人使用了。
EJB帮助一般商业应用实现了这些底层机制,无需开发者自己实现,所带来的条件是开发者必须按照EJB规定来开发程序,EJB使用的这些限定条件对于那些倡导自由的狂热发烧级别的开源开发者来说,简直是无法容忍的,我已经在很多英文媒体上看到这种不满和***。可笑的是,国内有些刚涉及Java的程序员为了显示自己是一个高手,进行项目咨询时,第一句就是:我不要EJB。
(2)Sun’s Java PetStore
SUN的Petstore只是J2EE设计思想的一个展示品,它离实践有一段距离,而且它没有加入一些优秀的开源软件开发框架,致使它的性能等指标都存在一点问题,这点问题就成为.Net***Java的口实,其实,这点在国外已经达成共识了,因为这种***如同指责时装模特的时装无法穿到大街上一样可笑。
(3) 不要使用EJB, 用存储过程
了解J2EE的人已经知道,EJB不只是操作数据库,因此这句话可以理解为,不要程序持久层,只用数据库的存储过程,如果真是这样,.Net也无需诞生,全世界软件业只有数据库,也没有cobol、java等其它可操作数据库的语言了。
数据库存储过程是提升数据库性能的一个方向,是一种“向下思维”,把活向细处做,说句开玩笑的话,大概直接用汇编语言将数据库和数据操作一起实现性能是最快了。“向下思维”的一个缺点是会过分依赖数据库厂商,通用性不强,同时业务逻辑也可能混淆在存储过程中,很多存储过程的复杂语句包含了非常多的业务逻辑在里面,大概只有编制者才了解这样的奥妙,这种情况不是软件工程中愿意看到的。
还有一种思维是“向上思维”,通过层、架构来提升数据库系统的性能,设立专门的持久层负责数据库操作,使用缓存Cache以及多台分布式Cache将是一个新的方向,将数据库数据放在内存中,既做到程序的数据库操作通用性,不依赖具体数据库产品,又具有可拓展性和伸缩性。。
(4)James Gosling也不喜欢J2EE
这位号称Java之父的程序员也不喜欢J2EE,我想其中一个很大原因大概是Java的发展已经出乎他的意料 之外,而且不为他控制的超前发展了,幸亏他不是J2EE之父,否则,我倒是也要放弃J2EE了。
(5)小结
有人说过,Java的毁灭可能来源Java社区本身,在这个充满活力和创新的社区中,有多种先进的J2EE开源软件支持着更广阔的商业应用,当然也难免有争议和指责声,后者容易被对手利用,但是我们已经知道,最可怕的还是,永远只有一家公司的一种声音。
有各种统计数据如Web测试、分布式测试或性能测试等对比显示,J2EE明显不如.Net
澄清二:独立的middleware-company.com公司在其首页明确指出:
According the Gartner Group, 70% of Java projects fail due to lack of skills
上述测试数据来源于如何正确使用J2EE,如何使用J2EE是一个很大的学问,如果没有使用正确,那么就会导致上述测试结果。
.Net与J2EE是企业应用解决方案的技术
.Net与J2EE在体系结构和主要技术上有明显的对应性
.Net与J2EE的差别主要体现在开发效率, 性能, 成本和可靠性上
独立的MiddleWare测试表明, .Net在开发效率, 性能, 成本和可靠性上明显优于J2EE
前面三句是正确的,最后一句是偏颇的,这句混杂在三条正确语句后面,就具有误导之嫌!
开发效率:
如果将.Net的强大开发工具和环境和J2EE的ant以及EditPlus编写J2EE这样开发方式相比,当然是前者给初级用户带来很大的开发效率和方便,但这种类比是不公平的。
使用Borland JBuilder 8.0以后的开发工具,在J2EE开发效率上根本丝毫不逊色于.Net,J道提供这样的开发教程,非常方便。
性能:
性能永远是使用者的问题,如果把Java的性能归结于解释型语言等错误原因上,那还需要你多补一些Java的课程。
如果需要开发出一个优异的性能系统,无论是.Net或J2EE,程序员和设计师都需要有专门的培训和咨询指导。
成本:
J2EE有那么多免费的开源软件支持,成本就几乎为零,J2EE服务器使用JBoss,使用Struts+EJB,JBuilder X将提供这种优美框架的可视化开发工具,多美好。
当然,.Net在中国使用也是“免费”的,因为几乎都是盗版,他也懒得管。
可靠性:
有多年成熟应用的J2EE技术带来的最大优点就是可靠性,每个技术细节直至底层,都可能是开源的,基于Linux的运行可靠性已经为更多实践证明,曾经收购易趣30%股份的eBay,全世界最大的网络拍卖系统,就是使用J2EE建立的,每天有多少关键业务在这个系统上运行?《J2EE核心模式》一书有很多模式来自他们的实践总结。J2EE在银行、保险等领域成熟应用的事例比比皆是,他们的多年运行经验都用事实证明了J2EE的可靠性。
相反,饱受病毒大幅度侵蚀的Windows系统才会给人带来可靠性的疑问,它的成熟应用也许刚刚开始。
误导四.NET的性能明显优于 J2EE :
Web应用服务
事务性能
XML Web 服务性能
是否对Web服务(Web Services)优于支持,主要取决于支持这类标准的API是否丰富方便,作为Java的发明者Sun公司现在已经成为一个Java标准指定者,他的Java/J2EE产品实用性其实不强,Web Services作为最近由微软和IBM等倡导提出的标准,要落后于J2SE 1.3 API版本的推出,Sun不可能在短时间内将这些应用加入标准的JDK库,而且没有必要,有很多开源软件支持Web Service就非常优秀,如 Apache的Axis。
Web Services的概念其实是Java语言概念的Copy,如果你的系统都是使用Java建立,那么,Java提供的支持,无论性能还是拓展性等方面远远超过Web Services。
因为更多人知道Windows,因此更多人知道了Web Services,并为此激动,而忽视了几年前Java提出了同样思想,只因为不知道,但是他们是客户,这好像类似政治了吧,这里避开。
在我的书籍《Java实用系统开发指南》中,关于肥客户端.服务器模式下,我就推荐直接使用Http+EJB实现远程调用,省却Web Services中的XML转换带来的性能消耗。
Web Services的最大问题还是安全,这正如Windows的最大问题一样,如果他们认为这是他们的一贯产品特点,那么我们还在这里实现什么比较呢?
澄清误导五
主要一个误导言论是:来自TSS(著名Java社区theServerSide.com)的母公司middleware-company(TMC)向Java社区提交了一份J2EE和微软.Net应用架构的评测报告,Java开源精神领袖Rickard Oberg在第一时间分析了用于评测的源代码,以压倒性的证据推翻了TMC的结论。
但是,middlerware-company这份报告还被别有用心的少数人作为诋毁J2EE的证据。
转载于:https://blog.51cto.com/yangxiaoguang/419377
相关文章:

org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in r...
2019独角兽企业重金招聘Python工程师标准>>> Struts Problem Report Struts has detected an unhandled exception: Messages: Write operations are not allowed in read-only mode (FlushMode.NEVER/MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or re…
Java的Redis连接池代码性能不错
其实这个是引用自网友http://blog.csdn.net/tuposky/article/details/45340183,有2个版本,差别就是ReentrantLock和synchronized。另外原作者使用了断言,我觉得这个还是不用为好。 ReentrantLock版 import java.util.concurrent.locks.Reent…
降低预测过程计算成本,这些NLP模型压缩方法要知道
编译 | 凯隐出品 | AI科技大本营(ID:rgznai100)近年来,基于谷歌Transformer的语言模型在神经机器翻译,自然语言推理和其他自然语言理解任务上取得了长足进展。通过多种语言模型的平均损失进行自我监督预训练,使得在大范…

政府要尽快对应用商店出台管理办法
前两天联想的开发者大会,我和联想的CTO贺志强先生联合接受了一个视频访谈,贺先生谈到联想的乐园软件商店,组织大量的人力对于软件进行检测,以保证软件是合格产品,不会给用户一路带来侵害,对于联想这种负责态…

antlr-2.7.6.jar的作用
项目中没有添加antlr-2.7.6.jar,hibernate不会执行hql语句 并且会报NoClassDefFoundError: antlr/ANTLRException错误

junit集成Hamcrest测试集合中某个属性是否包含特定值
junit已经集成Hamcrest但是还是需要引用hamcrest-library,不然只有基本方法,高级的没有 <dependency> <groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test<…
腾讯第100个开源项目:微信开源推理加速工具TurboTransformers
出品 | AI科技大本营(ID:rgznai100)4月24日,腾讯正式宣布开源Transformer推理加速工具TurboTransformers。该工具面向自然语言处理领域中Transformers相关模型丰富的线上预测场景,在微信、腾讯云、QQ看点等产品的线上服务中已经广…

程序员:提高编程效率的技巧
本文写给那些认为在项目上所花时间和效率成正比的程序员。我要说的是,事实并非如此。虽然你需要在电脑前敲键盘输入东西,但这只和编程沾上一点边。那么,程序员该如何利用时间呢? 俗话说,磨刀不误砍柴工,拿出…

Qunee for HTML5 V2.5新版本发布
为什么80%的码农都做不了架构师?>>> Qunee for HTMl5 V2.5 beta2版本正式发布,此次版本内核改动较大,采用了新的2D渲染引擎,增加了延迟绘制功能,大幅改善画布的浏览体验,此外重构了鼠标键盘以及触控交互监听处理,增加右键框选功能,改善了多点触控交互,增…
泛型推断类型不符合上限
程序报错推断类型不符合上限 springsecurity需要自定义用户服务 代码 Overrideprotected void configure(AuthenticationManagerBuilder auth) throws Exception {auth.userDetailsService(new CustomUserDetailsService());}public class CustomUserDetailsService implemen…
如何通过深度学习,完成计算机视觉中的所有工作?
Mask-RCNN做对象检测和实例分割作者 | George Seif译者 | 天道酬勤,责编 | Carol出品 | AI科技大本营(ID:rgznai100)Mask-RCNN做对象检测和实例分割:https://miro.medium.com/max/1200/1*s9raSe9mLeSSuxE3API-ZA.gif你想做计算机视…

Windows PowerShell 2.0语言之字面类型系统
PowerShell语言允许通过一个字面类型(type Literals)来访问类型,它是用括号抬起的类型名,返回.NET底层的System.Type对象实例,如: PS C:\> [System.Int32]IsPublic IsSerial Name …

建立名称server
一、实验的目的:实现DNSserver功能,提供正向、反向解析二、实验环境装有Linux的Windows系统IP为192.168.6.3的虚拟机三、实验目的建立gr.org域的主名称server。解析:名称 IP 用途ns.gr.org 192.168.…

Java的JSON操作存储List到Redis
使用jackson和json-lib都可以 <dependency> <groupId>org.codehaus.jackson</groupId><artifactId>jackson-mapper-asl</artifactId><version>1.9.13</version></dependency><dependency><groupId>net.sf.json-li…

关注基于云的下一代应用开发
接受经济和信息化的视频专访专访的主页地址为:http://www.enicn.com/article/2010-08-20/0R064b52010.shtml我的其他视频,请参考土豆空间,地址为http://www.tudou.com/home/larryvmw。
确认了!MySQL 狠甩 Oracle 稳居 Top1!
01几乎所有程序员都会用到的 MySQL稳居 Top 1科技长河,顺之者昌,错失者亡。在2019年,CSDN面向具备超强计算力的数字化世界,我们进行了「大数据技术应用现状分析」,并发布了《2019-2020 年中国开发者调查报告》。发现&a…

[AWK]使用AWK进行分割字符串以及截取字符串
如何split当前的字符串,用$0,例如: cat num.2012032911 | awk {print $2} | awk {split($0,b,".");print b[2]} | cut -c 3- 获取第二列,例如第二列是com.sb3456.you那么在split当前的这个字符串获得sb3456,最后截取sb3…
SpringMVC集成Tiles布局引擎框架
Tiles布局框架, http://tiles.apache.org/ Spring已经对Tiles进行了集成。页头页尾公共模板页要靠这个,不然重复代码太多。 <dependency><groupId>org.apache.tiles</groupId><artifactId>tiles-servlet</artifactId><…

VC 文件操作(文件查找,打开/保存,读/写,复制/删除/重命名)
右击项目->属性->字符集:使用多字节字符集。这样可以使用char到CString的转化。char sRead[20] ""; CString strtest sRead; 大气象 //文件查找/*CString strFileTitle;CFileFind finder;BOOL bWorking finder.FindFile(_T("C:\*.sys"…
程序员会懂的冷笑话:各大编程语言的内心独白
作者 | Anupam Chugh译者 | 弯月,责编 | 夕颜出品 | CSDN(ID:CSDNnews)软件工程领域鱼龙混杂。有些人乐不思蜀,而有些人则饱受打击。然而,构建软件的工作让每个人倍感压力,这点毋庸置疑。在本文…

swift集成alamofire的简单封装
import UIKit import Alamofire enum MethodType{ case GET case POST } class NetworkTool: NSObject { class func request(type : MethodType ,urlString : String , paramters: [String :Any]? nil,finishedCallback : escaping (_ result : Any) -> ()) { //判断是什…
Go后台项目架构思考与重构 | 深度长文
作者 | 腾讯云后台工程师黄雷编辑 | 唐小引来源 | CSDN(ID:CSDNnews)引言本文首先介绍了架构的重要性,随后从一个实际项目的重构过程作为主线,逐步引出主流的架构设计思想以及其所解决的实际问题是什么。通过阅读本文&…

前途到底是网络工程还是程序设计
本人89年年底生的,现在快满21了,大二的时候过的国家网络工程师考试,并不是cisco的网络支持工程师,大三也就是现在,在学校花销太大,想自己赚点钱,于是在学校招聘会上应聘了一家通信公司ÿ…

FAIL - Deployed application at context path / but context failed to start
IDE报错:FAIL - Deployed application at context path / but context failed to start 编译通过,这个错误原因是很多地方被误用,导致Spring运行时不能解析某些Class导致, 例如:ModelAndView用错 public ModelAndView…

项目ITP(五) spring4.0 整合 Quartz 实现任务调度
2014-05-16 22:51 by Jeff Li 前言 系列文章:[传送门] 项目需求: 二维码推送到一体机上,给学生签到扫描用。然后须要的是 上课前20分钟 。幸好在帮带我的学长做 p2p 的时候。接触过。自然 quartz 是首选。所以我就配置了下,搞了个…
Spring security防止跨站请求伪造(CSRF防护)
因为使用了spring security 安全性框架 所以spring security 会自动拦截站点所有状态变化的请求(非GET,HEAD,OPTIONS和TRACE的请求),防止跨站请求伪造(CSRF防护),即防止其他网站或是程序POST等请求本站点。…
从Ops到NoOps,阿里文娱智能运维的关键:自动化应用容量管理
作者| 阿里文娱高级开发工程师 金呈编辑 | 夕颜来源 | CSDN(ID:CSDNnews)概述1. 背景随着业务形态发展,更多的生产力集中到业务创新,这背后要求研发能力的不断升级。阿里文娱持续倾向用更加高效、稳定、低成本的方式支…

JAVA目录树(全功能),Java+ajax实现
我自己要的功能全实现了 一:双击选中项进行编辑 二:右键菜单功能(新增,删除,修改,自定义颜色什么的) 三:选中项进行拖动事件 四:输入项进入搜索(并自动选中结果项) 2011.03.14更新功能 …

SiteMesh介绍
1. SiteMesh简介 SiteMesh是由一个基于Web页面布局、装饰以及与现存Web应用整合的框架。它能帮助我们在由大量页面构成的项目中创建一致的页面布局和外观,如一致的导航条,一致的banner,一致的版权等等。它不仅仅能处理动态的内容,…
商汤提基于贪心超网络的One-Shot NAS,达到最新SOTA | CVPR 2020
出品 | AI科技大本营(ID:rgznai100)导读:在CVPR 2020上,商汤移动智能事业群-3DAR-身份认证与视频感知组提出了基于贪心超网络的One-Shot NAS方法,显著提升了超网络直接在大规模数据集上的搜索训练效率,并在…