技术开发 频道

2007Java年度技术综述


【IT168专稿】
一、 J2XE在2007年的发展势态和未来走向
1.1 J2SE5.0已成主流、J2SE6.0蓄势待发
    经IT168在2007年的调查发现,JavaSE5.0的使用率最高,达到40.3%,使用率的增加与JavaSE5.0变得更易用有着密切的关系。
    在调查结果中同时还会看到,Java SE 6.0的使用率也已达到13.0%,大有后来者居上之势。Java SE6.0虽然在2006年刚刚发布,但由于Sun在2007年对JavaSE 6.0的bug进行了修正,并对Java SE6.0做了大量的改进,因此,才使Java SE6.0有了和其它JDK版本竞争优势。下面是Java SE 6.0中包含大量全新的或更新版本的JSR规范:

(1)简化开发方面
 199: 编译器API;
 269: 注释处理器(Annotation Processors);
 260: Javadoc标记的更新;
 221: Java数据库连接(JDBC) 4.0;
 223: Java平台的脚本;
(2)XML方面
 105:数字签名;
 173: 一个用于XML的流API
 222: JAXB 2.0
(3)Web 服务方面
 250: 公共注释;
 181: WS Metadata Web Services;
 224: JAX-WS 2.0;
(4)其它
 202: Java Class文件规范升级

1.2 期待Java SE7.0

Java SE6.0还没握热乎,Java SE7.0又快要发布了。不过大家不要太兴奋了,Java SE7.0(代号为海豚Dolphin)肯定不会在今年发布了,也许在2008年发布是一个不错的选择。

遗憾的是,为一门语言添加功能远比删除功能要简单得多。几乎不可避免地,随着时间的推移,语言不是朝着简单的方向发展,而是越来越复杂,越来越让人困惑。即使是那些单独看起来很好的功能,在彼此叠加后也会出现问题。

更令人遗憾的是,Java 社区没有接受这个教训,尽管这种失败并无特殊性。但总有一些太酷又太让人激动的新语法令语言设计者难以抗拒 —— 即便这样的新语法不能解决任何实际问题。于是对 Java 7 的新语言功能就有了巨大的要求,包括闭包、多继承和操作符重载等。

虽然现在新兴的语言总是伴随着更另人兴奋的功能出现,但对于Java来说,历史的包袱实在是太大了,不能随心所欲地为其增加新功能。但还是有很多新的特性可以不费劲地加入其中。如闭包、操作符重载、集合类的新的语法、关系映射语法等等。但我想关于多继承恐怕十有八九不会被加入,因为Java 中有太多东西是基于单个根的继承层次。没有可行的方式改进多继承,使之适应这门语言。

目前已经有很多关于改进Java的新建议,尤其是在新特性和语法上,下面我们带领大家想象一下Java SE7会为我们带来哪些奇迹:

1. 使列表更象数组

在JavaSE以前的版本,引用列表类中的元素要使用get和set方法,如下面的代码所示:

List content = new LinkedList(10);
content.add(0, "data1");
content.add(1, "data2");
String name = content.get(0);

而在Java SE7中则使用如下代码:

List content = new LinkedList(10);
content[0] = "data1";
content[1] = "data2";
String name = content[0];

还有就是在列表初始化时也会和数组初始化类似,代码如下:

LinkedList<Integer> myInt = {1, 100, -20, 30, 102};

上面的两项提议应该非常容易实现,就象Java SE5.0新加的foreach循环一样,只是Java编译器玩的一个小魔术而已,JVM更本就不需要改任何东西。只需要在编译时将其转换为JVM支持的字节码就可以了。但这些新语法对于简化程序却是非常关键的。

2. 有望取代Hibernate,直接支持语言层面的数据持久化
真正能够影响开发人员生产力的特性功能应该是用于管理表、树和映射表的内置原语,比如在使用 XML 和 SQL 时遇到的那些。JavaScript 下的 E4X 项目和 Microsoft 的 Cω 和 Linq 项目是实现这一想法的先驱,但可悲的是,Java 平台似乎错过了这个机会。如果有人想要通过编译器来玩一个潜在的救场的游戏,这里是一个不容错过的好地方。

这个世界上总是不断有人创造另人感到神奇的东西。而在程序语言中内置操作表、树和关系映射的原语就是其中之一。如直接在程序中写XML或SQL,然后将其直接映射成当前语言的类,或是直接引用。微软在.net framework3.5中推出的Linq就是这种原语的一个精彩实现,让我们看看下面的Linq语句:

string[] names = { "bill", "yaoming", "guojingjing", "tianliang", "Mike"};
IEnumerable expr = from s in names where s.Length == 3
 orderby s
  select s.ToUpper();
foreach (string item in expr)
Console.WriteLine(item);

上面的语言其实很简单,就是取数组names的前三个元素,并按大小写排序,最后将其转换成大写后输出到控制台。上面黑体字部分就是Linq语句。Linq除了操作数据名,还可以用类似的方式操作XML以及数据表。而Java SE7现在已经错过了加入这项功能的非常好的时机,但在编译器上做做手脚,来救救场,这也许是个不错的注意。

3. 改进的属性访问机制

在老版本的Java中访问属性都是用类似getXXX()和setXXX()的形式,但在JavaSE7中可能会更方便,有可能使用property关键字(或其它类似的关键字)来声明类属性,如下面是一种可能的语法:

public property string name
(
get // 只读属性
{
... ...
}
set // 只写属性
{
... ...
}
}

JavaSE7的改进建议还很多,这里不一一列举。总之,JavaSE7是非常值得我们期待的,让我们一起等着2008年JavaSE7的真正到来吧!

1.3 J2EE

