티스토리 뷰

Database/Oracle

[오라클] JNI + Load Java

데브포유 2014. 3. 27. 14:24
반응형

오라클에서 Java 기능을 사용하고자 할때는 Load Java를 이용합니다.

Load Java에 대한 내용은 쉽게 검색할 수 있으니 패스~~


한단계 더 나아가서 특정 기능을 C로 구현하고 (동적라이브러리 .dll 또는 .so)

Java에서 호출하는 JNI 기능을 Load Java 와 더블어 사용하고자 할때는 아래와 같이 하시면 됩니다.


1. JNI 구현

  : Java + 동적라이브러리


2. Load Java로 Java class를 오라클에 이식


3. 퍼미션 부여

  select seq, kind, grantee, name, enabled from dba_java_policy where name like '%java.lang.RuntimePermission%';

SEQ KIND     GRANTEE                        NAME                                                         ENABLED
---------- -------- ------------------------------ ------------------------------------------------------------ --------
11 GRANT    JAVA_ADMIN                     0:java.lang.RuntimePermission#*                              ENABLED
95 RESTRICT PUBLIC                         0:java.lang.RuntimePermission#loadLibrary.*                  ENABLED

즉 loadLibrary가 기본으로 제약되어 있기 때문에 퍼미션 변경으로 
loadLibrary를 허용해 주고 다시 제약을 활성화 시키면 됨.

3-1. loadLibrary이 제약조건 비활성화
  exec dbms_java.disable_permission(95); 

3-2. 1에서 생성한 동적라이블러리 로드 권한 주기
  exec dbms_java.grant_permission( '계정''SYS:java.lang.RuntimePermission''loadLibrary.testjni''' ); // testjni는 동적라이브러리 명

3-3. loadLibrary이 제약조건 활성화
    exec dbms_java.enable_permission(95);

4. 테스트
   : load java로 구현한 함수를 호출해서 테스트 해보면 됨.


ps.) Load Java와 JNI를 모두 설명하면 너무 길어져서 각각의 기술은 별도로 검색하면 쉽게 찾을 수 있어서 생략하였고, 두 기술을 접목시킨 부분만 간단히 설명했습니다. 그리고 동적 라이브러리는 오라클에서 참조하는 디렉토리에 넣어 두셔야 합니다. 저는 오라클홈/lib  위치에서 심볼릭 링크로 라이브러리 실경로와 링크를 걸어서 사용했음.
 




반응형