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 ]");
    }

    .........

    }

  1. CUBRID 사용자를 위한 DBeaver 도구 출시 안내

    Date2024.04.23 Byadmin Views46
    read more
  2. SQLGate for CUBRID 영구 무료 라이선스 제공

    Date2020.04.09 Byadmin Views4458
    read more
  3. 쿼리문의드립니다.

    Date2019.08.30 By투다닥 Views240
    Read More
  4. REST api 지원 여부

    Date2019.08.29 By몰라알수가없어 Views699
    Read More
  5. 검색 단위 설정 해제하는 방법 문의드립니다.

    Date2019.08.23 By마데카21 Views345
    Read More
  6. varchar의 글자수 제한 스펙 문의

    Date2019.08.22 Bykirito Views290
    Read More
  7. 관리자 권한이 없을 때 실행이 안됩니다(실행 직후 종료)

    Date2019.08.21 By카페타임 Views281
    Read More
  8. 테이블 컬럼 구하는 쿼리좀.......

    Date2019.08.20 Bywewek3jk3 Views1667
    Read More
  9. 큐브리드 서버는 돌아가고있는데요 큐브리드 매니저 연결이안되는 이유가 무었일까요 ???

    Date2019.08.20 By왜안왔어 Views595
    Read More
  10. group_concat null 질문

    Date2019.08.19 Bywndud Views205
    Read More
  11. java class load시 JNI모듈 에러

    Date2019.08.13 Bycenterist Views1747
    Read More
  12. 데이터 베이스 load 명령어 실행 중 Maximum value 오류

    Date2019.08.06 Bypqow770 Views248
    Read More
  13. php 7.3 버전에도 설치가 가능한가요 ?

    Date2019.07.31 Bykks8017 Views156
    Read More
  14. like 공백 제거 검색방법 알려주세요.

    Date2019.07.31 By초초초보 Views1580
    Read More
  15. 시점 복구 test 문서 연람 방법 문의

    Date2019.07.26 By공중정원 Views303
    Read More
  16. cubrid-jdbc를 사용하며, 메모리 leak과 관련하여 문의드립니다.

    Date2019.07.25 By메로나 Views286
    Read More
  17. 큐브리드 매니저 가져오기 기능 오류

    Date2019.07.25 By장두 Views316
    Read More
  18. 큐브리드 매니저 툴(Mac Mojave) 편집 화면에서 쿼리 작성 시 키 타이핑 속도 못따라갈정도로 느린 이슈

    Date2019.07.24 Bynorman Views388
    Read More
  19. JOIN (+)과 함수 에러

    Date2019.07.24 Bywewek3jk3 Views260
    Read More
  20. select문 실행시 칼럼명 구분콤마( , )가 없을때, 앞 칼럼의 데이터가 뒤 칼럼명의 데이터로 나오는 현상

    Date2019.07.23 By유진욱 Views429
    Read More
  21. 예약어 관련하여 문의드립니다.

    Date2019.07.23 Byjechoi Views151
    Read More
  22. 시점복구 왜 안될까요??

    Date2019.07.20 Bykubrid Views256
    Read More
Board Pagination Prev 1 ... 44 45 46 47 48 49 50 51 52 53 ... 200 Next
/ 200

Contact Cubrid

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