XLANG/s 언어
XLANG/s는 XML, XSD 및 WSDL(웹 서비스 기술 언어) 같은 인터넷 표준으로 사용할 수 있도록 설계되었으며 .NET 기반 개체 및 메시지 처리를 기본적으로 지원합니다. XLANG/s는 C#의 일부 식 기능을 포함하는 메시징 언어로 볼 수 있습니다. 하지만 XLANG/s와 C# 사이에 코드 이식성은 없습니다.
XLANG/s는 프로세스와 구현 간의 분리를 강조합니다. 예를 들어 비즈니스 프로세스나 프로토콜은 XLANG/s에서 지정되며 데이터베이스 액세스와 같은 응용 프로그램의 로컬 특성은 C#, Visual Basic.NET 등의 다른 .NET 프로그래밍 언어로 구현됩니다.
XLANG/s 할당 및 식 구문은 C#을 기반으로 모델링되었으며 정확한 구문은 C# 사양을 참조해야 합니다. XLANG/s는 비즈니스 프로세스를 정의하는 데 사용되는 높은 수준의 생성 집합을 풍부하게 제공합니다. XLANG/s는 문자열 및 정수와 같은 하위 수준 데이터 형식을 지원하지만 메시지, 포트, 상관 관계 및 서비스 링크와 같은 상위 수준 데이터 형식도 정의됩니다. 이러한 데이터 형식은 비즈니스 프로세스와 연결된 의미 체계를 엄격하게 정의하는 데 사용되며 while 또는scope 같은 프로세스 제어 문으로 보완됩니다.
XLANG/s 문은 일반적으로 수신 또는 보내기와 같이 자체적으로 작동하는 단순 문과 단순 문 또는 scope, 병렬 및 수신 대기와 같은 다른 복잡한 문을 포함하거나 그룹화한 복잡한 문이라는 두 가지 범주 중 하나로 분류됩니다. XLANG/s에서 구체화한 의미 체계는 Microsoft, IBM 및 BEA에서 비즈니스 프로세스 의미 체계 정의를 위해 공개한 BPEL4WS(웹 서비스용 비즈니스 프로세스 실행 언어) 사양에 정의된 의미 체계를 반영하고 있습니다.
XLANG/s 기본 생성은 BizTalk 오케스트레이션 디자이너에서 오케스트레이션 다이어그램을 그린 결과로 생성되는 것이므로 반드시 그 개념을 이해해야 하는 것은 아닙니다. 오케스트레이션 디자이너는 시각적으로 비즈니스 프로세스를 디자인하기 위한 다양한 기능을 갖춘 그래픽 도구입니다. 이 도구는 확장명이 .odx인 XLANG/s 파일을 생성하며 이 파일의 헤더에는 추가적인 시각적 정보가, 본문에는 사용자 지정 특성 정보가 포함됩니다.
참고
XLANG/s 언어는 고유한 언어이며 완전하게 기술되지 않았습니다. 이 섹션에서는 이 언어로 오케스트레이션을 개발할 때 알아야 하는 부분에 대해 설명합니다. .odx 파일의 직접 수정은 지원되지 않습니다.
XLANG/s 프로그램
가장 단순한 XLANG/s 프로그램에 필요한 것은 작업을 시작할 데이터를 오케스트레이션에 제공하는 메시지 유형이며, 오케스트레이션은 포트를 통해 메시지를 받은 후 종료됩니다. 다음은 코드 예제입니다.
module HelloWorldApp
{
private porttype ptPOReceive
{
oneway opPOReceive
{
HelloWorldApp.PurchaseOrder
}
}
private porttype ptPOSend
{
oneway opPOSend
{
HelloWorldApp.PurchaseOrder
}
}
private service HelloWorld
{
port implements HelloWorldApp.ptPOReceive poPOReceive;
port uses HelloWorldApp.ptPOSend poPOSend;
message HelloWorldApp.PurchaseOrder msgPO;
body ()
{
activate receive (poPOReceive.opPOReceive, msgPO);
send (poPOSend.opPOSend, msgPO);
}
}
}
이전 XLANG/s 프로그램에서 module
키워드(keyword) XLANG/s 프로그램의 컴파일 단위를 정의합니다. 프로그램에서 사용되는 모든 형식( 예: porttype, correlationsettype, servicelinktype 및 messagetype)은 이 수준에서 범위가 지정됩니다.
포트는 XLANG/s가 메시지를 보내거나 받을 수 있는 구문이며 포트에는 porttype이라는 정의된 형식이 있습니다. porttype 구문은 포트에서 사용할 수 있는 작업 컬렉션을 정의합니다. 이러한 작업은 포트를 통한 유효한 단일 메시지 교환을 정의합니다. porttype, messagetype, servicelinktype 또는 correlationsettype 구문을 정의할 때 XLANG/s 프로그램의 작성자가 기본적으로 복잡한 데이터 형식 정의를 만듭니다. 이러한 정의는 복잡한 데이터 형식이 다른 언어에서 수행하는 것과 동일한 장점이 있습니다. 데이터 형식에 구현된 개념을 더 높은 수준으로 추상화하고 데이터 형식을 쉽게 재사용할 수 있습니다.
이전 HelloWorldApp 모듈의 ptPOReceive 포트는 단방향 수신 포트 작업 opPOReceive로 정의됩니다. 서비스 HelloWorld 블록은 포트와 메시지 변수를 비롯하여 프로세스의 실제 구현과 프로세스에서 사용할 수 있는 모든 변수를 정의합니다. 이 블록 내의 처음 세 줄의 코드는 각각 poPOReceive 및 poPOSend 포트 변수와 메시지 msgPO 를 정의합니다. 본문에는 서비스에 대한 매개 변수와 실행 동작을 기술하는 코드가 포함됩니다. 중첩된 범위 블록에 정의되지 않는 한 모든 변수의 범위는 이 수준입니다. 활성화 수신인 receive 문은 poPOReceive.opPOReceive 포트에서 msgPO 메시지를 수신하고 오케스트레이션의 새 instance 만듭니다. 메시지를 받은 후에는 send 문에서 메시지를 송신 포트로 전달합니다. 이전 코드의 두 포트 선언에서 poPOReceive 는 구현 한정자를 사용하는 반면 poPOSend 는 사용 한정자를 사용합니다. implements 한정자는 런타임에 해당 포트를 통해 메시지를 받도록 지정합니다. uses 한정자는 런타임에 해당 포트를 통해 메시지를 보내도록 지정합니다.