Background Image

FORUM

조회 수 1747 추천 수 0 댓글 1
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부

* 질문 등록 시 다음의 내용을 꼭 기입하여 주세요.
OS
linux 64bit
CUBRID Ver.
CUBRID 9.3 (9.3.9.0002) (64bit release build for linux_gnu) (Aug  4 2017 11:55:22)
CUBRID TOOL Ver.
[도움말]-[버전정보] 확인
응용 환경(API)
java

* CUBRID 응용 오류, SQL 오류 또는 SQL 튜닝 관련된 문의는 반드시 다음의 내용을 추가해 주세요. 비밀글이나 비밀 댓글도 가능합니다.
* 저희가 상황을 이해하고, 재현이 가능해야 알 수 있는 문제들이 많습니다. 가능한 정보/정황들을 부탁합니다.
에러 내용 및 재현 방법 재현 가능한 Source와 SQL
관련 테이블(인덱스, 키정보 포함) 정보 CUBRID 홈 디렉토리 아래 log 디렉토리 압축


-------------- 아래에 질문 사항을 기입해 주세요. ------------------------------------------------------------------------


아래 재연 절차와 같이 일반 JNI를 사용시 일반 java class를 loadjava하게되면 already loaded in another classloader의 에러메시지가 출력됩니다.
JNI 이슈인것처럼 보이는데요. 예측하기로는 java class를 로드할 때에 다른 load된 class에 영향이 없어야할 것 같은데요. 확인을 부탁드리겠습니다. 




=== 아래 재연절차 ===

1. JNI 모듈 컴파일 및 실행

 1.1 JniTest.java, JniTest.c 파일 참조하여 컴파일

   $ javac JniTest.java

   $ javah JniTest

   $ gcc -fPIC -I"$JAVA_HOME/include" -I"$JAVA_HOME/include/linux" -shared -o libjnitest.so JniTest.c

 1.2 cubrid 함수생성

   $ csql -udba demodb

   csql> CREATE FUNCTION TESTJNI(INPUTDATA VARCHAR(1024))

           RETURN STRING

           AS LANGUAGE JAVA

           NAME 'JniTest.callJniTest2(java.lang.String) return java.lang.String';

  1.3 loadjava

   $ loadjava -y demodb JniTest.class

   $ export LD_LIBRARY_PATH=/home/test/Desktop/cubrid/CUBRID/lib:$LD_LIBRARY_PATH

  1.4 호출(정상)

   csql> select TESTJNI('aaaaa');



   === <Result of SELECT Command in Line 4> ===



     TESTJNI('aaaaa') 

   ======================

     'aaaaa' 



   1 rows selected. (0.069466 sec) Committed.



   1 command(s) successfully processed.




2. java class 모듈 컴파일 및 loadjava

  2.1 SpCubrid.java 컴파일 및 loadjava

   $ javac SpCubrid.java

   $ loadjava -y demodb SpCubrid.class

   



3. JNI 모듈 실행 -> 실패 (ERROR: Stored procedure execute error: java.lang.UnsatisfiedLinkError: Native Library /home/test/Desktop/cubrid/libjnitest.so already loaded in another classloader)



csql> select TESTJNI('aaaaa');



In line 4, column 17,



ERROR: Stored procedure execute error: java.lang.UnsatisfiedLinkError: Native Library /home/test/Desktop/cubrid/libjnitest.so already loaded in another classloader





0 command(s) successfully processed.

  • ?
    오명환 2019.08.20 13:10
    현재 loadjava 실행시 loadjava 위치에 있는 모든 class들이 jvm에 의해 재 loading 됩니다.
    이때, java code에서 system.load 또는 loadlibary에 의해 호출되었던 so file도 함께 재 loading되는데, 이때 so file는 중복 loading안되는 문제입니다.
    이 문제는 jvm이 unloading을 지원하지 않아 발생하는 잠정적인 오류입니다.

    이 문제를 우회할 수 있는 방법은 system.load시 exception이 발생했을 경우 system.gc() 후 다시 재 loading 하는 방법입니다.

    예제 코드는 다음과 같습니다.

    static {
    boolean error=false;

    try {
    System.load(".../libhello.so");
    } catch(UnsatisfiedLinkError e) {

    for (int i = 0; i < 5; i++) {
    System.gc();
    try {
    Thread.sleep(10);
    System.load(".../libhello.so");
    error = false;
    break;
    } catch(UnsatisfiedLinkError e1) {
    error = true;
    break;
    } catch(Exception e2) {
    error = true;
    System.err.println("exception : " + e2);
    break;
    }
    }
    if (error)
    System.err.println("error Load Library [ /cubrid/sp/libhello.so ]");
    }

    .........

    }

List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 CUBRID 사용자를 위한 DBeaver 도구 출시 안내 admin 2024.04.23 21
공지 SQLGate for CUBRID 영구 무료 라이선스 제공 file admin 2020.04.09 4452
3951 SQLGate for CUBRID (CUBRID v9.3 and later) 폐쇄망 사용법? 1 임소식 2024.01.18 78
3950 큐브리드 파일 읽기 쓰기 문의 1 임소식 2024.01.18 348
3949 CUBRID Manager 윈도우 버전 배포 해주세요. SQLGate for CUBRID 버그가 많아요. 2 도프 2024.01.17 105
3948 Cubird db 접속 문제 1 file 폰호두 2024.01.17 91
3947 Django Cubrid DB Conntection Error 4 thejoin 2024.01.16 98
3946 CUBRID DB 접속 불가 1 file 싸뤼 2024.01.16 79
3945 Cubrid admin localhost 연결 불가 7 file 싸뤼 2024.01.12 142
3944 파티션 테이블 성능 문의 4 file 방글이 2024.01.11 116
3943 트리거 삭제 오류 1 file slqk135 2024.01.08 91
3942 restoredb 시 log 내용 문의 1 file 별하나에 2024.01.08 76
3941 파티션 테이블 대량 DROP 처리 문의 (ibatis) 1 방글이 2024.01.04 79
3940 JAVA SP 에서 addBatch 오류 문의 1 방글이 2024.01.03 84
3939 DB서버 에러로그 1 file leeee 2023.12.27 120
3938 오라클의 SUBSTRB 기능 문의 3 방글이 2023.12.26 110
3937 멀티host상태에서 admin툴 로그인방법 문의합니다 2 file 원샷 2023.12.20 100
3936 DB 서버가 start 되지 않아 문의드립니다. 4 그로구 2023.12.19 129
3935 Rocky Linux 9에 큐브리드 9.3버전 설치 3 범이 2023.12.19 100
3934 인덱스 사용 관련하여 문의드립니다. 1 neighbor 2023.12.12 113
3933 cubrid admin접속 불가 문의 1 file 이하륜 2023.12.11 92
3932 restoredb 진행시 오류가 발생합니다. 3 samsam 2023.12.08 116
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 200 Next
/ 200

Contact Cubrid

대표전화 070-4077-2110 / 기술문의 070-4077-2113 / 영업문의 070-4077-2112 / Email. contact_at_cubrid.com
Contact Sales