문서유형ㅣ기술정보
분야ㅣ관리/환경설정
적용제품버전ㅣTibero 7.2.4
문서번호ㅣTADTI175
개요
Java External Procedure 동작과정
데이터베이스 서버가 기동될 때 JEPA 프로세스가 생성됩니다.
사용자는 자신이 직접 작성한 사용자 java 클래스를 데이터베이스에 java 객체로 등록합니다.
PSM 프로그램을 작성하여 2번에서 등록한 java 객체와 연결합니다.
3번에서 작성한 PSM 프로그램에서 실행 요청이 발생한 경우 JEPA 프로세스와 연결을 맺습니다.
JEPA 프로세스는 실행할 함수를 찾아 수행하고, 그 결과를 데이터베이스 서버로 보냅니다.
데이터베이스 서버는 JEPA 프로세스로부터 받은 결과를 분석하여 사용자에게 전송합니다.
세션이 종료되면 JEPA 프로세스와는 연결이 끊어집니다. 그 이후 다음 세션이 연결되고 PSM 프로그램이 호출되 면 다시 JEPA 프로세스와 연결됩니다.
JEPA 프로세스는 데이터베이스 서버가 종료될 때 자동으로 종료됩니다.
[Java External Procedure 동작과정]
방법
Java External Procedure 환경설정
TIP 파일 파라미터 설정
$TB_SID.tip 파일을 다음과 같이 설정합니다.
_PSM_BOOT_JEPA=Y
JAVA_CLASS_PATH=/home/tibero/tibero7/instance/tibero/java각 항목에 대한 설명은 다음과 같습니다.
| 항목 | 설명 |
| _PSM_BOOT_JEPA | JEPA 프로세스의 기동 여부를 설정합니다. - Y : JEPA 프로세스를 기동하기 위해서는 반드시 이 초기화 파라미터에 'Y'를 설정합니다. - N : 데이터베이스 서버는 기동되지만, JEPA 프로세스는 기동되지 않습니다. |
| JAVA_CLASS_PATH | 사용자가 java 객체를 생성할 때 컴파일 경로로 사용됩니다. 이 항목이 설정되어 있지 않으면 DB_CREATE_FILE_DEST 초기화 파라미터에 설정된 경로에 java 디렉터리가 만들어지고 그 디렉터리에 클래스 파일이 생성됩니다. 패치 또는 업그레이드할 경우 Tibero 바이너리가 설치되는 곳처럼 영향을 받을 수 있는 곳은 지정하지 않습니다. |
JEPA 연결정보
$TB_HOME/client/config 디렉터리에 위치한 tbdsn.tbr 파일에 JEPA 프로세스의 접속정보를 설정합니다.
다음은 tbdsn.tbr 파일에 설정된 접속 정보의 예시입니다.
epa=(
(EXTPROC=(LANG=JAVA)
(LISTENER=(HOST=localhost)
(PORT=9390)
)
)
)JEPA 환경설정
$TB_HOME/client/epa/java/config 디렉터리에 위치한 epa.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=UTF-8
#STATIC_LOADING_CLASSES=ex.StaticClass1, ex.st.Class2각 항목에 대한 설명은 다음과 같습니다.
| 파라미터 | 설명 |
| LISTENER_PORT | tbdsn.tbr 파일에 설정한 포트 번호와 동일하게 설정합니다. |
| INIT_POOL_SIZE | JEPA 프로세스가 기동할 때 처음으로 생성하는 스레드의 개수입니다. |
| MAX_POOL_SIZE | JEPA 프로세스가 생성할 수 있는 최대 스레드의 개수입니다. |
| ENCODING | JEPA 프로세스에서 사용할 인코딩 방식입니다. 단, 데이터베이스 서버와 동기화를 위해서 반드시 서로 같은 인코딩을 사용해야합니다. |
| STATIC_LOADING_CLASSES | JNI를 사용하는 library와 같이 Dynamic Class Loading하기에 적합하 지 않은 클래스 라이브러리를 사용할 경우에 필요한 파라미터입니다. |
외부 라이브러리를 참조할 경우(jar 미사용의 경우 설정할 필요 없음)
외부 Java 컴파일의 경우 $TB_HOME/bin 디렉터리에 있는 psmjavac 스크립트에 jar 파일 경로를 추가합니다.
javac -classpath <jar경로>:${classpath} ${src}만약 exptest.jar 파일이 /tibero/tibero7/tbdata/lib 경로에 있다면 다음과 같이 설정합니다.
javac -classpath /tibero/tibero7/tbdata/lib/exptest.jar:${classpath} ${src}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 External Procedure 생성
다음은 Java External Procedure를 생성하는 예시입니다.
1. Java 객체를 생성합니다.
SQL> CREATE OR REPLACE AND RESOLVE JAVA SOURCE NAMED "JavaExtproc" AS
public class SimpleMath {
public static int findMax(int x, int y) {
if (x >= y) return x;
else return y;
}
}
/
Java Source 'JavaExtproc' created.2. 생성된 객체를 USER_OBJECTS에서 확인합니다.
SQL> col OBJECT_NAME format a15
SQL> SELECT OBJECT_NAME, OBJECT_TYPE, STATUS
FROM USER_OBJECTS
WHERE OBJECT_TYPE = 'JAVA';
OBJECT_NAME OBJECT_TYPE STATUS
--------------- -------------------- -------
JavaExtproc JAVA VALID
1 row selected.
3. PSM 함수를 생성합니다.
SQL> 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';
/
Function 'FIND_MAX' created.4. PSM 함수를 실행합니다.
SQL> select find_max(4,60) from dual;
FIND_MAX(4,60)
--------------
60
1 row selected.