유저 클래스/핸들러 에디터

본 장에서는 AnyLink 스튜디오의 유저 클래스/핸들러 에디터의 기능과 사용법에 대해 설명한다.

1. 유저 클래스

유저 클래스는 플로우 조건의 표현식으로 정의할 수 있는 로직보다 복잡한 로직을 정의해야 하는 경우에 사용된다.

1.1. 유저 클래스 생성

유저 클래스의 생성은 왼쪽 거래 네비게이터의 컨텍스트 메뉴에서 [새로만들기] > [유저 클래스]를 선택한다. 유저 클래스 생성 화면에서 각 항목을 입력하고 [Finish] 버튼을 클릭한다.

figure create userclass
유저 클래스 생성 화면
항목 설명

Package

유저 클래스를 생성할 거래를 선택한다.

Name

유저 클래스의 이름을 입력한다. Java의 클래스명 생성법과 동일하다.

Superclass

유저 클래스가 상속 받게 될 클래스이다. DefaultUserActivity 클래스가 기본으로 생성된다.

1.2. 유저 클래스 정의

유저 클래스가 생성되면 에디터 화면으로 이동해서 유저 클래스를 작성할 수 있다.

유저 클래스는 Java 소스와 동일한 형태이며 DefaultUserActivity 클래스를 상속 받은 클래스이다. action 메소드가 override되어 생성된다.

package com.tmax.tc_tutorial.txGrp_R_tutorial.tx_L_A_tutorial;

import com.tmax.anylink.api.serviceflow.ActivityContext;
import com.tmax.anylink.api.serviceflow.DefaultUserActivity;
import com.tmax.anylink.common.AnyLinkException;
import com.tmax.anylink.logging.Logger;

public class UC_Tutorial extends DefaultUserActivity {

    private static final Logger logger = Logger.getLogger(UC_Tutorial.class.getName());

    public void action(ActivityContext arg0) throws AnyLinkException {
        // TODO Auto-generated method stub

    }

}

1.3. getEnv 함수

getEnv 함수는 유저 클래스나 핸들러에서 시스템 정보나 거래의 정보들을 가져올 때 사용할 수 있다.

다음은 getEnv 함수에서 사용 가능한 key 값과 해당 key를 이용해 가져올 수 있는 값에 대한 설명이다.

항목 설명

install.root

AnyLink가 설치된 루트 경로를 가져온다.

domain.home

도메인의 home 경로를 가져온다.

server.home

서버의 home 경로를 가져온다.

server.name

서버의 이름을 가져온다.

adminServer.name

adminServer의 이름을 가져온다.

cluster.name

클러스터의 이름을 가져온다.

bizsystem.id

업무시스템의 ID를 가져온다.

hostname

hostname을 가져온다.

biztx.id

거래 ID를 가져온다.

guid

GUID를 가져온다.

startendpoint.id

거래가 시작된 엔드포인트 ID를 가져온다.

startadapter.id

거래가 시작된 어댑터 ID를 가져온다.

startendpoint.sysid

거래가 시작된 엔드포인트의 SysID를 가져온다.

startendpoint.connection.count

거래가 시작된 엔드포인트의 커넥션 개수를 가져온다.

request.ip

거래를 요청한 상대의 IP를 가져온다. 잡 스케줄로 실행하는 경우 잡의 아이디를 가져온다.

request.port

거래를 요청한 상대의 port를 가져온다.

request.url

거래를 요청한 url을 가져온다.

request.http.cookie

HTTP 요청으로 실행된 거래에 대해 HTTP Request에 설정된 쿠키를 가져온다.

connection.guid

커넥션 GUID를 가져온다.

biztx.name

거래 이름을 가져온다.

biztx.code

거래 코드를 가져온다.

biztx.type

거래 타입을 가져온다.

correlation.value

코릴레이션 값을 가져온다. 매핑 핸들러 또는 매핑 액티비티에서 사용가능하다.

local.ip

local IP를 가져온다.

local.port

local Port를 가져온다.

