환경설정

본 절에서는 JTC 환경설정 방법과 로그 설정 방법에 대해 설명한다.

1. JTC OUTBOUND

JTC는 "JEUS-Tuxedo Connector"의 약자로, Tuxedo에 접속하여 서비스를 이용하거나 Tuxedo로부터 서비스를 호출할 수 있는 라이브러리이다. WebT 라이브러리에 포함되어 배포된다.

JTC 환경설정 파일에는 JEUS 서버 및 Tuxedo 서버의 정보와 서비스 운영 환경을 설정한다. JTC 환경설정 파일에 설정된 정보와 Tuxedo 도메인 게이트웨이에 설정된 정보는 서로 일치해야 한다.

JTC에 대응되는 Tuxedo의 환경설정 파일은 도메인 게이트웨이를 사용하기 위해 부가적인 SVRGROUP 절SERVER 절에 내용을 추가하며, 해당 도메인에 대한 자세한 정보는 별도의 도메인 환경설정 파일을 설정하여 사용한다.

JTC OUTBOUND의 환경설정은 Tuxedo 도메인 및 기타 설정을 위한 것으로 다음의 순서로 진행한다.

  1. webt.properties 설정

  2. Startup 메소드 설정

  3. Tuxedo 환경설정

  4. Tuxedo 도메인 환경설정

  5. JEUS와 Tuxedo 기동

1.1. webt.properties 설정

webt.properties 파일은 로그 정보와 도메인 정보를 설정하기 위한 파일로 다음 경로의 하위에 위치한다.

$JEUS_HOME/lib/application

JEUS_HOME/lib/application/webt.properties와 JEUSMain.xml에서 동시에 webt.properties를 설정하면 Tuxedo는 둘 중 한쪽만 접속을 허용하기 때문에 한 쪽은 연결이 계속 끊어지는 현상이 발생하므로 주의해야 한다. webt.properties 설정에 관한 내용은 Tmax WebT User Guide를 참고한다.

다음은 webt.properties 파일의 기본 형식과 설정 항목에 대한 설명이다.

log.level = debug
log.dir = c:/temp
log.file = webt.log
log.bufsize = 1024
defaultCharset = euc-kr

tux.buffer.size = 4096
tux.default.timeout = 20
tux.default.txtimeout = 30

tux.local.listen.ip=192.168.1.35
tux.local.listen.port=6000

tux.local.name = TDOM1
tux.remote.name.list = TDOM2
tux.default.remote = TDOM2

