您所在的位置: 首页>>开发>>JAVA>>

Java混合化现状和RIA趋势分析(3)

http://developer.51cto.com  2008-03-04 16:10  Bruce Eckel  Csdn  我要评论(0)
  • 摘要:使用Java构建GUI应用程序并不是不可能,但是10年过去了,applet、Java WebStart和常用应用程序仍然存在安装问题。10年之后,人们不再信任它了。如果10年之后不会出现这种情况,我敢说某些人会认为这个问题不值得修复。即使他们修复了,由于用户已经有了如此多的糟糕体验,需要经过多年才能重新建立起之前的信任。
  • 标签:Java  RIA  趋势  C#  Web

可以购买Flex Builder IDE帮助创建Flex应用程序。这是构建在Eclipse平台之上的(而不是从头创建一个新的GUI开发系统——一种明智的方法)。它拥有我们预期的常用功能,比如自动编译、上下文帮助、调试,以及GUI布局工具。开始设计时,可以使用布局工具快速入门,但是我发现,设计好草案之后再进行手动调优会更有用。

以下是我过去遇到的一些问题:尽管针对Windows和Mac的Flash播放器总是同时发布,但是针对Linux的Flash的发布时间会晚很多。我最初不知道,直到我推出了Thinking in C eSeminar的第一个测试版并收到Linux和Mac用户对Flash的抱怨时才知道。通过一番调查之后,我决定向后移植应用程序(这是可行的,而且Flash 7包含了所有需要的功能)。这对于我来说似乎是最好的解决方案,因为我不需要等到新版本的Flash发布,而且不用担心Linux。我使用Flash的一个主要目的是让应用程序具有跨平台的透明性,以及将安装问题最小化。但是,Flash 9及其以后的版本,所有播放器的发布间隔只有数周,Flash的后续版本也会采用这种策略。因此现在您不用担心任何人抱怨了。使用Flex构建您的UI,它一定会“正常运行”。

将Flex用作图形DS

Flex的一个最吸引人的地方是,Flash一开始就是根据UI的思想创建的。在一个非常真实的感觉中,它是一种针对图形、多媒体和UI的特定于域的语言,而大多数其他解决方案都是一种后来才添加上UI库的语言。由于这个设计目标,Flex和Flash提供了一种用于构建用户体验的完整、无限制、灵活的工具。从编程人员的时间投资立场来看,您只需学习一种用于构建UI的语言,无需担心以后碰到问题或限制——问题包括:

◆安装问题
◆功能限制        
◆陡峭的学习曲线

可以使用许多奇特的组件——Flex Framework(免费下载的一部分)附带了超过100个组件。还有一个活跃的组件创建者市场,包括开源的和付费的。Adobe创建了一个这样的库:Flex Charting Components(在几百美元以内),但是还有很多吸引人的图表组件。

当然,Ajax的一个最有趣的方面在于,代表“异步(asynchronous)”的“A”。这允许信息在客户机和服务器之间流动,而无需刷新整个页面。对于Flash,Flex Data Services 提供了一个更完善的版本。这是一个用于数据管理的发布/订阅API。Flex Data Services在客户机和服务器之间自动执行缓存和更新,无需编写额外的代码就能产生最佳的用户体验。这允许处理实时数据、构建协作应用程序,以及集成企业消息传递。可以在单个CPU上免费使用Flex Data Services;如果您的应用程序需要多个CPU,那么您会被当作一个企业,并且需要一定的许可费用。

我之前提到过Gliffy,它是使用OpenLaszlo构建的。在Flex编译器和框架变得免费之前,OpenLaszlo非常有吸引力。但是OpenLaszlo小组已经决定,他们将通过将DHTML与Flash结合提供大多数人能够接受的技术,这消化了DHTML的局限性。Flex吸引我的原因是,它允许我执行在常用浏览器中不能执行的操作,而且无论在哪里,这些操作都会产生相同的结果。另外,Flex比OpenLaszlo发展更快,这是因为它利用了Flash 9中的JIT编译器。因为现在Flex是免费的,没有理由不使用它。

桌面上的Flex

当然,如果我的梦想是能够深入学习一种GUI系统,那么这个工具会是Flex吗?因为它最初就是设计用于web RIA的?

