Background Image

FORUM

조회 수 1734 추천 수 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. SQLGate for CUBRID 영구 무료 라이선스 제공

  2. 전송 연결 현재 연결은 원격 호스트에 의해 강제로 끊겼습니다

  3. 윈도우7+iis(7.5)+php5+cubrid에 xe 설치 후에 초기하면에 빨간색 글들.

  4. java.lang.ClassNotFoundException: cubrid.jdbc.dirver.CUBRIDDriver 에러에 관한문의

  5. MySQL의 LOAD DATA INFILE 기능은 CUBRID에 없나요?

  6. 큐브리드 deb 패키징중...

  7. jdbc 사용중 테이블 데이터 입력문제

  8. rownum은 order by에 영향을 안 받네요

  9. 델파이 등 4GL 언어에서 사용할 수 있는 인터페이스는 없나요?

  10. 백업시 lgar 파일이 지워지지 않는 문제

  11. No Image 24Nov
    by finkle
    2016/11/24 by finkle
    Views 20339 

    attempt to exceed the maximum allowed nesting level(400) 에러 문의

  12. HA 문의 드립니다.

  13. 큐브리드에 데이타 타입 지정문제

  14. HTML 게시판 작성후 데이타베이스 연결 방법?

  15. 테이블 목록확인 (show tables) 방법 문의

  16. java.lang.ClassNotFoundException 에러가 납니다.

  17. C++(MFC 아님)에서 프로그래밍 작성을 하려면 어떤것을 사용해야 하나요?

  18. cannot communicate with the broker

  19. 에러 코드 질문 드립니다.

  20. select @@identity

  21. MS949를 UTF-8 변경 방법

Board Pagination Prev 1 ... 4 5 6 7 8 9 10 11 12 13 ... 199 Next
/ 199

Contact Cubrid

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