我们公司使用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时,屏幕是否响应迅速?
有没有人有建立IBM i软件的专业知识:rpgle,sqlrpgle,clle程序,带有gradle的srvpgms?
现在的想法是:
gradle项目应该是这样的:
所以问题是:
在网络方面,我们正在努力获得源代码控制.现在,我想看看iSeries方面可以做些什么.您最喜欢的iSeries源控制应用程序是什么?为什么?如果可能,我正在寻找低成本.
我们这里有很多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
使用来自著名的学概念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"程序,修改并重新编译我的服务程序,然后修改并重新编译引用它的所有程序.我可能会遵循这个解决方案,但这种行为引发了一些令人不安的问题:
为什么C风格的IFS函数使用Java本机接口来完成其工作?我看到的像服务计划进口QC2IFS
和QC2POSIX
那完全意义的上下文.看起来IBM在这里引入了一个我们不得不忍受的意外依赖.我确定它是引用它的C服务程序之一,QJVAJNI
因为当我注释掉access
函数调用时,QJVAJNI
不会引用它.QJVAJNI
服务程序的引用可能是多层深度,这意味着导入导入的导入.
为什么粘合剂通过服务程序导入如此彻底地递归?绑定器看起来像遍历每个服务程序使用的每个导入,无论该程序是否使用该导入以及绑定的子过程.这有必要吗?是否可以递归检查每个级别使用的导入?有没有办法改变这种行为?
如果对于上述两个问题没有什么可以做的,这是否意味着为了保证绑定始终有效(特别是对于"通用"函数,如错误处理),必须确保没有任何其他导出过程在同一台机器上的任何地方?我不知道任何像名称空间这样的设施可以缓解这个问题.据我所知,ILE编译器不使用其他平台在这种情况下可能使用的任何方法,如重载或名称修改.开始"非正式命名空间"是一种很好的做法,就像我可以看到一些C导出(例如_C_NEU_IFS_feof
)以防止名称冲突一样?或者,有没有办法在发布服务程序之前搜索计算机上的所有导出过程以查找所需的名称?
IBM红皮书的作者是ILE编程领域的一些重量级人物.他们像我一样命名了他们推荐的出口之一"投掷"(尽管有不同的参数列表).他们遇到了类似的问题吗?他们有不同的方法来解决名称冲突吗?
我发现有*DUPPROC
一个可以指定的选项CRTPGM
,但我不确定这是个好主意.文档说"当允许多个重复过程时,与导入请求匹配的指定模块和服务程序列表中的第一个导出过程是所选的过程." 你能确定哪个符号将成为列表中的第一个吗?订单是否严格定义?
如何在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?你看到问题吗?你有经验吗?请分享!:)
在RPG中使用嵌入式SQL时,通常会使用游标和dow
-loop来处理结果中的所有行.循环中的条件以某种方式依赖于SQLCOD
和/或SQLSTT
SQLRPGLE程序中的一些全局可用变量?
但检查这些值的正确方法是什么?有人建议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) 我最近进入了IBM的RPG世界,所以在编写一些代码并查看其他人的代码时,我发现有些人使用Eval,而另一些人则使用Move来完成同样的事情.它们之间有什么区别吗?
谢谢.
使用ILE编译器,在RPG中,您可以使用PSDS获取有关当前用户,作业名称等的信息.
如何使用ILE在C++程序中获得相同的信息?
rpgle ×10
ibm-midrange ×9
db2-400 ×2
rpg ×2
embedded-sql ×1
gradle ×1
ile-c++ ×1
java ×1
java-ee ×1
jenkins ×1
sql ×1
svn ×1
unit-testing ×1