JavaCompute 노드를 사용하여 글로벌 캐시에 액세스

노드를 사용하여 JavaCompute 노드를 사용하여 글로벌 캐시에 있는 맵과 상호 작용합니다.

시작하기 전에

맵핑 노드를 사용하여 글로벌 캐시에 액세스할 수도 있습니다. 맵핑 노드를 사용하여 글로벌 캐시에 액세스를 참조하십시오.

  • 데이터 캐싱 개요에서 개념 정보를 읽어보세요.
  • 글로벌 캐시 또는 외부 눈금을 사용할 수 있는지 확인하십시오. 캐시는 기본적으로 사용 불가능합니다. 캐시를 사용하려면 통합 노드 수준 캐시 정책을 선택합니다( 임베디드 글로벌 캐시 구성하기 참조).
  • 외부 그리드에 연결하는 경우 연결 작성 방법을 정의하는 구성 가능 서비스를 작성하십시오. 자세한 내용은 mqsicreateconfigurableservice 명령(더 이상 사용되지 않음 )을 참조하세요.
  • 글로벌 캐시와 함께 사용자 고유의 Java™ 클래스를 사용하려면 Java 클래스를 포함하는 JAR 파일을 공유 클래스 디렉토리 중 하나에 두십시오. 이러한 Java 클래스는 글로벌 캐시에 참여하는 모든 통합 노드 및 통합 서버에서 사용할 수 있어야 합니다. 공유 클래스 디렉터리에 대한 자세한 내용은 Java 공유 클래스 로더를 참조하세요.

태스크 정보

JavaCompute 노드를 사용하여 글로벌 맵에 데이터를 저장할 수 있습니다. 그런 다음 처리 또는 라우팅을 위해 글로벌 캐시에서 데이터를 가져올 수 있는 다른 JavaCompute 노드를 작성할 수 있습니다. 노드는 JavaCompute 노드는 MbGlobalMap 객체를 사용하여 글로벌 캐시 또는 외부 그리드에 액세스합니다. 이 클래스는 맵을 가져오거나 맵에 데이터를 넣거나 가져오기 위해 사용할 수 있습니다. 맵을 정확하게 작성할 수는 없지만 존재하지 않는 맵을 가져오는 경우 맵이 자동으로 작성됩니다. 외부 눈금에서 글로벌 맵을 가져오는 경우 getGlobalMap 메소드는 눈금에 대한 연결에 존재하지 않는 경우 연결을 작성합니다.

캐시와의 상호작용은 메시지 플로우 트랜잭션 외부에서 수행되며 즉시 커미트됩니다. 캐시와 상호작용하는 노드의 다운스트림에서 예외가 전달되는 경우에는 캐시 상호작용이 롤백되지 않습니다.

다음 단계는 하나의 메시지 플로우가 맵에 데이터를 추가하고 다른 플로우가 해당 맵에서 데이터를 가져오는 방법을 설명합니다.

프로시저

  1. JavaCompute 노드를 포함하는 메시지 플로우를 작성하십시오.
    MQOutput 노드 앞이나 뒤에 JavaCompute 노드를 배치할 수 있습니다. 다음 예에서 JavaCompute 노드는 JavaCompute 노드가 출력 메시지의 메시지 ID를 사용할 수 있도록 MQOutput 노드 뒤에 배치됩니다.
    이 그래픽은 JavaCompute 노드에 연결된 MQOutput 노드에 연결된 MQInput 노드를 표시합니다.
  2. JavaCompute 노드를 두 번 누르십시오.
    새 Java Compute 노드 클래스 마법사가 열립니다.
  3. Java 계산 노드 클래스 분할창에서 적절한 정보를 제공한 후 다음을 클릭하십시오.
    다음을 클릭하여 기본값을 승인할 수 있습니다.
  4. Java 계산 노드 클래스 템플리트 분할창에서 시나리오에 적합한 템플리트를 선택한 후 완료를 클릭하십시오.

    템플리트 Java 파일이 편집기에서 열리고 사용자 고유의 코드를 추가할 수 있는 위치를 표시합니다.

  5. 임베드된 캐시에서 맵을 가져오거나 맵을 작성하려면(맵이 없는 경우) 다음 예와 같이 MbGlobalMap 오브젝트를 추가하십시오.
    그만큼 MbGlobalMap 객체는 Java Plugin API 문서에도 설명되어 있습니다.
    MbGlobalMap globalMap = MbGlobalMap.getGlobalMap("MyMap");
    이 예제에서는 "MyMap" 라는 맵을 가져옵니다. 이 맵이 없으면 맵이 작성됩니다. 또는 임베드된 캐시를 사용하는 경우 다음 예와 같이 맵 이름을 지정하지 않고 기본 맵을 사용할 수 있습니다. 외부 눈금에 연결하는 경우에는 기본 맵이 존재하지 않습니다. 외부 그리드에서 올바른 맵 이름을 지정해야 합니다.
    MbGlobalMap globalMap = MbGlobalMap.getGlobalMap();
    통합 노드에 사용하도록 예약된 SYSTEM.BROKER로 시작되는 이름을 제외한 모든 맵 이름이 허용됩니다. 기본 맵의 이름은 SYSTEM.BROKER.DEFAULTMAP 입니다. 이 지도를 사용하거나 지울 수 있습니다.
    외부 눈금에서 맵을 가져오려면 외부 눈금의 맵 이름과 눈금에 연결하는 데 사용되는 구성 가능 서비스의 이름을 지정하여 MbGlobalMap 오브젝트를 추가하십시오.
    MbGlobalMap xc10Map = MbGlobalMap.getGlobalMap("MyMap.LUT","xc10Connection");
    이 예에서 "MyMap.LUT" 맵은 XC10 어플라이언스의 외부 눈금에 있습니다. 눈금에 연결하는 데 사용되는 구성 가능 서비스를 "xc10Connection"이라고 합니다.
  6. 선택사항: 데이터가 자동으로 제거되기 전에 글로벌 캐시에 남아 있는 시간 (초) 을 지정하십시오.

    이 시간을 실행 시간이라고 하며 해당 맵 입력 항목이 마지막으로 업데이트되는 시점부터 계산됩니다. 이 시간은 MbGlobalMap 오브젝트를 가져올 때 지정합니다. 값은 해당 MbGlobalMap 오브젝트를 사용하여 작성되는 모든 캐시 입력 항목에 적용됩니다. 자세한 지침은 JavaCompute 노드를 사용하여 글로벌 캐시에 데이터가 유지되는 기간 지정하기를 참조하세요.