connect.type

연결 타입을 가져온다.

hostname

hostname을 가져온다.

${sys:변수명}

WebAdmin에서 설정한 시스템 변수를 얻는다.

2. 핸들러

2.1. 핸들러 생성

유저 클래스의 생성은 왼쪽 거래 네비게이터의 컨텍스트 메뉴에서 [새로만들기] > [핸들러] > [생성할 핸들러 종류]를 선택한다. 핸들러 생성 화면에서 각 항목을 입력하고 [Finish] 버튼을 클릭한다.

figure handler create
핸들러 생성 화면(액티비티 핸들러)
항목 설명

Package

핸들러를 생성할 거래를 선택한다.

Name

핸들러의 이름을 입력한다. Java의 클래스명 생성법과 동일하다.

Superclass

각 핸들러가 상속받게 될 클래스를 보여준다.

2.2. 핸들러 정의

핸들러가 생성되면 에디터 화면으로 이동해서 핸들러를 작성할 수 있다. 해당 핸들러는 Java 소스와 동일한 형태이며 각 핸들러의 슈퍼 클래스를 상속 받은 클래스이다.

다음은 AnyLink에서 제공되는 핸들러의 목록이다.

구분 Super Class 설명

액티비티

DefaultActivityHandler

액티비티의 시작/종료 등 특정 시점에 수행할 동작을 정의한다.

액티비티 에러

DefaultActivityErrorHandler

액티비티에 에러가 발생하는 경우 수행할 동작을 정의한다.

프로세스

DefaultProcessHandler

프로세스의 시작/종료 등 특정 시점에 수행할 동작을 정의한다.

프로세스 에러

DefaultProcessErrorHandler

프로세스에 에러가 발생하는 경우 수행할 동작을 정의한다.

어댑터 메시지

DefaultAdapterMessageHandler

메시지를 엔드포인트에 전달하거나 전달받기 전에 메시지에 대한 전처리를 한다.

암복호화

DefaultEncryptionHandler

로깅할 때 사용자가 원하는 암복호화를 정의한다.

유저 매핑

DefaultUserMappingHandler

매핑 다이얼로그에서 지원하지 않는 복잡한 매핑을 한다.

파싱

DefaultParsingHandler

사용자가 원하는 메시지를 파싱한다.

타이머

DefaultUserTimer

타이머 이벤트에서 추가 설정을 한다.

메시지 유효성 검사

DefaultMessageValidityHandler

생성한 메시지의 유효성을 확인하기 위한 로직을 작성한다.

라우팅 핸들러

DefaultRoutingHandler

멀티바인딩에서 바인딩 설정의 로직을 작성한다.

SSO 로그인 핸들러

DefaultSsoLoginHandler

SSO 로그인을 위한 로직을 작성한다.

모니터링 이벤트 핸들러

DefaultMonitoringEventHandler

모니터링 중에 이벤트 발생시 해당 이벤트 처리에 대한 로직을 작성한다.

전문 관리 핸들러

DefaultMsgTransferHandler

전문 공유를 위한 로직을 작성한다.

기관 담당자 핸들러

DefaultPartnerAddressHandler

대외 연락처에 설정된 담당자 정보를 이용해 호출할 로직을 작성한다.

 

액티비티 핸들러

액티비티가 시작, 종료, 취소, 에러 종료 시점에 호출되는 핸들러이다.

핸들러 설명

started

액티비티가 시작되는 시점에 호출된다.

finished

액티비티가 완료되는 시점에 호출된다.

cancelled

액티비티의 취소 완료 시점에 호출된다.

errorOccurred

액티비티의 에러 완료 시점에 호출된다.

다음은 액티비티의 시작, 종료, 취소, 에러 종료 시점에 액티비티 아이디를 로그로 남기는 예제 핸들러이다.

package com.tmax.pkg.handlerCase1;

import com.tmax.anylink.api.serviceflow.ActivityContext;
import com.tmax.anylink.api.serviceflow.DefaultActivityHandler;
import com.tmax.anylink.common.AnyLinkException;
import com.tmax.anylink.logging.Logger;

