IBM®
메인 컨텐츠로 가기
    Korea [국가변경]    이용약관
 
 
   
        제품    서비스 & 솔루션    고객지원 & 다운로드    회원 서비스    
메인 컨텐츠로 가기

한국 developerWorks  >  WebSphere | 웹 개발  >

WebSphere Message Broker의 WebSphere sMash PHPCompute 노드 소개

developerWorks
문서 옵션

JavaScript가 필요한 문서 옵션은 디스플레이되지 않습니다.

영어원문

영어원문


제안 및 의견
피드백

난이도 : 중급

Ant Phillips, Software Developer, IBM
Andrew Coleman, Advisory Software Engineer, IBM

원문 게재일 : 2009 년 4 월 08 일
번역 게재일 : 2009 년 5 월 19 일

PHPCompute 노드는 PHP용 IBM® WebSphere® sMash 런타임이 포함된 IBM WebSphere Message Broker의 프로그래밍 가능한 새로운 범용 노드입니다. 이 기사에서는 WebSphere Message Broker에서 PHPCompute 노드를 사용하여 메시지를 변환 및 라우팅하는 PHP 스크립트를 작성하는 방법에 대해 설명합니다. 그런 다음 PHPCompute 노드를 더 많은 작업에 활용하여 문제를 해결하고 생산성을 높일 수 있습니다.

소개

IBM® WebSphere® Message Broker(이하 Message Broker)는 여러 하드웨어 및 소프트웨어 플랫폼의 다양한 애플리케이션 사이에서 비즈니스 정보를 전달하는 기능을 제공한다. Message Broker를 통과하는 데이터에 비즈니스 규칙을 적용하여 정보를 라우팅 및 변환할 수 있다.

IBM WebSphere sMash는 최신 웹 애플리케이션을 개발 및 실행하는 데 사용되는 애자일 웹 애플리케이션 플랫폼이다. WebSphere sMash는 Groovy, PHP, Java™, REST 서비스, 다양한 기능을 갖춘 Ajax 웹 사용자 인터페이스, 통합 매시업 등의 잘 알려진 웹 기술을 기반으로 하는 애플리케이션을 생성, 어셈블링 및 실행할 수 있는 단순한 환경을 제공한다.

IBM WebSphere sMash 및 IBM WebSphere sMash Developer Edition은 아주 유명한 Project Zero 인큐베이터 프로젝트를 통해 개발되었다. Project Zero는 WebSphere sMash를 위한 개발 커뮤니티로 개발자에게 애플리케이션 개발을 위한 무료 플랫폼을 제공하는 동시에 최신 빌드, 최신 기능 및 커뮤니티 지원도 지속적으로 제공할 것이다.

PHPCompute 노드는 PHP용 IBM WebSphere sMash 런타임이 포함된 Message Broker의 프로그래밍 가능한 새로운 범용 노드로서 PHP V5.2와 호환되는 PHP 언어로 구현되었다.

이 기사에서는 PHPCompute 노드를 설명한 후 Message Broker에서 메시지를 변환 및 라우팅하는 PHP 스크립트를 작성하는 방법을 보여 준다. 이 기사를 작성하던 당시 WebSphere Message Broker V6.1.0.3의 PHPCompute 노드는 Windows®에서만 사용할 수 있었다.




위로


PHP를 사용해야 하는 이유

WebSphere Message Broker는 메시지를 사용자 정의, 변환 및 라우팅하는 데 사용할 수 있는 다양한 노드 유형을 지원한다. 각 노드 유형은 다양한 사용자 스킬 세트와 관련된 특정 특성을 가지고 있다. 그렇다면 PHP를 사용해야 하는 이유가 무엇일까?

PHP는 웹 사이트를 구현할 때 가장 많이 사용되는 동적 스크립트 언어로 사용하기가 쉽고 배우는 데도 많이 시간이 걸리지 않으며 최소한의 코드로 좋은 결과를 얻을 수 있다. 또한 전세계적으로 3백만 명 이상의 개발자가 적극적으로 활동하고 있을 정도로 많이 사용되는 언어이기도 하다. 실제로 PHP는 Java, C 및 Visual Basic을 이어 네 번째로 많이 사용되는 프로그래밍 언어이다.

