2009-08-17 3 views
1

Iseries V5r4에서 실행중인 RPG에서 Java 프로그램을 호출하려고합니다. 원격 프로그램은 Websphere에서 실행중인 웹 서비스 클라이언트 (우편 번호 조회 수행)입니다.RPG에서 iSeries의 원격 Java 프로그램 호출

RPG에서 직접 호출하고 싶습니다. 그게 가능하니? 또는 Java 프로그램을 작성하여 iSeries에서 실행하고 RMI 또는 원격 Java 프로그램을 호출하는 것을 사용해야합니다.

우리는 iSeries 서에 직접 otherside 세계에서 길을 여는 의미로 직접 extenral 웹 서비스 호출에 대한 예리한되지 않습니다.

난 그냥 올바른 방향 또는 나는 RPG의 사람들을위한 자바 프로그램을 더 소비 할 수 있도록 할 필요가 무엇이든 우리의 사람을 가리 키도록 뭔가를 찾고, 롤 플레잉 프로그래머 아니에요.

덕분에, 스콧

답변

9

프로그램이 원격 서버에서 실행되기 때문에, 당신은 RPG에서 직접 호출 할 수 없습니다. 웹 서비스라는 것을 감안할 때 iSeries에서 실행하고 RPG 내에서 Java 프로그램을 호출하는 Java 프로그램을 작성합니다. 요즘 RPG는 Java와 직접 인터페이스 할 수 있습니다. 클래스를 선언하고 메소드 호출을 프로토 타입하려면 일부 D- 스펙을 작성해야합니다. 다음 예제에서는 'tools'패키지에 ServiceCaller라는 Java 클래스가 있다고 가정합니다. 3 개의 문자 필드를 받아들이고 정수를 반환하는 getServiceReply라는 단일 메서드가 있습니다. getServiceReply 방법 내에서,이 같은 문자열로 그 바이트 배열로 변환, 자바 코드 내부

 
/free 
    ServiceCaller = newServiceCaller(); 
    iReply = getServiceReply(ServiceCaller:'Parm1':'Parm2':'Parm3'); 
/end-free 

:

 
*Define the Java class locally.          
DServiceCaller S    O CLASS(*JAVA:'tools.ServiceCaller') 

*Class constructor. No parameters.         
DnewServiceCaller PR    O EXTPROC(*JAVA:     
D          'tools.ServiceCaller':   
D          *CONSTRUCTOR)     
D          CLASS(*JAVA:'tools.ServiceCaller') 

*GetServiceReply. 
*public int getServiceReply(byte[] parm1, byte[] parm2, byte[] parm3) 
DgetServiceReply PR   10I 0 EXTPROC(*JAVA: 
D          'tools.ServiceCaller': 
D          'getServiceReply') 
D Parm1      400A CONST 
D Parm2      400A CONST 
D Parm3      400A CONST 

귀하의 RPG의 CALC 사양이 자유 형식의 예처럼 보일 것입니다 부여

 
sParm1 = new String(parm1); 
sParm2 = new String(parm2); 
sParm3 = new String(parm3); 

, 이것은 지나치게 단순한 예입니다 및 응용 프로그램의 요구는 약간 다를 수 있습니다. 웹 서비스가 응답하지 않는 경우 오류 처리 코드를 추가해야합니다. 클래스에서 getter 및 setter를 사용할 수도 있습니다. 이는 모두 애플리케이션 요구 사항과 원격 웹 서비스의 요구 사항에 따라 다릅니다. 자바 유형 RPG 유형에 대한

일부 노트 :

 
RPG Type  Java Type 
10I 0   int 
3I 0   byte 
5I 0   short 
20I 0   long 
    N   boolean 
    A   byte[] 

는 특히 야심 찬 느낌이 경우에, 당신은 당신의 RPG 내에서 네이티브 자바 HTTP 클래스를 호출 할 수 있습니다. 하지만 그 사이에 역할을하는 커스텀 Java 프로그램이 RPG와 대화하기 위해 특별히 작성된 것이 더 쉬운 방법이라는 것을 알았습니다. RPG가 Java와 대화 할 수 있지만 Java와 Java로 이야기하는 것만 큼 귀한 것은 아닙니다. RPG에서 자바를 호출에

추가 정보는 ILE RPG 프로그래머 가이드에서 찾을 수 있습니다. V5R4 버전은 여기에서 찾을 수 있습니다 : http://publib.boulder.ibm.com/infocenter/iseries/v5r4/topic/books/sc092507.pdf

+0

위대한 게시물 감사합니다. RPG가 Java의 목록/맵을 처리하는 방법은 무엇입니까 (나는 믿을 수없는) equivlent가 없다고 들었습니다. 나는 잠재적 인 주소 검색 배열을 반환해야합니까? – scottyab

+0

Java와 RPG간에 배열을 앞뒤로 전달할 수 있지만 목록이나 맵은 전달할 수 없습니다. getter 및 setter 메서드를 사용하는 것이 좋습니다. –

+0

배열을 전달할 때 Java에서 byte [] 배열의 배열을 만드는 것이 가장 좋습니다. RPG에서 가변 길이 문자 필드를 사용한다면 괜찮습니다. 필자는 가변 길이 문자 필드를 사용하지 않고 대신 Java에서 RPG에 필요한 길이의 패딩 된 문자열을 만든 다음 바이트 배열로 변환합니다. –

3

(가) 웹 서비스이기 때문에, 다른 솔루션은 스콧 KLEMENT의 HTTP API를 사용하는 것입니다. 그의 웹 사이트 http://www.scottklement.com/httpapi/에서 볼 수 있습니다. 나에게 큰 혜택

하나는이 완전히 RPG이며, 때로는 약간 부진 할 수있는 자바를 사용하지 않는 것입니다. Java에서 웹 서비스가 작동하는 방식을 잘 알고있는 것은 아니지만 모든 XML을 구성 할 필요가없는 것으로 보입니다. HTTP API를 사용하면 직접해야 할 것입니다.

Scott Klement는 자신의 웹 사이트에서 여러 가지 유용한 것들을 가지고 있습니다. 몇 가지 깔끔한 도구가있는 또 다른 사이트는 http://www.think400.dk/downloads.htm입니다.

+0

httpapi도 좋습니다. 프로덕션 환경에서 문제없이 사용했습니다. –

+1

충분히 복잡한 WSDL의 경우 요청 및 응답 XML이 복잡하므로 매우 지루할 것입니다. –