标签: rpgle

IBM iSeries上的RPG到Java迁移

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

java rpg rpgle java-ee ibm-midrange

12
推荐指数
1
解决办法
8620
查看次数

在IBM i上使用Gradle部署RPGLE的自动化

有没有人有建立IBM i软件的专业知识:rpgle,sqlrpgle,clle程序,带有gradle的srvpgms?

现在的想法是:

  • 所有源代码都存储在git repo中
  • jenkins ci,与git集成,提取软件更新
  • 在commit中还有一个json文件,其中存储了发布的完整描述(项目信息,依赖项,所有对象描述和构建指令),就像maven中的pom.xml一样
  • 在那个地方jenkins应该运行gradle任务,该任务应该根据json文件中的指令从jenkins工作目录中的源代码构建所有程序.但问题是 - 对于IBM i编译仅在服务器上可用,并且没有可用的插件.

gradle项目应该是这样的:

  • 在服务器上传输源代码
  • 使用json的指令执行每个对象的远程编译
  • 在指定的库中部署二进制文件
  • 执行命令 - 创建数据,更改它,运行sql脚本等

所以问题是:

  1. 这个计划是否正确?
  2. gradle项目阶段是否正确?
  3. 我怎样才能在gradle中实现它?

continuous-integration rpgle gradle jenkins ibm-midrange

11
推荐指数
1
解决办法
1111
查看次数

7
推荐指数
2
解决办法
1219
查看次数

IBM i(iSeries)上的源代码控制

在网络方面,我们正在努力获得源代码控制.现在,我想看看iSeries方面可以做些什么.您最喜欢的iSeries源控制应用程序是什么?为什么?如果可能,我正在寻找低成本.

version-control rpgle ibm-midrange

7
推荐指数
1
解决办法
3028
查看次数

RPG(或其他ILE语言)中的自动测试

我们这里有很多RPG程序,我们做了很多自动化测试,但是我们还没有很好地结合这两个.是否有很好的方法可以对RPG程序进行自动化测试 - 或者就任何其他ILE程序进行自动化测试?

我知道一个名为RPGUnit的项目,但这是它在2007年的最后一次更新.但是,它似乎仍在使用,因为RPG Next Gen目前正在进行一些包括它的工作.

你对这些经历有什么看法?还有别的东西,我缺少了,像谷歌找不到一些很棒的软件工具?

我对单元测试以及完整项目的集成测试很感兴趣.任何与jenkins等工具集成的东西都是受欢迎的.如果它涉及IBM的Rational Developer或System i Navigator,那也没关系.

我们正处于为RPG开发过程创建新测试计划的早期阶段,我不希望它从一开始就走向错误的方向.

integration-testing automated-tests unit-testing rpgle ibm-midrange

7
推荐指数
2
解决办法
3092
查看次数

如何避免服务程序中出现意外的过程名称冲突?

使用来自著名的学概念IBM红纸在RPG异常和错误处理,我已经写了一个服务程序QGPL/ERRFUNC实现像可重用的错误功能Assert,Throw,ThrowMsg,Rethrow,和GetErrorMsg.我一直在几个不同的程序中使用它们,并且它们一直运行良好.

刚才,我Throw在RPG ILE程序中使用了该函数,该程序还静态调用access与IFS文件系统上的流文件一起使用的C风格函数.该程序将无法使用"为符号Throw多次提供定义"的绑定错误进行编译.据我所知,使用编译时你不能绑定细节CRTBNDRPG的命令,但我无法评论我的H DFTACTGRP(*NO)规格,然后编译使用CRTRPGMOD,随后CRTPGM与附加参数DETAIL(*EXTENDED).这将打印出一个广泛的列表,列出了编译器在确定静态绑定到哪些过程时所查看的所有过程名称.这揭示了"投掷"的双重定义.在72页面列表的深处,QJVAJNI引用了IBM提供的服务程序(Java Native Interface),它包含一个名为"Throw"的导出过程.

现在最简单的解决方法就是简单地重命名我的"Throw"程序,修改并重新编译我的服务程序,然后修改并重新编译引用它的所有程序.我可能会遵循这个解决方案,但这种行为引发了一些令人不安的问题:

  1. 为什么C风格的IFS函数使用Java本机接口来完成其工作?我看到的像服务计划进口QC2IFSQC2POSIX那完全意义的上下文.看起来IBM在这里引入了一个我们不得不忍受的意外依赖.我确定它是引用它的C服务程序之一,QJVAJNI因为当我注释掉access函数调用时,QJVAJNI不会引用它.QJVAJNI服务程序的引用可能是多层深度,这意味着导入导入的导入.

  2. 为什么粘合剂通过服务程序导入如此彻底地递归?绑定器看起来像遍历每个服务程序使用的每个导入,无论该程序是否使用该导入以及绑定的子过程.这有必要吗?是否可以递归检查每个级别使用的导入?有没有办法改变这种行为?

  3. 如果对于上述两个问题没有什么可以做的,这是否意味着为了保证绑定始终有效(特别是对于"通用"函数,如错误处理),必须确保没有任何其他导出过程在同一台机器上的任何地方?我不知道任何像名称空间这样的设施可以缓解这个问题.据我所知,ILE编译器不使用其他平台在这种情况下可能使用的任何方法,如重载或名称修改.开始"非正式命名空间"是一种很好的做法,就像我可以看到一些C导出(例如_C_NEU_IFS_feof)以防止名称冲突一样?或者,有没有办法在发布服务程序之前搜索计算机上的所有导出过程以查找所需的名称?

  4. IBM红皮书的作者是ILE编程领域的一些重量级人物.他们像我一样命名了他们推荐的出口之一"投掷"(尽管有不同的参数列表).他们遇到了类似的问题吗?他们有不同的方法来解决名称冲突吗?

