시작하기 전에
WebSphere Message Broker에서는 두 개의 샘플 사용자 정의 노드, 즉 SwitchNode 및 TransformNode의 소스를 제공합니다. 현재 상태에서 이 노드를 사용하거나 수정할 수 있습니다.
분산 플랫폼의 브로커에 전개할 Java 노드는 z/OS에서 개발하지 마십시오. 그 이유는 z/OS의 Java 레벨이 분산 플랫폼의 Java 레벨과 호환 가능한 코드를 생성하지 않을 수도 있기 때문입니다.
Java 설정 패널이 표시됩니다.
MbInputNodeInterface를 구현하며 브로커의 CLASSPATH(또는 LIL 경로)에 들어 있는 모든 클래스는 브로커에 입력 노드로 등록됩니다. MbInputNodeInterface를 구현할 때는 이 클래스의 run 메소드 또한 구현해야 합니다. run 메소드는 메시지 플로우의 시작을 나타내고, 메시지를 구성하는 데이터를 포함하여, 플로우를 따라 메시지를 전달합니다. 지정된 스레드 모델에 따라 스레드가 사용 가능해지면 브로커는 run 메소드를 호출합니다.
예를 들어, 입력 노드 클래스를 선언하는 코드는 다음과 같습니다.
package com.ibm.jplugins; import com.ibm.broker.plugin.*; public class BasicInputNode extends MbInputNode implements MbInputNodeInterface { ...
노드가 인스턴스화될 때, 사용자 노드 클래스의 구성자가 호출됩니다. 이때 노드의 터미널을 작성하고, 속성의 디폴트 값을 초기화해야 합니다.
한 입력 노드에는 여러 출력 터미널이 연관되어 있지만 일반적으로 입력 터미널은 없습니다. 노드를 인스턴스화할 때 노드에 출력 터미널을 추가하려면 createOutputTerminal 메소드를 사용하십시오. 예를 들어, 세 가지 출력 터미널로 노드를 작성하는 코드는 다음과 같습니다.
public BasicInputNode() throws MbException { createOutputTerminal ("out"); createOutputTerminal ("failure"); createOutputTerminal ("catch"); setAttribute ("firstParserClassName","myParser"); attributeVariable = new String ("none"); }
노드 이름은 Workbench에 의해 식별되기 때문에 노드 이름을 선언해야 합니다. 모든 노드 이름은 "Node"로 끝나야 합니다. 노드 이름을 선언하는 메소드는 다음과 같습니다.
public static String getNodeName() { return "BasicInputNode"; }
package com.ibm.pluginsamples; public class BasicInputNode extends MbInputNode implements MbInputNodeInterface { ...
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); }
일반적으로 입력 노드 구현은 초기에 입력 메시지를 구문 분석하는 메시지 구문 분석기가 어떤 것인지 판별합니다. 예를 들어, 기본 MQInput 노드는 MQMD 구문 분석기가 MQMD 헤더를 구문 분석하도록 지시합니다. 사용자 정의 입력 노드는 디폴트로 포함된 다음 속성을 사용하여 적절한 헤더나 메시지 구문 분석기, 구문 분석이 제어되는 모드를 선택할 수 있습니다. 이 속성을 대체할 수 있습니다.
onDelete 메소드는 다음과 같이 구현할 수 있습니다.
public void onDelete() { // perform node cleanup if necessary }