从最初的可移植,安全,健壮,可用于网络的语言的承诺开始,Java已成为Internet开发的分解平台。对Internet有利的对Intranet有利,因此正在或已经移植了许多应用程序以使其可用于Web。今天,您几乎可以在任何地方找到Java。罕见的平台不支持它。大多数提供虚拟机选择。Java在小型设备,大型机,电视,个人计算机,各种服务器(嵌入式或其他)上运行。
开放的社区流程使想法得以实现。标准API如此广泛,以至于很少有软件问题不能直接用Java有效解决。在极少数情况下,需要使用本机代码,但是JNI提供了有效的网关。在需要特殊图形功能的地方,可以使用Swing,2D和3D API。J2EE涵盖了从数据库访问到动态页面控制,对象关系映射,目录服务和高性能解决方案的所有内容。
前进的道路很诱人。如此之多,以至于今年研究首次宣布,与美国市场上的其他语言相比,更多的招聘信息将Java经验作为决定性因素。调查告诉我们,大多数《财富》 2000强公司现在都在运营中进行Java开发。业内观察家告诉我们,资金充裕,前景光明。
所有证据都表明成功。JavaOne的参与者已经超过25,000。围绕Java开展的贸易展览比以往任何时候都多。炒作仍然存在,但事实远远超过宣传。Java成功的故事比比皆是。已经出现了致力于构建Java工具,提供培训和咨询的整个行业。
程序员喜欢Java。实际上,很少遇到遇到任何使用Java进行过项目的人,而这些人没有确定他们比其他语言更喜欢它。发挥最新的理想-模式,UML,重构和极限编程-并为认真的创新和愉快的时光做好准备。
Java显然是独特的。编程语言从未如此有效地跨越平台和操作系统边界。因此,Java已经在极大地改变世界。在使用Java之前,认为我们可以使用专有方法进行语言开发来桥接平台是很荒谬的。每次我们尝试时,本机扩展都会遇到麻烦。
简单性是使技术无处不在的关键。X.500是一个伟大的想法,试图做太多事情。失败了 LDAP是X.500的简化版,实际上是即时成功的。SGML试图处理无尽的文档结构变体,但失败了。XML是另一种简化,几乎每个人都容易采用。这些成功案例的重点是满足基本要求的简单设计,而不是一次尝试做所有事情。
过度设计(由委员会)解决方案的另一个示例是CORBA;它试图做太多。几乎所有已部署CORBA解决方案的人都只使用了规范的一部分,通常必须应用专有扩展才能使功能正常运行。最终结果是一千种CORBA变体,其中很少能够相互通信(尽管情况确实有所改善)。
Java与早期语言之间最根本的区别是Sun设法正确使用了大多数语言,成功地实现了80/20规则。其他语言的比例更大,为40/60,在该语言并非“真正为之设计”的领域中完全失败。Java倾向于通过非常松散地耦合到环境来解决更广泛的问题。
为了更直观地了解情况,我们将快速回顾一下JavaOne在过去几年中的一些竞选承诺和重大事件,并了解哪些预测是有先见之明的,而哪些仅是未兑现的承诺。
John Gage在1996年的第一次JavaOne会议上有几句话要说。引用Arthur van Hoff的话说:“ Arthur会说出设计团队的口头禅:‘如果您要这样做,那就做对吧。’ 这导致了语言设计中的每个简化决策。”
关于同一主题,“还有第二个准则。避免不必要的差异,因为我们的目标是无处不在。还有那个小恶魔-生活在我们所有人中的那个小史蒂夫·乔布斯(Steve Jobs)–“除非我有所不同,否则我无法赚钱,”你知道,你必须打击那个恶魔。这些是Java即将取得成功的早期关键。“我们正在尝试构建某种东西,以使其在底层无处不在,而创新则在其之上。”
多年来,来自许多不同领域(尤其是微软,IBM,HP和其他一些领域)的压力很大,这可能使Java走上了一条不同的道路,但Sun设法成功地抵制了对Java基本设计的专有更改,并且早期愿景的核心。
鉴于对乔布斯(Steve Jobs)的直言不讳,他在今年的JavaOne上亮相,承诺Mac OS10将成为世界上最好的Java交付工具,这有点讽刺。
麻省理工学院计算机科学实验室万维网联盟主任蒂姆·伯纳斯-李(Tim Berners-Lee)提出了几点意见。
他说:“面向对象的程序在全球化时变得可行,这使我感到很有趣。超文本距万维网已经存在很长时间了,但是当这些超文本链接只能指向本地磁盘上的某个位置时,它并不是很令人兴奋。通过Web使其走向全球,突然变得非常令人兴奋。”
而且,“当您可以继承不认识的人所写的东西时,全球化环境中的面向对象编程会突然变得非常令人兴奋,他们只是从他们那里找到了文档,但是您的主页’读过。”
这些都是有见地的评论。如果没有网络的全球化影响以及Java的网络就绪性,Java的采用曲线将大为不同。
蒂姆还说:“如果您想将该COBOL编译为Java字节代码并通过网络发送;然后,不,没有人会反对。没关系。我们在那里有很大的灵活性,因此我们在编程语言和字节码之间具有灵活性,这非常有趣。”
尽管您可以将COBOL编译为字节码当然是可能的并且很有趣,但是以前的语言中有太多专有的本机元素,因此无法使其成为有效的选择。而且,如果没有面向对象的思维方式,最终的代码将退化为庞大的main方法,几乎无法提供任何方式,可重用性或可维护性。
Berners-Lee的最后评论:“因此,它们会带来一点点新的Java类,以便您可以在不需要繁重的操作系统的轻量级环境中很快运行Java应用程序和Java Applet。更换操作系统。您真的不需要操作系统。”
好的,所以我们还没有为此做好准备,尽管在信息设备市场中这种说法可能更准确。到目前为止,操作系统市场是完整的,并且没有被Java平台纳入的危险。对于OS公司而言,Java仍然只是另一种编程语言,尽管他们现在肯定必须在其平台上交付Java。
JavaSoft总裁Alan Baratz博士在1996年曾这样说:“我今天上午宣布了一系列公告。其中包括:JavaOS,新的HotJava产品,对基本Java开发人员工具包的增强,我们称为“ JavaBeans”的项目(我没有给出这个名称),然后是新的在线开发人员支持计划。”
JavaOS似乎是一种失败,是一种很好的学习体验,但目前仅此而已。实际上,看起来更好的选择是在其上放置JVM的小型Linux内核。HotJava是一个很好的概念证明,但实际上从来都不是商业浏览器。
另一方面,JavaBean是对我们编写软件的方式的根本改进。当然,在1996年,没有人知道采用它会花费很长时间。即使在今天,Enterprise JavaBeans仍需要一些基本改进。该主题演讲中介绍的早期JavaBeans仍在等待前向兼容的序列化格式。
巴拉茨继续说:“最后,是国际化。大约两周前,我有机会访问了日本,每一次会议所传达的最重要的信息就是国际化和本地化。这项工作也进展顺利。”
这是即将发生的事情的预兆。在今年的JavaOne上,国际知名度很明显,大约50%的与会者来自国外。Java的国际化和本地化支持是首屈一指的,并且在许多方面都是典范。最初对该语言的Unicode支持是关键。
斯科特·麦克尼(Scott McNeely)仍在兑现诺言,但在1996年,他说:“我们并不是要绝对取代个人电脑。有足够的时间。”
最近,我们还没有发现PC销量出现任何放缓。实际上,如果有的话,Java可能在增加PC销售方面发挥了作用。跨平台的Java解决方案大量涌入了过去被跨平台Java解决方案牢牢占据的本机应用程序空间,从而降低了过去仅在大型计算机上运行的高端应用程序的进入门槛。
Scott的另一条评论:“在此网络终端上获得媒体报道的最佳方法是将其称为500美元的终端。” 不幸的是,500美元的终端仍然是终端,而不是PC。
一个大故事是“ Corel正在用Java编写WordPerfect Office Suite。” 这绝对是一个有趣的故事。它教导说,不建议在不仔细考虑应用程序体系结构的情况下移植到Java。
Corel在编程时间和精力上进行了不可思议的投资,但最终以早期采用者的身份在市场上失败了。Java尚未为复杂的GUI应用程序做好准备。从那以后,StarSuite证明Java更适合开发完整的办公套件,因此Corel的想法是正确的,但是执行力很差,而且当事情变得艰难时,他们似乎没有耐力。
麦克尼利(McNeely)开车领养“酷!现在该开始用Java重写旧应用程序了。” 好主意!但是大多数遗留数据库仍然没有被替换。基于Java和EJB的应用程序已与旧系统并行安装;向客户提供新的功能集,但很少取代现有的投资。这在很大程度上是由于这些系统中数据库模式的悲惨状态以及难以移植大量现有功能而不失去过程中的重要功能的困难。
事实证明,将这些怪兽留在原地,打开并行Java应用程序来访问这些数据库会更容易,该应用程序可以访问这些数据库,并随着时间的推移将旧数据移动到新结构中。这种方法可以防止大量停机或传统系统(通常是关键任务实现)的中断。目标仍然存在,但时间表并不那么紧迫。
这是关键词:“到处写一次”。我们都知道这一点。在开发中,我们称之为“一次编写,到处测试”,而在操作中,我们称之为“编写一次,到处调试”。与以前的替代方案相比,这是一个好问题。
可移植性是真实的,两位作者都可以从经验谈起,包括以最小的努力在大型平台上移动大型Java应用程序的项目。其中之一是一个150k行的EJB解决方案,该解决方案仅需1.5个工作日即可从一个应用程序服务器/数据库/操作系统迁移到另一套完全不同的系统。
找一个供应商说“哦,是的。。。它在另一个平台上运行得很好!也许我们可以给我的客户同样的演示,他似乎也喜欢购买您的产品,只是为了看看他们的想法。” 经过这样的声明,供应商支持水平似乎急剧上升。
Swing是1997年的缩写。JamesGosling说:“它将具有丰富的预定义组件集,可以完全自定义,将简化商业GUI开发,并创建开放的组件市场。所有GUI组件将可以互操作。程序员应该能够从Mac到PC到任何其他来回切换任何GUI的外观。”
大多数情况都是正确的,但是开放组件市场才刚刚开始兴起,还没有像这些声明所暗示的那样成功。随着Java 1.3的发布,Swing几乎达到了最佳状态。Swing成功的秘诀是它不会对用户造成非本地的外观。取而代之的是,它提供了这种选择,在其他跨平台GUI解决方案均失败的情况下成功。
戈斯林还谈到了PersonalJava和EmbeddedJava。“ EmbeddedJava旨在减少内存使用量–适用于字节码小得多且ROM和RAM需求少的小型设备。在诸如工业控制器,寻呼机,路由器,交换机或任何需要少于0.5 MB ROM的设备之类的产品中,EmbeddedJava也将很有用。”
另一个重要的公告是“ 100%认证计划”。不幸的是,100%Java的定义过于宽松而无用。如果标准假设本地代码的Java包装已足够,您怎么能称呼“纯Java”?这种方法破坏了认证的目的,并使其失败。
远程方法调用于1997年问世,它引入了Java序列化并启用了Internet上的远程对象调用。显然,这是使Java如此庞大的许多小事情之一。
1998年,他们声称“写一次,随处运行”的承诺实际上是有效的。抱歉。到处仍然是一次编写,测试和调整。但是我们将把它放在任何其他选择之上。
戈斯林说:“但是在1.1版本中,所有这些JIT都问世了。” 这既是诅咒,又是祝福。随着时间的流逝,实现问题将解决,但仍然会出现零星的问题,具体取决于您所运行的供应商和平台,尤其是在多线程解决方案中。尽管如此,这仍然是Java性能方面的一大进步,并且产生了巨大的变化。
一个大故事是“国际标准组织最近批准了我们提交的Java技术规范。” 不幸的是,这后来被撤回了。
当然,这是一个争论不休的话题,因此我们将发表煽动性的评论,认为到目前为止Sun一直在掌权。他们已经实施了一个开放式流程,该流程具有响应性并且受社区驱动。Java并不是严格的开放标准,但是Sun表现得很仁慈,使该过程成功了。在拥有明确的所有者的情况下,他们避免了按委员会设计的问题(不要写这个,这只是我们的意见)。
这个人很乐观,“ Java JumpStart的工作方式是作为企业IS组织,您可以在CD上购买它并将其安装在服务器上。所有虚拟机将继续连接到您的每台服务器。然后,您可以将Project Java Activator与Java应用程序结合使用。” 可悲的是,自动写入任何Microsoft平台充满了危险。鉴于市场份额,JumpStart的采用从未成功。
引入RMI / IIOP作为通信基础,而Java命名目录接口(JNDI)是Enterprise Java的另一本垒打。1998年,作为技术预览,首次引入了Enterprise JavaBeans。这是Sun最重要的贡献之一,它巩固了跨平台接口,而不是发明新的解决方案。
在1999年,重点放在服务器端Java:“我也看到我们专注于服务器端。” 他们说。Sun可能已经转移到服务器端,但是对于开发人员来说,这是一场全力以赴的事情。
Jini是一种真正革命性的技术,可能与IP的诞生一样重要。Jini通过允许服务和设备在网络上相互查找来扩大传输层。设备领域的供应商支持非常迅速,Sun专注于这一角度,但是开发人员花了一段时间才看到软件服务的优势。这就是基尼的真正力量所在。JavaOne 2000上Jini成功案例的数量应足以证明。如果您持怀疑态度,请稍等。
Sun于1999年与Palm Ones达成协议,将Palm Pilots遍及整个JavaOne。您可以以200美元的价格购买它们,因此它们无处不在。KVM使为信息设备编写Java应用程序成为可能,而这正是该镇的话题。K虚拟机是正确的火车,在正确的轨道上,只需要一点马力。
1999年,J2EE取得了新的进展。使用EJB会话管理的持久性的开发人员获得了即时价值。那些使用容器管理的持久性的人继续挣扎。如果部署使用布局合理的数据库,则只需进行少量调整即可。遗留数据库领域中的承诺仍未实现。
JMS也是在1999年引入的,一个伟大的想法仍在等待成熟,另一个成功的规范定义了接口而不是给定的解决方案。现在很难区分好的供应商和坏的供应商,很难弄清楚如何调整其实现,也不清楚它们最大的优点和缺点是什么。尽管如此,JMS是一项成功的技术,仍在等待大型应用程序迫使供应商处理真正的密集负载情况。
今年的重点是增加现有技术的价值。大多数会议都围绕J2EE解决方案,GUI开发和Jini成功案例进行。
特别值得注意的是Jiro的引入,它是一种利用Jini来完成工作的分布式管理基础结构。Jiro是一个分层的解决方案,可让您插入现有协议和管理工具,以多种方式将事物捆绑在一起。这是一项值得关注的技术,尽管现在说它将有多成功还为时过早。
宣布“ J2EE将在任何其他应用程序服务器上运行”。是的,尽管它在某些情况下会更好,但这绝对是您想要的。选择合适的供应商,您就在天堂。选择错误的供应商,您随时可以移至其他供应商。远离任何特定于供应商的解决方案。
Linux支持无处不在。唯一的缺点是增加了庞大的用户社区,但这正是您想要的问题。蒂姆·奥雷利(Tim O’Reilly)在那里发掘开源的美德,而Sun将许多许可证捐赠给了Apache组。他们甚至宣布将使其最近收购的几个产品开源,包括Forte和StarOffice,这两个都是非常重要的应用程序。