BWCE Application 실행 on Docker
[toc]
1. 환경 이해
1.1 BusinessWorks Studio 환경 이해
TIBCO BusinessWorks는 One Source 개발 -> Multi Target 환경 배포를 지원합니다. 따라서 Application을 개발하는 BusinessWorks Studio는 TIBCO ActiveMatrix BusinessWorks™ 6.7.0 과 TIBCO BusinessWorks™ Container Edition 2.6.1 모두 지원합니다.
단, TIBCO ActiveMatrix BusinessWorks™ 6.7.0의 Studio에서 기존 Application을 Container 환경으로 개발시 Deployment Target을 Container로 변경해 주어야 합니다.


1.2 BusinessWorks 샘플 Application 이해 및 소스 다운로드

REST 서비스를 하는 두개의 마이크로서비스 (Consumer, Provider)를 샘플로 구현합니다. Consumer : 외부의 요청을 받아서 Provider를 호출하고 그 결과값을 외부 요청자에게 전달해 주는 서비스 Provider : 자체적인 서비스를 제공하는 벡엔드 서비스
샘플 Application 다운로드 : 샘플 Git 주소
샘플 Application을 Zip 파일로 다운로드 합니다.

2. BusinessWorks Studio에서 실행
2.1 샘플 Application Import
Project Explore 에서 Import

Git에서 다운 받은 bwce_provider_consumer-main.zip 파일을 Import 합니다.

bwce_provider_consumer-main.zip파일에 Consumer 와 Provider 두개의 Application이 존재합니다.
2.2 샘플 Application 둘러보기
-
Consumer REST 서비스 보기

- Consumer HTTP Client Resouce 보기
Consumer가 호출하는 Provider의 HOST와 Port정보가 Module Property(PROVIDER_HOST, PROVIDER_PORT) 로 정의 되어 있습니다.
- Provider HTTP Connector Resouce 보기
Provider의 Port정보가 Module Property - PROVIDER_PORT로 정의 되어 있습니다.
- Consumer Module Property 정보
Property 정보는 Applicatoin구동시 파라미터 정보로 변경 가능합니다.
2.3 샘플 Application Run
- Run -> Run Configurations -> BusinessWorks Application -> Run
Consumer 와 Provider 두개의 Application을 체크 합니다.
- OSGI 명령어로 REST URLs (Swagger UI) 얻기 Console 창에서
lrestdoc을 입력합니다.
Consumer 와 Provider Application의 REST Discovery Url (Swagger UI) 을 얻습니다.
- Swagger UI를 통한 REST 서비스 테스트
-
Provider Application의 Swagger UI를 통한 REST 서비스 테스트
브라우저에서 Provider Application의 REST Discovery Url (Swagger UI) 입력
Provider -> Try it out -> RequestID 입력 -> Execute 클릭 -> Server Response 결과 값 확인

-
Consumer Application의 Swagger UI를 통한 REST 서비스 테스트
브라우저에서 Consumer Application의 REST Discovery Url (Swagger UI) 입력
Consumer -> Try it out -> RequestID 입력 -> Execute 클릭 -> Server Response 결과 값 확인

-
2.4 샘플 Application EAR 생성
Consumer와 Provider Application의 EAR 파일을 생성합니다.
-
Project Explore -> Consumer.application -> Create Enterprise Archive(EAR)