PHPCompute 노드는 변환 및 라우팅 스크립트를 PHP로 작성하는 기능과 메시지 작업을 수행하고 브로커와 통신하는 데 사용되는 API를 제공한다. 또한 단순하고 알기 쉬운 구문을 이용하여 메시지를 조작할 수 있다는 것도 알게 될 것이다. PHPCompute 노드는 메시지를 쿼리하는 데 필요한 전체 기능을 갖춘 XPath 1.0 엔진을 제공하며 메시지 라우팅을 위한 동적 출력 터미널을 생성하는 기능도 지원한다.

이 기사에서는 PHPCompute 노드를 사용하여 몇 가지 예제를 작성한다. 이러한 예제를 구현하기 위해 필요한 사항은 다음과 같다.

  • WebSphere Message Broker V6.1.0.3과 Message Broker Toolkit이 Windows 시스템에 설치되어 있어야 한다.
  • 예제를 전개할 수 있는 기본 Message Broker 구성 설정이 필요하다.

이 기사의 대상 독자는 Message Broker에 익숙하고 메시지 플로우 개발 및 전개와 관련된 업무를 수행하는 개발자이다.




위로


PHP 변환 작성하기

첫 번째 단계는 메시지 플로우를 작성하는 것이다. 이렇게 하려면 다음을 수행한다.

  1. Message Broker Toolkit에서 현재 퍼스펙티브를 Broker Application Development로 변경한다. File => New => Project를 클릭하고 Message Flow Project를 선택한다. 새 플로우 프로젝트의 이름을 입력하고 Finish를 클릭한다. 현재 작업 공간에 새 프로젝트가 생성된다.
  2. 프로젝트를 마우스 오른쪽 단추로 클릭하고 New => Message Flow를 선택한다. 메시지 플로우의 이름을 입력하고 Finish를 클릭한다.
  3. 도구 팔레트에서 Transformation 범주를 클릭한다. PHPCompute 노드를 끌어서 메시지 플로우에 놓는다(그림 1).

    그림 1. 메시지 플로우에 PHPCompute 노드 추가하기
    그림 1. 메시지 플로우에 PHPCompute 노드 추가하기

  4. 플로우를 마우스 오른쪽 단추로 클릭한 다음 New => Other를 선택한다. General => File을 선택하고 PHP 스크립트의 이름(예: Transform.php)을 입력한다.
  5. Listing 1의 샘플 PHP 스크립트를 복사하여 편집기에 붙여넣고 파일을 저장한다.

    Listing 1
    <?php
    
    class Transform {
    
    /**
     * @MessageBrokerCopyTransform
     */
    function evaluate($output_assembly, $input_assembly) {
         	$output_assembly->XMLNSC->document->
    chapter[1]["title"] = "Overview";         
        }
    }
    
    ?>

    클래스 이름은 PHP 스크립트의 이름과 같아야 한다. 이 예제의 경우, PHP 파일 이름은 transform.php이고 클래스 이름은 Transform(대소문자 구분 안 함)이다.
  6. 그런 다음 일부 데이터를 수신할 메시지 플로우를 구성한다. 이 예제에서는 단순한 구조를 유지하기 위해 파일 입력/출력 노드를 사용한다. 메시지 플로우 편집기에서 File Input 노드를 플로우에 추가한다. File Input 노드의 출력 터미널을 PHP 노드의 입력 터미널에 연결해야 한다(그림 2).

    그림 2. 메시지 플로우에 File Input 노드 추가하기
    그림 2. 메시지 플로우에 File Input 노드 추가하기

  7. File Input 노드의 Input directory와 File name을 지정해야 한다. 이 노드는 지정한 디렉토리를 몇 초 단위로 검사하여 일치하는 이름을 가진 파일이 있는지 확인한다. 일치하는 파일이 나타나면 입력 노드가 파일을 읽은 후 파일의 컨텐츠를 메시지에 담아서 PHPCompute 노드로 보낸다.
  8. Input Message Parsing 탭에서 구문 분석기를 XMLNSC로 변경한다(그림 3).

    그림 3. File Input 노드의 구문 분석기 변경하기
    그림 3. File Input 노드의 구문 분석기 변경하기

  9. 이제 File Output 노드를 메시지 플로우에 추가한다. PHPCompute 노드의 출력 터미널을 File Output 노드의 입력 터미널에 연결한다(그림 4).

    그림 4. 메시지 플로우에 File Output 노드 추가하기
    그림 4. 메시지 플로우에 File Output 노드 추가하기

  10. File Output 노드의 Directory와 File name을 지정해야 한다. 이 노드는 메시지를 수신한 후 메시지의 컨텐츠를 파일에 쓴다.