public class ActivityHandlerImpl extends DefaultActivityHandler {

private static Logger logger = Logger.getLogger(ActivityHandlerImpl.class.getName());

    @Override
    public void started(ActivityContext paramActivityContext)
            throws AnyLinkException {
        // TODO Auto-generated method stub
        logger.info("==== Activity Started : " + paramActivityContext.getActivityId() );
    }

    @Override
    public void finished(ActivityContext paramActivityContext)
            throws AnyLinkException {
        // TODO Auto-generated method stub
        logger.info("==== Activity Finished : " + paramActivityContext.getActivityId() );
    }

    @Override
    public void cancelled(ActivityContext paramActivityContext,
            String paramString) throws AnyLinkException {
        // TODO Auto-generated method stub
        logger.info("==== Activity Canceled : " + paramActivityContext.getActivityId() );
    }

    @Override
    public void errorOccurred(ActivityContext paramActivityContext,
            Throwable paramThrowable) throws AnyLinkException {
        // TODO Auto-generated method stub
        logger.info("==== Acitivity Error Occured : " + paramActivityContext.getActivityId() );
    }
}

핸들러 작성이 완료되면 플로우 액티비티의 [Activity Preference]액티비티 핸들러 설정 화면에서 [Add...] 버튼을 클릭해서 핸들러를 등록할 수 있다.

 

액티비티 에러 핸들러

액티비티 실행 도중 특정 에러가 발생하는 경우 호출되는 핸들러이다.

다음은 액티비티 실행 중 에러가 발생하는 경우 액티비티 아이디와 에러 메시지를 로그로 남기는 예제 핸들러이다.

package com.tmax.pkg.handlerCase1;

import com.tmax.anylink.api.serviceflow.ActivityContext;
import com.tmax.anylink.api.serviceflow.DefaultActivityErrorHandler;
import com.tmax.anylink.common.AnyLinkException;
import com.tmax.anylink.logging.Logger;

public class ActivityErrorHandlerImpl extends DefaultActivityErrorHandler {

    private static Logger logger = Logger.getLogger(ActivityErrorHandlerImpl.class.getName());
    @Override
    public void handle(ActivityContext paramActivityContext,
            Throwable paramThrowable) throws AnyLinkException {
        // TODO Auto-generated method stub
        logger.info("==== Activity ID : "+paramActivityContext.getActivityId());
        logger.info("==== Error Message : "+paramThrowable.getMessage());
    }

핸들러 작성이 완료되면 플로우 액티비티의 [Activity Preference]Activity Error Handler 설정 화면에서 [Add...] 버튼을 클릭해서 에러 코드와 함께 핸들러를 등록할 수 있다. 등록한 핸들러는 함께 등록한 에러 코드를 갖는 에러가 발생하는 경우 호출된다.

 

프로세스 핸들러

서비스 플로우 시작, 종료 시점에 호출되는 핸들러이다.

다음은 플로우 시작, 종료 시점에 플로우 아이디를 로그로 남기는 핸들러 예제이다.

package com.tmax.pkg.handlerCase1;

import com.tmax.anylink.api.serviceflow.DefaultProcessHandler;
import com.tmax.anylink.api.serviceflow.ProcessContext;
import com.tmax.anylink.common.AnyLinkException;
import com.tmax.anylink.logging.Logger;

public class ProcessHandlerImpl extends DefaultProcessHandler {

    private Logger logger = Logger.getLogger(ProcessHandlerImpl.class.getName());
    @Override
    public void finished(ProcessContext ctx) throws AnyLinkException {
        // TODO Auto-generated method stub
        super.finished(ctx);
        logger.info("==== Flow Finished : " + ctx.getProcessId());
    }