-
Project Explore -> Provider.application -> Create Enterprise Archive(EAR)
각 Provider.application_1.0.0.ear와 Consumer.application_1.0.0.ear 파일이 생성됩니다.
3 샘플 Application Docker Build
3.1 Provider Application Docker Build
3.1.1 Dockerfile 생성
$ cat <<EOF | tee Dockerfile_Provider
#BWCE Base Docker 이미지 태그 네임
FROM tibco/bwce:latest
#Base Docker에 Copy할 EAR 파일 이름
ADD Provider.application_1.0.0.ear /
#외부 오픈 포트 이름
EXPOSE 8000
#환경변수 BWCE Module Property에 값 전달
ENV BW_PROFILE Docker
ENV PROVIDER_PORT 8000
EOF
ENV 환경 변수는
docker run -e옵션을 통해서도 전달 가능하며, BWCE에서 기본으로 사용되는 환경 변수는 https://docs.tibco.com/pub/bwce/2.6.1/doc/html/GUID-25BD2BA4-6BA4-418C-98D4-6EB3C9196399.html 를 참조하시기 바랍니다.
3.1.2 Docker Build
$ docker build -t provider:latest -t provider:1.0 -f Dockerfile_Provider .
3.1.3 Docker image 결과 확인
$ docker images
3.2 Consumer Application Docker Build
3.2.1 Dockerfile 생성
$ cat <<EOF | tee Dockerfile_Consumer
#BWCE Base Docker 이미지 태그 네임
FROM tibco/bwce:latest
#Base Docker에 Copy할 EAR 파일 이름
ADD Consumer.application_1.0.0.ear /
#외부 오픈 포트 이름
EXPOSE 7000
#환경변수 BWCE Module Property에 값 전달
ENV BW_PROFILE Docker
ENV PROVIDER_PORT 8000
#PROVIDER_HOST (Docker Host IP 혹은 Docker Link의 이름 )
ENV PROVIDER_HOST provider-host
ENV CONSUMER_PORT 7000
EOF
ENV 환경 변수는
docker run -e옵션을 통해서도 전달 가능하며, BWCE에서 기본으로 사용되는 환경 변수는 https://docs.tibco.com/pub/bwce/2.6.1/doc/html/GUID-25BD2BA4-6BA4-418C-98D4-6EB3C9196399.html 를 참조하시기 바랍니다.
3.2.2 Docker Build
$ docker build -t consumer:latest -t consumer:1.0 -f Dockerfile_Consumer .
3.2.3 Docker image 결과 확인
$ docker images
4 샘플 Application Docker Run
4.1 Provider Application Docker Run
4.1.1 docker run 을 통한 container 실행
$ sudo docker run -d -p 8000:8000 --name provider_1.0 provider:latest
-p 8000:8000Docker Host의 8000 port를 Container의 8000(REST HTTP Connector) port로 바인딩 합니다.
-name provider_1.0실행되는 conatiner의 이름을 지정합니다.
4.1.2 docker ps를 통한 container 실행 확인
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fe9a3f15a8db provider:latest "/scripts/start.sh" 45 seconds ago Up 44 seconds 0.0.0.0:8000->8000/tcp provider_1.0
4.1.3 crul 로 테스트
$ curl -X GET "http://localhost:8000/provider?RequestID=testID" -H "accept: application/json"
{"Provider_Version":"V1.0","Message":"This is from Provider V1.0 for RequestID : testID"}
4.1.4 swagger UI로 테스트
브라우저에서 http://localhost:8000/swagger 로 접근
4.2 Consumer Application Docker Run
4.2.1 docker run 을 통한 container 실행
$ sudo docker run -d -p 7000:7000 --link=provider_1.0:provider-host --name consumer_1.0 consumer:latest
-p 7000:7000Docker Host의 7000 port를 Container의 7000(REST HTTP Connector) port로 바인딩 합니다.
-name consumer_1.0실행되는 conatiner의 이름을 지정합니다.
--link=provider_1.0:provider-host를 사용하여 앞서 실행한 provier_1.0의 container를 provider-host 정보에 링크 시킵니다. 해당 옵션 대신-e PROVIDER_HOST=[Docker Host IP]를 이용하여 PROVIDER_HOST Property 값을 바로 전달 가능합니다.
4.2.2 docker ps를 통한 container 실행 확인
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
990324039c1c consumer:latest "/scripts/start.sh" 9 seconds ago Up 8 seconds 0.0.0.0:7000->7000/tcp consumer_1.0
841e7ed9a9e8 provider:latest "/scripts/start.sh" 4 minutes ago Up 4 minutes 0.0.0.0:8000->8000/tcp provider_1.0
4.2.3 crul 로 테스트
$ curl -X GET "http://localhost:7000/consumer?RequestID=testID" -H "accept: application/json"
{"Consumer_Version":"V1.0","Provider_Version":"V1.0","Message":"This is from Provider V1.0 for RequestID : testID"}
4.2.4 swagger UI로 테스트
브라우저에서 http://localhost:7000/swagger 로 접근
5. 샘플 Application Docker Monitoring
5.1 Monitoring DB 저장소 생성
docker run으로 Docker hub에서 PostgreSQL 이미지 다운 및 실행
$ sudo docker run -d \
--name postgres_bwce_mon \
-e POSTGRES_USER=bwuser \
-e POSTGRES_PASSWORD=bwuser \
postgres
5.2 BWCE Applicatoin Monitoring Container 실행
docker run으로 BWCE Applicatoin Monitoring Container 실행
$ sudo docker run -d -p 8080:8080 \
--link=postgres_bwce_mon:postgres-host \
--name bwce_mon \
-e PERSISTENCE_TYPE="postgres" \
-e DB_URL="postgresql://bwuser:bwuser@postgres-host:5432/postgres" \
tibco/bwce-mon:latest
5.3 Applicatoin Container 와 Monitoring Container 연계
- 기존 Application Conatiner 삭제
$ sudo docker stop consumer_1.0 provider_1.0 $ sudo docker rm consumer_1.0 provider_1.0 - Monitoring Container와 연계 및 Application Container 실행
$ sudo docker run -d -p 8000:8000 --name provider_1.0 \ --link bwce_mon:bwce_mon \ -e BW_APP_MONITORING_CONFIG='{"url":"http://bwce_mon:8080"}' \ provider:latest $ sudo docker run -d -p 7000:7000 --link=provider_1.0:provider-host --name consumer_1.0 \ --link bwce_mon:bwce_mon \ -e BW_APP_MONITORING_CONFIG='{"url":"http://bwce_mon:8080"}' \ consumer:latestBW_APP_MONITORING_CONFIG환경변수에 Monitoring Container 의 접속 정보를 입력하여 연계합니다.
5.4 브라우저를 통한 Monitoring 검증
-
브라우저를 통한 Monitoring Container의 URL 접속

-
Consumer Application Process 통계 정보 보기

-
Consumer Application Process Instance 히스토리 보기

Process 호출 이력 및 호출 당시의 각 엑티비티의 성공 여부와 Input/Output에 대한 값을 확인 할 수 있습니다.