[BizManager] Schedule Execution of Java Class 기능 설명
GXS Korea 문의 결과 해당 기능과 관련한 공식 가이드/메뉴얼 문서는 없는 상황.
BizManager Library 디컴파일 해보면 참고가 될만한 샘플을 볼수가 있어서 해당 내용을 기반으로 첨부와 같이 가이드 문서를 작성
1. 기능 설명
- Parties -> Processing Rule -> Action 에 해당 하는 기능임
- Provides the capability to configure the system to invoke a Java class.
2. 설정 세부 항목 설명
1) Name
- 실행될 Processing Rule Action 명칭 정의
2) Java Class
- 실행할 Java Class에 대한 Class Qualified Name
- Class 생성과 관련한 현재까지 공개된 내용(현재 BizManager측의 해당 Class 생성관련한 공식 가이드 없음)
(1) 주요 Interface or Class - com.ipnetsolutions.msgsrv.script.ScrBean
=> 생성할 Class에서는 이 Interface를 Implement 해야만 함
- com.ipnetsolutions.msgsrv.script.ScrResults
=> 생성한 Class내에서의 처리결과를 저장하는데 사용되는 클래스
- com.ipnetsolutions.msgsrv.script.ScrBean.Context
=> 생성하는 Class내에서 BizManager 프로세싱 단계에 저장된 각 Object에 접근할수 있는 통로
(2) 생성 Class의 적용위치
- BizManager의 ClassPath상에 위치하면 될것으로 추정됨
- 현재 C:\BizConnect\Application\app3.3.0\lib\common 경로에 생성한 클래스를 위치히야 정상동작
하는것으로 확인됨
- 생성 Class 적용시 서버 재기동 과정이 필요함
(3) 샘플 소스
- 첨부의 샘플소스 확인
package kr.co.inspien.bizmanager;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import com.ipnetsolutions.config.itf.Configurator;
import com.ipnetsolutions.logger.Logger;
import com.ipnetsolutions.msgsrv.script.ScrBean;
import com.ipnetsolutions.msgsrv.script.ScrResults;
public class SampleJavaAction implements ScrBean{
	@Override
	public ScrResults run(Context context) throws Exception {
		// TODO Auto-generated method stub
		
		Logger oLog = context.getLog();
				
		//Action Script 실행 결과 객체 생성
		ScrResults oResult = new ScrResults(oLog);
		
		//Context 객체에서 Parameter String 추출
		String sParam = context.getParam();
		
		//Context 객체에서 현재 처리중인 데이터 파일명 추출하기 
		Input oInput = context.getInput();
		String outFnm = oInput.logicalFilename;
		
		//Context 객체에서 현재 처리중인 데이터 추출하기
		InputStream is = oInput.getInputStream();
		String sProcData = convertStreamToString(is);
		
		
		//Context 객체에서 Output 출력하기
		String sOutFile = "TRANS_JAVA_OUTPUT";
		FileWriter wtr = new FileWriter(sOutFile);
		StringBuffer sb = new StringBuffer();
		sb.append("");
		sb.append("");	
		sb.append("");
		sb.append("YUMI_DUNS ");
		sb.append("lswDUNS ");
		sb.append("YUMI_XML_DOC ");
		sb.append("123123 ");
		sb.append(" ");
		sb.append("");
		sb.append("");
		sb.append("444 ");
		sb.append("10 ");
		sb.append("Test ");
		sb.append(" ");
		sb.append(" ");
		sb.append(" ");
		
        wtr.write(sb.toString());
        wtr.close();
        
      //Context 객체에서 Output 출력하기
        oResult.addOutput(sOutFile);
	
		//Configuration 정보
		Configurator cf = context.getConfigurator();
		String sCF = null;
		if(cf != null){
			sCF = cf.getDatabaseConnectionName();
		}
		//==> Test Output File 
		FileWriter fstream = new FileWriter("C:/temp/BizManagerTestOutput_0724.txt");
		BufferedWriter out = new BufferedWriter(fstream);
		out.write("Logger Level="+oLog.getLevel()+"\r\n");
		out.write("Logger Name="+oLog.getName()+"\r\n");
		out.write("Parameter String = "+sParam+"\r\n");
		out.write("logicalFileName = "+outFnm+"\r\n");
		out.write("Configuration DB Connection Name="+sCF+"\r\n");
		out.write("============================== Contents Start =============================\r\n");
		out.write(sProcData);
		out.write("============================== Contents End =============================\r\n");
		out.close();
		
		if(sParam.equals("ERROR")){
			oResult.addError("Custom Error Message");    //처리결과 에러상태로 지정
		}else if(sParam.equals("WARNING")){
			oResult.addWarning("Custom Warning Message");
                        //처리결과는 Success이나 지정한 메시지가  Operation 모니터링내에 Error Message 항목에 출력됨
		}
		
		
		return oResult;
	}
	
	public String convertStreamToString(InputStream is) throws IOException {
		
		if (is != null) {
            StringBuilder sb = new StringBuilder();
            String line;
            try {
                BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
                while ((line = reader.readLine()) != null) {
                    sb.append(line).append("\n");
                }
            } finally {
                is.close();
            }
            return sb.toString();
        } else {      
            return "";
        }
	}
	
}
3) System ID
- 서버 이중화 구성의 경우 해당 Class가 실행될 특정 서버를 지정할 수 있음
4) Parameter String
- 생성한 Java Class 내부로 전달할 Parmeter String 지정
- //Context 객체에서 Parameter String 추출 String sParam = context.getParam();
5) Stop Default Transmission
- Java Class 호출후 수신자(Receipt)의 Default Trandport를 실행할지 여부임
- 하나의 Processing Rule에 등록된 Acition 모두 동일하게 셋팅해야 적용된다
예) 모두 해당 옵션을 선택해제해야 각 Action의 처리상태와 상관없이 수신지 Default Transport 수행함
6) Cascade Multiple Actions
- 현재 등록하는 Action의 처리상태에 따라 후속 Action을 실행여부 결정
- 해당 옵션선택시 현재 단계의 Action이 실패할경우 후속 Action이 실행되지 않음
7) Schedule
- immediately : 즉시 실행
- 그외 스케쥴 지정시 지정된 시간만큼의 Delay를 가진후 실행되는 모습을 취함
※ 특정시간 실행 지정가능
3. 해당 기능 활용 방안
- 각 Processing Rule에서 지정한 Document 처리시 BizManager에서 제공하지 않는 기능들에 대해서
Custom Java 소스를 활용하여 극복이 가능 할것으로 보임
- Java Class의 처리상태가 Error인경우 Operation 메뉴에서 Retry 처리도 가능함
- Java Class에서 문서의 변환 및 외부 작업 수행후 후속 프로세스로의 연계도 가능함
예) 아래와 같이 ACT_JAVACALL2 단계에서 문서를 변환하고 이후 후속 프로세스가 진행됨
Schedule 지정시 Operation 옵션에서 아래와 같이 Delay 처리되는 상황을 확인할수 있다.