2008-10-08 6 views
4

Java에서 V5R4 iSeries 시스템에서 실행되는 RPG 프로그램과 직접 대화하는 경험이있는 사람이 있습니까? 그렇다면 커뮤니티의 권장 사항은 무엇이며 피하기 위해 어떤 위험을 감수해야합니까?Java에서 iSeries의 RPG에 액세스

필자가 시도한 다양한 문헌 및 스파이크 솔루션에서 ProgramCallBeans (PCML 또는 xPCML을 통해), DataQueues (비동기 통신의 경우) 또는 JNI와 대화 할 수있는 것처럼 보입니다.

나는 견고하고, 성능이 뛰어나고, 개발하기 쉽고, 유지 보수가 쉽고, 테스트하기 쉽도록 (무언가를 찾고 있습니다!)!

답변

1

JDBC 및 저장 프로 시저 만 사용합니다. 저장 프로시 듀어는 SQL을 실행하는 대신 RPG를 호출합니다. 나는 RPG 프로그래머가 아니지만 아주 간단한 인터페이스처럼 보인다. DataQueues는 괜찮지 만 JMS 같은 것만 큼 강하지는 않습니다 (보장 된 전달이 없음).

+1

우리는 JDBC를 사용하여 DDS 또는 DDL SQL 테이블에 성공적으로 액세스했습니다. 또한 스토어드 프로 시저 (RPG 프로그램 호출과 원시 SQL 모두)를 사용했습니다. 그러나 RPG Stored Procedures는 복잡한 리턴 구조 나 결과 세트를 처리하는 데 그리 좋지 않습니다. – lawsonj2019

1

Java 메소드를 RPG에서 직접 호출하는 것은 매우 간단합니다. 정확히 무엇을하려고하는지 모르겠다. 자바 메서드를 여러 번 호출했다.

어떻게 수행되는지 예가 나와 있습니다. RPGMail을보십시오. 소스를보고 Aaron이 RPG를 사용하여 JavaMail에 연결하는 방법을 볼 수 있습니다.

+0

RPG에서 Java가 아닌 Java에서 RPG를 호출 할 수 있어야합니다. – lawsonj2019

2

JTOpen을보아야합니다. 당신이하고 싶은 것을하기 위해 그것을 사용하는 것은 상당히 쉽습니다. 다음은 누군가가 조립 한 예입니다. program call to as400 using jtopen

+0

우리는 오픈 소스 JTOpen (뛰어난 개발자 btw)과 제공된 JT400 라이브러리를 IBM Toolbox for iSeries와 함께 사용하여 좋은 결과를 얻었습니다. 나는 이것으로 올바른 방향으로 향하고 있는지 또는 JNI와 같은 다른 방법이 있는지를보고 싶다. – lawsonj2019

10

IBM Java Toolbox for Java를 사용하는 것이 좋습니다. JT400.jar을 클래스 경로 (또는 Java가 iSeries에서 실행중인 경우 JT400Ntv.jar)에 넣으십시오. ProgramCall 클래스와 CommandCall 클래스를 모두 사용했습니다.

com.ibm.as400.access.CommandCall 클래스는 사용하기 쉽습니다. 이 클래스에는 com.ibm.as400.access.AS400 클래스를 전달하는 간단한 생성자가 있습니다. 그럼 그냥 다음과 같이 run 메소드를 사용하십시오 :

물론이 특정 CL 명령어를 사용하지는 않을 것입니다. CommandCall 클래스를 사용할 때는 명령에서 나온 메시지를 처리하는 것이 좋습니다.

AS400Message[] messageList = command.getMessageList(); 
for (int i=0;i < messageList.length;i++) { 
String sMessageText = messageList[i].getText(); 
    sMessage+=sMessageText + "\n"; 
} 

com.ibm.as400.access.ProgramCall 클래스는 더 많은 작업이 필요하지만 그것은 수 있습니다 : 나는이를 사용하는 하나 개의 프로그램에서,이 같은 자신의 화면에서 텍스트 상자에 사용자에게 메시지를 표시 당신은 반환 된 매개 변수에 액세스 할 수 있습니다. 필자는 보통 값을 반환하는 기존 RPG 작업자 프로그램을 호출하기 때문에이 코드를 더 자주 사용합니다. 이를 위해 com.ibm.as400.access.ProgramParameter 배열을 정의하십시오. Java에서 프로그램에 매개 변수를 전달할 때 com.ibm.as400.access.AS400Text와 같은 클래스를 사용하여 매개 변수를 AS/400 친화적 인 값으로 변환해야합니다. ProgramCall 명령의 세부 사항은 IBM의 문서를 사용하여 더 잘 조사됩니다. http://publib.boulder.ibm.com/infocenter/iseries/v5r4/index.jsp?topic=/rzahh/page1.htm

1

PCML 문서를 통해 약간의 성공을 거두었습니다. RPML 프로그램에 매개 변수를 전달할 때 commandcall을 문자열로 인코딩 한 이후 PCML을 사용하기로 결정한 것은 정말 추악 할 수 있습니다.

PCML을 사용하면 Java 데이터 유형을 매개 변수로 rpg 프로그램에 다소 투명하게 전달할 수 있습니다. 단점은 PCML 문서의 xml이 정적 인터페이스가되고 프로그램이 업데이트되면 업데이트해야한다는 것입니다. 올바른 빌드 도구를 사용하면 pcml xml의 업데이트를 자동화하는 것이 매우 간단 할 수 있지만 지금은 수동으로 수행하고 있습니다.

저는이 접근법을 rpg 프로그램이 java에서 호출되어야하고 논리 흐름이 java 프로그램에 의해 제어되어야 할 때 사용했습니다.

rpg 프로그램에서 논리 흐름을 제어하는 ​​경우 java에 대한 동기식 및 비동기식 호출에 모두 데이터 대기열을 사용했습니다. 다른 프로그래밍 언어에서 조정 된 방식으로 데이터 큐를 읽고 쓰는 방법을 표준화하기 위해 상당한 양의 코드를 작성해야했습니다.

0

흠, 여기 새로 왔으며 KC Baltz의 답변에 투표 하겠지만 아직 할 수는 없습니다. 저장 프로 시저가 있습니다. 필자는 JT open을 사용하여 프로그램을 기본적으로 호출했으며 전달할 수있는 parms 수, 데이터 유형 문제 등을 발견했습니다. 프로그램을 둘러싼 SQL 프로 시저 래퍼를 사용하면 SQL에 대한 Java 지원을 찾을 수 있습니다. native 400 호출에 대한 Java 지원보다 월등합니다.