tux.TDOM2.addr = 192.0.0.1
tux.TDOM2.port = 5000
  • log.level = [none | debug | info]

    • 기본값: info

    • 로그 레벨을 지정한다.

  • log.dir = string

    • 기본값: NULL

    • 로그 파일이 저장되는 디렉터리를 설정한다. Windows의 경우 '/'를 '\'로 표시해야 한다.

  • log.file = string

    • 기본값: webt.log

    • 로그 파일의 이름을 지정한다.

  • log.bufsize = int

    • 기본값: 512

    • 로그를 남길 때 사용되는 버퍼의 크기를 지정한다.

  • log.file.date.format = string

    • 기본값: MMddyyyy

    • log.valid.days가 1 이상일 경우 생성되는 로그 파일의 이름 형식을 지정한다.

  • log.valid.days = int

    • 기본값: -1

    • 로그 파일을 사용하는 경우 며칠 주기로 파일명을 업데이트할 것인지를 지정한다.

      0이나 음수값을 지정하는 경우 하나의 파일을 사용하게 된다.

  • tux.local.name = string

    • 기본값: NULL

    • JEUS 로컬 도메인의 이름이다. Tuxedo 도메인 게이트웨이는 이 값을 이용하여 상대방을 구분하고 인식하므로 JTC가 사용되는 각 엔진 컨테이너들은 반드시 각각의 고유한 이름을 갖고 있어야 한다.

  • tux.local.listen.ip = string

    • 기본값: NULL

    • JTC에서 Listen Port를 열어 Tuxedo로부터 접속하는 구조의 연결 방식을 추가한다. tux.local.listen.port 를 지정해야 의미가 있는 설정이다.

    • IP를 설정하지 않으면 모든 IP에 대해서 Listen이 가능하다. 이 설정은 ACL이 아니고 Listen하는 경우 bind되는 IP에 대한 설정이다.

    • JTC가 기동될 머신의 IP 중 하나를 설정해야 한다. 이미 연결이 되어 있는 경우에 새로운 연결을 맺을 경우에는 무조건 기존 연결을 종료하고 새로운 연결을 받아들인다. 이유는 네트워크의 문제로 인해서 JEUS는 계속 연결이 되어 있는지 알지만 Tuxedo는 연결 종료된 것을 감지하고 방화벽 문제같은 문제로 새로운 연결을 맺으려고 할 때, JTC에서 새로운 연결 허용을 하지 않을 경우 정상 서비스를 수행할 수 없다는 문제가 있을 수 있다. 따라서 항상 나중 연결에 대해서 허용해야 한다.

  • tux.local.listen.port = int

    • 기본값: NULL

    • JTC에서 Listen Port를 열어 Tuxedo로부터 접속하는 구조의 연결 방식을 추가한다.

    • 지정하지 않거나 -1로 지정할 경우에는 이 기능을 사용하지 않는다는 의미이다. tux.local.listen.ip와 함께 사용하는 경우 bind할 IP까지 설정이 가능하다. 이미 연결이 되어 있는 경우에 새로운 연결을 맺을 경우에는 무조건 기존 연결을 종료하고 새로운 연결을 받아들인다. 이유는 네트워크 문제로 인해서 JEUS는 계속 연결이 되어 있는지 알지만 Tuxedo는 연결 종료된 것을 감지하고 방화벽 문제같은 문제로 새로운 연결을 맺으려고 할 때, JTC에서 새로운 연결 허용을 하지 않을 경우 정상 서비스를 수행할 수 없다는 문제가 있을 수 있으므로 항상 나중 연결에 대해서 허용해야 한다.

      1. Listen 구조만 사용할 경우의 설정으로 JEUS에서 Tuxedo로의 연결을 사용하지 않을 경우에라도 리모트의 대표 IP, Port를 설정해야 한다. Port를 99999로 설정하면 실제 연결 시도는 하지 않는다.

      2. 이 기능은 mirror 기능과 함께 사용할 수 없다.

  • tux.remote.name.list = string

    • 기본값: NULL

    • 리모트 도메인으로 사용할 이름을 지정한다. 여러 개 지정할 때에는 콤마(,)로 구분하여 설정한다. 이 환경에 설정된 이름들은 아래 설정의 <domainName>에 대응된다.

  • tux.cluster.name.list = string

    • 기본값: NULL

    • 클러스터 도메인으로 사용할 이름을 지정한다. 여러 개 지정할 때에는 콤마(,)로 구분하여 설정한다.

  • tux.<clusterName>.remote.name.list = string

    • 기본값: NULL

    • 해당 클러스터 아래에서 관리될 리모트 도메인들을 지정한다. 클러스터로 요청을 호출했을 경우 이 클러스터에 속한 리모트 도메인 중 하나로 호출된다. 여러 개 지정할 때에는 콤마(,)로 구분하여 설정한다.

  • tux.buffer.size = int

    • 기본값: 4096 (단위: Byte)

    • Tuxedo와 통신하는 데 사용되는 버퍼의 크기를 설정한다.

  • tux.default.timeout = int

    • 기본값: 1000 (단위: 초)

    • 일반 서비스를 호출할 때 사용되는 응답 대기시간이다. 설정된 시간을 초과할 경우 클라이언트는 Exception 처리되며 이후에 온 응답 메시지는 파기된다.

  • tux.default.txtimeout = int

    • 기본값: 30 (단위: 초)

    • 트랜잭션 컨트롤 메시지에 대한 응답 대기시간이다. 이 값은 Tuxedo에 설정된 트랜잭션 타임아웃 시간보다 크게 설정해야 한다.

    • 일반적인 설정값은 Tuxedo 환경설정 파일에 설정된 TXTIMEOUT 시간 + SCANUNIT 값이다.

  • tux.default.table = string

    • 기본값: NULL

    • Tuxedo 필드 테이블 파일을 지정한다.

  • tux.default.table.file = string

    • 기본값: NULL

    • Tuxedo 필드 테이블 텍스트 파일(*.f)을 지정한다. Tuxedo 5 이하에서 사용한다.

  • tux.default.table.file.16 = string

    • 기본값: NULL

    • Tuxedo 필드 테이블 텍스트 파일(*.f)을 지정한다. Tuxedo 6 이상에서 사용한다.

  • tux.<domainName>.buffer.size = int

    • 기본값: -1 (단위: Byte)

    • 해당 도메인에 대해 통신하는 데 사용되는 버퍼의 크기를 지정한다.

  • tux.<domainName>.default.timeout = int

    • 기본값: -1 (단위: 초)

    • 해당 도메인에 대해 일반 서비스를 호출할 때 사용되는 응답 대기시간을 지정한다.

  • tux.<domainName>.default.txtimeout = int

    • 기본값: -1 (단위: 초)

    • 해당 도메인의 트랜잭션 컨트롤 메시지에 대한 응답 대기시간을 지정한다.

  • tux.<domainName>.default.readtimeout = int

    • 기본값: -1 (단위: 초)

    • 해당 도메인의 소켓 타임아웃 시간을 지정한다.

  • tux.<domainName>.thread.min = int

    • 기본값: 1

    • 해당 도메인의 기본 연결 스레드 수를 지정한다.

  • tux.<domainName>.thread.max = int

    • 기본값: 1

    • 해당 도메인의 최대 연결 스레드 수를 지정한다.

  • tux.<domainName>.addr[.0] = string

    • 기본값: NULL

    • 해당 Tuxedo 도메인의 메인 게이트웨이의 IP 주소를 지정한다.

  • tux.<domainName>.port[.0] = int

    • 기본값: 0

    • 해당 Tuxedo 도메인에 대한 메인 게이트웨이의 포트 번호를 지정한다.

  • tux.<domainName>.interval[.0] = int

    • 기본값: 20 (단위: 초)

    • 해당 Tuxedo 도메인의 메인 게이트웨이의 스케줄링 주기를 지정한다.

  • tux.<BackUp domain Name>.addr[.x] = string

    • 기본값: NULL

    • 해당 Tuxedo 도메인의 백업 게이트웨이의 IP 주소를 지정한다.

  • tux.<BackUp domain Name>.port[.x] = int

    • 기본값: 0

    • 해당 Tuxedo 도메인의 백업 게이트웨이의 포트 번호를 지정한다.

  • tux.<domainName>.interval[.x] = int

    • 기본값: 20 (단위: 초)

    • 해당 Tuxedo 도메인의 백업 게이트웨이의 스케줄링 주기를 지정한다.

  • tux.<domainName>.svc = string

    • 기본값: NULL

    • 해당 Tuxedo 도메인에서 호출할 Tuxedo 서비스명을 지정한다. 여러 개 지정할 때에는 콤마(,)로 구분하여 설정한다.

  • tux.<clusterName>.svc = string

    • 기본값: NULL

    • 클러스터 도메인이 설정된 경우에는 리모트 도메인에 서비스를 지정하는 대신에 클러스터명에 해당되는 서비스를 지정한다. 이렇게 설정된 경우 해당 클러스터 아래에 있는 리모트 도메인을 통해서 지정된 서비스를 호출할 수 있다. 여러 개 지정할 때에는 콤마(,)로 구분하여 설정한다.

  • tux.<BackUp domain Name>.notx = boolean

    • 기본값: false

    • 해당 Tuxedo 도메인의 not-transaction 모드의 설정 여부를 지정한다.

  • tux.<BackUp domain Name>.backup = string

    • 기본값: NULL

    • 해당 Tuxedo 도메인의 백업 도메인을 지정한다. 여기에 설정된 게이트웨이는 메인의 도메인 주소와 달라야 하며 위의 백업 게이트웨이 기능과 동시에 설정하면 안된다.

  • tux.mbean = boolean

    • 기본값: false

    • JTC Admin을 위한 MBean을 등록할지의 여부를 지정한다. JTC Admin 기능은 JEUS 6 Fix#7 이상에서 지원한다.

  • tux.inbound.threadpool = int

    • 기본값: 1

    • Tuxedo 에서 Jeus로 요청시. JTC에서 EJB 호출하는 쓰레드의 수를 지정한다. Tuxedo에서 Jeus로 요청시 EJB 호출하는 부분이 단일 쓰레드라면 성능상 문제가 될 수 있으므로 동시에 처리 가능하도록 설정을 지정하여 동시 처리 건수를 늘릴 수 있다.