    @Override
    public void started(ProcessContext ctx) throws AnyLinkException {
        // TODO Auto-generated method stub
        super.started(ctx);
        logger.info("==== Flow Started : " + ctx.getProcessId());
    }
}

핸들러 작성이 완료되면 플로우 에디터 컨텍스트 메뉴에서 [Property]를 선택하고 [프로세스 핸들러] 탭의 [Add...] 버튼을 클릭해서 플로우에 등록하여 사용한다.

 

프로세스 에러 핸들러

플로우 실행 도중 특정 에러가 발생하는 경우 호출되는 핸들러이다.

다음은 플로우 실행 중 에러가 발생하는 경우 플로우 아이디와 에러 메시지를 로그로 남기는 예제 핸들러이다.

package com.tmax.pkg.handlerCase1;

import com.tmax.anylink.api.serviceflow.DefaultProcessErrorHandler;
import com.tmax.anylink.api.serviceflow.ProcessContext;
import com.tmax.anylink.common.AnyLinkException;
import com.tmax.anylink.logging.Logger;

public class ProcessErrorHandlerImpl extends DefaultProcessErrorHandler {

    private static Logger logger = Logger.getLogger(ProcessHandlerImpl.class.getName());
    @Override
    public void handle(ProcessContext context, Throwable error)
            throws AnyLinkException {
        // TODO Auto-generated method stub
        logger.info("==== Flow ID : " + context.getProcessId());
        logger.info("==== Error Message : " + error.getMessage());
    }

핸들러 작성이 완료되면 플로우 에디터 컨텍스트 메뉴에서 [Property]를 선택하고 [에러 핸들러] 탭의 [Add...] 버튼을 클릭해서 에러 코드와 함께 핸들러를 등록할 수 있다. 등록한 핸들러는 함께 등록한 에러 코드를 갖는 에러가 발생하는 경우 호출된다.

 

어댑터 메시지 핸들러

엔드포인트를 통해 입출력되는 메시지를 변환하기 위한 핸들러이다. receive 메소드를 통해 입력된 메시지를 변환하여 반환하고 send 메소드를 통해 출력할 메시지를 변환하여 반환한다.

다음은 입력된 메시지를 소문자로 변경하고, 출력할 메시지를 대문자로 변경하는 핸들러 예제이다.

package com.tmax.pkg.adapterMSGCase1.tx1;

import com.tmax.anylink.api.adapter.DefaultAdapterMessageHandler;
import com.tmax.anylink.common.AnyLinkException;
import com.tmax.anylink.logging.Logger;

public class AdapterMessageHandlerImpl extends DefaultAdapterMessageHandler {

    private static Logger logger = Logger.getLogger(AdapterMessageHandlerImpl.class.getName());

    @Override
    public Object receive(Object arg0) throws AnyLinkException {
        // TODO Auto-generated method stub
        String receiveMsg = new String((byte[]) arg0);
        logger.info("==== RECEIVE MSG : " + receiveMsg );

        return receiveMsg.toLowerCase().getBytes();
    }

    @Override
    public Object send(Object arg0) throws AnyLinkException {
        // TODO Auto-generated method stub
        String sendMsg = new String((byte[]) arg0);
        logger.info("==== SEND MSG : " + sendMsg );

        return sendMsg.toUpperCase().getBytes();
    }

}

핸들러 작성이 완료되면 핸들러가 포함된 거래를 배포함으로써 사용이 가능하다. 거래가 배포되고 난 후 WebAdmin의 엔드포인트 설정 화면에서 [상세설정] 탭에 '메시지 핸들러'에 등록하여 사용한다.

 

암복호화 핸들러

트레이스 로그, 커스텀 로그를 저장, 조회하는 경우 메시지의 암복호화를 처리하기 위한 핸들러이다. decrypt 메소드를 통해 메시지를 복호화 처리를 하여 반환하고 encrypt 메소드를 통해 메시지를 암호화 처리하여 반환한다.

다음은 BASE64 인코딩 방식으로 암복호화 처리를 하는 핸들러 예제이다.

package com.tmax.pkg.encryptionCase1.tx1;

import com.tmax.anylink.api.log.DefaultEncryptionHandler;
import com.tmax.anylink.common.AnyLinkException;
import com.tmax.anylink.common.util.Base64;
import com.tmax.anylink.logging.Logger;

public class EncryptionHandlerImpl extends DefaultEncryptionHandler {