이제 PHP 변환 메시지 플로우의 구성이 완료되었다. 다음 단계에서는 BAR(Broker Archive) 파일을 작성하고 플로우를 기본 도메인에 전개한다.

  1. 프로젝트를 마우스 오른쪽 단추로 클릭하고 New => Message Broker Archive를 선택한다. 아카이브 파일의 이름을 입력하고 OK를 클릭한다.
  2. BAR 파일 편집기(그림 5)에서 PHP 변환 및 메시지 플로우 항목을 선택한다. Build Broker Archive를 클릭한다. 빌드가 성공적으로 완료되면 OK를 클릭한다.

    그림 5. Message Broker 아카이브 구성하기
    그림 5. Message Broker 아카이브 구성하기

  3. 이제 Message Broker 아카이브를 기본 도메인에 전개할 차례이다. 퍼스펙티브를 Message Broker Administration으로 변경한다. Message Broker 아카이브 파일을 끌어서 Domains 보기의 default 실행 그룹에 놓는다. 잠시 기다리면 그림 6과 같은 화면이 표시되어야 한다.

    그림 6. Message Broker 아카이브 전개하기
    그림 6. Message Broker 아카이브 전개하기

지금까지 PHP 변환 메시지 플로우를 작성한 다음 로컬 기본 도메인에 전개하는 작업을 성공적으로 수행했다. 이제 마지막으로 메시지 플로우를 테스트할 단계이다.

  1. 텍스트 편집기에서 "Transform.txt"라는 텍스트 파일을 생성한 후 Listing 2의 샘플 XML 스크립트를 이 파일에 붙여넣는다. 그런 다음 이 파일을 File Input 노드에서 모니터링하는 디렉토리와는 다른 위치에 저장한다.

    Listing 2
    <document>
        <chapter title="Introduction">
    		Some text containing the introduction!
        </chapter>
        <chapter title="Beginnings">
    		And more text for the next section here!
        </chapter>

  2. Windows 탐색기에서 파일을 끌어서(명령행에서 파일을 복사하여) File Input 노드가 모니터링하고 있는 디렉토리(C:\Article)에 저장한다. 잠시 기다리면 Transform.txt 파일이 삭제된 후 Listing 3의 텍스트가 포함된 "Transform.out"이라는 파일이 표시되어야 한다.

    Listing 3
    <document>
        <chapter title="Introduction">
    		Some text containing the introduction!
        </chapter>
        <chapter title="Overview">
    		And more text for the next section here!
        </chapter>

성공! PHP 스크립트가 File Input 노드에서 전달한 메시지를 처리했다. 변환의 출력이 File Output 노드로 전달된 후 파일에 저장되었다. Listing 3에서 볼 수 있듯이 텍스트에 있는 두 번째 장의 제목이 출력 메시지에서 변경되었다.




위로


PHP로 메시지 변환하기

모든 PHP 코드는 <?php 및 ?> 태그 사이에 있어야 한다. 이들 태그 바깥쪽에 있는 내용은 실행 그룹의 표준 출력 스트림에 복사되며 입력 또는 출력 메시지에 영향을 주지 않는다. 또한 PHP는 기본적으로 상태 비저장 방식의 언어이므로 각 메시지가 변환된 후에는 PHP 런타임이 자체적으로 다시 설정된다.

다음 섹션에서는 PHPCompute 노드의 주요 기능을 사용하는 방법에 대해 설명한다.

클래스 평가 또는 전역 스크립트