Flex UI可以发起与它的服务器或者它选择的任何其他服务器的通信。服务器不能发起与Flex UI的通信,这一点很重要,因为可以保证安全性(这类似于计算机上有一个开放端口)。
但是,Flex UI不仅能够与服务器通信,它还能与本地应用程序通信。因此,可以用自己喜欢的任何语言(甚至是像Python或Ruby这样的动态语言)创建应用程序,然后使用Flex构建一个漂亮的UI。
Adobe正在开发一个叫做Apollo的新工具,这是一个跨OS运行时,它支持使用Flex创建桌面RIA。这意味着您的Flex技能可以进一步用于创建流畅的桌面应用程序,而且它也意味着可以更轻松地构建在web和桌面上都 能运行的应用程序(我曾经见过支持其他语言来实现这个功能的昂贵且难用的工具)。

结束语

我们显然不能等待Sun修复Java的所有问题。最终,开源Java也许会对修复Java缺陷产生巨大影响。例如,Java Media Framework (JMF)中的工作可能会恢复。或许有一天会修复安装问题。这完全有可能,但如果您现在就需要解决问题,那么解决方案是对该语言的各部分各取所长。我们已经这么做了。您没有坚持为一个应用程序使用一个数据库;您使用一个专门的系统,比如MySQLOracle。Sun能够直接支持针对混合Java/JRuby编程的JRuby开发。我们将会看到其他具有特殊用途的语言将会出现,用以解决专门问题。如果专门的系统能够更好地解决这个问题,为什么要坚持为UI使用一个Java库呢?