    private static Logger logger = Logger.getLogger(EncryptionHandlerImpl.class.getName());

    @Override
    public byte[] decrypt(byte[] arg0) throws AnyLinkException {
        // TODO Auto-generated method stub

        logger.info("==== Encrypted MSG : " + new String(arg0) );

        Base64 decoder = new Base64();
        byte[] decryptedMessage = decoder.decode(new String(arg0));

        return decryptedMessage;
    }

    @Override
    public byte[] encrypt(byte[] arg0) throws AnyLinkException {
        // TODO Auto-generated method stub

        logger.info("==== Original MSG : " + new String(arg0) );

        Base64 eecoder = new Base64();
        byte[] encryptedMessage = encrypt(arg0);

        return encryptedMessage;
    }
}

작성된 핸들러는 스튜디오 커스텀 로그 아웃바운드 룰'암복호화 사용'을 선택한 후 '유저 클래스 선택' 옵션에 등록하여 사용한다. 핸들러를 포함한 거래가 배포되고 난 후 WebAdmin의 로그 어댑터 [트레이스 로그] 탭의 '암호화 User Class 이름'에 패키지 명을 포함하여 입력하여 등록한 후 사용한다.

 

유저 매핑 핸들러

매핑 다이얼로그에 설정하여 매핑을 사용자가 직접 정의하는 경우 사용하는 핸들러이다. 매핑 전달인자 중 arg1이 매핑의 Source에 해당하고 반환값인 Ojbect[]가 매핑된 Target에 해당한다.

다음은 Input, Output을 순차적으로 1:1 매핑하는 핸들러 예제이다.

package com.tmax.pkg.handlerCase1;

import com.tmax.anylink.api.serviceflow.ActivityContext;
import com.tmax.anylink.api.serviceflow.DefaultUserMapping;
import com.tmax.anylink.common.AnyLinkException;

public class UserMappingHandlerImpl extends DefaultUserMapping {

    @Override
    public Object[] mapping(ActivityContext arg0, Object[] arg1)
            throws AnyLinkException {
        // TODO Auto-generated method stub
        Object[] mappedTarget = new Object[arg1.length];
        for(int i = 0; i < arg1.length; i++){
            mappedTarget[i] = arg1[i];
        }
        return mappedTarget;
    }
}

핸들러 작성이 완료되면 매핑 다이얼로그의 [Add User Class] 버튼을 클릭해서 핸들러를 등록할 수 있다.

 

파싱 핸들러

거래그룹 에디터파싱 정보'하위 거래 식별 방법' 항목이 'HANDLER’로 설정된 경우 사용되는 핸들러이다. 핸들러의 반환값에 해당하는 거래 식별 코드를 갖는 거래를 선택하여 파싱하기 위해 사용된다.

다음은 요청 메시지의 앞 4자리를 거래 식별 코드로 생성하는 핸들러 예제이다.

package com.tmax.pkg.handlerCase1;

import com.tmax.anylink.api.adapter.DefaultParsingHandler;
import com.tmax.anylink.common.AnyLinkException;
import com.tmax.anylink.logging.Logger;

public class ParsingHandlerImpl extends DefaultParsingHandler {

    private static Logger logger = Logger.getLogger(ParsingHandlerImpl.class.getName());

