IBM iSeries上的RPG到Java迁移

时间:2011-11-21 21:30:16

标签: java java-ee ibm-midrange rpgle rpg

我们公司使用IBM iSeries进行大部分数据处理。我们所有的内部应用程序都是用RPG编写的。根据IBM的路线图,IBM正在推动公司转向Java / J2EE。我们希望将内部应用程序现代化为更多的GUI界面。我们使用Asp.Net网站提供外部网站,尽管绿地项目可能是Java。一种选择是在使用RPG时使用屏幕刮刀应用程序,但我认为慢慢采用IBM的路线图并转向Java可能会更好。我们的目标是迁移到GUI界面并与IBM的路线图一致。

您是否参与过RPG到Java迁移,即使只有绿地项目是Java而且棕地项目仍然是RPG?

我的管理层害怕:

1)更新工作站上的JRE,特别是瘦客户端,可能会导致管理噩梦(我们公司使用80%瘦客户机和20%PC)和

2)Java需要过多的工作站开销才能有效运行

3)我们更新时JRE客户端之间不兼容,可能会破坏需要JRE的其他应用程序。

你能否对此有所了解?有什么巨大的好处吗?任何巨大的陷阱?

澄清:我只对迁移到Java感兴趣。什么是难度级别,从RPG到Java时我会失去什么?在迁移到Java时,屏幕是否响应迅速?

4 个答案:

答案 0 :(得分:14)

我的公司也在尝试从RPG迁移到Java。

  1. 我们并未尝试在瘦客户端上使用JRE,我们正在转向通过浏览器提供的Web应用程序。这可能需要(最终)用一些较新的基于PC的POS扫描仪替换旧的POS扫描仪。
  2. 我(公司架构师)已经告知iSeries OS 上的JVM 存在一些性能问题。我个人不知道这些限制是什么。在我们的例子中,迁移涉及分配一个应该更好的AIX资源 - 与您的IBM代表讨论您是否只需要购买操作系统许可证(我只是对该事件进行编程,我不会得到参与硬件)。
  3. 请参阅问题1的回应。在更大的环境中,您尝试更新浏览器(或任何其他资源),这通常通过拥有企业许可证来处理 - 可以选择允许强制远程更新。
  4. 其他一些说明:

    • 您应该能够转向使用.NET,尽管您可能需要不同的硬件/分区来运行环境。你至少可以用这种方式与DB2交谈。 Java的唯一好处是它将在与数据库相同的操作系统/硬件上运行。
    • 我在这里看过一个screenscraper应用程序(它是在VB.NET中,但我很确定这个例子适用)。屏幕抓取是通过将字符放到屏幕上的特定位置(相当于substring())来完成的。这可能只是我们使用的API - 我想我已经听说过能够读取字段名称的解决方案。但是,它也依赖于RPG程序流程的逻辑,否则无法维护。
    • 我见过和写过的大多数RPG程序都违反了MVC,这意味着你不能做任何比集成测试更少的事情 - 语言本身的历史和架构(以及一些开发人员) )首选(文件访问屏幕显示)在一个文件中。这也将使得尝试包装RPG以便远程调用是不可能的。 IF 您已将所有内容正确地分离到服务程序中,您能够将它们整理好(相当于本机方法调用,几乎) - 不幸的是我没有在这里看到任何不依赖于一个或多个技巧的东西,这些技巧不会阻碍典型的Web使用(例如,使用QTEMP中的文件来控制程序执行 - 每次请求新页面时,iSeries上的会话都会有效消失...)。
    • Java作为一种语言倾向于促进更好的代码分离(注意它可能被误用),因为它没有相当的RPG历史。通常,将Java视为一种服务程序的语言可能会有所帮助,其中所有参数都通过VALUE集传递,OPTIONS(*nopass : *omit)是不允许的,CONST通常被推荐,大多数参数都是DS类型(数据结构 - 这是RPG中的一种不同类型)并由指针传递。模块级参数是不受欢迎的,如果有利于将所有内容封装在传递的数据结构或服务程序过程本身中。 STATIC在Java中有一些不同的用法,使变量成为全局变量,并且在过程中不可用。
    • RPG通常比Java简单得多,而OO编程则是一个完全不同的范例。以下是一些可能会让开发人员迁移到Java的事情:
      1. RPG中的数组从1开始.Java中的数组从0开始。
      2. Java没有'输出'参数和所有基本类型都按值传递(复制)。这意味着编辑整数不会在调用方法中可见。
      3. Java没有打包/签名编码,因此更多地涉及到数字/字符串的转换。 Java中的Date类型也有一些严重的问题(包括时间,类型),并且更难以有意义地改变字符表示形式。
      4. 使用Java读取/写入文件更加困难,即使使用SQL(并且忘记直接使用Java本机I / O) - 但是,这可以通过良好的框架进行一定的缓解。
      5. Java中没有ENDxx个运算符,所有都使用括号({})来指定块的开始/结束。
      6. Java中的所有内容都是自由格式的,并且没有任何类型的列规范(尽管仍需要过程签名)。行长没有限制,但仍建议使用约80个字符。这些工具( free ,甚至更好),周期,通常更有帮助(虽然它们可能需要一些人习惯那些暴露于SEU的人)。还有大量免费图书馆可供下载。
      7. =符号在Java中与上下文无关,就像在RPG中一样,始终用于分配。使用双等号==运算符来比较Java中的值。
      8. 对象(数据结构)无法与==进行有意义的比较 - 您通常需要实现一个名为equals()的方法。
      9. 字符串不可变,不能更改。对字符串执行的所有操作(在类/数据结构本身或外部库中)都会返回全新的引用。是的,字符串被认为是数据结构,而不是值类型,因此您无法将它们与==进行比较。
      10. /copy预编译器指令没有内置的等价物。试图实现它们是错误地使用Java。因为这些通常用于处理“样板”。代码(变量定义或公共代码),在架构中处理这个问题会更好。变量(实际上是所有D-specs)定义将使用importimport static语句处理,而通用代码变体通常由框架处理或定义新类。

    我确定还有其他一些事情,如果您有任何其他问题,请与我们联系。

答案 1 :(得分:3)

分发和管理胖客户端绝对是一场噩梦。

理想的解决方案是在iSeries上托管的基于Java的Web应用程序。工作站通过Web浏览器访问您的应用程序,就像ASP.NET一样。

我一直在使用Grails框架来实现现代化和创建新的应用程序,并且它运行得非常好。

答案 2 :(得分:2)

当IBM说您应该迁移到Java / J2EE时,您应该将应用程序移动到像asp.net Web应用程序这样的Web应用程序。您应该使用功能丰富的接口,如JSF或GWT。

Web应用程序不必担心JRE问题,因为您只需要一个标准浏览器。

但是我不知道RPG,我不知道建议的迁移策略。

答案 3 :(得分:0)

我是参与as400现代化的开发人员。到目前为止,根据我的经验,我可以给你我的见解。

除了基于Java EE的网站,您可以选择基于jax-ws的Web服务,它为不同的平面和网格屏幕提供服务。

客户可以使用他们想要的任何技术消费它们。存在一些滞后现象,但整体可用性与普通的基于Web的应用程序一样好。