没有哪部分 Java 编程像 JEE 这么成功,也没有哪部分 Java 编程像 JEE 那样招致如此多的斥责。它是一门每个人都喜欢去讨厌的技术。它复杂、费解并且是重量级的。没有哪部分 Java 编程有这多么第三方努力将其整个替换或部分替换:Spring、 Hibernate、Restlet、aspects、Struts …… 等等。虽然如此,几乎每一个招聘 Java 程序员的商家都要求其有 JEE 经验,因此 Sun 确实是正确的。

在企业级领域里,我能看到的全部趋势就是简单。大块头的框架出局;小而简单的加入了进来。随之增长的是,客户拒绝大块头的 JEE 栈部分,这种趋势还在继续。作为替代的是,客户转向了像 Spring 这样更简单的框架或者完全脱离 Java 平台而投向 Ruby On Rails。对于更简单、更易理解的系统的需求也驱动着对面向服务架构(SOA)和具象状态传输(Representational State Transfer, REST)的兴趣。
最新推出的Java EE5也在不断改变着自己的形象。Java EE5主要聚焦点是易用性和简化开发,它提供了一些新的或者更新的特性,例如EJB3.0、JSF技术和最新的Web Services的API。Java EE5使得编程更加简单和易懂,但是保持了J2EE在Web Services和企业应用程序开发的首选平台地位。
Java EE 5不再象以前那样只注重大型商业系统的开发,而是更关注小到中型系统的开发,简化这部分系统开发步骤,这是它的一个很大的改变之处。
使得系统开发步骤得以简化的最大特征是在JavaSE 5.0中加入Annotations,通过Annotations引入,降低Java EE开发时,既要编码,又要写XML配置文件之苦。
安全是Java EE5的一个重要特点,指的是基于容器的安全访问,无需自己手工编码,具体实现可参考Jdon框架应用演示源码JdonNews。这虽然是基于J2EE1.3编写,但是和Java EE 5区别不是很大。
事务管理也是Java EE 5的一个重要部分,标准中规定了在WEB层中使用事务和线程的处理关系,标准中规定:Web服务器如Tomcat无需在Web层提供事务支持,因为Web组件根本不支持事务繁衍/传递。
2007年4月初, Bill Shannon 已经向JCP提交了Java EE 6 草案。
这也是JCP第一次揭示Java EE的概念,由于先前有JSRs,JSR 313 将不再定义新的 API,但是将调整许多sub-JSRs 的工作来为Java EE 6平台提供一致性。
JCP的站点提供了一些关于Java EE 6的发展趋势:
 扩展性
在Java EE中有些技术以插件的形式增加到Java EE应用服务器上更为合适。通过增加可扩展性的点和更多服务接口,其他技术能够以插件的形式添加到平台实现中显得更加有效和整洁。
 Profiles
Java EE平台应该引入Java EE platform Profiles,由JCP定义,包括Java EE platform的一些技术,增加一些JCP技术,而这些技术不是基于Java EE platform技术的一部分。
 裁减
将某些技术以更合理的方式来从现在平台中裁减出去。减少对使用这些技术的开发者的影响。
 SOA
对web services提供进一步的支持。另外,专家组正在考虑是否在Java EE平台版本中包括SCA定义的工具是否合适。
从上面可以看出,Java EE6将进一步根据开发人员的实际情况考虑,通过提高扩展性和裁剪某些技术,使得开发人员能够按需定制功能。
Java EE 6 预期是在2008年的第三季度完善和发布,2008年将是Java EE的一个丰收年。

我们能够预料出,朝着简单发展的趋势在 2008 年将会延续。许多对 Rails 留下印象的人正试图在其他语言上复制它的成功,比如 Python (Turbo Gears)、Groovy (Grails) 以及 Java (Sails)。这其中的某个有可能成功,但它们如果不提出一些强有力的新举措的话,就不会取得成功。因此,企业仍将加载他们已有的框架:SOA、REST 和 Rails。

1.4 J2ME

    将视线从最大平台移到最小平台上来,我们能期待嵌入式世界带给我们什么?多年以来,Java 平台已经在小设备上取得了相当大的成功,而 2007 很已经成为了这一成功为基础。首先,关注一下移动信息设备描述(Mobile Information Device Profile,MIDP) 的第 3 版,来利用当今更为强大的设备的功能。特别是,我们应该很快就能在一个虚拟机上运行多个 MIDlet,包括在后台运行一个或多个。同样也关注一下加密记录管理系统(RMS)存储和 IPv6 支持。

    Java ME 的可扩缩的 2D 矢量图形(Scalable 2D Vector Graphics, SVG)API 2.0 当前正在开发中,它应扩展在许多设备中的动画功能。除 SVG 动画之外,它也将支持流式音频和视频。如果移动网络开放,这是相当重要的 —— 想想在手机上的 YouTube。(当然,如果网络开放,那就只是没人愿意看的两英寸的公司广告。在这点上,我对美国的情况持悲观态度,而在欧洲也许会更有趣。)

    移动开发者也能期望本年推出第一款支持 Java ME 的 XML API 的手机。此 API 是 SAX、DOM、 StAX 和 JAXP 的一个精选子集,设计它是为了适应内存受限的手机。

    尽管好事连连,Apple 的 iPhone 仍对 Java 平台(作为移动电话开发平台)构成了一个主要的威胁。iPhone 已经是这个星球上最火爆、最有魅力的手机,它已经发布了一年多。问题在于它将成为一个相对封闭的平台,甚至按手机网络标准也是如此,并且它没打算运行 Java 代码。无需多说,对于任何试图向手机、PDA 和个人通讯设备推销第三方应用程序的人来说,这都是一个恐怖的消息。
0
相关文章