IBM iSeries上的RPG到Java迁移

Bil*_*tin 12 java rpg rpgle java-ee ibm-midrange

我们公司使用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时,屏幕是否响应迅速?

Clo*_*use 14

我的公司也试图从RPG迁移到Java.

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

其他一些说明:

  • 尽管您可能需要不同的硬件/分区来运行环境,但您应该能够转向使用.NET .你至少可以用这种方式与DB2交谈.Java的唯一好处是它将在与数据库相同的操作系统/硬件上运行.
  • 我在这里看过一个screenscraper应用程序(它在VB.NET中,但我很确定这个例子适用).通过将字符放到屏幕上的特定位置(相当于substring())来完成屏幕抓取.这可能只是我们使用的API - 我想我已经听说过能够读取字段名称的解决方案.但是,它也依赖于RPG程序流程的逻辑,否则无法维护.
  • 我见过和写过的大多数RPG程序都倾向于违反MVC,这意味着你不能做任何比集成测试更少的事情 - 语言本身的历史和架构(以及一些开发人员)更喜欢一切(文件访问)到屏幕显示)在一个文件中.这也将使得尝试包装RPG以便远程调用是不可能的. 如果您已将所有内容正确地分离到服务程序中,您应该能够将它们包装起来(几乎相当于本机方法调用) - 不幸的是我在这里没有看到任何不依赖于或者更多不能阻止典型Web使用的技巧(例如,使用QTEMP中的文件来控制程序执行 - 每次请求新页面时,iSeries上的会话都会消失...).
  • Java作为一种语言倾向于促进更好的代码分离(注意它可能被误用),因为它没有RPG的历史.一般来说,将Java视为一种服务程序的语言可能会有所帮助,其中所有参数都是通过VALUEset 传递的,OPTIONS(*nopass : *omit)不允许的,CONST通常是推荐的,并且大多数参数都是类型的DS(datastructure - 这是一种不同的类型)在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. ENDxxJava 中没有运算符,所有东西都使用方括号({})来指定块的开始/结束.
    6. Java中的所有内容都是自由格式的,并且没有任何类型的列式规范(尽管仍需要过程签名).行长没有硬限制,但仍建议使用约80个字符.这些工具(免费的,甚至是免费的)工具更好,期限更长,而且通常更有帮助(尽管它们可能需要一些人习惯那些暴露于SEU的人).还有大量免费图书馆可供下载.
    7. =标志不是上下文敏感的Java中它是在RPG的方式,它总是用于分配.使用double-equals ==运算符来比较Java中的值.
    8. 对象(数据结构)无法与之进行有意义的比较==- 您通常需要实现一个名为的方法equals().
    9. 字符串不可变,不能更改.对字符串执行的所有操作(在类/数据结构本身或外部库中)都会返回全新的引用.是的,字符串被认为是数据结构,而不是值类型,因此您无法将它们与它们进行比较==.
    10. /copy预编译器指令没有内置的等价物.试图实现它们是错误地使用Java.因为这些通常用于处理'样板'代码(变量定义或通用代码),所以最好在架构中处理这个问题.变量(实际上是所有D-specs)定义将使用importimport static语句处理,而通用代码变体通常由框架处理或定义新类.

我相信还有很多其他的东西,如果您有任何其他问题,请告诉我.