다음은 각 상황별 설정 예제 파일이다.

  • Mirror를 지정할 경우

    tux.local.name=LJEUS1
    tux.remote.name.list=TJEUS1
    
    #### Main
    tux.TJEUS1.addr=160.61.1.121
    tux.TJEUS1.port=40001
    tux.TJEUS1.retry=0
    tux.TJEUS1.interval=10
    
    #### Mirror 1
    tux.TJEUS1.addr.1=160.61.1.122
    tux.TJEUS1.port.1=40001
    tux.TJEUS1.retry.1=0
    tux.TJEUS1.interval.1=10
    
    #### Mirror 2
    tux.TJEUS1.addr.2=160.61.1.131
    tux.TJEUS1.port.2=40001
    tux.TJEUS1.retry.2=0
    tux.TJEUS1.interval.2=10
  • Backup 지정할 경우

    tux.local.name=TDOM1
    tux.remote.name.list=TDOM2,TDOM3
    tux.default.remote=TDOM2
    
    tux.TDOM2.addr=192.0.0.1
    tux.TDOM2.port=5000
    tux.TDOM2.backup=TDOM3
    
    tux.TDOM3.addr=192.0.0.2
    tux.TDOM3.port=5000
  • 클러스터를 사용할 경우

    tux.cluster.name.list=RCDOM1,RCDOM2
    tux.RCDOM1.remote.name.list=TDOM2,TDOM3
    tux.RCDOM2.remote.name.list=TDOM2
    
    tux.RCDOM1.svc=TOUPPER,TOUPPER2,FDLTOUPPER,FDLTOUPPER2
    tux.RCDOM2.svc=TOUPPER,FDLTOUPPER
    
    tux.TDOM2.addr=192.0.0.1
    tux.TDOM2.port=5000
    
    tux.TDOM3.addr=192.0.0.2
    tux.TDOM3.port=5000
  • POJO를 사용할 경우(inbound)

    tux.beans.service.list=TOUPPER,TOLOWER
    tux.beans.TOUPPER.class=tmax.qa.sample.JtcBean1
    tux.beans.TOLOWER.class=tmax.qa.sample.JtcBean2
  • EJB를 사용할 경우(inbound)

    tux.ejbs.service.list= GSVC01
    tux.ejbs.GSVC01.export=echotest
    tux.ejbs.GSVC01.method=setStringEchoTux

WebT의 환경설정과 관련된 자세한 내용은 Tmax WebT User Guide를 참고한다.

1.2. Startup 메소드 설정

JTC를 다음과 같이 엔진 환경설정 파일의 Startup 클래스로 등록한다. 반드시 하나의 엔진 컨테이너에는 하나의 JTC만 기동되어야 한다.

다음은 JEUSMain.xml에서 Startup 메소드를 설정하는 부분이다.

<lifecycle-invocation>
  <class-name>tmax.webt.TuxBootstrapper</class-name>
  <invocation>
    <invocation-method>
      <method-name>init</method-name>
    </invocation-method>
  </invocation>
