最近,JBoss在其4.0版的内部开发版4.2中公布了它的JDO实现产品:JBossDO,为免费JDO产品的阵营又添了一位生力军!
说起JBoss,我不由得想起了我的EJB开发历程。三年前,我阴差阳错地陷入了EJB开发的泥潭,当时还是J2EE1.2规范,由于是Java数据库开发的大热门,所以我们也只好跟上这个风,要不人前人后,怎么好意思抬头呢(可别当真)? 我们当时用的是WebLogic5.1,开发BMP方式的实体Bean,其中的酸甜苦辣,真是一言难尽,往事不堪回首Java中……估计很多朋友也有过相似的经历,设计JavaBean、实现EJB接口、Home接口、编写具体的BMP Bean,一堆SQL,编译,打包,EJB编译,关闭服务器,上传,启动服务器……这些都是对代码有一点点改动所需要的完整过程,其中的调试过程简直是令人窒息!当时的几个程序员痛苦至极,整天寻死觅活的,看了真让人心疼。不过我也是其中之一,那种痛苦至今记忆犹新,直到今天,想起这些时刻还常常犯事恶心,总有一种想吐的感觉。
虽然J2EE是个规范化的东西,但在具体的服务器上进行开发,比起原先的JDBC+SQL来,工作量非但没减少,反而增加了很多,有一种生拉硬套的感觉,结果导致设计别扭,开发缓慢,调试麻烦,BUG多多。不过既然EJB是规范,那我们就应该适应它,以前喝不惯可口可乐,但它是个规范,慢慢调整自己的口型,现在不也习惯了?华主席说过,凡是毛主席说过的,都是正确的,在Java世界里,Sun是大哥大,凡是Sun提出的,我们也应该坚决执行!于是,我开始将这些开发的繁琐,归咎于WebLogic,接着就开始研究不同的J2EE服务器,这样,我看了WebSphere,Sun的DynamicsXXX(记不清楚了),Oracle的Application Server,等等,其中还有一个令人一阵惊喜的产品:金碟的阿派斯!它可是一个完全国产的东东,总算走在了时代的前沿。不过这个产品配置同样麻烦,后来进展也比较缓慢,与当今的IBM和BEA两大巨头无法同日而语。我继续研究J2EE服务器,最后压轴的当然就是今天的主角:JBoss,一个开放源码的免费J2EE服务器!自动类更新检测,EJB热发布,一切是那么的美好!JBoss最注重的就是易用性,方便开发、减少手续、节省时间是其最大特色。
实践证明,易用性是让开发人员在如今新技术层出不穷的时代最为推崇的东西,谁抓住一点,谁就得到程序员的心!看看.NET的C#,看看JDK1.5的改进,看看J2EE规范不断的改进,看看JDO……
EJB在近几年也不断发展出新的规范,现在已经是2.1版了,每一个版本都有着不同程度的易用性改进,比如EJBQL,在不远的将来,可能在3.0版本中还会将EJBQL扩展为全动态的!JBoss紧抓住这些特点,在省事、省心方面下了很大功夫,性能也不断优化,慢慢地成熟起来,终于有一天,JBoss可以跟Sun主席叫板了!前一阵的JBoss与Sun的不愉快说明了这一点,所谓树大招风,不,应该是势大心高,JBoss逐渐显出霸气!
JBoss中开始主推一个新的开发概念:面向方面的编程(Aspect-Oriented Programming,简称AOP),这确实是个在层次上高于OOP的好东东,可以让关注不同方面(性能、日志、安全等等)的开发人员专注于编写相关的代码而不互相干扰,最后又天衣无缝地集成在一起成为稳定的系统。这个概念虽然已经提出来几年了,但还不流行,属于比较前位的概念,JBoss这么一搞,可能本来Sun想提出来的,结果被JBoss抢了先手,你说Sun气不气?(纯属猜测,请勿当真)。
JBoss很想在自己的J2EE服务器中加入新的特性,而Sun把持着规范,在规范兼容性上面向JBoss捅了一刀,告诉它:“喂,哥们儿,悠着点,别太冒头了,有些东西应该让领导来提,别自己想得太超前了!” JBoss当然不买帐,它批评Sun对Java规范的独揽大权而做事拖遢,进展缓慢(其实我对Sun的这方面也很不满意,只不过我还没写出JBoss这样的产品,唉,英雄气短!),而JBoss深得人心,应该在Java世界里给个名份才行!是不是感觉有点象二奶逼宫?呵呵……
好了,我们回到主题上来,JDO是Sun为简化数据库开发提出的新规范,目标是透明的对象存储。这种好东东,JBoss当然不会放过,也许这也是JBoss和Sun言归于好的契机吧!我们看到,JBoss在很短的时间内选择了JDO这个方面,并且做出了产品,而且还是免费的,实在是功不可没。至此,免费产品家族在TJDO、XORM、OJB的基础上,又多了一个JBossDO!不过目前的JBossDO只能用在JBoss服务器中,以后可能会放开限制。JBossDO目前还有一些其它限制,比如不支持继承,不支持自动创建数据库结构等等,这些应该都算是实用性的绊脚石,希望在不远的将来能看到更成熟的JBossDO产品!
附注:经过对JBossDO的一番研究后,我不得不给大家带来一点负面的信息:JBossDO不完全符合JDO规范,除掉前面说过的不支持继承之外,还有以下明显的冲突:
1、对数据的更新不采用事务:JDO规范要求所有对数据进行更新的操作必须放到一个transaction中,方法是PM.currentTransaction()对象的begin()和commit(),但在JBoss的示范代码中,很明显没有事务处理语句,对数据的更新只是放到getPersistenceManager()和pm.close()之间,这一点不利于实现乐观事务控制(Optimistic Transaction,JDO的重要可选特性之一)。
2、查询语言不符合JDOQL规范,JDOQL要求查询的断言符合Java语言规范,比如等值比较使用“==”,而与操作使用“&&”等等,但JBossDO显然不符合这些规范。
难道这又是JBoss再一次向Sun叫板?平心而论,我并不支持JBoss的这些做法,其它所有的JDO产品都是按照规范来的,虽然我不是老夫子,但JBoss此举实在令人费解。这些问题还有待进一步研究。
最新消息:JBoss负责人已经修正和解释了上面提到的两个问题,第一个问题是因为他们使用的是JBoss服务器的JTA;第二个问题是示范代码写错了。请看这里:http://www.jdocentral.com/forums/index.php?s=5e0542b8ce25715faf2783f15cd1f72f&act=ST&f=5&t=787&st=0&#entry4075
本文的版权属于笔者本人,但欢迎转载,前提是注明出处和原作者。另外,欢迎在我的专栏中查看我的另几篇文章,并提出宝贵意见!