두 가지 PHP 스크립트 유형이 지원된다. 앞에서 사용한 변환은 클래스에서 정의했었다. 하지만 변환은 클래스 정의를 사용하지 않는 전역 스크립트로 코딩할 수도 있다. Listing 4의 코드는 완전히 동일한 메시지 변환을 수행한다.


Listing 4
<?php

$output_message  = new MbsMessage($assembly[MB_MESSAGE]);

$output_message->XMLNSC->document->
chapter[1]["title"] = "Overview";         
$output_assembly = new MbsMessageAssembly(
$assembly, $output_message);

$output_assembly->propagate('out');

?>

클래스를 사용하는 버전은 어노테이션을 사용하기 때문에 비교적 간단하고 짧다. 어노테이션은 클래스를 사용하여 메시지를 변환할 경우에만 사용할 수 있다. 다른 여러 가지 어노테이션을 사용하여 메시지 라우팅 및 복사를 제어할 수 있다. 클래스 정의는 좀 더 구조화된 방법을 제공하는 반면 전역 스크립트를 사용하면 좀 더 쉽고 빠르게 PHP 코드를 작성할 수 있다.

메시지 트리 탐색하기

많은 변환 및 라우팅 스크립트에서는 메시지 트리를 탐색해야 한다. PHPCompute 노드에서는 경로 연산자 구문(->)을 사용하여 이 작업을 직관적인 방법으로 쉽게 수행할 수 있다. MbsElement 오브젝트는 메시지 트리의 각 요소를 나타낸다. 다음 PHP 예제에서는 경로 구문을 사용하여 요소 트리를 탐색하는 방법을 볼 수 있다.

$output_message->XMLNSC->document->chapter[1]["title"]

MbsElement의 메소드를 사용하여 메시지 트리를 탐색할 수도 있다(Listing 5).


Listing 5
$xml = $output_message->getChild("XMLNSC");
$document = $xml->getChild("document");
$chapter = $document->getChild("chapter", 1);
$title = $chapter->getAttribute("title");

MbsElement에는 메시지 트리를 탐색하는 여러 가지 메소드가 있다(Figure 7).


그림 7. MbsElement 메소드
그림 7. MbsElement 메소드

이름으로 하위 요소를 가져오려면(선택적 occurrence 사용) 다음 구문을 사용한다.

getChild(string $name [, int $occurrence])

모든 하위 항목이 포함된 배열을 가져오려면(선택적 namespace 사용) 다음 구문을 사용한다.

getChildren([string $namespace])

MbsElement는 트리의 논리적 요소를 나타내며 다음과 같은 메소드도 가지고 있다.


Listing 6
getName() 	// String name of the current element
getValue()	// Value of parser determined type 
getNamespace() // Namespace (XML parsers only)
getType()		// Parser specific element type (integer)

메시지 트리에 요소 생성하기

경로 구문은 요소를 생성할 수 있을 뿐 아니라 기존 메시지 트리를 탐색할 수도 있다.

  1. PHP 스크립트를 Listing 7의 코드로 업데이트한 후 브로커 도메인에 다시 전개한다.

    Listing 7
    <?php
    
    class Transform {
    
    /**
     * @MessageBrokerCopyTransform
     */
    function evaluate($output_assembly, $input_assembly) {
         	$output_assembly->XMLNSC->document->
    introduction = "Some introduction here!";         
        }
    }
    
    ?>

  2. 입력 파일을 Test 디렉토리에 복사한다. 출력 파일의 내용은 다음과 같다.

    Listing 8
    <document>
        <chapter title="Introduction">
    		Some text containing the introduction!
        </chapter>
        <chapter title="Beginnings">
    		And more text for the next section here!
        </chapter>
        <introduction>Some introduction here!</introduction>
    </document>

입력 파일에는 document 요소 아래에 introduction 요소가 없다. 이 요소는 메시지 트리를 탐색할 때 자동으로 생성된다.

반복 요소

이 기사에서 사용하는 입력 파일을 비롯한 많은 문서에는 반복 요소가 있다. PHP에서는 이러한 요소를 어떻게 탐색하는가? 이 기사에서 사용하는 입력 파일의 경우에는 chapter 요소가 반복 요소이다. PHPCompute 노드는 반복 요소 작업을 쉽게 수행할 수 있도록 다음과 같은 두 가지 기능을 지원한다.

  • 첫 번째 기능은 foreach 키워드를 사용하여 반복 요소 전체를 반복한다.
  • 두 번째 기능은 [] 구문을 사용하여 반복 요소를 생성한다.

