SOA 환경에서 프로세스 및 서비스 종속성을 관리합니다.
배경 BPEL 프로세스가 어떤 서비스에 의존하는지 알고 계십니까? 서로 다른 버전의 BPEL 프로세스를 사용하는 경우 둘 사이의 종속성은 더욱 복잡해질 수 있습니다. BPEL 프로세스에서 호출되는 ESB(Enterprise Service Bus) 서비스를 고려하면 종속성 관리의 복잡성이 증가합니다. 복잡성으로 인해 배포 및 테스트에 시간이 많이 걸리고 어렵고 오류가 발생하기 쉽습니다.
종종 우리는 Microsoft Visio 모델링 도구를 사용하여 종속성을 수동으로 다이어그램화하고 프로세스가 변경될 때마다 종속성을 업데이트하기 위해 재빠르게 작업합니다. 이는 비즈니스 프로세스를 민첩하게 변경할 수 있도록 설계된 SOA(서비스 지향 아키텍처) 인프라의 민첩성에 큰 장애가 됩니다.
이 기술 노트에서는 빌드 프로세스를 성공적으로 개선하고 프로세스 종속성 그래프의 자동 생성을 구현하는 방법을 알아봅니다.
우리의 과제는 많은 BPEL 프로세스를 포함하고 많은 BPEL 하위 프로세스 및 ESB 서비스를 참조하는 Oracle SOA Suite 데모 프로젝트를 고객을 위해 구현하는 것입니다. 우리는 결국 12개의 BPEL 프로세스와 ESB 서비스(공용 서비스로 정의되고 서비스 레지스트리에서 공유됨)는 물론 기타 독점 BPEL 프로세스와 ESB 서비스를 사용하게 되었습니다.
먼저, 우리는 프로젝트의 모든 서비스에 대해 Ant 기반 배포를 생성하고 BPEL 프로세스(이를 실행하는 테스트 케이스 포함)를 다양한 환경(테스트, 통합, 프로덕션)에 배포하고 ESB 서비스도 배포하기로 결정했습니다. Ant 기반 환경입니다. 컴퓨터 전자책 무료 다운로드
요구 사항 첫 번째 프로젝트 릴리스를 완료한 후 몇 가지 요구 사항이 있습니다.
,
BPEL 프로세스나 ESB 서비스가 변경될 때 우리는 프로젝트의 모든 서비스를 배포하고 싶지 않습니다. 따라서 프로젝트 중심 배포에서 공공 서비스 중심 배포 접근 방식으로 전환해야 합니다.
BPEL 프로세스를 배포할 때 모든 종속(독점) 하위 프로세스와 ESB 서비스도 자동으로 배포됩니다.
특정 버전의 프로세스를 덮어쓰는 것을 방지하려면 해당 버전의 프로세스가 서버에 아직 배포되지 않은 경우에만 배포하세요. 덮어쓰면 모든 인스턴스 흐름 정보가 손실됩니다.
모든 프로세스 및 서비스 종속성에 대한 시각적 그래프는 이 정보를 별도로 유지 관리할 필요 없이 배포 중에 자동으로 생성되어야 합니다. 시각화는 다음과 같아야 합니다.
공개 질문 이러한 새로운 요구 사항에 대응하여 우리는 다음과 같은 질문을 하고 다음과 같은 답변을 제공했습니다.
질문: 프로세스 및 서비스 종속성에 대한 정보는 어디에 저장됩니까? 완전한 종속성 그래프를 생성하려면 더 많은 정보를 추가해야 합니까?
답변: BPEL 프로세스에 의해 호출된 모든 서비스는 PartnerLinkBinding으로 표시된 bpel.xml 파일에 저장됩니다. 호출된 BPEL 프로세스 및 버전 정보도 URL에 인코딩됩니다. 예: 컴퓨터 전자책 무료 다운로드
<속성 이름="wsdlRuntimeLocation">
${domain_url}/CustomerAccount_BES/1.3/CustomerAccount_BES?wsdl
</property>
배치될 BPEL 프로세스의 현재 버전은 build.properties 파일에서 찾을 수 있습니다. BPEL 프로세스의 버전 유지 관리를 위해서는 build.properties 파일에서 rev 속성만 변경하면 됩니다.
공개 BPEL 프로세스와 비공개 BPEL 프로세스를 구별하기 위해 bpel.xml 파일 내의 클라이언트 파트너 링크는 다음과 같이 "public" 또는 "private" 값을 갖는 새로운 속성 "type"을 제공합니다.
<partnerLinkBinding 이름="클라이언트">
<property name="wsdlLocation">CustomerAccount_BES.wsdl</property>
<property name="type">공개</property>
</partnerLinkBinding>
질문: 종속성 그래프를 동적으로 생성할 수 있는 도구나 프레임워크가 있습니까?
답변: 예, 오픈 소스 도구인 Graphviz( www.graphviz.org )는 텍스트 형식의 입력 파일에서 그래프를 생성할 수 있습니다.
질문: 다른 BPEL 프로세스를 참조하기 위한 옵션은 무엇입니까?
답변: 옵션은 다음과 같습니다.
기본 버전 참조 특정 버전 참조 UDDI 서비스 키 참조(인코딩된 버전 정보 포함 또는 제외)
질문: 이러한 새로운 배포 요구 사항을 모두 어떻게 구현할 수 있습니까?
답변: 이러한 새로운 배포 요구 사항은 사용자 정의 Ant 작업을 사용하여 가장 잘 달성됩니다.
시작하기 질문에 대한 만족스러운 답변을 바탕으로 사용자 정의 Ant 작업을 생성해 보겠습니다. bpel.xml 파일은 Ant 태스크에서 구문 분석됩니다. 발견된 모든 PartnerLinkBindings 태그에 대해 해당 bpel.xml 파일의 구문 분석이 반복적으로 시작됩니다. 구문 분석 외에도 발견된 각 BPEL 프로젝트의 build.properties 파일에서 버전 속성("ref")의 현재 값이 추출됩니다. 재귀 구문 분석의 과제 중 하나는 순환 종속성을 건너뛰는 것입니다.
bpel.xml 파일의 새로운 "type" 속성과 재귀적 구문 분석은 서비스를 염두에 두고 배포에 필요한 모든 요구 사항을 구현합니다.
더 좋은 점은 Graphviz를 사용하여 종속성 그래프의 자동 생성 문제를 해결한다는 것입니다. 이를 달성하기 위해 아래와 같이 재귀적 bpel.xml 구문 분석에서 얻은 모든 종속성을 단일 XML 파일로 병합합니다. 컴퓨터 전자책 무료 다운로드
<?xml version="1.0" 인코딩="UTF-8"?>
<BPE수트케이스>
<BPELProcess id="Resource_BAS_SetForAccount" src=" http://www.oracle.com/technology/tech/soa/soa-suite-best-practices/Resource_BAS_SetForAccount.bpel ">
<partnerLinkBindings>
<partnerLinkBinding 이름="클라이언트">
<property name="wsdlLocation">Resource_BAS_SetForAccount.wsdl</property>
<property name="type">공개</property>
<property name="version">1.2</property>
</partnerLinkBinding>
<partnerLinkBinding name="RemoveFromAccount">
<property name="wsdlLocation">Resource_BAS_RemoveFromAccount.wsdl</property>
<property name="version">1.5</property>
</partnerLinkBinding>
...
</partnerLinkBindings>
</BPEL프로세스>
<BPELProcess id="Resource_BAS_RemoveFromAccount" src=" http://www.oracle.com/technology/tech/soa/soa-suite-best-practices/Resource_BAS_RemoveFromAccount.bpel ">
<partnerLinkBindings>
<partnerLinkBinding 이름="클라이언트">
<property name="wsdlLocation">Resource_BAS_RemoveFromAccount.wsdl</property>
<property name="type">공개</property>
<property name="version">1.5</property>
</partnerLinkBinding>
<partnerLinkBinding name="CheckAvailability">
<property name="wsdlLocation">Resource_BES_CheckAvailability.wsdl</property>
<property name="version">1.1</property>
</partnerLinkBinding>
...
</partnerLinkBindings>
</BPEL프로세스>
<BPELProcess id="Resource_BES_CheckAvailability" src=" http://www.oracle.com/technology/tech/soa/soa-suite-best-practices/Resource_BES_CheckAvailability.bpel ">
<partnerLinkBindings>
<partnerLinkBinding 이름="클라이언트">
<property name="wsdlLocation">Resource_BES_CheckAvailability.wsdl</property>
<property name="type">공개</property>
<property name="version">1.1</property>
</partnerLinkBinding>
...
</partnerLinkBindings>
</BPEL프로세스>
...
</BPE수트케이스>
XSLT를 사용하여 병합된 XML 파일을 대상 형식(.dot)으로 변환합니다. 이는 아래와 같이 Graphviz 생성기에 대한 입력으로 사용되어 PNG 이미지를 생성하는 데 사용할 수 있습니다.
이중 그래프 구조체 {
노드 [shape=record,fontname="Arial",fontsize="10"];
가장자리 [fontname="Arial",fontsize="8"];
순위=LR;
라벨저스트=l;
"Resource_BAS_SetForAccount_1_2" [shape=record,label="{Resource_BAS_SetForAccount}|{1.2|공개}",
fillcolor=노란색 녹색, 스타일=채워짐];
"Resource_BAS_RemoveFromAccount_1_5" [shape=record,label="{Resource_BAS_RemoveFromAccount}|{1.5|public}",
fillcolor=노란색 녹색, 스타일=채워짐];
"Resource_BES_CheckAvailability_1_1" [shape=record,label="{Resource_BES_CheckAvailability}|{1.1|public}",
fillcolor=노란색 녹색, 스타일=채워짐];
"Resource_BAS_SetForAccount_1_2" -> "Resource_BAS_RemoveFromAccount_1_5" [장식=true,label=""];
"Resource_BAS_RemoveFromAccount_1_5" -> "Resource_BES_CheckAvailability_1_1" [장식=true,label=""];
}
위의 DOT 파일에 의해 생성된 종속성 그래프는 다음과 같습니다.
서비스 이름, 버전, 유형이 상자에 표시됩니다. 상자 색상은 서비스 유형을 나타냅니다. 이 다이어그램에는 세 가지 공용(녹색) 서비스가 있습니다. 이 기사의 시작 부분에 있는 다이어그램에는 ESB 서비스(흰색)와 BPEL 서비스(주황색)도 나와 있습니다.
각 공개 BPEL 프로세스에 대한 이상적인 다이어그램을 생성한 후 관련 프로세스의 자동 배포를 구현해야 합니다. 이 서비스 중심 배포에서는 앞서 생성한 프로세스 목록을 사용했습니다. 목록의 각 프로세스에 대해 표준 배포 대상이 호출됩니다. 서버의 기존 프로세스 버전을 덮어쓰는 것을 방지하기 위해 배포 대상은 서버에 프로세스의 현재 버전이 없는 경우에만 호출됩니다.
프로세스 WSDL URL에 대한 HTTP 연결을 열고 반환된 상태 코드(HTTP 상태 200 ? 배포됨, HTTP 상태 404 ? 아직 배포되지 않음)를 확인하여 특정 프로세스 버전을 사용할 수 있는지 확인할 수 있습니다. 컴퓨터 전자책 무료 다운로드
사용자 정의 Ant 작업(재귀 구문 분석 포함), PNG 이미지 생성 및 서비스 중심 배포의 출력은 다음과 같습니다.
...
[mkdir] 생성된 디렉토리: /MyProject/Resource_BAS_SetForAccount/doc
[bpeltask] ** DeployWithDependencesTask 시작 중 **
[bpeltask] Resource_BAS_SetForAccount-1.2
[bpeltask] ** 매개변수 **
[bpeltask] dotfilename: doc/bpel-recursiv-all.dot
[bpeltask] dotfilenamepublic: doc/bpel-recursiv-public.dot
[bpeltask] 배포 대상: 배포
[bpeltask] 배포: true
[bpeltask] 덮어쓰기: false
[bpeltask] stoponalreadydeployed: false
[bpeltask] ** 모든 bpel.xml 파일을 반복적으로 해결 **
[bpeltask] [Resource_BAS_SetForAccount-1.2]
[bpeltask] [Resource_BAS_SetForAccount-1.2, Resource_BAS_RemoveFromAccount-1.5]
[bpeltask] [Resource_BAS_SetForAccount-1.2, Resource_BAS_RemoveFromAccount-1.5, Resource_BES_CheckAvailability-1.1]
[bpeltask] ** CENTRAL bpel.xml 파일 작성 **
[bpeltask] ** 도트 파일 변환 **
[bpeltask] ** 서비스 배포 **
[bpeltask] ============================================== =========================
[bpeltask] 서비스가 이미 배포되었습니다(HTTP/1.1 200 OK) 버전 '1.1'의 'Resource_BES_CheckAvailability' http://localhost:8888/orabpel/default/Resource_BES_CheckAvailability/1.1/ Resource_BES_CheckAvailability?wsdl
[bpeltask] ============================================== =========================
[bpeltask] ============================================== =========================
[bpeltask] 서비스가 이미 배포되었습니다(HTTP/1.1 200 OK) 버전 '1.5'의 'Resource_BAS_RemoveFromAccount' http://localhost:8888/orabpel/default/Resource_BAS_RemoveFromAccount/1.5/ Resource_BAS_RemoveFromAccount?wsdl
[bpeltask] ============================================== =========================
[bpeltask] ============================================== =========================
[bpeltask] 서비스가 아직 배포되지 않음(HTTP/1.1 404 찾을 수 없음) http://localhost:8888/orabpel/default/Resource_BAS_SetForAccount/1.2/ Resource_BAS_SetForAccount?wsdl
[bpeltask] 버전 1.2에서 Resource_BAS_SetForAccount의 서비스 배포 시작
[bpeltask] ============================================== =========================
...
결론 종속성 그래프를 자동으로 생성하는 서비스 중심 배포는 SOA 인프라 투명성에 대한 모든 요구 사항을 충족합니다. 배포는 전적으로 Ant를 기반으로 하기 때문에 Luntbuild 야간 및 프로덕션 빌드 작업(지속적인 빌드 환경)에도 사용할 수 있습니다.
고객의 SOA 거버넌스를 지원하기 위해 다음과 같이 고객의 위키에 결과 종속성 그래프와 함께 공개 프로세스와 해당 문서를 공개합니다.
Wiki 페이지는 서비스 레지스트리를 조회하여 현재 등록된 공용 서비스의 버전을 검색할 때 동적으로 생성됩니다. 위키 페이지의 그림은 문서의 실제 크기 그림과 공개 서비스의 등록 버전이 포함된 소스 저장소(Subversion)에 대한 링크를 제공합니다. WebDAV를 통해 Subversion에서 해당 파일을 검색하려면 축소판을 클릭하세요.