    @Override
    public String parsing(Object arg0) throws AnyLinkException {
        // TODO Auto-generated method stub
        String inputMsg = new String((byte[]) arg0);
        logger.info("====Input Message : " + inputMsg);
        String parsingMsg = inputMsg.substring(0, 3);
        logger.info("====Parsing Message : " + parsingMsg);

        return parsingMsg;
    }
}

핸들러 작성이 완료되면 거래그룹 에디터파싱 정보'하위 거래 식별 방법' 항목을 'HANDLER’로 선택한 후 핸들러를 등록할 수 있다.

 

타이머 핸들러

타이머 이벤트의 설정을 위한 핸들러이다. nextTime 메소드는 타이머 이벤트가 발생시킬 시각을 설정하여 반환하고 shouldFireTimerEvent 메소드는 타이머 이벤트를 발생시킬지 여부를 반환한다.

다음은 타이머 이벤트를 500ms에 무조건 타이머 이벤트를 발생시키는 핸들러 예제이다.

package com.tmax.pkg.handlerCase1;

import java.util.logging.Logger;

import com.tmax.anylink.api.serviceflow.ActivityContext;
import com.tmax.anylink.api.serviceflow.DefaultUserTimer;

public class TimerHandlerImpl extends DefaultUserTimer {

    private static Logger logger = Logger.getLogger(TimerHandlerImpl.class.getName());
    private long startTime = -1;
    private final static long PERIOD = 20;

    @Override
    public long nextTime(ActivityContext arg0) {
        // TODO Auto-generated method stub
        if(startTime < 0) {
            startTime = System.currentTimeMillis() + PERIOD ;
        } else {
            startTime += PERIOD ;
        }

        logger.info("####### TimerHandlerImpl startTime : " + startTime);

        return startTime;
    }

    @Override
    public boolean shouldFireTimerEvent(ActivityContext arg0, long arg1) {
        // TODO Auto-generated method stub
        return true;
    }
}

핸들러 작성이 완료되면 [Timer Event] > [Event Preference] 화면의 [Timer] 탭에 'Timer Class Name' 항목에 핸들러를 입력하여 사용한다.

 

메시지 유효성 검사 핸들러

생성한 메시지의 유효성(메타 데이터 포함 여부)을 판단하기 위한 로직을 작성하는 핸들러이다.

다음은 메시지의 Physical Name에 'ab’가 포함되는 경우 유효하지 않은 메시지로 판단하는 핸들러 예제이다.

package com.tmax.pkg.msgValidityCase1;

import java.util.HashMap;
import java.util.Map;

import com.tmax.anylink.api.validation.DefaultMessageValidityHandler;
import com.tmax.anylink.common.AnyLinkException;
import com.tmaxsoft.promapper.structure.StructureFieldType;

public class MsgValidityImpl extends DefaultMessageValidityHandler {

    @Override
    public Map<StructureFieldType, Boolean> messageMetaCheck(
        StructureFieldType[] arg0) throws AnyLinkException {
        // TODO Auto-generated method stub
        Map<StructureFieldType, Boolean> ret = new HashMap<StructureFieldType, Boolean>();

        for(StructureFieldType type : arg0){
            if(type.getPhysicalName().contains("ab")){ // 유효하지 않은 메시지 필드
                ret.put(type, true); // 해당 메시지 필드와 'true' 값을 맵에 저장
            }else{  // 유효한 메시지 필드
                ret.put(type, false); // 해당 메시지 필드와 'false' 값을 맵에 저장
            }
        }
        return ret;
    }
}

핸들러 작성이 완료되면 네비게이터에서 생성한 핸들러의 컨텍스트 메뉴 중 [핸들러 업로드]를 선택하여 핸들러를 DIS에 등록시킨다. 핸들러 업로드 후 WebAdmin의 [어드민] > [사용자 클래스 설정] 메뉴의 'message-validity-class-name' 항목에서 생성한 핸들러의 이름을 패키지를 포함하여 입력한다.

figure message validity handler upload admin
메시지 유효성 검사 핸들러 등록(WebAdmin)

핸들러 등록 후 메시지 에디터의 [유효성 검사]를 선택하면 메시지 유효성 검사 결과가 출력된다.

figure message validity handler result dialog
메시지 유효성 검사 결과 - 다이얼로그
figure message validity handler result editor
메시지 유효성 검사 결과 - 에디터

메시지 유효성 검사 핸들러를 사용하기 위해서는 스튜디오 컴파일러 버전과 DIS가 설치된 서버의 JAVA 버전이 동일해야 한다. ([Window] > [Preferences] > [Java] > [Compiler] > [Compiler compliance level] : 1.6)

 

라우팅 핸들러

멀티바인딩에서 바인딩을 위한 핸들러이다. route 메소드는 멀티바인딩이 호출될 때 실행되어 리턴되는 값과 같은 값을 가진 서비스가 호출된다.

메시지 컨텐츠를 Value로 하여 라우팅하는 예제이다.

package com.tmax.pkg.handlerCase1;

import com.tmax.anylink.api.MessageContext;
import com.tmax.anylink.api.multibinding.DefaultRoutingHandler;
import com.tmax.anylink.common.AnyLinkException;
import com.tmax.anylink.logging.Logger;

public class routing extends DefaultRoutingHandler {