</lifecycle-invocation>

위와 같이 설정한 경우 자동적으로 애플리케이션 하위의 webt.properties 파일을 환경설정 파일로 선택한다.

다수의 엔진 컨테이너에서 사용되는 경우 각 컨테이너는 별도의 환경 파일을 필요로 한다. 즉, 다음과 같이 각 엔진 컨테이너에 대해 별도의 설정을 갖는 커넥션이 필요하다.

<lifecycle-invocation>
  <class-name>tmax.webt.TuxBootstrapper</class-name>
  <invocation>
    <invocation-method>
      <method-name>init<method-name>
      <method-params>
        <method-param> java.lang.String </method-param>
      </method-params>
    </invocation-method>
    <invocation-argument> config-filename </invocation-argument>
  </invocation>
</lifecycle-invocation>

JTC는 기본적으로 Tuxedo 도메인 게이트웨이와 1:1 소켓 통신을 하므로 JEUS의 클러스터링 기능을 이용한 Tuxedo 서비스의 공유는 불가능하다.

위와 같은 설정을 통해 JTC를 위한 환경 파일을 별도로 지정한 상태에서, 이 파일과는 달리 JEUS_HOME/lib/application/webt.properties가 존재하거나, 혹은 JEUSMain.xml의 <node> 아래의 <command-option> 노드에서 -Dwebt.properties=<config-filename>과 같이 webt.properties 파일을 별도로 설정한 경우에는 JTC와 환경 파일이 겹치므로 설정이 제대로 적용되지 않을 수 있다.

webt.properties 파일은 항상 하나의 컨테이너에서 단독으로 사용되어야 한다는 점을 주의한다.

1.3. Tuxedo 환경설정

SERVERS 절에 도메인 관리 서버, 게이트웨이 관리 서버, 도메인 게이트웨이 서버를 등록한다. Tuxedo 7.2 이상인 경우 반드시 CLOPT 옵션에 [-t]를 추가해야 한다.

다음은 SERVERS 절에 서버를 등록하는 예제이다.

*SERVERS

DMADM           SRVGRP = GROUP1 SRVID = 1
                CLOPT = "-At -r -o /user/tux/log/DMADM.out"
GWADM           SRVGRP = GROUP2 SRVID = 1
                CLOPT = "-At -r -o /user/tux/log/GWADM.out"
GWTDOMAIN       SRVGRP = GROUP2 SRVID = 2
                CLOPT = "-At -r -o /user/tux/log/GWTDOMAIN.out"

1.4. Tuxedo 도메인 환경설정

Tuxedo 도메인 환경설정 파일에서는 Tuxedo 로컬 도메인과 JTC가 설치된 JEUS 리모트 도메인, Tuxedo에서 호출하게 될 JEUS의 서비스명을 설정한다.

다음은 Tuxedo 도메인 환경 파일을 설정하는 부분이다.

*DM_LOCAL_DOMAINS
TDOM1     GWGRP = GROUP2
          TYPE = TDOMAIN
          DOMAINID = "TDOM1"
          BLOCKTIME = 20
          CONNECTION_POLICY = INCOMMING_ONLY
          DMTLOGDEV = "/user/tux/log/TLOG"
          AUDITLOG = "/user/tux/log/ALOG"
          DMTLOGNAME = "DMTLOG_TDOM1"

*DM_REMOTE_DOMAINS
TDOM2   TYPE = TDOMAIN
        DOMAINID = "TDOM2"

*DM_TDOMAIN
TDOM1   NWADDR = "//211.56.251.175:5000"

TDOM2   NWADDR = "//192.168.1.35:6000"

*DM_REMOTE_SERVICES
TOLOWER   RDOM = "TDOM2"
JEUSXA    RDOM = "TDOM2"

위의 항목 중 CONNECTION_POLICY과 DMTLOGDEV에서는 다음 사항을 주의해야 한다.

항목 주의사항

CONNECTION_POLICY

반드시 INCOMMING_ONLY를 사용해야 한다.

DMTLOGDEV

전역 트랜잭션을 사용하기 위해서 DMTLOGDEV에 TLOG 디바이스 파일을 설정해야 한다.

JTC는 단방향의 연결만을 지원하므로 JTC에 해당하는 도메인의 리모트 도메인 주소값은 의미가 없다. 따라서 해당 항목은 설정하지 않아도 무관하다. 처음 Tuxedo가 기동될 때 주소값이 설정되어 있지 않다는 메시지가 ULOG에 남을 수 있으나 무시해도 좋다.

Tuxedo 환경설정 파일에서 로컬 도메인에 해당하는 도메인의 주소값은 JTC에 설정되는 리모트 도메인의 주소값과 일치해야 한다. JTC의 로컬 도메인의 이름은 Tuxedo 환경설정 파일의 리모트 도메인 이름과 일치해야 한다.

트랜잭션을 사용하기 위한 TLOGDEV 파일은 다음과 같이 생성한다.

/user/tux>tmadmin –c

tmadmin - Copyright (c) 1996 BEA Systems, Inc.
Portions * Copyright 1986-1997 RSA Data Security, Inc.
All Rights Reserved.
Distributed under license by BEA Systems, Inc.
TUXEDO is a registered trademark.

> crdl –z <tlogfilepath> [-b <blocksize>] [-o <configoffset>]
  crdl –z /user/tux/log/TLOG

