보통은 저런 경우는 안생기지만, 하나의 WAS 에서, Context 가 다른 두개의 웹어플리케이션에서 각각 JNI 호출을 통해, 같은 DLL 을 사용하려는 경우 발생한 적이 있다.

이때는, 해당 JNI Java 라이브러리(.jar)나 클래스를 WAR Class Loader 가 아닌, System Class Loader 가 로드할 수 있게, System Class Path 에 두어 사용해야 한다.

웹로직의 경우, 해당 jar 를 Domain 밑의 lib 이나 server 의 lib 에 두고서 사용하면 된다.
반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,


1. java 로 DLL 의 프로토타입 생성

package jnitest.loader;

public class JNILoader {
 public native void greet();
 
 /*
 static {
  System.loadLibrary("HardInfo");
 }
 */
 
 public void loadLibrary() {
  System.loadLibrary("HardInfo");
 }
}

2. javah -jni <위 1번의 class 이름> 해서, C 언어용 헤더파일 생성

3. 위 헤더파일을 CPP 에서 include 하고, JDK 의 include 디렉토리를 Include Path 로 잡아서
cpp 컴파일 진행

4, 만들어진 DLL 이나 so 를 적정 디렉토리에 위치함

5. -Djava.library.path=<dll 패스> 하여 추가하더나, PATH 에 해당 디렉토리 잡히거나, Windows 디렉토리에 넣는다

6. 위 1 예제의 객체를 생성하고, 위의 경우, loadLibrary() 호출하고 (아니면 아예 static{ } 블록에서 System.loadLibrary 사용) JNI 를 사용한다

반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,

웹로직 9.0 이상에서 가능

EAR 로 배포 되어야 한다.

/EAR_TEST/EarContent/META-INF/weblogic-application.xml 내에

<wls:session-descriptor>
    <wls:sharing-enabled>true</wls:sharing-enabled>
</wls:session-descriptor>

과 같이, 설정 되어야 한다.

WAR 가 EAR 바깥에 있는 경우는, Eclipse 의 플러그인으로 말고는 현재로서는 EAR 안쪽으로
.war 로 묶어 배포하는 것 밖에는 없다(윈도우 기준).

UNIX 에서는 심볼릭링크로 abc.war 라는 이름으로 디렉토리 링크 걸어서 가능하단다.(아직 테스트 못해봄)
반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,