시작하기 전에
WebSphere Message Broker에서는 두 개의 샘플 사용자 정의 노드, 즉 SwitchNode 및 TransformNode의 소스를 제공합니다. 현재 상태에서 이 노드를 사용하거나 수정할 수 있습니다.
개념 상, 메시지 처리 노드는 메시지를 특정 방식으로 처리하는 데 사용되고 출력 노드는 메시지를 비트스트림으로 출력하는 데 사용됩니다. 그러나, 메시지 처리 노드와 출력 노드는 코딩할 때 근본적인 공통점이 있습니다. 메시지 처리를 출력 노드 내에서 수행할 수 있으며 마찬가지로 메시지 처리 노드를 사용하여 메시지를 비트스트림으로 출력할 수 있습니다. 간단히 말해, 이 주제에서는 주로 메시지 처리 노드로서의 노드에 관해 언급하지만, 두 가지 유형의 노드의 기능성을 설명합니다.
Java 설정 패널이 표시됩니다.
MbNodeInterface를 구현하며 브로커의 CLASSPATH(또는 LIL 경로)에 들어 있는 모든 클래스는 브로커에 메시지 처리 노드로 등록됩니다. MbNodeInterface을 구현할 때는 이 클래스의 evaluate 메소드 또한 구현해야 합니다. 브로커는 플로우를 통과하는 각 메시지마다 evaluate 메소드를 호출합니다.
package com.ibm.jplugins; import com.ibm.broker.plugin.*; public class BasicNode extends MbNode implements MbNodeInterface
노드가 인스턴스화될 때, 사용자 노드 클래스의 구성자가 호출됩니다. 이때 노드의 터미널을 작성하고, 속성의 디폴트 값을 초기화해야 합니다.
한 메시지 처리 노드에는 여러 입력 터미널 및 출력 터미널이 연관되어 있습니다. 노드가 인스턴스화될 때 노드에 터미널을 추가할 때는 createInputTerminal 및 createOutputTerminal 메소드가 사용됩니다. 예를 들어, 하나의 입력 터미널 및 두 개의 출력 터미널로 노드를 작성하는 코드는 다음과 같습니다.
public MyNode() throws MbException { // create terminals here createInputTerminal ("in"); createOutputTerminal ("out"); createOutputTerminal ("failure"); }
노드 이름은 Workbench에 의해 식별되기 때문에 노드 이름을 선언해야 합니다. 모든 노드 이름은 "Node"로 끝나야 합니다. 노드 이름을 선언하는 메소드는 다음과 같습니다.
public static String getNodeName() { return "BasicNode"; }
package com.ibm.pluginsamples; public class BasicNode extends MbNode implements MbNodeInterface { ...
Java Bean 등록 정보와 같은 방식으로 노드 속성을 선언하면 됩니다. 속성의 getter 및 setter 메소드를 작성해야 하며, API 프레임워크는 Java Bean 검토 규칙을 사용하여 속성 이름을 예상합니다. 예를 들어, 다음의 두 메소드를 선언할 경우,
private String attributeVariable; public String getFirstAttribute() { return attributeVariable; } publc void setFirstAttribute(String value) { attributeVariable = value; }
브로커는 노드가 firstAttribute라는 속성을 가진다고 예상합니다. 이 이름은 내부 클래스 구성원 변수 이름이 아닌 get 또는 set 메소드 이름으로부터 도출됩니다. 속성은 문자열로만 표현될 수 있으므로, get 또는 set 메소드에서 모든 숫자 유형을 문자열로(부터) 변환해야 합니다. 예를 들어, 다음 메소드는 timeInSeconds라는 속성을 정의합니다.
int seconds; public String getTimeInSeconds() { return Integer.toString(seconds); } public void setTimeInSeconds(String value) { seconds = Integer.parseInt(value); }
앞에서 설명했듯이, 메시지 처리 또는 출력 노드에 대해 MbNodeInterface에 정의된 evaluate 메소드를 구현해야 합니다. 브로커는 메시지를 처리하기 위해 이 메소드를 호출합니다. 이 메소드는 노드의 모든 처리 기능을 제공합니다.
메시지 플로우 데이터, 즉, 메시지, 전역 환경, 로컬 환경, 예외 목록은 노드의 입력 터미널에서 수신됩니다.
onDelete 메소드는 다음과 같이 구현할 수 있습니다.
public void onDelete() { // perform node cleanup if necessary }