7단계에 설명된 대로 put, update 또는 upsert 방법을 사용하여 지도의 데이터를 편집할 수 있습니다.

  1. 다음 방법 중 하나를 사용하여 지도의 데이터를 편집합니다:
    • put: 새 키-값 쌍을 추가하고 키가 이미 존재하는 경우 오류를 발생시킵니다. 맵에 데이터를 넣으려면 다음 예시와 같이 맵에 키와 값 쌍을 만들어야 합니다:
      globalMap.put(key, val);

      키 및 값의 경우 Java 기본 유형 및 문자열이 지원됩니다. Java 오브젝트는 값으로 지원됩니다. 임베드된 눈금의 경우에만 키가 기본요소 또는 문자열의 배열이 될 수도 있습니다. (글로벌 캐시와 함께 사용자 고유의 Java 클래스를 사용하려면 Java 클래스를 포함하는 JAR 파일을 공유 클래스 디렉토리 중 하나에 넣으십시오.)

    • update: 기존 키-값 쌍의 값을 업데이트하거나 키가 존재하지 않는 경우 오류를 발생시킵니다.
      globalMap.update(key, val);
    • upsert: 새 키-값 쌍을 추가하거나 기존 키-값 쌍이 있는 경우 업데이트합니다. upsert 메서드는 무효화되므로 두 시나리오 모두 오류가 발생하지 않습니다.
      globalMap.upsert(key, val);

    Websphere eXtreme Scale 지원 캐시에는 업서트를 사용할 수 없습니다. Redis, 임베디드 및 로컬 지원 캐시에서만 사용할 수 있습니다.

  2. 메시지 플로우를 저장하십시오.
  3. 다른 메시지 플로우에서 저장된 데이터에 액세스하려면 JavaCompute 노드를 포함하는 플로우를 작성하십시오.
    예를 들어, 다음 메시지 플로우에는 맵에서 적절한 정보를 검색한 후 MQReply 노드를 통해 응답 메시지를 송신하는 JavaCompute 노드가 포함되어 있습니다.
    그래픽은 MQReply 노드에 연결된 JavaCompute 노드에 연결된 MQInput 노드를 표시합니다.
  4. 2, 3및 4단계를 반복하여 새 JavaCompute 노드에 대한 Java 파일을 작성하십시오.
  5. MbGlobalMap 오브젝트를 사용하여 5단계에서 작성한 맵을 가져온 다음 6단계에서 맵에 추가한 데이터를 가져오십시오. 예를 들어 검색하는 데이터가 문자열이라는 사실을 알고 있는 경우 다음 예와 같이 데이터를 가져올 때 문자열을 지정하십시오.
    MbGlobalMap globalMap = MbGlobalMap.getGlobalMap("MyMap");
    ...
    String val = (String)globalMap.get(key);
    다음 예는 외부 눈금에 있는 맵에 추가한 데이터를 가져오는 방법을 보여줍니다.
    MbGlobalMap xc10Map = MbGlobalMap.getGlobalMap("MyMap.LUT","xc10Connection");
    ...
    String val = (String)xc10Map.get(key);

    캐시가 너무 커지는 것을 방지하려면 키 및 값 쌍을 완료할 때 remove() 메소드를 사용하여 해당 데이터를 맵에서 삭제하십시오.

    컨텐츠 지원을 사용하여 Java 코드를 구성할 때 사용 가능한 옵션을 나열할 수 있습니다. 콘텐츠 지원에 액세스하려면 삽입 지점에 커서를 놓은 다음 편집 > 콘텐츠 지원을 클릭하거나 Ctrl+스페이스 키를 누릅니다. 예를 들어 "myMap"을 입력한 다음 Ctrl+Space를 누르는 경우 다음 조치를 포함하여 옵션 목록에서 선택할 수 있습니다.
    • remove: 글로벌 캐시에서 단일 오브젝트 제거
    • containsKey: 키가 맵에 있는지 여부 표시
    • update: 기존 오브젝트 업데이트
    사용 가능한 모든 옵션은 Java 플러그인 API용 Javadoc에 문서화되어 있습니다( IBM® 통합 API 참조).
  6. 메시지 플로우를 저장하십시오.
  7. 메시지 플로우를 배치하십시오.