Listing 9
<?php

class Transform {

	/**
	 * @MessageBrokerCopyTransform
	 */
	function evaluate($output_assembly, $input_assembly) {
		foreach ($output_assembly->XMLNSC->
document->chapter as $element) {
				$contents .= $element->getValue();
		}
     	$output_assembly->XMLNSC->document->
chapter[] = $contents;         
    }
}

?>

Listing 9의 입력 파일을 Test 디렉토리에 복사한다. 출력 파일의 내용은 다음과 같다.


Listing 10
<document>
    <chapter title="Introduction">
		Some text containing the introduction!
    </chapter>
    <chapter title="Beginnings">
		And more text for the next section here!
    </chapter>
    <chapter>
		Some text containing the introduction!
    
		And more text for the next section here!
    </chapter>
</document>

이 스크립트는 PHP foreach 명령문을 사용하여 입력 메시지에 있는 모든 chapter 요소를 반복한다. 그리고 각 chapter 요소의 값은 $contents 변수에 추가된다. [] 구문은 PHPCompute 노드에게 메시지 트리에 있는 기존 chapter 요소를 업데이트하는 대신 요소를 추가하도록 지시한다.

배열을 사용하여 반복 요소 생성하기

PHP에서 배열은 다양한 용도로 사용할 수 있는 유연한 데이터 구조이기 때문에 많이 사용된다. 다음과 같이 배열을 사용하여 반복 구조를 생성할 수 있다.


Listing 11
<?php

class Transform {

	/**
	 * @MessageBrokerCopyTransform
	 */
	function evaluate($output_assembly, $input_assembly) {
		$contents = array("Hello World!", 
"More contents here!");
     	$output_assembly->XMLNSC->
document->chapter[] = $contents;         
    }
}

?>

Listing 11의 입력 파일을 Test 디렉토리에 복사한다. 출력 파일의 내용은 다음과 같다.


Listing 12
<document>
    <chapter title="Introduction">
		Some text containing the introduction!
    </chapter>
    <chapter title="Beginnings">
		And more text for the next section here!
    </chapter>
    <chapter>Hello World!</chapter>
    <chapter>More contents here!</chapter>
</document>

이 스크립트는 chapter 요소의 컨텐츠가 포함된 배열을 생성한다. 그런 다음 이 배열은 메시지 트리의 반복 chapter 요소에 할당된다. PHPCompute 노드는 배열의 각 값에 대해 새 chapter 요소를 생성한다.

배열을 사용하여 요소 생성하기

배열을 사용하여 임의의 메시지 트리 구조를 생성할 수 있다.


Listing 13
<?php

class Transform {

	/**
	 * @MessageBrokerCopyTransform
	 */
	function evaluate($output_assembly, $input_assembly) {
		$contents = array("created" => "03-02-2009",
"author" => "Ant", "location" => "Hursley");
     	$output_assembly->XMLNSC->
document->about = $contents;         
    }
}

?>

Listing 13의 입력 파일을 Test 디렉토리에 복사한다. 출력 파일의 내용은 다음과 같다.


Listing 14
<document>
    <chapter title="Introduction">
		Some text containing the introduction!
    </chapter>
    <chapter title="Beginnings">
		And more text for the next section here!
    </chapter>
    <about>
        <created>03-02-2009</created>
        <author>Ant</author>
        <location>Hursley</location>
    </about>
</document>

이 스크립트에서는 [] 구문을 사용하지 않고 반복 요소를 생성한다. PHPCompute 노드는 배열의 각 키 및 값에 대해 메시지 트리 요소를 생성한다.

중첩 배열을 사용하여 복합 메시지 생성하기

배열을 다른 배열을 재귀적으로 포함하여 복합 메시지 트리를 생성할 수 있다.


Listing 15
<?php

class Transform {