我发现有*DUPPROC一个可以指定的选项CRTPGM,但我不确定这是个好主意.文档说"当允许多个重复过程时,与导入请求匹配的指定模块和服务程序列表中的第一个导出过程是所选的过程." 你能确定哪个符号将成为列表中的第一个吗?订单是否严格定义?

rpgle ibm-midrange static-binding

7
推荐指数
1
解决办法
290
查看次数

如何在IBM i上组织RPGLE subversion存储库?

如何在IBM i上组织RPGLE subversion存储库?

我目前正在一家拥有大量(约13k)RPGLE的旅游商业公司 - 他们的内部应用程序来源,最后他们想要使用版本控制并采用更现代的编码风格(整个WDSC - RDi的东西).

因此,我的一直以来的项目是逐步对整个编码过程进行整理和现代化.

开源颠覆了OS/400的作品就像安装过程中只有2个次要问题的魅力.

我脑子里有一个非常好的形象,它应该如何运作,但我认为它打破了一些传统,所以我想要你的意见.

/subversion/repositories/{name of the in-house-application}
   /{project_a}
       /trunk
           /doc
           /sql
           /{a source file that is named like the project. i.e. project_a }
               /myRPGsrc.rpgle
               /myCLLEsrc.clle
               /myDDSsrc.dspf
               /myDDSsrc.pf
               /compile.clle
            .iseries_project_properties
            .project
       /branch
       /tag
   /{project_b}
   /global_stuff
   /nightly_build
Run Code Online (Sandbox Code Playgroud)

因此,主要区别在于没有像QRPGLESRC,QCLSRC,QDDSSRC等不同的源文件,而是包含所有项目源的一个源文件,可以作为WDSC项目签出.项目源文件也可以很容易地命名为"src",就像在其他repos上一样,但是如果一些开发人员想要将多个项目签出到/QSYS.LIB/SOMELIB.LIB/,他们就不必担心了命名空间本身.

所以你怎么看?hybris?你看到问题吗?你有经验吗?请分享!:)

svn rpgle ibm-midrange

6
推荐指数
1
解决办法
1442
查看次数

在ILE RPG中检查sql发现条件的正确方法是什么?

在RPG中使用嵌入式SQL时,通常会使用游标和dow-loop来处理结果中的所有行.循环中的条件以某种方式依赖于SQLCOD和/或SQLSTTSQLRPGLE程序中的一些全局可用变量?

但检查这些值的正确方法是什么?有人建议SQLCOD = 0别人not (SQLCOD = +100 or SQLSTT = '02000').一个失败的所有警告,另一个没有失败的一些错误,所以我不满足.

为了说明我对一些代码的处理:

Pmain             B
D                 PI
Dmy_ds          E DS                  extname(SOME_TABLE)
D                                     qualified
 /free
  exec sql
    DECLARE cur CURSOR FOR
      SELECT *
      FROM some_table;
  exec sql 
    OPEN cur;
  exec sql
    FETCH cur
     INTO :my_ds;
  dow sql_found();
      exec sql
        FETCH cur
         INTO :my_ds;
  enddo;
  exec sql
    CLOSE cur;
 /end-free
Pmain             E


Psql_found        B
D                 PI              N
 /free
  // insert return statement here... …
Run Code Online (Sandbox Code Playgroud)

rpgle embedded-sql db2-400

6
推荐指数
1
解决办法
1万
查看次数

RPGLE中EVAL和MOVE之间的区别是什么

我最近进入了IBM的RPG世界,所以在编写一些代码并查看其他人的代码时,我发现有些人使用Eval,而另一些人则使用Move来完成同样的事情.它们之间有什么区别吗?

谢谢.

rpg rpgle ibm-midrange

6
推荐指数
2
解决办法
1万
查看次数

如何在c ++中获取psds信息

使用ILE编译器,在RPG中,您可以使用PSDS获取有关当前用户,作业名称等的信息.

如何使用ILE在C++程序中获得相同的信息?

rpgle ibm-midrange ile-c++

6
推荐指数
2
解决办法
265
查看次数