12

我们公司使用 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

4 回答 4

14

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

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

其他一些注意事项:

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

我敢肯定还有很多其他的事情,如果您有任何其他问题,请告诉我。

于 2011-11-21T23:19:24.743 回答
3

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

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

我一直在使用Grails框架来现代化和创建新的应用程序,它运行良好。

于 2011-11-21T22:12:47.090 回答
2

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

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

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

于 2011-11-21T21:32:02.303 回答
0

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

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

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

于 2012-01-06T08:09:51.690 回答