1.5. JEUS와 Tuxedo 기동

애플리케이션 개발 및 환경설정이 완료되면 JEUS와 Tuxedo를 기동한다.

다음은 환경설정 파일을 Tuxedo 시스템에 적용하고 기동하는 과정이다.

tmloadcf –y <TuxedoConfiguationFile>
dmloadcf –y <TuxedoDomainEnvironmentFile>
tmboot –y

다음은 JEUS 시스템을 기동하는 명령어이다.

jeus –xml –U <adminuser> -P <password>

2. JTC INBOUND

JTC는 Tuxedo에서 JEUS로의 통신을 지원한다. Tuxedo의 TDomain Gateway와 JTC 통신을 통해서 JEUS의 EJB나 일반 클래스(Bean)를 호출할 수 있는 형태로 제공한다.

실제 동작은 Tuxedo의 클라이언트, 서버 애플리케이션에서 tpcall로 TDomain Gateway에 등록한 서비스를 호출할 때 해당 TDomain Gateway를 통해서 JTC에 메시지가 전달되며, JTC에서 webt.properties에 설정한 tpcall의 인자 중 서비스명에 해당하는 EJB나 일반 클래스를 호출하도록 동작한다.

2.1. EJB 서비스 호출 설정

JTC INBOUND 통신을 통해 EJB 서비스를 호출하려면 다음과 같은 설정이 필요하다.

  1. webt.properties 설정

  2. Tuxedo 환경설정

  3. Tuxedo 도메인 환경설정

  4. JEUS와 Tuxedo 기동

JTC에서 EJB를 호출하려면 EJB를 'shared type’으로 deploy해야 한다.

webt.properties 설정

다음은 webt.properties 파일의 기본 형식과 설정 항목에 대한 설명이다.

tux.ejbs.service.list = <ServiceName>
tux.ejbs.<ServiceName>.export = <EJB module>
tux.ejbs.<ServiceName>.method = <method>
  • tux.ejbs.service.list = string

    • 기본값 : NULL

    • EJB 서비스를 호출하기 위해 Tuxedo에서 인식하는 모든 서비스명을 콤마(,)로 구분하여 나열한다.

      서비스명은 Tuxedo의 클라이언트와 서버에서 tpcall할 경우 사용하는 서비스명이다. 해당 서비스명이 호출되면 export에 설정한 EJB의 메소드가 호출되며 메소드는 인자와 리턴값이 tmax.jtc.io.TuxBuffer를 사용해야 한다.

  • tux.ejbs.<ServiceName>.export = string

    • 기본값 : NULL

    • 해당 서비스를 호출할 때 사용되는 EJB 모듈명을 설정한다.

  • tux.ejbs.<ServiceName>.method = string

    • 기본값 : NULL

    • 서비스에 해당하는 EJB 모듈의 메소드명을 설정한다.

다음은 webt.properties의 설정 예제이다.

tux.ejbs.service.list = GSVC01
tux.ejbs.GSVC01.export = EchoTest
tux.ejbs.GSVC01.method = setStringEchoTux

Tuxedo에서 GSVC01 서비스를 호출하여 JEUS의 EchoTest EJB의 setStringEchoTux 함수를 호출한다.

Tuxedo 환경설정

SERVICE 절에 다음과 같이 서비스를 등록한다.

*SERVICE
GSVC01
Tuxedo 도메인 환경설정

Tuxedo 도메인 환경설정 파일의 DM_REMOTE_SERVICES 절에 Tuxedo에서 호출하게 될 JEUS의 서비스명을 다음과 같이 설정한다.

*DM_REMOTE_SERVICES
GSVC01
         RNAME = "GSVC01"
         RDOM = "TUXGW1"

*DM_TDOMAIN
TUXGW1  NWADDR = "//192.168.37.100:9521"
JEUS와 Tuxedo 기동

애플리케이션 개발 및 환경설정이 완료되면 JEUS와 Tuxedo를 기동한다. 기동하는 방법은 JTC OUTBOUND의 방법과 동일하므로 자세한 내용은 JEUS와 Tuxedo 기동을 참고한다.

2.2. Bean 서비스 호출 설정

JTC INBOUND 통신을 통해 Bean 서비스를 호출하려면 다음과 같은 설정이 필요하다.

  1. webt.properties 설정

  2. Tuxedo 환경설정

  3. Tuxedo 도메인 환경설정

  4. JEUS와 Tuxedo 기동

webt.properties 설정

다음은 webt.properties 파일의 기본 형식과 설정 항목에 대한 설명이다.

