상세 컨텐츠

본문 제목

BW6 external jar (osgi bundle)로 BW6와 biz logic 분리

TIBCO/BW6

by 야솔아빠 2021. 4. 12. 13:52

본문

반응형

앞서서 BW6의 osgi bundle을 사용할 경우 장점에 대해 알아봤다.

그렇다면 어떻게 만들어야 할까?

[bundle 만들기]
TIBCO community 나 support.com에서 external jar 파일 만드는 방법을 검색 하면 쉽게 이해할 수 있다.
external jar 파일이 결국 osgi bundle이 되는 것이다.

biz에서 사용하는 각종 common library를 bundle로 만들어야 한다.
해당 library를 BW6 project에 import 시킬 경우, biz class에서 common library 참조가 불가능하기 때문이다.

[example#1 - ojdbc8.jar]
아래는 가장 중요한 MANIFEST.MF 의 일부이니 참고하자.

Bundle-Version: 19.3.0
Export-Package: oracle.core.lmx,
oracle.core.lvf,
oracle.jdbc,
...
Bundle-RequiredExecutionEnvironment: JavaSE-1.8

[example#2 - oracle.ucp.jar]
해당 jar는 ojdbc8.jar 를 reference 해야 한다.
중요 MANIFEST.MF 만 기술한다.

Bundle-SymbolicName: oracle.ucp
Bundle-Version: 19.3.0
Bundle-ClassPath: ucp-19.3.0.0.jar
Export-Package: oracle.ucp,
oracle.cup.actors,
...
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Require-Bundle: ojdbc8;bundle-version="19.3.0"
DynamicImport-Package: oracle.jdbc.*

맨 아래 두 구문이 핵심이다.
Require-Bundle: ojdbc8;bundle-version="19.3.0"
DynamicImport-Package: *

즉 oracle.ucp.jar 번들은 ojdbc8 번들을 필요로 한다라는 선언이다.
또한 DynmaicImport-Package 구문은 BW6 studio에서 자동으로 generation 되지 않으니, 사용자가 편집해야만 하는 구문이다.

이렇게 선언하지 않고 각각의 독립된 번들을 deploy 해서 appNode를 재기동하면, 아마도 runtime 시에 어떤 class를 참조하지 못하다라는 에러가 발생 할 것이다. 그런 오류를 보고 관계를 설정해주는 부분이 "Reuired-Bundle" 선언부이다.

최종적으로 BW6에서 biz 모듈을 호출할 때 사용하는 class가 포함된 번들은 반드시 DynamicImport-Package가 있어야 유연한 아키텍처를 만들 수 있다.

무슨말이냐면, BW6는 biz의 어떤 메소드를 호출할 뿐이다. 이때 parameter로 xml/json 데이터를 넘겨주고, biz는 메시지 내에서 데이터를 가지고 알맞은 biz class를 dynamic하게 호출한다.
즉, java reflection 기술을 사용하는 것인데, 이 때 biz가 자유롭게 패키징 되어서 deploy 하기 위해서는 DynamicImport-Package 헤더가 필요로 한다.

1) BW6 -> 2) Java callout -> 3) biz logic call by refection (class loader)

1), 2)는 변하지 않는다.
3)의 biz 로직 변화가 매우 크다(99%)
3)은 package name도 자주 변한다.

그렇기 때문에 BW6 process 의 MANIFEST.MF 에서는 반드시 DynamicImport-Package 옵션을 사용해야 한다. (수작업으로 타이핑 해야 한다)

DynamicImport-Package: *;version="1.0.0"


그렇지 않을 경우, BIZ의 Export-Package가 항상 변하므로(신규 package가 추가 또는 변경) BW6는 해당 package를 항상 변경해서 import 해야 하고 결국 BW6도 배포를 해야 한다라는 뜻이다.

훌륭한 아키텍처를 구축하는데 도움이 되기를 희망합니다.

반응형

'TIBCO > BW6' 카테고리의 다른 글

BW6 Java To XML  (0) 2021.06.07
com.tibco.tibjms.admin.TibjmsAdminException: Message ID tracking is disabled  (0) 2021.05.17
BW6 OSGI bundle  (0) 2021.04.12
BW6 linux config  (0) 2021.03.29
BW6의 EMS Receiver Map message type handling  (0) 2021.03.04

관련글 더보기

댓글 영역