董向辉 (dracodoc@21cn.com)
中科院自动化所人工智能实验室博士生
2001 年 12 月
本文主要向还不太了解VisualAge for Java的人介绍它的特点,另外在本系列的下 一篇文章中将介绍刚刚起步不久的,全新的,大有希望的 Eclipse and/or IBM WebSphere Studio Workbench(一般简称为WSWB)。 前者在国际上有很大的影响,有一大批铁杆的用户,尤其是企业用户。 但是在国内则了解的人不多,用的人也很少。后者就更少有人知道了,有一些在 用VisualAge for Java,却还在找4.0,不知道以后已经没有VisualAge for Java 的后续版本...
对于现代的程序员,开发工具起着越来越重要的作用。尤其在java领域,各种工具和厂商之间的关系十分复杂,用户之间对开发工具的争论是一个永恒的话题。
在新闻组和BBS上常常看到有人问什么开发工具最好,经常就会有人对新手说,就用 JDK 和notepad (ultraedit,editplus,...);也有许多有C,C 经验的人上来就找Visual J ;还有许多人对Borland JBuilder情有独钟,加上一些通用的集成开发环境比如Visual Slick Edit,一些基于java的比较小的开发环境,比如Kawa,JCreator,IntelliJ...更不用提UNIX环境下那些狂热的EMACS,VI的爱好者了...
然而我最喜欢的还是VisualAgeJava,以及现在的 Eclipse and/or IBM WebSphere Studio Workbench。
究竟要用什么工具,肯定是没有绝对答案的,不同的人需求不同,习惯不同。
有的人喜欢用JDK和文本编辑器,是因为喜欢感觉到真正的代码,知道“背后发生的事情”,对他们而言,可视化编程工具生成的代码绝对是垃圾,不利于自己的修改和维护。但是他们并不是排斥工具,要不然,也不会把notepad换成ultraedit,editplus,乃至更强大的工具,远远不是一个文本编辑器那么简单。
至于使用Visual J ,Borland JBuilder,也很明显,界面和习惯都很熟悉,很快就知道怎么回事,可以上手。但是其实Java世界有它自己的特点。
最初的Java IDE大概是Symantec公司的Visual Cafe,由于其编译器速度很快,尤其出现的最早,很快占领了大部分的市场份额,现在虽然已经大不如前,但还是有其特点的,尤其是国际化支持方面比较突出。
此后就是IDE领域的老牌公司Borland的JBuilder,早期的还比较粗糙,但是随着版本的不断更新,集成了许多类库和组件,以及Borland一向的良好声誉,成为当前最普遍的IDE之一。
Microsoft的VisualStudio在C 领域是绝对的老大,在Java领域却不能有同样的风光,其实从微软公司的战略角度,这点是很明显的。从较早的Visual J 1.0到比较稳定的1.1,以及号称专门从Borland挖来的Delphi总设计师亲自设计的Visual J 6.0,它始终处于一个尴尬的位置。后来更因为被Sun起诉,被迫最终修改。
不可能从Microsoft得到Java的开发工具,这是很明显的。
有的人第一次用VisualAgeJava,可能会不太习惯:怎么界面这么土?(VisualAgeJava的版本更新很少带来界面上的变化,没有其他软件花哨,其实可以说是优点。不过,Eclipse or WSWB的界面可就完全不同了,不仅很漂亮,而且有很精心的设计,而不是照搬习惯的方式)怎么没有我熟悉的菜单结构?...
VisualAgeJava有很多独特的地方,需要一个熟悉和适应过程。
VAJ用自己的二进制格式文件(资源库)作为基本的存储模型。
对于开发者而言,完全不用考虑文件和路径的所有问题。所面对的直接就是package,class,method......,同时在显示上也是以类、方法等单元作为对象,只显示选中的元素(直到近期的版本才出现了full class view),这非常符合面向对象的概念,帮助开发者用面向对象的概念和模型来考虑问题。
当然,有人可以说,不接触文件,不搞清楚文件,路径,包的关系,就没有了解Java中这部分真正的内部机制。但是,即使是已经充分了解的有经验的程序员,也难免在这个问题上犯错误或者耗费不少时间和精力(因为牵涉的因素很多),对于初学者,这一点就更重要了。
内置的版本控制。正是因为使用了资源库,在VAJ里面版本控制的功能十分强大。每一次存盘的状态都被保存,可以很容易地回溯和比较。任何时候想冻结代码的状态时,可以将一个版本版本化。这样将使特定版本成为只读的,并可以命名。编程时完全可以放心保存和修改,对于开发周期内的一些特殊点可以方便地留下快照。
增量编译。在VisualAgeJava中没有显式的编译过程,每次存盘的同时就进行了增量编译,有问题立刻标出。这不仅节省了编译的时间,省去了一个步骤,也强迫开发者每一阶段都要保证正确,这种step by step,在正确代码基础上继续工作的增量式开发是一个很好的习惯,比上来就写很长一段程序,编译运行,然后再慢慢地调试和寻找错误,要高效得多。最好的调试方法就是避免错误。
调试器。VisualAgeJava用的是IBM的Java虚拟机,使它具有独特的hot-link功能,可以把修改后的代码编译后连接到正在运行的程序中。甚至有人说,他就在debugger里面编写程序,程序一直在运行,而不用像有的人那样,必须写大段大段的System.out.println来观测程序运行状态。
还有一个很好的例子:Apache Tomcat Servlet and JSP Development with VisualAge for Java
http://www7.software.ibm.com/vad.nsf/Data/Document2389?OpenDocument&p=1&BCT=1&Footer=1
这篇文章介绍了如何在VisualAgeJava使用Tomcat(3.5以后VisualAgeJava直接加入了JSP开发环境,不需要使用这篇文章的方法了,但是其机理是一样的。)。VisualAgeJava有两个独特的核心技术,特别适合于开发servlets和JSP:
模拟多个虚拟机实例
增量编译和将代码“hot-linking”进运行中的程序。
servlet的生命周期导致通常的开发必须停止并重新启动Web Server以更新servlet类或者重新装载一个JSP调用的Java组件。在开发过程中需要非常频繁地修改servlet或者JSP的源码,那么使用一个Web Server或者某个“ServletRunner”就是非常麻烦的事情,特别是当需要调试一个只在servlet已经运行一段时间后才发生的问题,或者一个很长的循环中的某个部分时。
幸运的是,在VisualAge for Java中,当改变servlet中的一个方法时,VisualAge for Java仅仅增量编译这个改变了的方法而非整个类,然后把它hot-link进正在运行的程序。
增量编译很重要,但是同等重要的是不必重新启动正在调试的程序,不必重新创造引起正在调试问题的程序状态,这带来的效率提高是惊人的。使用VisualAge for Java,你可以修改运行中的servlet,bean,tag或者EJB代码,不用不停地终止和重新启动Web server.此外,在server运行时你就有整个开发环境的所有特性可供利用。更加强大的是,即使你改变的bean或者其他类是从servlet或者JSP中调用的(例如,对于在另一个模拟的Java虚拟机实例内的container里运行的EJB),也不需要启动并停止server。
另外有独立的IBM distributed debugger,不过我没有用过,无法评论。
代码片断编辑测试窗scrapbook。其实只是简单的文本文件,可以任意地做笔记,写编程的思路。更重要的是测试代码片段的功能。想到一个实现方法,可以立刻写一小段代码来进行测试,不用写完整的程序,只要设定代码片段的运行环境就可以立刻看到结果。 这个小小的,简单的工具对于开发效率的提高是非常显著的。
企业版对团队开发有非常完善的支持。这方面我实际使用不多,就不多介绍了,有兴趣的可以参考相关的网站。值得一提的是IBM提供了很多网上资源,文档,教程,多媒体教程,新闻组,这些是非常重要的,后面将给出一个简要的列表。
附注:
有一些比较小的地方,初次使用者可能不习惯或者不容易发现,这里简要地提一下。
VAJ的窗口缺省是上下横排的,不习惯的话可以在窗口-翻转方向中改过来。不过这也是因为VAJ的method view特点,每次只显示当前选中的元素,而一个方法是不应该太长的。
代码辅助自动完成:缺省的Ctrl-space可能与输入法冲突,可以使用Ctrl-L。
支持模板,比如输入for按Ctrl-L就可以提供for(int i=0;i< ; i ) {} 这样的模板。也可以自定义,有人把System.out.println()自定义为sop。(Eclipse中缺省定义为stdout)
自动格式化ctrl-w,这是很方便的特性,不用自己为换行和对齐操心了。
选中一段代码ctrl-/,加注释,ctrl-/去注释。因为java注释不能嵌套,对于包含注释的代码要注释掉比较麻烦,现在则很简单。
在编辑窗里Ctril-i增量搜索。
建议在窗口-选项里把常规里设上在同一浏览器中打开项目,类似于浏览器那样,可以back和forward。
有的工具栏图标上有小三角,有的初学者可能看到应该有下拉列表,但是就是点不出来。事实上必须有窗口历史的情况下才是可用的,另外要点右键来选择后退或前进到列表中的某一项。
帮助系统是完全基于浏览器的,实际上使用了一个自己的小Web server。有的人总是无法启动帮助,必须注意启动VAJ的时候不能启动程序目录下的ide.exe,而要使用安装程序创建的快捷方式(也就是ivjenv.bat)。
在IDE中选中Java关键字按F1,可以查到相应的帮助,但是只限于java关键字和系统包。
关于资源库和工作区:
原来的台湾DW中有一篇文章,《在VisualAge for Java管理原始資料碼》,详细讲述了资源库和工作区的机制,但是现在可以搜到文章,但是没有连接了。这里还有一份
http://www.cnpedia.com/update no4/056.htm
英文原文
http://www7.software.ibm.com/vad.nsf/Data/Document2333?OpenDocument&p=1&BCT=3&Footer=1
可以通过使用-i参数和相应INI文件使用不同的工作区和资源库,这样可以有不同的工作模式,相互隔离,在有些时候是非常有用的。具体参考上面的文章
如果需要干净的workspace文件来恢复,VAJ的安装光盘第二张上有一个备份,instantiations公司的网站则提供了各种版本的:
http://www.instantiations.com/vaj/files/default.htm
资源库文件在长期使用后可能会变的很大(新闻组上有人说他的资源库有2G?!),对其所在磁盘进行碎片整理有可能可以带来不少性能的提高。
附加工具
使用VAJ,就不能不提VA Assist。Instantiations公司(http://www.instantiations.com/)一直在开发VAJ的附加工具,目前主要有
- VA Assist
提供了许多IDE的增强功能,具体请参考http://www.instantiations.com/assist/home.htm 许多地方虽小,但是很有用。比如可以设置切换窗口则自动保存并忽略错误,可以省去许多的对话框点击。 (最新的版本支持把VAJ的项目和WSWB之间的相互导入导出。) - jFactor
是一个refactor工具。Refactor是指改变软件系统以提高内部结构和可用性而不影响程序的外部行为。 http://www.instantiations.com/jfactor/docs/VA/default.htm - JOVE
可以将任何Java IDE生成的标准Java类文件优化后生成本地代码,产生一个可执行文件。
http://www.instantiations.com/jove/product/thejovesystem.htm - jKits 创建可定制的交互二维图表的框架。
http://www.instantiations.com/guiproducts.htm - CodePro Studio WebSphere Edition
针对WSWB的增强工具。尤其重要的功能是提供了一个桥使得WSWB可以使用VAJ的可视化编辑器(VCE)。
- developer Works台湾,台湾站点因为比较早,也有不少内容。
- VADD--VisualAge Developer Domain,有大量的文章,资源
http://www7.software.ibm.com/vad.nsf - VisualAge for Java Tips and Tricks ,Effective VisualAge for Java, Version 3 的作者的网站,但是更新不多。
http://www.javadude.com/vaj/
关于作者 董向辉,中科院自动化所人工智能实验室博士生。研究方向为演化计算和复杂性科学。E-mail:dracodoc@21cn.com |