JOB 호출

Job를 호출하기 위해서는 GlueJobEventSender 모듈(bean)을 이용하며, 2가지 방법이 가능합니다.

  1. GlueJobCall(Reuse) Activity 이용

  2. GlueJobEventSender 모듈(bean)을 직접 사용

GlueJobEventSender 모듈(bean)은 applicationContext.xml 에 다음과 같이 추가합니다.
jobEventSender 의 추가 property는 JavaDoc을 참고합니다(GlueAPI).

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
                  http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
    <bean id="serviceManager" class="com.poscoict.glueframework.biz.control.GlueServiceManagerImpl">
        <property name="cacheManager" ref="cacheManager" />
        <property name="serviceLoader" ref="serviceLoader" />
    </bean>
    <bean id="cacheManager" class="com.poscoict.glueframework.cache.ehcache.GlueEhCacheManager"/>
    <bean id="serviceLoader" ... />

    <bean id="jobEventSender" class="com.poscoict.glueframework.scheduling.remote.GlueHttpJobEventSender"/>
</beans>

GlueJobCall(Reuse) Activity 이용

GlueService 기반일 경우는 GlueJobCall Activity를 이용할 수 있습니다.
GlueJobCall(Reuse) Activity의 Property는 다음과 같이 설정합니다.
GlueJobCall Activity의 property는 JavaDoc을 참고합니다(GlueAPI).
sender property 에 jobEventSender bean 이 사용됩니다.
result-key property에 담기는 값은 JOB 실행 이력 관리 ID 값입니다(참고).

<?xml version="1.0" encoding="UTF-8"?>
<service name="biz-service" initial="Init" xmlns="http://www.poscoict.com/glueframework/service">
    <activity name="Init" ... />
    <activity name="FireJob" class="com.poscoict.glueframework.scheduling.activity.GlueJobCall">
        <transition name="success" value="Next" />
        <property name="sender" value="jobEventSender" />
        <property name="server-address" value="schedulerServer" />
        <property name="job-name" value="jobName" />
        <property name="job-params" value="OPER_FLAG=operFlag|USER_EMP_NO=userNo" />
        <property name="result-key" value="requestId" />
    </activity>
    <activity name="Next" ... />
</service>

GlueJobEventSender 모듈(bean)을 직접 사용

GlueService가 아닌 경우, GlueJobEventSender 모듈(bean)을 직접 사용할 수있습니다.
GlueJobDefinition 을 생성해서 GlueJobEventSender 모듈(bean)의 sendJobEvent api를 사용합니다.
GlueJobDefinition 은 JavaDoc을 참고합니다.(GlueAPI).

String jobNumber = "-1";
String JobKey = "JOB.GR";
Map<String, Object> jobData = new HashMap<String, Object>();
jobData.put(key, value);

GlueJobDefinition def = new GlueJobDefinition( jobNumber, jobKey );
def.setParameters( jobData );

String serverAddress = GlueStaticContext.getGlueProperty("scheduler.address");
GlueJobEventSender sender = GlueStaticContext.getBeanFactory().getBeanObject( "jobEventSender", GlueJobEventSender.class );
String historyId = sender.sendJobEvent( def, serverAddress + "/scheduler" );

glue.properties 의 내용 일부입니다.

scheduler.address=http://172.31.47.161:8805

Job 호출 결과 확인

GlueJobStatusCheck 클래스의 getJobStatus api를 이용합니다 (GlueAPI 참고).

  • com.poscoict.app.job.GlueJobStatusCheck 입니다.
    public class SampleActivity extends GlueActivity
    {
        public String runActivity( GlueContext ctx )
        {
            String serverAddress = ...
            // String serverAddress = GlueStaticContext.getGlueProperty("scheduler.address");
            // String serverAddress = (String)ctx.get("schedulerServer");
    
            String historyId = (String)ctx.get("requestId");
    
            String JobKey = ...
            // String JobKey = "JOB.GR";
            // String jobKey = (String)ctx.get("jobName");
    
            String status = GlueJobStatusCheck.getJobStatus(serverAddress, historyId, JobKey );
    
            ... status 값에 따른 로직 수행
    
            return GlueBizControlConstants.SUCCESS;
        }
    }
    

How to test

다음은 GlueService 실행용 main method를 만들어 실행하는 예제입니다.

    public static void main(String args[])
    {
        GlueContext ctx = new GlueDefaultContext();
        ctx.put(GlueBizControlConstants.SERVICE_NAME, "biz-service");

        ctx.put("schedulerServer", "http://172.31.47.161:8805");

        ctx.put("jobName", "M27.POS_TARGET_EXTRACT");

        ctx.put("operFlag", "A");
        ctx.put("userNo", "PD262892");

        GlueBizProvider.getController().doAction(ctx);
    }

다음은 main method를 만들어 실행하는 예제입니다.

    public static void main(String args[])
    {
        GlueJobEventSender sender = GlueStaticContext.getBeanFactory().getBeanObject( "jobEventSender", GlueJobEventSender.class );
        GlueJobDefinition def = new GlueJobDefinition( "-1", "GR.JOB" );
        String historyId = sender.sendJobEvent( def, "http://172.31.47.161:8805/scheduler" );
        String status = GlueJobStatusCheck.getJobStatus(serverAddress, historyId, "GR.JOB" );
    }