    private static final Logger logger = Logger.getLogger(routing.class.getName());

    @Override
    public String route(MessageContext arg0) throws AnyLinkException {
        return (String)new String((byte[])arg0.getContent());
    }
}

핸들러 작성이 완료되면 멀티 바인딩의 바인딩 설정에서 선택 옵션을 'HANDLER'로 설정하고 선택 옵션 추가정보에 핸들러를 검색하여 입력한다.

 

SSO 로그인 핸들러

SSO 로그인을 위한 핸들러를 작성한다. login 메소드는 사용자가 로그인 시 호출되는 메소드로 리턴되는 SsoHandlerResult를 이용하여 로그인 성공/실패 여부를 판단한다. login 메소드의 첫 번째 인자는 입력한 사용자 아이디이고, 두 번째 인자는 사용자 비밀번호이다.

다음은 로그인하려는 유저의 아이디와 비밀번호를 로그로 출력하고 로그인을 성공시키는 예제이다.

package com.tmax.pkg.handlerCase1;

import com.tmax.anylink.api.SsoLogin.DefaultSsoLoginHandler;
import com.tmax.anylink.api.SsoLogin.SsoHandlerResult;
import com.tmax.anylink.api.SsoLogin.SsoHandlerResult.HandlerResultType;
import com.tmax.anylink.common.AnyLinkException;
import com.tmax.anylink.logging.Logger;

public class ssologin extends DefaultSsoLoginHandler {

    private static final Logger logger = Logger.getLogger(ssologin.class.getName());

    @Override
    public SsoHandlerResult login(String arg0, String arg1)
            throws AnyLinkException {
        logger.info("SSO ID : " + arg0 + ", PW : " + arg1);
        SsoHandlerResult result = new SsoHandlerResult();
        result.setResult(HandlerResultType.SUCCESS);
        return result;
    }
}

핸들러 작성이 완료되면 배포 후 WebAdmin의 [관리자] > [DIS 설정]에서 SSO 설정'SSO 방식' 항목을 'UserClass 방식’으로 설정하고 SSO 핸들러에 작성한 핸들러를 입력한다.

 

모니터링 이벤트 핸들러

모니터링 이벤트가 발생한 경우 호출되는 핸들러이다. event 메소드는 이벤트가 발생하였을때 호출되는 메소드로 첫 번째 인자에 이벤트 타입 정보, 두 번째 인자에 모니터링 이벤트 정보를 맵으로 얻어 올 수 있다. 맵에서 가져올 수 있는 정보는 [운영관리] > [이벤트 관리] > [이벤트 목록] 메뉴의 '이벤트 메시지' 항목에서 확인할 수 있다.

다음은 이벤트가 발생할 때 발생한 이벤트의 정보를 로그로 출력하는 예제이다.

package com.tmax.pkg.handlerCase1;

import java.util.Map;

import com.tmax.anylink.api.event.DefaultMonitoringEventHandler;
import com.tmax.anylink.common.AnyLinkException;
import com.tmax.anylink.logging.Logger;
import com.tmaxsoft.schemas.anylink.MonitoringEventType;

public class MonitoringEvent extends DefaultMonitoringEventHandler {

