Job 호출

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-4.3.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://127.0.0.1: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://127.0.0.1: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://127.0.0.1:8805/scheduler" );
    String status = GlueJobStatusCheck.getJobStatus(serverAddress, historyId, "GR.JOB" );
}