tux.beans.service.list = <ServiceName>
tux.beans.<ServiceName>.class = <ClassName>
  • tux.beans.service.list = string

    • 기본값 : NULL

    • Bean 서비스를 호출하기 위해 Tuxedo에서 인식하는 모든 서비스명을 콤마(,)로 구분하여 나열한다.

      서비스명은 Tuxedo의 클라이언트와 서버에서 tpcall할 경우 사용하는 서비스명이다. 모든 일반 클래스가 호출 가능한 것이 아니고, tmax.jtmax.JtmaxService 인터페이스를 구현한 클래스만 처리가 가능하다.

      Tuxedo에서 서비스를 호출할 때 JTC에서는 등록한 해당 클래스를 Reflection API를 이용하여 생성하며 JtmaxService의 인터페이스인 서비스 함수를 호출한다. 이 객체는 한 번 생성한 후에는 재사용을 한다.

      각 JtmaxService의 인터페이스는 다음과 같다.

      인터페이스 설명

      Void initalize()

      최초로 객체를 생성할 때 호출하는 함수이다.

      Void destroy()

      호출하지 않는다. Void destroy() 함수는 종료할 때 자동 호출되는 함수이다.

      BufferAccess service(BufferAccess)

      서비스에서 수행할 동작을 함수에 구현한다. 인자는 TuxBuffer형으로 들어오며, TuxBuffer형을 리턴한다.

      구현한 클래스는 JAR 파일로 만들어서 JEUS의 lib/application 아래에 배치하면, JEUS가 부팅될 때 클래스 로더에 포함되기 때문에 JTC에서 해당 클래스의 Object를 생성할 수 있다.

  • tux.beans.<ServiceName>.class = string

    • 기본값 : NULL

    • 해당 서비스를 호출할 때 사용되는 클래스명을 설정한다.

다음은 webt.properties의 설정 예제이다.

tux.beans.service.list = GSVC02
tux.beans.GSVC02.class = test.JtcBeanSample
Tuxedo 환경설정

SERVICE 절에 다음과 같이 서비스를 등록한다.

*SERVICE
GSVC02
Tuxedo 도메인 환경설정

Tuxedo 도메인 환경설정 파일의 DM_REMOTE_SERVICES 절에 Tuxedo에서 호출하게 될 JEUS의 서비스명을 다음과 같이 설정한다.

*DM_REMOTE_SERVICES
GSVC02
         RNAME = "GSVC02"
         RDOM = "TUXGW1"

*DM_TDOMAIN
TUXGW1  NWADDR = "//192.168.37.100:9521"
설정 예제

<JtcBeanSample.java>

package tmax.qa.sample;

import tmax.common.BufferAccess;
import tmax.jtc.io.TuxStringBuffer;
import tmax.jtmax.JtmaxService;
import tmax.webt.WebtException;
import tmax.webt.WebtSystem;

public class JtcBeanSample implements JtmaxService{

   public void destroy() throws Exception {

   }

   public void initialize() throws Exception {

   }

public BufferAccess service(BufferAccess tux) throws WebtException {
   TuxStringBuffer tuxbuf = (TuxStringBuffer)tux;
   System.out.println("received string value : " + tuxbuf.getString());
   TuxStringBuffer ret = new TuxStringBuffer(WebtSystem.getDefaultCharset());
       ret.setString(tuxbuf.getString().toUpperCase());
   return ret;
   }

}
JEUS와 Tuxedo 기동

애플리케이션 개발 및 환경설정이 완료되면 JEUS와 Tuxedo를 기동한다. 기동하는 방법은 JTC OUTBOUND의 방법과 동일하므로 자세한 내용은 JEUS와 Tuxedo 기동을 참고한다.

2.3. 서비스 함수 내에서의 메시지 생성 방법

본 절에서는 다음의 서비스 함수 내에서 메시지를 생성하는 방법에 대해 간단하게 설명한다.

  • TuxStringBuffer

    TuxStringBuffer는 STRING 타입의 메시지를 구성할 때 사용한다.

    TuxStringBuffer tux = new TuxStringBuffer(WebtSystem.getDefaultCharset());

    생성자 내부의 인자는 charset-string으로 지정한다. setString 메소드를 이용하여 STRING을 입력하고, getString 메소드를 이용하여 STRING을 참조한다. 자세한 내용은 [sect_TuxStringBuffer]를 참조한다.

  • TuxCarrayBuffer

    TuxCarrayBuffer는 CARRAY 타입의 메시지를 구성할 때 사용한다.

    TuxCarrayBuffer tux = new TuxCarrayBuffer(WebtSystem.getDefaultCharset());

    생성자 내부의 인자는 character-string으로 지정한다. setBytes 메소드를 이용하여 byte[ ]를 입력하고, getBytes 메소드를 이용하여 byte[ ]로 참조한다. 자세한 내용은 [sect_TuxStringBuffer]를 참조한다.

  • TuxFieldBuffer

    FML 타입의 메시지를 구성할 때 사용한다.

    TuxFieldBuffer tux = new TuxFieldBuffer(true);

    생성자 내부의 인자는 fml32를 사용한다면 'true’로, 사용하지 않는다면 'false’로 지정한다. createField, getField 메소드를 통해서 입력, 참조를 수행한다. WebtFieldBuffer와 사용 방법이 동일하다. 자세한 내용은 [sect_TuxFieldBuffer]를 참조한다.

3. 로그 설정

3.1. Tuxedo 설정

Tuxedo의 환경변수 설정과 로그는 다음과 같다.

환경변수 설정

다음의 환경변수를 Tuxedo 환경 파일에 설정하거나 Linux 커널창에서 입력한다.

export TMTRACE = on
로그

Tuxedo가 기동된 후 서비스 수행 내용이 ULOG에 저장된다.

tail –f  ULOG.111604