    private static final Logger logger = Logger.getLogger(MonitoringEvent.class.getName());

    @Override
    public void event(MonitoringEventType arg0, Map<String, Object> arg1)
            throws AnyLinkException {
        logger.info(arg0.toString());
    }

}

핸들러 작성이 완료되면 배포 후 WebAdmin의 [운영관리] > [이벤트 관리] > [이벤트 목록] 메뉴에서 각 이벤트들의 정보에서 '이벤트 핸들러' 항목에 핸들러를 검색 후 설정한 후 저장한다.

 

전문 관리 핸들러

전문 관리 Admin에서 [운영관리] > [전문공유] 메뉴에서 [전송] 버튼을 통해 호출되는 핸들러이다. callHandler 메소드는 [전문공유][전송] 버튼을 클릭했을 때 호출되는 메소드로 체크된 메시지 리스트를 인자로 받아 해당 메시지들의 정보를 가져올 수 있다.

다음은 전송할 메시지들의 sysid를 로그로 출력하는 예제이다.

package com.tmax.pkg.handlerCase1;

import java.util.List;

import com.tmax.anylink.api.msgtransfer.DefaultMsgTransferHandler;
import com.tmax.anylink.common.AnyLinkException;
import com.tmax.anylink.dis.msg.ResourceInfoPK;
import com.tmax.anylink.logging.Logger;

public class MsgTransfer extends DefaultMsgTransferHandler {

    private static final Logger logger = Logger.getLogger(MsgTransfer.class.getName());

    public String callHandler(List<ResourceInfoPK> arg0)
            throws AnyLinkException {
        for(int i = 0; i<arg0.size(); i ++) {
            ResourceInfoPK resource = arg0.get(i);
            logger.info("resource sysid = " + resource.getSysId());
        }
        return null;
    }
}

핸들러 작성이 완료되면 배포 후 WebAdmin의 [관리자] > [DIS 설정] 메뉴에서 '전문 공유 핸들러' 항목에 작성한 핸들러 클래스를 입력한다. WebAdmin의 [운영관리] > [전문 공유] 메뉴에서 전송할 메시지들을 체크한 뒤 [전송] 버튼을 클릭하여 핸들러를 호출할 수 있다.

 

기관 담당자 핸들러

WebAdmin의 [운영관리] > [대외 연락처] > [담당자] 메뉴에서 [전송] 버튼을 통해 호출되는 핸들러이다. callHandler 메소드는 [담당자] 메뉴에서 [전송] 버튼을 클릭했을 때 호출되는 메소드로 체크된 담당자들의 정보를 가져올 수 있다.

다음은 선택한 담당자들의 이름을 로그로 출력하는 예제이다.

package com.tmax.pkg.handlerCase1;

import java.util.List;

import com.tmax.anylink.api.partneraddress.DefaultPartnerAddressHandler;
import com.tmax.anylink.api.partneraddress.PartnerUser;
import com.tmax.anylink.common.AnyLinkException;
import com.tmax.anylink.logging.Logger;

public class ParnerAddress extends DefaultPartnerAddressHandler {

    private static final Logger logger = Logger.getLogger(ParnerAddress.class.getName());
    @Override
    public String callHandler(List<PartnerUser> partnertUserList)
            throws AnyLinkException {
        for(int i = 0; i<partnertUserList.size(); i++) {
            PartnerUser user = partnertUserList.get(i);
            logger.info("User Name = " + user.getUserName());
        }
        return super.callHandler(partnertUserList);
    }
}

핸들러 작성이 완료되면 배포 후 WebAdmin의 [관리자] > [DIS 설정] 메뉴에서 '기관담당자 핸들러' 항목에 작성한 핸들러 클래스를 입력한다. WebAdmin의 [운영관리] > [대외 연락처] > [담당자] 메뉴에서 호출할 담당자들을 체크한 뒤 [전송] 버튼을 클릭하여 핸들러를 호출할 수 있다.