	/**
	 * @MessageBrokerCopyTransform
	 */
	function evaluate($output_assembly, $input_assembly) {
		$contents = array(
"created" => "03-02-2009",
"location" => "Hursley",
			"author" => array(
"name" => "Ant", 
				"resident" => "UK", 
"employer" => "IBM")
);
			
     	$output_assembly->XMLNSC->
document->about = $contents;         
    }
}

?>

Listing 15의 입력 파일을 Test 디렉토리에 복사한다. 출력 파일의 내용은 다음과 같다.


Listing 16
<document>
    <chapter title="Introduction">
		Some text containing the introduction!
    </chapter>
    <chapter title="Beginnings">
		And more text for the next section here!
    </chapter>
    <about>
        <created>03-02-2009</created>
        <location>Hursley</location>
        <author>
            <name>Ant</name>
            <resident>UK</resident>
            <employer>IBM</employer>
        </author>
    </about>
</document>

요소를 생성 및 첨부하기

메시지 트리 요소를 별도로 생성한 후 메시지 트리에 첨부할 수 있다. 이 방법을 사용하면 도우미 메소드 또는 함수에 생성 코드를 배치하여 메시지를 쉽게 생성할 수 있다. 메소드 또는 함수에서 메시지를 생성하여 리턴한다. 그런 다음 호출자는 메시지 트리의 원하는 위치에 메시지를 첨부한다.


Listing 17
<?php

class Transform {

	/**
	 * @MessageBrokerCopyTransform
	 */
	function evaluate($output_assembly, $input_assembly) {
     	$output_assembly->XMLNSC->
document->about = $this->createAbout();         
    }

	/**
	 * Creates an about message element.
	 */    
	private function createAbout() {
$element = new MbsElement();
    		$element->created = "03-02-2009";
    		$element->location = "Hursley";
	    
	    	$author = new MbsElement();	    	
	    	$author->name = "Ant";
	    	$author->resident = "UK";
	    	$author->employer = "IBM";
	    
		$element->author = $author;
    		return $element;
  	}    
}

?>

Listing 17의 입력 파일을 Test 디렉토리에 복사한다. 출력 파일의 내용은 다음과 같다.


Listing 18
<document>
    <chapter title="Introduction">
		Some text containing the introduction!
    </chapter>
    <chapter title="Beginnings">
		And more text for the next section here!
    </chapter>
    <about>
        <created>03-02-2009</created>
        <location>Hursley</location>
        <author>
            <name>Ant</name>
            <resident>UK</resident>
            <employer>IBM</employer>
        </author>
    </about>
</document>

이 방법을 사용하면 클래스의 도우미 메소드가 나중에 출력 메시지에 할당되는 요소를 생성하므로 복합 변환 코드를 단순화할 수 있다.

XML 속성

XML은 메시지 플로우에 일반적으로 사용되는 메시지 형식이다. 다른 메시지 트리 형식과는 달리 XML 메시지 트리에는 속성이 있다. XML 속성은 키 이름 조회를 가진 요소에 대한 배열처럼 작동한다. Listing 19의 스크립트는 첫 번째 chapter의 title을 두 번째 chapter와 일치하도록 설정한다. 또한 이 예제는 메시지 트리의 중간 document 요소($document)를 참조한다.


Listing 19
<?php

class Transform {

	/**
	 * @MessageBrokerCopyTransform
	 */
	function evaluate($output_assembly, $input_assembly) {
		$document = $output_assembly->XMLNSC->document;
     	$document->chapter[0]["title"] = 
     		$document->chapter[1]["title"];
    }
}

?>




위로


어노테이션

어노테이션은 evaluate 메소드가 호출되는 컨텍스트를 제어한다. 또한 제공되지 않을 경우 사용자가 작성해야 하는 코드인 상용구 코드의 양도 줄여 준다.


Listing 20
class Transform {

	/**
	 * @MessageBrokerCopyTransform
	 */
	function evaluate($output_assembly) { }
}

MessageBrokerCopyTransform 어노테이션은 PHPCompute 노드에게 입력 메시지를 복사한 후 복사된 메시지를 evaluate 메소드에게 전달하도록 지시한다. 이외에도 메시지 변환 옵션을 지정하는 여러 가지 어노테이션이 있다.

