写点什么

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

2009 年 7 月 07 日

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

2009 年 7 月 07 日 11:322436
用户头像

发布了 150 篇内容, 共 35.6 次阅读, 收获喜欢 2 次。

关注

评论

发布
暂无评论
发现更多内容

第三周作业

hunk

极客大学架构师训练营

性能压测的时候,随着并发压力的增加,系统响应时间和吞吐量如何变化

Jacky.Chen

性能测试 课后作业

ABS

架构师训练营第二期 Week 3 总结

bigxiang

极客大学架构师训练营

Week_07 总结

golangboy

极客大学架构师训练营

LeetCode题解:77. 组合,回溯+for循环,JavaScript,详细注释

Lee Chen

算法 LeetCode 前端进阶训练营

第三周 命题作业

willson

工厂方法模式

猴子胖胖

golang 设计模式

架构训练营第三周作业

小兵

第 3 周 代码重构作业

心在那片海

三周 作业

水浴清风

架构师训练营第 1 期 - 第 7 周学习总结

Anyou Liu

极客大学架构师训练营

架构师训练营第七周作业

听夜雨

极客大学架构师训练营

性能优化(1)

wing

极客大学架构师训练营

Chrome浏览器引擎 Blink & V8

曲迪

Java chrome 前端 blink V8

架构师训练营第 1 期 -- 第七周学习总结

发酵的死神

极客大学架构师训练营

抽象工厂模式

猴子胖胖

golang 设计模式

架构师训练营-第七周

袭望

架构师训练营第 1 期 week7 总结

张建亮

极客大学架构师训练营

第8周作业

静海

架构师训练营第 1 期 -- 第七周作业

发酵的死神

极客大学架构师训练营

计算机的时钟(四):TrueTime

ElvinYang

单例模式

猴子胖胖

golang 设计模式

第 3 周 代码重构总结

心在那片海

架构师训练营第七周学习总结

听夜雨

极客大学架构师训练营

服务器性能监控神器nmon使用介绍

MySQL从删库到跑路

Linux nmon 性能监控

架构师训练营第三周心得

小兵

架构师训练营第2期-第3周作业1

xiaomao

成为架构师 - 架构师训练营第 03 周

陈永龙Vincent

设计模式 - 学习总结笔记

Xuenqlve

第三周 总结

willson

极客大学架构师训练营

InfoQ 极客传媒开发者生态共创计划线上发布会

InfoQ 极客传媒开发者生态共创计划线上发布会

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