正如TurboGears-Flex demo I created with James Ward所示,可能使用一种像Python(或者Java、Ruby、C#或其他)语言作为后端并使用Flex构建用户界面。这甚至可以在桌面应用程序上实现(使用即将发布的Apollo工具能实现更多)。

更多信息

您可以在Adobe.com web站点和http://www.flex.org/上了解关于Flex的所有信息。这是一个非常丰富的站点,其中包含大量示例、教程和屏幕录像。它们甚至有一个在线Flex编译器,可以立即尝试。还有一个James Ward提供的关于使用Flex开发的深入演示文稿。还有另一个正在制作的屏幕录像,展示了如何将Flex作为Java服务器应用程序的前端使用;当它完成之后,我会在Developer Center中通知大家。下载Flex(试用或者购买)。您现在可以在服务器(可以在其硬件上运行Linux)上创建低成本、功能强大的Java组合,以及在客户机上创建交互式Flash界面。

关于作者

Bruce Eckel编写了许多关于计算机编程的著作和文章。他经常举行针对计算机编程人员的演讲和讲座,他是ANSI/ISO C++标准委员会的创建成员。他最著名的著作是Thinking in Java和Thinking in C++,适用于面向对象编程经验很少的编程人员。大多数评论家都认为这些著作比大多数关于Java或C++的介绍性文章更有价值,而且更加适用于教学。他的这两本著作都可以免费下载。但是,他的最新著作Thinking in Java, Fourth Edition不再提供免费版,也不提供电子版。

有功能都能够无缝运转,而且不希望遇到平台问题。我的解决方案在很多情形下能够生效,但有时客户会给我发电子邮件说,这种方案在他们的计算机上行不通,我不知道问题出在哪里。我能做的最好的事情就是让他“在其他计算机上试试”,而且这常常能解决问题……无论是什么问题。我永远不希望听到这类问题;我只希望所有功能都能够生效。

我的主要目标是创建一个slide-and-audio内容交付系统,就像您在Hands-On Java CD ROM或Thinking in C中看到的一样。Java曾经宣称“只需编写一次就能在任何地方运行”,它是一个很有吸引力的竞争者。不幸的是,Linux对它的支持来得太晚了(而且Mac的支持也比较晚)。Linux和Mac用户也许只是少数,但是他们能直言不讳地提出意见。

遗憾的是,Java不支持MP3和多媒体。正如Java Posse的Dick Wall曾经多次指出的,Java Media Framework (JMF)被忽略了许多年。在我最初做决定的时候,没有对任何压缩声音格式的支持(与MP3相比,我更喜欢使用其他格式)。即使到现在,也只有开源软件能够支持MP3,理论上讲很不错,但是我不想对其进行测试并找出平台问题——我希望它能够运行;我惟一希望从客户那里听到的回应是“这太好了!”
似乎惟一能够使用的只有RealPlayer,所以我使用它播放第二版的HOJ CD。但是RealPlayer在安装过程中总是试图让您购买付费版本;我必须告诉人们如何找到免费版本。而且它非常霸道——它取代了MP3,尽管您告诉它不要这么做。

尽管如此,RealPlayer也不可靠。它的安装偶尔会出现问题,我收到了很多这样的电子邮件。我不知道问题的根源,而客户通常会认为是CD出了问题。Daily Show使用RealPlayer多年了,它不但因为总是开始和停止而使人苦恼(所有媒体都不能预先下载,只能在线观看),而且在图片左侧总是存在拖尾。现在Comedy Central已经转变为一个新系统,但这只能间歇性地运行。所以我只能期待它们在YouTube上发布了。什么我们喜欢Ajax?这显然不是因为JavaScript易于使用——JavaScript的跨平台问题是过去人们不愿使用它的原因。Ajax的流行是因为,我们知道客户端已经安装了必需的软件。人们必须首先解决JavaScript的跨平台问题,但是如果Java Runtime Environment (JRE)很容易安装,所有人都只需创建Java applet就行了。但事实不是这样的,applet没有这么流行,因而每个人都转向使用Ajax。所以,Ajax变成了大家喜爱的RIA技术。

尽管借助ECMAScript标准化会使情况得到好转,但是与JavaScript相比,我仍然更愿意使用Java编程,主要原因在于JavaScript的不一致性。也许八年内当前版本的ECMAScript将会成为几乎所有浏览器的标准。但是当前版本的JavaScript已经可以使用了(尽管其实现比较随意),并且不存在安装问题。我认为这很好地印证了一点:Java未能接手RIA语言的原因在于其安装问题。

尽管多年来已经对Java进行了各种各样的修补,但我认为根本问题在于,所有尝试解决安装问题的人都只是站在技术的角度,而没有从真正需要的角度考虑:外部用户的体验。

例如,我曾经被Linux发行版困扰,因为它的安装很麻烦。我几乎每隔一年安装一次Linux,而且一旦安装,安装程序就开始询问问题。只有精通Linux的人才知道这些问题的答案。我甚至无从下手,因此只有放弃并在来年再尝试。然后Red Hat诞生了(至少,我认为它是第一个关注安装体验的产品),而且安装Linux时不会询问问题,或者至少给出一些合理的默认设置。Linux正是从那时开始流行的。(最近,Ubuntu在解决Linux的友好性问题上似乎处于领先地位。)

安装JRE需要用户回答问题。对于精通JRE的人来说,这些问题的答案很简单或者是显而易见的,但是对于其他web用户来说,这些问题会让他们不知所措。在文章Sun Never Sets on Java Security Updates中,InfoWorld的Ed Foster评论并举例说明了Java的安装问题。尽管这篇文章主要是对更新的抱怨,但也对旧版本的Java很不满。Ryan Tomayko也写了一篇博客,讨论了Java的安装问题。

Java Network Launch Protocol (JNLP)是Java WebStart的基础,它本来应该解决这些问题,创建易于安装的桌面应用程序。我认为JNLP未被广泛使用的原因可以在https://aerith.dev.java.net/上找到,这是“Cool JavaOne Demos”的一个页面。如果单击页面上的JNLP版本链接,它将开始启动、下载一些东西并询问您问题。然后就没有下文了。没有错误消息或任何信息告诉你发生了什么。重复尝试还是会产生相同的结果,只是速度快些,因为需要的文件已经下载下来了。至少,我的体验是这样的。如果您能够正常使用,那么就更糟了——它只能随机地在一些平台上运行,而在另一些上就不行。这样的产品如何调试呢?

使用Java构建GUI应用程序并不是不可能,但是10年过去了,applet、Java WebStart和常用应用程序仍然存在安装问题。10年之后,人们不再信任它了。如果10年之后不会出现这种情况,我敢说某些人会认为这个问题不值得修复。即使他们修复了,由于用户已经有了如此多的糟糕体验,需要经过多年才能重新建立起之前的信任。

【相关文章】

【责任编辑:碧海蓝天 TEL:(010)68476606】


共3页: 上一页 [1] [2] 3
【内容导航】
企业级Web2.0 你准备好了么?
WebSphere 实现SOA的利器
Web安全云时代
万兆网络的发展与趋势
企业Web安全威胁在线评估系统
 
 验证码: (点击刷新验证码)   匿名发表
  • Visual C++ 完全自学宝典

  • 作者:强锋科技,朱洪波
  • Visual C++ 6.0是微软公司为程序人员提供的Visual Studio 6.0工具套件中的重要组成部分。本书由浅入深地介绍使用Visual C++ 6.0..
Copyright©2005-2008 51CTO.COM 版权所有