用GPL工具实现COBOL到Java自动移植

在Publicitas有限公司运作NACA项目期间,4百万行的COBOL代码被自动转换(移植)成Java代码。该公司宣布因此每年节约的现金有3百万欧元之多,并决定以GPL许可协议发布该项目工具。

Didier Durand和Pierre-Jean Ditscheid上周在Jazoon09大会上做了一个有关于此的演讲,这一讲稿可以从这里在线访问。

Pierre描述了这一“代码转换编译器”的架构:

  • 运用若干层cache来最大限度提升这一老应用程序新Java版本的性能。通过这些catch,转换成Java代码的事务处理和批处理比原先在大机上运行的Cobol程序性能更优。
  • 通过对所有程序可变结构(COBOL的COMMAREA)进行预分配来进一步提升性能,并且将运行过程中垃圾回收对系统的性能影响降至最低。
  • 采用Java强大的面向对象架构,使编译器所做的所有控制效果最大化。例如,每个老COBOL程序变成了一个Java类,该类的存在性是在编译时检查的而非在运行时检查。当应用程序如我们这个有4百万行代码、并且你想在一个像我们这样的持续集成架构中追踪每种类型错误时,这就非常有用了。
  • 与Eclipse IDE紧密集成,给开发者提供更高的开发效率:我们甚至开发了一个插件,以方便在Eclipse中调式并编辑老COBOL程序。
  • 老COBOL程序和新转换的Java类之间逐行对应。普通开发者不会迷失:他们获得的Java应用程序与原始COBOL版本的结构非常相似。
  • 对IBM JVM和SUN JVM都提供支持,以便进行存储过程转换。
  • 支持大机系统和Linux之间完全不同的字符集和编码模式(EBCDIC)。支持数据排序的所有可能性。
  • 在Java里能够完全管理多层级COBOL数据结构,不依赖于Java所使用的UTF编码(每字符2字节)。
  • 对应用程序的透明封装框架(JVM、Apache Tomcat等等)
  • 等等……

Didier还强调了这个项目的关键方面:

  • 经济动因是核心驱动力:从一个价值数百万(瑞士法郎或欧元)的大机环境移植到极为便宜且灵活的基于Intel的服务器(Linux)。可观的成本节约(我们的案例是每年3百万欧元)使得项目远在其结束之前就可快速自我融资(auto-financing)。对于我们这样的公司来说,开源的主要优点就是价格非常低廉。
  • 人们的技术迁移:我们认为我们的项目会获得成功,因为我们很早就向人们说明了他们最终将会找到一个有意思的新工作。正是这一点推动他们全力以赴投入项目!
  • iso功能性是必备的:以这种方式迁移避免了对最终目标的成月讨论。但最主要的是它允许100%的自动迁移,这是代码转换过程中的一个关键的质量因素。
  • 不要大改,而要采取很多可逆步骤:全部迁移包含有成千上万新步骤,如果你试图大跃进,则可能永远也无法成功。朝着目标持续增长的过程是更好的方式。其好处是:当出现问题时,小步骤所产生的本地问题也更小。用这种方式,你的用户更容易接受!我们的经验就是如此……

该工具可从这里下载,其发行物包括:

目前我们交付的工具(v1.0)是zip包形式:

  • Doc:一套解释工具及类库细节的文档。你们对这一文档、及其错误的有关反馈等等将有助于我们对其做出改进。
  • NacaTrans(GPL许可——大约83000行代码及690个Java类):我们的代码转换器使我们可以100%自动把4百万行用COBOL编写的PUB 2000 应用程序代码转换成Java程序代码。这完全建立在编译器技术之上。NacaTrans分析初始COBOL程序的结构(假定100%正确),把它们变成中间的xml结构,然后产生最终Java代码。所产生的Java代码调用了大量函数并使用了运行时类库NacaRT(该类库以来于JLib)的许多类。这些新的Java源代码经过非常仔细的设计:每行Cobol有意对应了一行Java。其目标是使代码看起来尽量像原始的COBOL代码,以便于原始开发者/掌握了原始Java程序结构的维护者进行维护。我们无法保证Cobol语法的所有变种都得到支持。但是我们的4百万行代码及在其他外部应用上的测试证明了当前NacaTrans的覆盖面已经非常高了。我们希望你能把我们不支持的有效构造反馈回来,以帮助我们提高这一覆盖面。
  • NacaRT和Jlib(LGPL许可——大约153000行代码及890个Java类):这是两个运行时类库,为应用程序提供了所有运行时事务服务。它们模仿了类似IBM CICS的经典事务监视器的所有功能。同时,它们还支持所有COBOL构造(例如,拥有多种数据表现的COMMARÈA结构,特殊数据格式如COMP-X的管理等等。
  • NacaRTTest(GPL许可):这是一个测试套件,让我们可以在一套参考COBOL构造上来测试代码转换器的对应输出。这是我们校验部分代码转换算法的方式。对于NACA的新用户来说,这里是最佳起点:当其运行在你的底层架构上时,你会对你安装的这个包相当有信心。

由于COBOL有50多年的遗留资产以及大约2500亿行Cobol代码,看起来类似的工具还有相当大的市场。

查看英文原文:COBOL to Java Automatic Migration with GPL'ed Tools

你可能感兴趣的:(用GPL工具实现COBOL到Java自动移植)