Message Broker에서 입력 메시지 및 어셈블리는 항상 읽기 전용이다. 따라서 변환된 메시지를 빌드하려면 새 메시지를 생성해야 한다. 메시지 어셈블리의 경우에는 새 오브젝트가 입력 메시지 어셈블리의 새 출력 메시지 및 기타 (환경) 트리를 캡슐화해야 한다.

MessageBrokerSimpleTransform 어노테이션은 새 메시지 어셈블리와 빈 출력 메시지를 생성한다. 입력 및 출력 어셈블리가 evaluate 메소드에게 전달된다. 출력 어셈블리에는 입력 어셈블리(및 기타 메시지 어셈블리 트리)의 로컬 환경 사본이 있다.

로컬 환경은 메시지 어셈블리에 있는 또 하나의 논리적 트리이다. 메시지에 대한 정보의 스크래치 패드이지만 메시지 자체의 일부는 아니다. 이 환경은 여러 Message Broker 노드에 의해 채워지고 액세스되지만 사용자가 수정할 수도 있다. 로컬 환경은 수정하기 전에 복사해 두는 것이 좋다. MessageBrokerLocalEnvironmentTransform이 바로 이 작업을 수행한다. 출력 메시지 어셈블리에 로컬 환경 트리의 사본이 있다.

기본적으로 출력 메시지 어셈블리는 evaluate 메소드가 실행된 후 출력 터미널로 전달된다. 사용자는 Message Broker Toolkit에서 PHPCompute 노드에 대한 새로운 동적 출력 터미널을 생성할 수 있다. 이 PHP 스크립트는 evaluate 메소드에서 문자열을 리턴하여 PHPCompute 노드에게 특정 터미널로 라우팅하도록 지시한다. 또한 스크립트의 evaluate 메소드에서 MessageBrokerRouter 어노테이션을 선언해야 한다.

문자열이 리턴되지 않을 경우에는 메시지가 터미널로 전파되지 않는다. 대신 스크립트에서 출력 메시지 어셈블리 오브젝트의 propagate 메소드를 호출하여 수동으로 어셈블리를 터미널로 전파할 수 있다(터미널 이름을 매개변수로 전달함). 이 방법은 다중 전파 유스 케이스(예: 메시지 분석)에 유용하다. Listing 21에서는 로컬 환경 메시지 트리에 대한 업데이트를 보여 준다.


Listing 21
<?php

class Transform {

	/**
   	 * @MessageBrokerCopyTransform
   	 * @MessageBrokerLocalEnvironmentTransform
	 */
	function evaluate($output_assembly, $input_assembly) {
    		$output_assembly->XMLNSC->document->filename =
$input_assembly[MB_LOCAL_ENVIRONMENT]->
File->Name;
    }
}

?>

Listing 21의 입력 파일을 Test 디렉토리에 복사한다. 출력 파일의 내용은 다음과 같다.


Listing 22
<document>
    <chapter title="Introduction">
		Some text containing the introduction!
    </chapter>
    <chapter title="Beginnings">
		And more text for the next section here!
    </chapter>
    <filename>Transform.txt</filename>
</document>

이 스크립트는 MessageBrokerCopyTransform 어노테이션과 MessageBrokerLocalEnvironmentTransform 어노테이션을 결합한다. 출력 메시지에는 File Input 노드에 의해 채워진 파일 이름이 있다. 로컬 환경 어노테이션은 MessageBrokerSimpleTransform 어노테이션과도 결합될 수 있다.




위로


메시지 어셈블리

메시지 어셈블리에는 네 가지 오브젝트가 있다.

  • 메시지: 비즈니스 데이터
  • 로컬 환경: 노드 및 메시지 메타데이터
  • 전역 환경: 일반 스크래치 패드
  • 예외 목록: 오류 처리에 사용되는 오류 정보

이러한 오브젝트는 배열 표기법을 사용하여 액세스할 수 있다.


Listing 23
$input[MB_MESSAGE] 
$input[MB_LOCAL_ENVIRONMENT]
$input[MB_GLOBAL_ENVIRONMENT]
$input[MB_EXCEPTION_LIST]