172503.Flik!GWTDOMAIN.262612: LIBGWT_CAT:1130: INFO: Disconnected from domain
(domainid=<ARTEMIS>)
172514.Flik!GWTDOMAIN.262612: LIBGWT_CAT:1130: INFO: Disconnected from domain
(domainid=<APOLLON>)
172605.Flik!GWTDOMAIN.262612: LIBGWT_CAT:2005: INFO: Receive connecting request
from remote domain (domainid<ARTEMIS>)
172605.Flik!GWTDOMAIN.262612: LIBGWT_CAT:1128: INFO: Connection accepted
from domain (domainid=<ARTEMIS>)
172614.Flik!GWTDOMAIN.262612: LIBGWT_CAT:2005: INFO: Receive connecting request
from remote domain (domainid<APOLLON>)
172614.Flik!GWTDOMAIN.262612: LIBGWT_CAT:1128: INFO: Connection accepted
from domain (domainid=<APOLLON>)
172134.Flik!qbb01.57514: 11162004: TUXEDO Version 6.5 AIX  2 4 007025954C00.
172134.Flik!qbb01.57514: LIBTUX_CAT:262: INFO: Standard main starting
172135.Flik!qbb01.57514: TRACE:at:  { tpsvrinit(20, "qbb01 -g 24 -i 3100 -u Flik
-U /log/tuxs/ULOG -m 0 -A -r -e /log/tuxs/stderr -o /log/svc/qbb01 -- -I port1024")
172135.Flik!qbb01.57514: ====> Tring to Connect Database .....
172135.Flik!qbb01.57514:        Connecting DB succeed  SQLCODE[0]
172135.Flik!qbb01.57514: TRACE:at:  } tpsvrinit = 0
172135.Flik!qbb01.123172: 11162004: TUXEDO Version 6.5 AIX  2 4 007025954C00.
172135.Flik!qbb01.123172: LIBTUX_CAT:262: INFO: Standard main starting
172135.Flik!qbb01.123172: TRACE:at:  { tpsvrinit(20, "qbb01 -g 24 -i 3101 -u Flik
-U /log/tuxs/ULOG -m 0 -A -r -e /log/tuxs/stderr -o /log/svc/qbb01 -- -I port1024")
172135.Flik!qbb01.123172: ====> Tring to Connect Database .....
172135.Flik!qbb01.123172:        Connecting DB succeed  SQLCODE[0]
172135.Flik!qbb01.123172: TRACE:at:  } tpsvrinit = 0
172141.Flik!xxc01.220310: 11162004: TUXEDO Version 6.5 AIX  2 4 007025954C00.
172141.Flik!xxc01.220310: LIBTUX_CAT:262: INFO: Standard main starting
172141.Flik!xxc01.220310: TRACE:at:  { tpsvrinit(17, "xxc01 -g 91 -i 9170 -u Flik
-U /log/tuxs/ULOG -m 0 -A -r -e /log/tuxs/stderr -o /log/svc/xxc01")
172141.Flik!xxc01.220310: TRACE:at:    { tpopen()
172141.Flik!xxc01.220310: TRACE:at:    } tpopen = 1
172141.Flik!xxc01.220310: TRACE:at:  } tpsvrinit = 0
172814.Flik!xxc01.220310: gtrid x0 x41985b26 x182:
TRACE:at: { tpservice({"myasset_login", 0x10, 0x200dab20, 1296, 0, -1, {0, -2, -1}})
172814.Flik!xxc01.220310: gtrid x0 x41985b26 x182:
TRACE:at:    { tprealloc(0x200dab20, 65535)
172814.Flik!xxc01.220310: gtrid x0 x41985b26 x182:
TRACE:at:    } tprealloc = 0x200ddc40
172814.Flik!xxc01.220310: gtrid x0 x41985b26 x182:
TRACE:at:    { tpreturn(2, 0, 0x200ddc40, 0, 0x0)
172814.Flik!xxc01.220310: TRACE:at:    } tpreturn [long jump]
172814.Flik!xxc01.220310: TRACE:at:  } tpservice
172816.Flik!qbb01.57514: TRACE:at:  { tpservice({"bb_04900_q1", 0x0, 0x200be3b0,
1264, 0, -1, {0, -2, -1}})
172816.Flik!qbb01.57514: TRACE:at:    { tprealloc(0x200be3b0, 65535)
172816.Flik!qbb01.57514: TRACE:at:    } tprealloc = 0x200c14d0
172816.Flik!qbb01.57514: TRACE:at:    { tpreturn(2, 0, 0x200c14d0, 0, 0x0)
172816.Flik!qbb01.57514: TRACE:at:    } tpreturn [long jump]
172816.Flik!qbb01.57514: TRACE:at:  } tpservice
172845.Flik!qbb01.123172: TRACE:at:  { tpservice({"bb_04900_q1", 0x0, 0x200be3b0,
1264, 0, -1, {0, -2, -1}})
172845.Flik!qbb01.123172: TRACE:at:    { tprealloc(0x200be3b0, 65535)
172845.Flik!qbb01.123172: TRACE:at:    } tprealloc = 0x200c14d0
172845.Flik!qbb01.123172: TRACE:at:    { tpreturn(2, 0, 0x200c14d0, 0, 0x0)
172845.Flik!qbb01.123172: TRACE:at:    } tpreturn [long jump]
172845.Flik!qbb01.123172: TRACE:at:  } tpservice
172846.Flik!xxc01.220310: gtrid x0 x41985b26 x183:
TRACE:at: { tpservice({"myasset_login", 0x10, 0x200f40c0, 1296, 0, -1, {0, -2, -1}})
172846.Flik!xxc01.220310: gtrid x0 x41985b26 x183:
TRACE:at:    { tprealloc(0x200f40c0, 65535)
172846.Flik!xxc01.220310: gtrid x0 x41985b26 x183:
TRACE:at:    } tprealloc = 0x200f40c0
172846.Flik!xxc01.220310: gtrid x0 x41985b26 x183:
TRACE:at:    { tpreturn(2, 0, 0x200f40c0, 0, 0x0)
172846.Flik!xxc01.220310: TRACE:at:    } tpreturn [long jump]
172846.Flik!xxc01.220310: TRACE:at:  } tpservice

3.2. WebT 설정

WebT의 환경변수 설정과 로그는 다음과 같다.

환경변수 설정

webt.properties에 로그 관련 환경변수를 설정한다.

log.level = debug
log.dir = /user/jeus/logs/
log.file = webtJtc.log
log.bufsize = 1024
로그

다음은 WebT.log의 내용이다.

tail –f webtJtc.log

[2004.11.16 17:38:06] [I] WebT(version:3.5.6.5) logger start
[2004.11.16 17:38:06]
  >>>>> WebtSystem Properties <<<<<
        input buffer size         : 4096
        output buffer size        : 4096
        log level                 : 2
        log file places           : /Jeus/jeus42/logs/JeusServer/
        log file name             : webtJtc.log
        log buffer size           : 1024
        fdl file                  : null
        enable/disable pipe       : false
        default character set     : null
        extended tmax header size : false
        pool alive check          : false
        pool idle check           : false
        monitoring interval time  : 60

[2004.11.16 17:38:06] [I] TuxMonitor start
[2004.11.16 17:38:06] [W] transaction log directory is not specified
[2004.11.16 17:38:07] [I] socket connect successful : 160.61.1.190:40002
[2004.11.16 17:38:07] [I] start transceiver FOCUS[1] 160.61.1.190:40002
[2004.11.16 17:38:08] [I] connect successful. tx_timeout = 30000,
tp_timeout = 60000 [000000]
[2004.11.16 17:38:27] [RMTSVC-001] tpcall start. svc = myasset_login,
attr = no attributes are set, timeout : -1[000000]
[2004.11.16 17:38:27] [RMTSVC-002] tpcall end[000000]
[2004.11.16 17:38:28] [RMTSVC-001] tpcall start. svc = bb_04900_q1,
attr = no attributes are set, timeout : -1[000000]
[2004.11.16 17:38:29] [RMTSVC-002] tpcall end[000000]
[2004.11.16 17:42:26] [RMTSVC-002] tpcall end[000000]
[2004.11.16 17:42:26] [RMTSVC-001] tpcall start. svc = bb_04900_q1,
attr = no attributes are set, timeout : -1[000000]
[2004.11.16 17:42:27] [RMTSVC-002] tpcall end[000000]
[2004.11.16 17:42:27] [RMTSVC-001] tpcall start. svc = bb_04900_q1,
attr = no attributes are set, timeout : -1[000000]
[2004.11.16 17:42:27] [RMTSVC-002] tpcall end[000000]
[2004.11.16 17:42:27] [RMTSVC-001] tpcall start. svc = bb_04900_q1,
attr = no attributes are set, timeout : -1[000000]

“navice.debug=on” 설정할 때 로그(Internal Option 이므로 디버깅할 때 사용한다.)
[2004.11.16 19:03:34] 160.61.194.107 "GET /test/tuxtest.jsp" 200 57ms
[2004.11.16 19:03:34] 160.61.194.107 "GET /test/TuxTest1.jsp" 200 45ms
log4j:ERROR Failed to rename [/logdir/jtc/tuxedo.log] to [/logdir/jtc/tuxedo.log
.2004-11-15].
>>>>>>>>>>>>>>>>>>>>>>>> Domain [FOCUS_TEST] <<<<<<<<<<<<<<<<<<<<<<
TuxDomain : [FOCUS_TEST]
[NAVIS] started : f7 27 cf 40 00 00 00 00 00 00 00 00 [0]::0
[NAVIS] end : f7 27 cf 40 00 00 00 00 00 00 00 00 [0]::0
[NAVIS] commit : f7 27 cf 40 00 00 00 00 00 00 00 00 [0]::0
[NAVIS] prepare : f7 27 cf 40 00 00 00 00 00 00 00 00 [0]::0
[2004.11.16 19:03:37] 160.61.194.107 "GET /test/XATest.jsp?cnt=1" 200 512ms
[2004.11.16 19:03:38] 160.61.194.107 "GET /test/NonXATest.jsp?cnt=1" 200 231ms
[2004.11.16 19:03:51] 160.61.194.107 "GET /test/TuxTest1.jsp" 200 1ms
TuxDomain : [FOCUS_TEST]
[NAVIS] started : f7 27 cf 40 01 00 00 00 00 00 00 00 [0]::0
[NAVIS] end : f7 27 cf 40 01 00 00 00 00 00 00 00 [0]::0
[NAVIS] commit : f7 27 cf 40 01 00 00 00 00 00 00 00 [0]::0
[NAVIS] prepare : f7 27 cf 40 01 00 00 00 00 00 00 00 [0]::0