프로젝트를 하게 되면 가장 많이 사용하게 되는 것이 데이터베이스(이하 디비)입니다.
BPEL 에서는 디비에 CRUD를 하려면 Database Adapter(이하 DbApapter)라는 것을 사용합니다.
하지만.... 그냥 쓰면 되는 것은 아니고... DbAdapter를 하나 추가 하기 위해서 미리 설정을 해줘야 하는 것이 있습니다.
웹로직 콘솔에서 데이터소스(datasource)를 설정하고, 그 데이터소스를 사용하는 DbAdapter를 추가해야 실제로 배치(deploy) 했을 때 사용 가능합니다.
간단한 샘플로 어떻게 해야되는지 알아봅시당당당~
웹서비스로 유저 정보를 입력하면 Oracle과 Sql Server 2005 에 각각 Insert 하는 웹서비스(?)를 만들어보겠습니다.
스키마 파일입니다.
입력되는 필드는 아래와 같습니다.
※ 아래 예제를 하시려면 SOA Suite 설치 및 프로젝트 생성, 배치는 할줄 알아야 합니둥~ -_-;;
라이브러리(jar) 세팅
웹로직(Oracle WebLogic)에서 기본적인 jdbc 드라이버는 포함되어 있지만 Mssql용 jdbc 드라이버는 포함되어있지 않습니다.
그래서
jdbc 드라이버를 추가해야 합니다. 많은 방법이 있지만 저는 {도메인홈}\lib 디렉토리에 넣어두겠습니다.
웹로직 서버를 시작(재시작)핼 때 콘솔화면을 보면 아래와 같이 sqljdbc4.jar 파일이 클래스 패스에 포함된 걸 볼 수 있습니다.
데이터베이스 리소스(datasource) 생성
※ 데이터소스 생성에 관해서는 제 블로그의 다른 글에도 많이 있을 겁니다. ㄷㄷ
먼저 Oracle 10g 데이터소스를 생성하겠습니다.
웹로직 콘솔로 들어갑니다. 도메인 구조(메뉴)에서 서비스 - JDBC -
데이터 소스를 선택합니다.
새로 만들기를 클릭합니다.
이름,
JNDI 이름, 데이터베이스 유형, 데이터베이스 드라이버를 설정합니다.
여기서 중요한게
JNDI 이름입니다. 이 이름으로 찾아서 리소스를 사용합니다.
다음을 클릭합니다.
트랜잭션을 설정합니다. XA 지원되는 jdbc 드라이버는 패스 됩니다. ㅋㅋ
디비 접속 정보를 설정합니다. 입력 후
다음을 클릭합니다.
구성 테스트를 클릭합니다.
"
접속 테스트가 성공했습니다." 메시지가 나와야 정상입니다.
다음을 클릭합니다.
대상을 선택합니다. 꼭 대상을 선택해 줘야합니다.
soa_server1을 체크합니다.
SQL Server 20005 데이터 소스를 생성하겠습니다.
데이터 소스 목록에서
sampleOracle이 추가된 것을 볼 수 있습니다.
새로 만들기 클릭
이름, JNDI 이름, 데이터베이스 유형, 데이터베이스 드라이버를 설정합니다.
기본적으로 Mssql은 XA가 아니므로 XA가 아닌 드라이버를 선택했습니다.
다음 클릭
트랜잭선 설정입니다.
글로벌 트랜잭션 지원을
체크 해제 합니다.
다음 클릭
접속 정보를 설정합니다.
구성 테스트를 클릭합니다.
다음을 클릭합니다.
대상을
soa_server1로 설정합니다.
sampleMssql(jdbc/sampleMssql), sampleOracle(jdbc/sampleOracle) 이 추가되었습니다.
DbAdapter 설정
BPEL 에서 디비에 접근하려면 DbAdapter 를 통해서 해야합니다.
왼쪽 트리 메뉴에서 배치를 클릭합니다.
배치 목록에서
DbAdapter를 클릭합니다.
구성 탭을 클릭합니다.
아웃바운드 접속 풀 탭을 클릭합니다.
목록 테이블에서
새로 만들기를 클릭합니다.
javax.resource.cci.ConnectionFactory를 선택하고
다음을 클릭합니다.
JNDI 이름에
eis/DB/sampleOrcle을 입력합니다.
이 JNDI 이름이 JDeveloper 에서 사용할 이름입니다.
왕중요!!
처음 설정할 때 배치 계획 파일을 어디에 저장할 것인지 물어봅니다.
저는 {SOA홈}\soa\DBPlan 디렉토리에 저장하겠습니다. (DBPlan 디렉토리는 미리 만들었습니다.)
DBPlan 을 선택합니다.
확인을 클릭합니다.
정상 처리 메세지를 확인하시고, 배치 계획 경로도 확인해주세요~
다시 배치 - DbAdapter - 구성 - 아웃바운드 접속 풀 까지 이동합니다.
새로 만들기 클릭
그거.. 선택 후
다음 클릭
JNDI 이름으로
eis/DB/sampleMssql 입력합니다.
또! 다시 배치 - DbAdapter - 구성 - 아웃바운드 접속 풀 까지 합니다.
목록 테이블에 두개가 추가된 것을 볼 수 있습니다.
오라클꺼 먼저 설정 해봅시다.
javax.resource.cci.ConnectionFactory 앞에 +를 눌러 확장합니다.
eis/DB/sampleOracle을 선택합니다.
속성 테이블에서 맨 아래 xaDataSourceName의 속성값 부분 공간을 클릭합니다.
그러면 input이 생겨납니다. 우와왕~
여기에
jdbc/sampleOracle을 입력한 후
엔터를 입력합니다.
저장 클릭
잘 저장 되었다고 나옵니다. ㄷㄷ
이번에는
eis/DB/sampleMssql 클릭
현재 Mssql은 XA가 아니므로 dataSourceName에
jdbc/sampleMssql을 입력합니다.
platformClassName을 변경해야 합니다. 현재 입력되어있는 속성값은 딱 봐도 Oracle10 용임을 알 수 있습니다.
oracle.toplink.platform.database.SQLServerPlatform 을 입력합니다.
※ 다른 platformClassName은 아래 링크를 참조해주세요~
http://download.oracle.com/docs/cd/E12839_01/integration.1111/e10231/adptr_db.htm#CHDDDJAG
저장을 클릭합니다.
배치 목록에서 DbAdapter를 선택(체크박스 선택)하고
갱신을 클릭합니다.
완료를 클릭합니다.
성공적으로 갱신되었다는 메세지 확인
이제 JDeveloper 에서 디비 어댑터(Database Adapter)를 사용할 준비가 되었습니다.
JDeveloper에서 먼저 설정하고 콘솔에서 데이터소스와 DbAdapter를 설정해도 됩니다.
위에서 설정한 데이터소스와 DbAdapter는 실제 어플리케이션이 배치(Deploy)되서 돌아갈 때 사용하니까요~
Working JDeveloper
Database Addpater를 External Refereneces 영역에 드래그 앤 드랍 합니다.
서비스 이름(Service Name)을 지정합니다. 저는 그냥 테이블 이름을 했습니다.
현재 JDeveloper에서 사용할 접속 정보를 설정합니다.
커낵션(Connection) 오른쪽에 데이터베이스 커낵션 생성 버튼(녹색 +)을 클릭합니다.
커낵션 정보를 입력 후
Test Connection 버튼을 클릭했을 때 "Success!" 가 나와야 합니다.
OK 버튼을 클릭합니다.
커낵션을 추가(한번 추가했으면 앞으로는 선택하겠죠..)했을때의 모습니다.
아래 JNDI Name 이 eis/DB/{커낵션명} 으로 자동 작성되어있는 걸 볼 수 있습니다.
파란선을 기준으로 위쪽은 JDeveloper에서 설정할떄 쓰는 커낵션 정보이고, 아래 JNDI Name이나 Data Source는 실제 배치 되었을 때 참조하는 리소스 입니다.
그러므로 JDeveloper에서의 접송 정보와 위에서 했던 DataSource, DbAdpater 설정이
일치해야 합니다.
JNDI Name 이 위에서 설정한 DbAdapter 이름이어야 한다는게 감이 오시졈? ㄷㄷ
Next 버튼을 클릭합니다.
데이터베이스에 접속해서 뭘 할지 설정합니다. -_-
딱 보면 뭔지 알 수 있습니다.
Poll for New or Changed Records in a Table 은 테이블을 지속적으로 읽어들여 변화가 있을 떄 이벤트가 일어납니다.
Execute Pure SQL 은 사용자 쿼리 입니다.
테이블을 선택합니다.
Import Tables 클릭
Query 버튼을 클릭하면 Available 영역에 테이블 목록이 조회됩니다.
테이블을 선택하고 오른쪽으로 가는 화살표 버튼을 클릭하여 선택합니다.
테이블이 선택된 것을 확인하시고
Next 버튼을 클릭합니다.
※ 임포트한 테이블에 기본키(Primary Key)가 없을 경우 기본키를 지정하는 단계가 나옵니다.
관계(Relationships)를 설정합니다. 일단 그런거 없으니 패스
사용할 필드를 설정합니다. 전 다 쓸겁니다.
Next 클릭
고급 설정입니다.
시퀀스 설정(Sql Server의 Identity도 되더군용) 이라든지 이것 저것 설정할 수 있습니다.
그냥
Next 클릭 ㄷㄷ
Finish 클릭
Database Adapter(Oracle 꺼)가 하나 생성되었습니다.
이제 Mssql 꺼를 하나 더 만듭시다~
Mssql 커낵션을 추가합시다.
오라클이 아닌 다른 디비는 jdbc 드라이버를 설정해줘야 합니다.
Library 오른쪽이
Browse 클릭
New 클릭
Add Entry 클릭
jdbc 드라이버를 선택합니다.
라이브러리 이름(Libary Name)을 지정하고 OK 클릭
라이브러리가 추가 되었습니다. OK 클릭
Test Connection 버튼을 클릭하면 "Success!" 메세지가 나와야합니다.
만약 라이브러리를 설정 한하면 클래스가 없다느니 뭐라고 에러가 날겁니다. ㅎㅎ
다음 단계는 위의 Oracle 설정과 같습니다.
이제 요청(request) XML 구조를 만들어 봅시다.
xsd 폴더에서 마우스 오른쪽 버튼 클릭 후 New 클릭
All Technologies 탭에서 General - XML 에서
XML Schema를 선택합니다.
파일 이름(File Name)을 입력합니다.
보통 xsd 폴더에 저장하니 폴더도 확인 (꼭 xsd 폴더에 없어도 됩니당)
처음 만들게 되면 "exampleElement" 엘리먼트 하나만 만들어져 있습니다.
exampleElement 선택 후 오른쪽 컴포넌트 팔레트(Component Palette)에서
시퀀스(sequence)를 클릭합니다.
그러면 시퀀스가 하나 추가되고 추가된 시퀀스가 선택되어 있습니다.
엘리먼트(element)를 클릭합니다.
그러면 시퀀스 다음에 엘리먼트가 추가됩니다.
전에 추가된 시퀀스를 선택하고 다시
엘리먼트를 클릭합니다.
이렇게 엘리먼트
7개를 추가합니다.
뭐 드래그를 해도 되고 소스 편집을 해도 되고 방법은 많으니 직접 해보세용~
추가된 엘리먼트를 선택 후 오른쪽 아래에 속성 부분에서 이름(name)을 변경하시거나 엘리먼트를 더블클릭해서 이름을 바꿉니다.
그 후 다시 속성 부분에서 타입(type)을 입력합니다.
아래와 같이 7개의 엘리먼트를 완성합니다.
저장합니다.
Mediator 컴포넌트를 Components 영역에 드래그 앤 드랍합니다.
이름(Name)을 입력하고 템플릿(Template)은
One Way Interface(단방향)를 선택합니다.
Input은 방근전 만들었던 input을 선택합니다.
돋보기 버튼 클릭
Project Schema Files - input.xsd - exampleElement 를 선택합니다.
OK 클릭
RouteUser(Mediator)와 User(Database Adapter)를 연결합니다.
RouteUser와 TblUser를 연결합니다.
RouteUser(Mediator)를
더블 클릭하여 수정합니다.
아래에 보면 두개의 라우팅(Static Routing)이 있습니다.
각각 User와 UblUser로 가는 겁니다.
첫번째. User로 가는 데이터를 설정합시다. Transform Using 오른쪽의 맵
핑 설정 버튼을 클릭하빈다.
Create New Mapper File을 선택합니다.
아래와 같이 선을 연결합니다.
그리고 String Functions 그룹에서
concat 컴포넌트를 가운데 영역에 드래그 앤 드랍합니다.
inp1:zipcode 와 inp1:address 를 차례로 concat 컴포넌트에 연결하고 top:addr 과 concat 컴포넌트와 연결합니다.
concat 컴포넌트를 더블클릭하여 수정합니다.
Add 버튼을 이용하여 파라메터(parameter)를 추가 한 후 공백(" ")을 넣습니다.
Date Functions 그룹에 current-dateTime 컴포넌트를 가운데 영역에 드래그 앤 드랍한 후, top:wdate 와 연결합니다.
이번에는 두번쨰 연결인 TblUser 와의 연결을 설정합시다.
모두 저장합니다.
배치(Deply) 및 테스트
배치 합니다.
테스트 합시다.
입력 후 오른쪽 아래
웹 서비스 테스트를 클릭합니다.
성공(?) 했습니다.
메시지 흐름 추적 실행을 클릭합니다.
RouteUser 를 거쳐서 User, TblUser 로 실행된 것을 볼 수 있습니다.
RouteUser를 클릭합니다.
Mediator에서 무슨일이 일어났는지 볼 수 있습니다.
페이로드를 확장하면 이동하는 데이터(XML)를 볼 수 있습니다.
데이터베이스를 확인해보면 입력한 정보가 각각 테이블에 들어가 있습니다. 와아~ -_-v