안내서 구성
Tibero External Procedure 안내서는 총 8개의 장으로 구성되어 있다.
각 장의 주요 내용은 다음과 같다.
● 제1장: External Procedure 소개 External Procedure의 기본 개념과 생성 유형을 간략히 소개한다.
● 제2장: C External Procedure C External Procedure의 기본 개념과 주요 특징, 동작 과정을 기술한다.
● 제3장: C External Procedure의 생성 C External Procedure를 생성하기 위한 기본 환경을 설정하는 방법과 C External Procedure의 생성 절 차를 기술한다.
● 제4장: C External Procedure의 사용 C External Procedure에서 PSM 파라미터와 C 파라미터를 매핑하는 방법과 Callback Service를 사용하 는 방법을 기술한다.
● 제5장: C External Procedure 유틸리티 사용자 공유 라이브러리 함수를 작성하는 데 유용한 C External Procedure 유틸리티를 기술한다.
● 제6장: Java External Procedure Java External Procedure의 기본 개념과 주요 특징, 동작 과정을 기술한다.
● 제7장: Java External Procedure의 생성 Java External Procedure를 생성하기 위한 기본 환경을 설정하는 방법과 Java External Procedure의 생 성 절차를 기술한다.
● 제8장: Java External Procedure의 사용 Java External Procedure를 사용하여 기본적인 Java 애플리케이션 프로그램을 개발하는 방법과 Internal JDBC Driver를 사용하는 방법을 기술한다.
제1장 External Procedure 소개
본 장에서는 Tibero에서 제공하는 External Procedure를 간략히 소개한다.
1.1. 개요
External Procedure는 DBMS의 SQL이나 PSM 등으로는 구현하기 어렵거나 구현할 수 없는 것을 C나 Java 프로그래밍 언어로 개발하여 이것을 마치 PSM 함수(또는 프로시저)인 것처럼 DBMS 내에서 사용할 수 있는 기능이다.
사용자는 이 기능을 이용하여 직접 작성한 공유 라이브러리를 필요한 순간에 DBMS 내에서 사용할 수 있 다. 그뿐만 아니라 처리 결과까지 전달받을 수 있다. 예를 들면, External Procedure는 다음과 같은 목적에 사용할 수 있다.
● DBMS 내에 특정 이벤트가 발생한 경우 이메일, SMS, 네트워크 등으로 알릴 때
● 디스크 전체나 특정 파일의 크기에 따라 특정 파일을 압축하거나 외부 디스크로 이동시키고 싶을 때
● 데이터에 암호화를 적용하고 싶을 때
1.2. 생성 유형
Tibero에서는 C나 Java 프로그래밍 언어를 이용하여 External Procedure를 생성할 수 있다.
제2장 C External Procedure
본 장에서는 C External Procedure의 특징과 동작 과정을 설명한다.
2.1. 특징
C External Procedure는 다음과 같은 특징이 있다.
● 임의의 공유 라이브러리를 호출할 수 있다. C 프로그래밍 언어에서 동적으로 호출할 수 있는 공유 라이브러리를 작성하는 경우, C External Procedure 를 이용하여 호출할 수 있다.
● Tibero 서버와 다른 메모리 영역에서 수행된다. 사용자가 작성한 공유 라이브러리(이하 사용자 공유 라이브러리)는 Tibero 서버의 프로세스(이하 서버 프로세스)가 아닌 tbEPA(Tibero C External Procedure Agent) 프로세스에 의해 동적으로 로드된다. tbEPA 프로세스의 메모리 영역에서 사용자 공유 라이브러리가 수행되므로, 수행 중에 에러가 발생 하더라도 서버 프로세스에는 영향을 주지 않는다.
● 특권(Privilege)을 부여할 수 있다. 사용자 공유 라이브러리는 서버 내의 PSM 개체 하나와 대응되므로, 기존에 PSM에 적용할 수 있는 특 권을 부여할 수 있다.
● C External Procedure의 실행이 현재 트랜잭션에 포함된다. Tibero 서버에서 클라이언트의 요청을 수행하는 중에 C External Procedure의 실행이 요청되면 tbEPA 프로세스는 그 요청을 처리해 줄 때까지 대기한다. C External Procedure는 현재 트랜잭션에 포함되어 실행되며, 실행 결과에 따라 현재 트랜잭션을 커밋 또는 롤백시킬 수 있다.
● Callback Service를 이용하여 현재 트랜잭션에 SQL 연산(Operation)을 수행할 수 있다. C External Procedure는 현재 트랜잭션에 포함되어 실행되므로, 사용자가 CLI로 작성한 공유 라이브러리 함수를 이용하여 현재 트랜잭션에 질의 또는 DML 등을 수행할 수 있다. 이러한 기능을 수행하기 위해서는 Tibero에서 제공하는 Callback Service를 이용해야 한다. 자세한 내용은 “4.2. Callback Service”를 참고한다.
2.2. 동작 과정
C External Procedure로 등록한 사용자 공유 라이브러리는 수행이 요청되는 순간에 동적으로 로드된다. 이 역할은 서버 프로세스가 아닌 tbEPA 프로세스가 담당한다.
tbEPA 프로세스는 C External Procedure의 실행이 요청되면 서버 프로세스로부터 자동으로 생성되며, 서 버 프로세스로부터 공유 라이브러리를 호출하기 위한 여러 가지 정보(라이브러리의 위치, 호출할 함수명, 파라미터 정보 등)를 받는다.
그 다음 tbEPA 프로세스는 공유 라이브러리를 동적으로 로드하여 해당 함수를 찾고 사용자가 입력한 파 라미터 정보를 통해 함수를 실행시킨다. 만약 반환 값이나 출력 파라미터가 있을 경우 tbEPA 프로세스는 서버 프로세스로 그 값을 전달한다. 이러한 모든 과정은 Tibero에서 자동으로 처리되므로, 사용자는 기존 의 PSM 함수를 사용하는 것과 같이 애플리케이션 프로그램을 작성할 수 있다.
다음은 C External Procedure의 동작 과정을 나타내는 그림이다.
[그림 2.1]를 기준으로 C External Procedure가 동작하는 세부 과정은 다음과 같다.
1. 사용자는 자신이 직접 작성한 사용자 공유 라이브러리(user shared library)를 미리 PSM 개체 하나와 대응시킨다.
2. 사용자가 작성한 애플리케이션 프로그램(Client application)에서 사용자 공유 라이브러리에 대한 실행 요청이 있는 경우, Tibero 서버의 엔진(Engine) 내의 PSM 모듈에서 실행해야 할 해당 라이브러리가 외 부에 있음을 확인하고 External Process를 실행시킨다.
3. 2번 과정을 통해 동적으로 로드된 tbEPA 프로세스에 해당 라이브러리의 정보(라이브러리의 위치, 호출 할 함수명, 파라미터 정보 등)을 전달하고, 처리 결과를 기다린다.
4. tbEPA 프로세스는 특정 라이브러리를 동적으로 로드하여 함수를 호출하고, 그 결과를 서버로 보낸다.
5. 서버는 tbEPA 프로세스로부터 받은 결과를 분석하여 사용자가 작성한 애플리케이션 프로그램으로 전달한다.
6. tbEPA 프로세스는 해당 세션이 종료될 때 자동으로 종료된다.
제3장 C External Procedure의 생성
본 장에서는 C External Procedure를 생성하는 절차를 크게 두 단계로 나누어 설명한다.
● 기본 환경의 설정
● 생성 절차
3.1. 기본 환경의 설정
C External Procedure는 이전 장에서도 언급했듯이, tbEPA 프로세스에 의해 수행된다. tbEPA 프로세스를 실행하는 바이너리 파일은 $TB_HOME/client/bin 디렉터리에 존재한다.
본 절에서는 C External Procedure를 생성하기에 앞서 먼저 tbEPA 프로세스를 실행하기 위한 기본 환경을 설정하는 방법을 설명한다.
3.1.1. 초기화 파라미터
tbEPA 프로세스는 처음 실행될 때 사용자가 설정한 초기화 파라미터를 먼저 확인한다. 초기화 파라미$TB_HOME/client/tbepa 디렉터리의 tbepa.cfg 파일에서 설정할 수 있으며, 만약 설정한 초기화 파라미터가 없으면 디폴트로 정의된 속성을 따르게 된다. tbEPA 프로세스의 실행과 관련하여 사용자가 설정할 수 있는 초기화 파라미터는 다음과 같다.
<tbepa.cfg>
LOG_DIR=/tmp/epa_log
LOG_LVL=2
MAX_LOG_SIZE=20k
MAX_LOG_CNT=5
초기화 파라미터 | 기본값 | 설명 |
LOG_DIR | $TB_HOME/client/tbepa | tbEPA 로그 파일을 저장할 경로이다 |
LOG_LVL | 2 | 로그 파일에 남길 로그의 레벨이다. |
MAX_LOG_SIZE | 0 | 로그 파일의 최대 크기(Byte 단위)이다. - 값이 0인 경우: 로그 파일의 최대 크기를 설정하는 데 제한이 없다. - 값을 명시한 경우: 로그 파일이 설정된 최대 크기를 초과 하면 로그 파일을 백업한다 |
MAX_LOG_CNT | 0 | 로그 파일을 백업하는 기능을 사용하는 경우, 백업 로그 파일(Backup log file)의 최대 개수이다. - 값이 1이하인 경우: 백업 로그 파일을 생성하지 않는다 - 값을 명시한 경우: 로그 파일을 백업한 후, 설정된 최대 개수를 초과하면 가장 오래된 백업 로그 파일을 삭제한다. |
tbepa.cfg 파일에서 초기화 파라미터 LOG_LVL은 1부터 5 사이의 로그 레벨의 값을 설정할 수 있다.
각 로그 레벨에 대한 설명은 다음과 같다.
로그 레벨 | 로그 레벨명 | 설명 |
1 | ERROR | 에러와 관련된 이벤트 |
2 | WARNING | 경고와 관련된 이벤트 |
3 | INFO | 함수 호출 등과 관련된 기본적인 트레이스 이벤트 |
4 | DEBUG | 디버깅을 위한 구체적인 트레이스 이벤트 |
5 | TRACE | 매우 자세한 트레이스 이벤트 |
3.2. 생성 절차
C External Procedure를 생성하기 위해서는 다음과 같은 세부 절차를 수행해야 한다.
1. 사용자 공유 라이브러리의 생성
2. Library Object의 등록
3. 사용자 함수를 PSM에 대응시키기
4. 사용자 함수의 실행
3.2.1. 사용자 공유 라이브러리의 생성
C 프로그래밍 언어에서 동적으로 호출할 수 있는 사용자 공유 라이브러리를 생성한다. 생성하는 순서는 다음과 같다.
1. C 함수를 작성한다.
<extproc.c>
long
find_max(long x, long y)
{
if (x >= y) return x;
else return y;
}
2. 컴파일을 수행한다.
다음은 UNIX 계열(LINUX 포함)에서 컴파일을 수행하는 예이다.
cc -g -fpic -shared -o libextproc.so extproc.c
3. 컴파일이 완료되면, libextproc.so 라는 사용자 공유 라이브러리가 생성된다.
3.2.2. Library Object의 등록
Library Object는 사용자 공유 라이브러리 파일을 Tibero에 대응시키는 것으로, 일종의 스키마 객체를 의 미한다.
Library Object를 등록하는 문법은 다음과 같다.
CREATE LIBRARY [schema_name.]library_name
{IS | AS} 'file_path';
항목 | 설명 |
schema_name | 스키마 객체의 이름 |
library_name | Library Object의 이름 |
file_path | 사용자 공유 라이브러리 파일이 존재하는 절대 경로 |
참고
CREATE LIBRARY 문을 실행하려면, CREATE LIBRARY라는 권한이 필요하다.
다음은 생성한 사용자 공유 라이브러리 파일을 이용하여 extproc이라는 Library Object를 Tibero에 등록 하는 예이다.
CREATE LIBRARY extproc IS '/tibero_engine/tibero6/libextproc.so';
/
3.2.3. 사용자 함수를 PSM에 대응시키기
Library Object를 등록한 후 해당 Library Object 내의 특정 함수를 PSM 개체로 등록하면 C External Proce dure를 생성할 수 있다. 사용자는 일반적인 PSM를 사용하는 인터페이스 그대로 함수를 호출할 수 있다.
다음은 일반적인 PSM를 선언하는 문법이다.
CREATE OR REPLACE {FUCTION | PROCEDURE | PACKAGE}
…
{IS | AS}
LANGUAGE C
LIBRARY library_name
[NAME c_string_literal_name]
[WITH CONTEXT]
[PARAMETERS (external_parameter[, external_parameter]...)];
항목 | 설명 |
library_name | Library Object의 이름이다. |
c_string_literal_name | 현재 PSM과 대응할 사용자 함수명이다. |
WITH CONTEXT | C External Procedure 유틸리티를 사용하고 있음을 명시할 때 사용한다. 자세한 내용은 “제5장 C External Procedure 유틸리 티”, “4.2. Callback Service”를 참고한다. |
PARAMETERS (external_parameter) | 사용자 함수의 파라미터를 PSM 파라미터와 대응시킬 때 사용 한다. external_parameter에 대한 내용은 “4.1. 파라미터 매핑” 를 참고한다. |
다음은 Library Object 내의 특정 함수(find_max)를 PSM에 대응하는 예이다.
CREATE OR REPLACE FUNCTION ext_find_max(num1 BINARY_INTEGER, num2 BINARY_INTEGER)
RETURN BINARY_INTEGER
AS LANGUAGE C
LIBRARY extproc
NAME "find_max"
PARAMETERS(num1 int, num2 int);
/
3.2.4. 사용자 함수의 실행
사용자 함수는 Tibero상의 하나의 PSM에 대응되므로, PSM의 문법을 사용할 수 있다.
다음은 PSM의 문법을 이용하여 C External Procedure를 실행하는 예이다.
CREATE TABLE TBL (COL1 NUMBER, COL2 NUMBER);
INSERT INTO TBL VALUES(1, 2);
INSERT INTO TBL VALUES(5, 3);
INSERT INTO TBL VALUES(7, 9);
select col1, col2, ext_find_max(col1, col2) as max from tbl;
제6장 Java External Procedure
본 장에서는 Java External Procedure의 특징과 동작 과정을 설명한다.
6.1. 특징
Java External Procedure는 다음과 같은 특징이 있다.
● 임의의 Java 클래스를 호출할 수 있다.
Java에서 동적으로 호출할 수 있는 클래스를 작성하는 경우, Java External Procedure를 이용하여 호출 할 수 있다.
● Tibero 서버와 다른 메모리 영역에서 수행된다.
사용자가 작성한 클래스(이하 사용자 Java 클래스)는 Tibero 서버의 프로세스(이하 서버 프로세스)가 아닌 JEPA(Java External Procedure Agent) 프로세스에 의해 동적으로 로드된다.
JEPA 프로세스의 메모리 영역에서 사용자 Java 클래스가 수행되므로, 수행 중에 에러가 발생 하더라도 서버 프로세스에는 영향을 주지 않는다.
● 권한을 부여할 수 있다.
사용자 Java 클래스는 서버에 하나의 객체로 등록되므로, DDL 문장과 관련된 권한을 설정할 수 있다. 또한, PSM 함수와도 대응되므로 실행 권한도 설정할 수 있다.
● Java External Procedure는 현재 트랜잭션에 포함된다.
Tibero 서버에서 클라이언트의 요청을 수행하는 중에 Java External Procedure의 실행이 요청되면 JEPA 프로세스는 그 요청을 처리해 줄 때까지 대기한다. Java External Procedure는 현재 트랜잭션에 포함되어 실행되며, 실행 결과에 따라 현재 트랜잭션을 커밋 또는 롤백시킬 수 있다.
● JDBC API를 사용하여 현재 트랜잭션에 SQL 문장을 수행할 수 있다.
Java External Procedure는 현재 트랜잭션에 포함되어 실행되므로, 사용자가 JDBC로 작성한 함수를 이용하여 현재 트랜잭션에 질의 또는 DML 등을 수행할 수 있다. 이러한 기능을 수행하기 위해서는 Tibero에서 제공하는 Internal JDBC Driver를 이용해야 한다. 자세 한 내용은 “8.2. Internal JDBC Driver”를 참고한다.
6.2. 동작 과정
Java External Procedure로 등록한 사용자 Java 클래스는 수행이 요청되는 순간에 동적으로 로드된다. 이 역할은 서버 프로세스가 아닌 JEPA 프로세스가 담당한다.
JEPA 프로세스는 설정된 초기화 파라미터에 따라 Tibero 서버가 기동될 때 자동으로 생성되며, 서버 프로 세스로부터 사용자 Java 클래스를 호출하기 위한 여러 가지 정보(클래스 이름, 호출할 함수명, 파라미터 정보 등)를 받는다.
그 다음 JEPA 프로세스는 사용자 Java 클래스를 동적으로 로드하여 해당 함수를 찾고 사용자가 입력한 파라미터 정보를 통해 함수를 실행시킨다. 만약 반환 값이나 출력 파라미터가 있을 경우 JEPA 프로세스 는 서버 프로세스로 그 값을 전달한다.
이러한 모든 과정은 Tibero에서 자동으로 처리되므로, 사용자는 기존의 PSM 함수를 사용하는 것과 같이 애플리케이션 프로그램을 작성할 수 있다.
다음은 Java External Procedure의 동작 과정을 나타내는 그림이다.
[그림 6.1]를 기준으로 Java External Procedure가 동작하는 세부 과정은 다음과 같다.
1. 데이터베이스 서버가 기동될 때 JEPA 프로세스가 생성된다.
2. 사용자는 자신이 직접 작성한 사용자 Java 클래스(Java 소스: .class)를 데이터베이스에 Java 객체로 등록한다.
3. PSM 프로그램을 작성하여 2번에서 등록한 Java 객체와 연결한다.
4. 3번에서 작성한 PSM 프로그램에서 실행 요청이 발생한 경우 JEPA 프로세스와 연결을 맺는다. 그 다음 함수 실행을 위한 정보(클래스 이름, 함수 이름, 파라미터 정보 등)를 전달하고, 처리 결과를 기다린다.
5. JEPA 프로세스는 실행할 함수를 찾아 수행하고, 그 결과를 데이터베이스 서버로 보낸다.
6. 데이터베이스 서버는 JEPA 프로세스로부터 받은 결과를 분석하여 사용자에게 전송한다.
7. 세션이 종료되면 JEPA 프로세스와는 연결이 끊어진다. 그 이후 다음 세션이 연결되고, PSM 프로그램이 호출되면 다시 JEPA 프로세스와 연결된다.
8. JEPA 프로세스는 데이터베이스 서버가 종료될 때 자동으로 종료된다.
제7장 Java External Procedure의 생성
본 장에서는 Java External Procedure를 생성하는 절차를 크게 두 단계로 나누어 설명한다.
● 기본 환경의 설정
● Java External Procedure 생성
7.1. 기본 환경의 설정
본 절에서는 Java External Procedure를 생성하기에 앞서 기본 환경을 설정하는 방법을 설명한다.
다음과 같이 java와 javac의 버전이 맞아야한다!!
[tibero1]root@tibero1:/root> java -version
java version "1.7.0_261"
OpenJDK Runtime Environment (rhel-2.6.22.2.el7_8-x86_64 u261-b02)
OpenJDK 64-Bit Server VM (build 24.261-b02, mixed mode)
[tibero1]root@tibero1:/root> javac -version
javac 1.7.0_261
JEPA 관련해서 JAVA 환경 변수 설정 외, 크게 지정할 만한 부분은 없으며,
현재로선 어느 부분이 문제인지 명확히 알 수 없기 때문에 하기와 수행 부탁 드립니다.
1. JAVA 환경변수 삭제
2. OS 재부팅
3. JAVA 환경변수 등록
7.1.1. 초기화 파라미터
JEPA 프로세스의 실행과 관련하여 사용자가 설정할 수 있는 초기화 파라미터는 다음과 같다.
<$TB_SID.tip>
_PSM_BOOT_JEPA=Y
JAVA_CLASS_PATH=/tibero_engine/tibero6/instance/TIBERO1/java
초기화 파라미터 | 설명 |
_PSM_BOOT_JEPA | JEPA 프로세스의 기동 여부를 설정한다. - Y: JEPA 프로세스를 기동하기 위해서는 반드시 이 초기화 파라미터에 'Y'를 설 정해야 한다. - N: 데이터베이스 서버는 기동이 되지만, JEPA 프로세스는 기동되지 않는다. |
JAVA_CLASS_PATH | 사용자가 Java 객체를 생성할 때 컴파일 경로로 사용된다. 이 항목이 설정되어 있지 않으면, DB_CREATE_FILE_DEST 초기화 파라미터에 설정된 경로의 하위 디렉터리 Java에 클래스 파일이 생성된다. |
7.1.2. JEPA 연결정보
$TB_HOME/client/config 디렉터리에 위치한 tbdsn.tbr 파일에 JEPA 프로세스의 접속 정보를 설정한다.
다음은 tbdsn.tbr 파일에 설정된 접속 정보의 예이다.
<tbdsn.tbr>
epa=(
(EXTPROC=(LANG=JAVA)
(LISTENER=(HOST=localhost)
(PORT=9390)
)
)
)
Tibero 서버는 접속 정보를 이용하여 JEPA 프로세스에 연결한다.
7.1.3. JEPA 환경설정
$TB_HOME/client/epa/java/config 디렉터리에 위치한 epa.cfg 파일을 사용자의 시스템 환경에 맞게 수정 한다.
다음은 .cfg 파일을 설정한 예이다.
<.cfg>
# listener port
LISTENER_PORT=9390
# initial thread pool size
INIT_POOL_SIZE=10
# max thread pool size
MAX_POOL_SIZE=1000
# tbjavaepa encoding "ASCII", "EUC-KR", "MSWIN949", "UTF-8", "UTF-16", "SHIFT-JIS"
ENCODING=MSWIN949
초기화 파라미터 | 설명 |
LISTENER_PORT | tbdsn.tbr 파일에 설정한 포트 번호와 동일하게 설정한다. |
INIT_POOL_SIZE | JEPA 프로세스가 기동할 때 처음으로 생성하는 스레드의 개수이다. |
MAX_POOL_SIZE | JEPA 프로세스가 생성할 수 있는 최대 스레드의 개수이다. |
ENCODING | JEPA 프로세스에서 사용할 인코딩 방식이다. 단, 데이터베이스 서버와 동기 화를 위해서 반드시 서로 같은 인코딩을 사용해야 한다. |
환경설정이 적용되면 Java External Procedure를 생성할 준비가 모두 완료된다.
7.2. Java External Procedure 생성
Java External Procedure를 생성하기 위해서는 다음과 같은 세부 절차를 수행해야 한다.
1. Java 객체의 생성
2. 생성된 Java 객체를 컴파일하기
3. PSM 함수의 생성
4. Java 클래스의 실행
7.2.1. Java 객체의 생성
Java External Procedure를 생성하기 위해서는 먼저 Java에서 동적으로 호출할 수 있는 형태의 사용자 Java 클래스를 DBMS에 등록해야 한다. 즉, 사용자 Java 클래스를 하나의 데이터베이스 객체로 등록하는 과정이다.
이 과정을 통해 PSM 개체 하나와 사용자 Java 클래스를 대응시키면 기존의 PSM을 호출하는 것과 똑같은 인터페이스로 사용자 Java 클래스를 사용할 수 있다.
다음은 Java 객체를 생성하는 예이다.
CREATE OR REPLACE AND RESOLVE JAVA SOURCE NAMED "JavaExtproc" AS
public class SimpleMath
{
public static int findMax(int x, int y) {
try
{
int result=0;
if (x > y)
result=x;
else
result=y;
return result;
}
catch(IllegalArgumentException e)
{
System.out.println("IllegalArgumentException caught"); // Exception!!
return 0;
}
}
}
/
위와 같은 DDL 문장을 실행하면, 데이터베이스에는 JavaExtproc라는 Java 객체가 생성된다.
생성된 Java 객체를 보려면 USER_OBJECTS 뷰나 LS 명령어를 이용하여 조회할 수 있다.
다음은 LS 명령어를 이용하여 생성된 Java 객체를 조회하는 예이다.
주의
Java External Procedure에서 Java 객체를 호출할 때 빈 생성자(nullary constructor)를 호출하기 때 문에 생성자를 생략하거나 다른 생성자(constructor)를 사용할 경우 반드시 빈 생성자(nullary construc tor)를 명시해줘야 한다.
7.2.2. 생성된 Java 객체 컴파일
DDL 문장으로 작성된 Java 객체의 소스 코드는 별도의 파일로 생성되며, JAVA_CLASS_PATH 초기화 파 라미터에 설정된 경로에 저장된다. Java 객체를 패키지로 생성할 경우 디폴트 저장 경로에 패키지 경로를 생성하여 클래스 파일 형태로 저장한다.
예를 들면 다음과 같다.
CREATE OR REPLACE AND RESOLVE JAVA SOURCE NAMED "JavaExtproc" AS
package com.tmax;
public class SimpleMath
{
public static int findMax(int x, int y) {
try
{
int result=0;
if (x > y)
result=x;
else
result=y;
return result;
}
catch(IllegalArgumentException e)
{
System.out.println("IllegalArgumentException caught"); // Exception!!
return 0;
}
}
}
/
위 문장을 실행하면 최종적으로 JAVA_CLASS_PATH/com/tmax 디렉터리에 SimpleMath.class 파일이 생성된다.
생성된 클래스 파일은 외부 Java 컴파일러를 이용하여 컴파일한다.
외부 Java 컴파일러는 $TB_HOME/bin 디렉터리에 있는 psmjavac 스크립트를 사용할 수 있다.
psmjavac 스크립트를 사용하여 실제 컴파일 명령어를 수행하는 문법은 다음과 같다.
javac -classpath ${classpath} ${src}
항목 | 설명 |
classpath | JAVA_CLASS_PATH 초기화 파라미터에 설정된 경로와 $TB_HOME/client/lib/jar/tibero6-jdbc.jar 경로가 기본적으로 포함된다. |
src | 컴파일을 수행할 Java source code 이다. |
별도의 외부 라이브러리를 사용하여 Java 객체를 생성할 경우 psmjavac 스크립트 파일을 수정한다.
예를 들어 JVM에서 제공하는 htmlconverter.jar를 사용하는 Java 객체를 생성할 경우에는 다음과 같은 명령어를 수행한다.
javac -classpath ${classpath}:$JAVA_HOME/lib ${src}
JEPA가 별도의 VM으로 실행되기 때문에 외부 라이브러리를 사용한 객체를 침조하는 PSM 함수를 호출 하는 경우 JEPA에서도 해당 라이브러리를 참조하고 있어야 한다. JEPA는 $TB_HOME/client/bin 디렉터리에 있는 tbjavaepa 스크립트에 의해 실행되는데, 다음 exec java 명령 문장의 -classpath 옵션에도 라이 브러리의 경로를 추가한다.
exec java -verbose:gc -Xms128m -Xmx512m -Djavaepa="$TB_HOME" -Dlog4j.configuration=$log4jfile -classpath $pool:$collections:$log4j:$:$:$config $mainclass CONFIG=$configfile
Java 객체를 삭제하기 위해서는 다음과 같은 명령을 사용해야 한다.
DROP JAVA SOURCE "JavaExtproc";
7.2.3. PSM 함수 생성
CREATE JAVA 문장을 실행하려면 CREATE PROCEDURE 권한이 필요하다.
Java 객체를 다음 예처럼 PSM과 대응시키는 과정을 거치고 나면 PSM 프로그램의 인터페이스를 그대로 사용할 수 있다.
CREATE OR REPLACE FUNCTION find_max(x PLS_INTEGER, y PLS_INTEGER)
RETURN PLS_INTEGER IS
LANGUAGE JAVA NAME 'SimpleMath.findMax(int, int) return int';
/
select FIND_MAX(4,60) from dual;
'DB > Tibero' 카테고리의 다른 글
[Tibero] 정기점검 정리 (0) | 2023.03.09 |
---|---|
[Tibero] Log 확인하기 (0) | 2023.03.09 |
[Tibero] Driver(ODBC, OLE DB, JDBC, ESQL)연결 가이드 (0) | 2023.02.20 |
[Tibero] PHP, ODBC 연동 가이드 (0) | 2023.02.16 |
[Tibero] RawDevice + TAC 설치 하는법 (1) | 2023.02.02 |