$input[MB_MESSAGE]은 서브스크립트가 없다는 점을 제외하고 $input과 동일하다. MB_MESSAGE 서브스크립트를 사용하여 앞의 예제를 작성할 수 있다(Listing 24).


Listing 24
<?php

class Transform {

	/**
   	 * @MessageBrokerCopyTransform
   	 * @MessageBrokerLocalEnvironmentTransform
	 */
	function evaluate($output_assembly, $input_assembly) {
    		$output_assembly[MB_MESSAGE]->
XMLNSC->document->filename =
$input_assembly[MB_LOCAL_ENVIRONMENT]->
File->Name;
    }
}

?>




위로


요약

이 기사에서 설명한 단계에서는 다음과 같은 작업을 수행하였다.

  • PHPCompute 노드가 포함된 메시지 플로우를 작성한다.
  • PHP 메시지 플로우를 로컬 Message Broker 도메인에 전개한다.
  • 노드의 기능, 특히 다음과 같은 기능을 제공하는 여러 PHP 스크립트를 실행한다.
    • 변환 클래스 정의하기
    • 메시지 트리 탐색하기
    • 메시지 트리에 요소 생성하기
    • 반복 요소 처리하기
    • XML 속성에 액세스하여 업데이트하기
    • 어노테이션을 사용하여 메시지 처리 동작 제어하기

이러한 스킬은 PHPCompute 노드를 사용하여 다양한 변환 및 라우팅 문제점을 해결하는 작업의 좋은 출발점이다. 또한 PHP 스킬이 향상되면 PHP 언어로 메시지 플로우를 개발하여 높은 생산성을 얻을 수 있다.

IBM WebSphere Message Broker의 PHPCompute 노드는 매우 다양한 분야에서 활용할 수 있다. 이 기사에서 다루지 않은 메시지 분석, XPATH, 레이블로 라우팅, PHP/Java Bridge를 통한 Java 통합 등을 포함한 여러 가지 관련 주제도 살펴보면 많은 도움을 받을 수 있다. PHPCompute 노드 및 관련 주제에 대한 자세한 정보를 WebSphere Message Broker v6.1.0.3 문서 라이브러리에서 볼 수 있다.

WebSphere sMash에서의 PHP 및 스크립트 작업에 대한 자세한 정보는 Project Zero 웹 사이트의 WebSphere sMash DE Documentation에서 볼 수 있으며 developerWorks의 웹 개발PHP 영역에서 포괄적인 PHP 프로젝트 리소스를 볼 수 있다.



참고자료

교육

제품 및 기술 얻기


필자소개

Ant Phillips는 영국의 허슬리에 있는 IBM Java Technology Centre에서 근무하는 소프트웨어 개발자이다. 현재는 동적 웹 애플리케이션을 생성하기 위한 단순한 환경인 WebSphere sMash에 관한 업무를 수행하고 있다. IBM 입사 전에는 영국 뉴버리에 있는 신생 기업의 기술 팀장이었다. 그 이전에는 Sony® 및 Microsoft®에서 근무하였으며 도쿄와 시애틀을 비롯한 여러 지역을 방문했다. 여가 시간에는 스포츠를 즐기거나 부인 및 두 아이와 함께 여행한다.


Andrew Coleman은 영국에 있는 IBM Hursley Software Lab에서 WebSphere Message Broker Development Team 소속의 Advisory Software Engineer로 활동하고 있다. 8년 동안 Java UDN API, JavaCompute 노드 및 Collector 노드를 비롯한 브로커 개발의 주요 분야를 맡고 있다.




기사에 대한 평가


보다 나은 서비스를 제공하기 위함이오니 잠시 짬을 내어 이 양식을 제출하여 주십시오.



 


 


 


이 문서 북마킹 하기

mar.gar.in mar.gar.in naver naver eolin eolin del.icio.us del.icio.us





위로


developerWorks 콘텐트를 다른 사이트에 전재하기:
developerWorks 콘텐트에 대한 저작권은 IBM에 있습니다. IBM의 서면 허가나 원본 저자의 허락이 없이는 전재를 금합니다. 저희 콘텐트를 전재하시려면 IBM developerWorks 담당자 에게 문의하십시오.
    IBM 소개 개인정보 보호정책 문의