본문 바로가기

ETL Tools/Oracle Data Integrator

PKG내에서 Java 실행 프로그램을 호출하였을 경우 Error가 발생하였을때 Work flow 처리 방법


Jython을 이용하여 Java를 호출하는 방법

 1. procedure 생성

odi -> jython -> java ->jython -> odi

 사용 기술  :  jython

ex)
import sys
sys.path.append("java_file_path")
import class_name
class_name.function(class_name(), [args])

jython 기술을 사용하여 실행자바 프로그램의 메인 함수를 jython에서 호출한다.

이때, 실행프로그램이 Exception을 발생시 jython이 catch할 수 있고,

그 결과를 Odi에 보내 처리할 수 있다.

문제점 발생 ::::

한번 import 된 자바 클래스는 해당 파일이 변환 되어도 odi가 자동으로 reload를 하지 않는 것으로 보인다.

프로시저를 호출할 때마다 해당 자바 프로그램을 실행하는 것이 아니라 어느 부분에 저장해 놓았다가 사용하는 듯하다.

odi designer에서 프로시저를 통해 클래스 호출시 원본 자바 파일을 수정하여도 전에 사용햇던 결과를 다시볼수있었다.

odi 프로그램을 전체 종료하고 다시 실행하였을 경우 프로시저를 실행하면 다시 reload된 결과를 확인 할 수 있었으나, 

그때 역시 한번 뿐이고 후에 파일 수정을 하여도 적용이 되지 않앗다.

또 시나리오로 작성하여 odi프로그램을 종료 시키고 시나리오를 자바 코드를 통해 실행하여 보았는데 그때 역시 같은 결과를 가져왔다..

아직 이 부분의 정확한 원인과 해결책을 찾지 못하엿다.
 2. procedure 생성

odi -> jython -> system -> java -> system -> jython -> odi

 사용 기술  :  jython

import os
if os.system("java -cp ""c:\jythonTemp"" HelloODI" ) <> 0 :
 raise "OS command has signalled errors"

jython을 사용해서 os의 command창 명령어를 실행 한다. command창에서 java 프로그램을 실행시키고

프로그램이 실행하는 도중 exception이 발생할 경우, 결과를 cmd를 거쳐 jython이 catch하여 odi가 예외를 처리할 수 있다.

문제점 발생 ::::

에러가 발생해서 비정상 종료 되었을 경우 ODI에서 flow는 바꿔줄 수 있지만 java 프로그램상에서 어떠한 에러가 발생하였는지는 확인할 수 없게 작성하였다.

에러가 발생하여 비정상 종료될경우에는 OS command has signalled errors 라는 문구만 띄워 진다.