Sun Java System Message Queue 3.7 UR1 관리 설명서

8장 관리 대상 객체 관리

관리 대상 객체는 공급자별 구성 및 이름 지정 정보를 캡슐화하여 하나의 JMS 공급자에서 다른 공급자로 이식할 수 있는 클라이언트 응용 프로그램을 개발할 수 있도록 합니다. Message QueueTM 관리자는 일반적으로 클라이언트 응용 프로그램이 메시지 송/수신을 위해 브로커에 연결하는 데 사용할 관리 대상 객체를 만듭니다.

이 장에서는 객체 관리자 유틸리티(imqobjmgr)를 사용하여 생성 및 관리 대상 객체를 관리하는 방법에 대해 설명합니다. 이 장은 다음 내용으로 구성되어 있습니다.

객체 저장소

관리 대상 객체는 클라이언트 응용 프로그램에서 JNDI(Java Naming and Directory Interface)를 통해 액세스할 수 있도록 미리 만들어진 객체 저장소에 있습니다. 사용할 수 있는 객체 저장소에는 표준 LDAP(Lightweight Directory Access Protocol) 디렉토리 서버와 로컬 파일 시스템의 디렉토리의 두 가지 유형이 있습니다.

LDAP 서버 객체 저장소

LDAP 서버는 작업 메시징 시스템에 권장되는 객체 저장소입니다. LDAP 서버는 분산 시스템에서 사용할 수 있도록 디자인되었으며 작업 환경에서 유용한 보안 기능을 제공합니다.

LDAP 구현은 여러 공급업체에서 제공합니다. Message Queue 관리 도구를 사용하여 LDAP 서버의 객체 저장소를 관리하려면 먼저 Java 객체를 저장할 서버를 구성한 다음 JNDI 조회를 수행해야 합니다. 자세한 내용은 LDAP 구현과 함께 제공된 설명서를 참조하십시오.

LDAP 서버를 객체 저장소로 사용하려면 표 8–1에 표시된 속성을 지정해야 합니다. 이 속성들은 다음 범주로 구분됩니다.

표 8–1 LDAP 객체 저장소 속성

속성 

설명 

java.naming.factory.initial

JNDI 조회를 위한 초기 컨텍스트 

예: 

com.sun.jndi.ldap.LdapCtxFactory

java.naming.provider.url

서버 URL 및 디렉토리 경로 

예: 

ldap://myD.com:389/ou=mq1,o=App

여기서 관리 대상 객체는 /App/mq1 디렉토리에 저장됩니다.

java.naming.security.principal

호출자를 인증할 때 사용되는 principal의 아이디 

이 속성의 형식은 인증 방법에 따라 달라집니다. 예를 들면 다음과 같습니다. 

uid=homerSimpson,ou=People,o=mq

이 속성을 지정하지 않으면 LDAP 서비스 공급자가 동작을 결정합니다. 

java.naming.security.credentials

인증 principal 자격 증명 

이 속성의 값은 인증 방법에 따라 달라집니다. 예를 들어 해시 비밀번호, 단순 텍스트 비밀번호, 키 또는 자격 증명 등이 될 수 있습니다. 

이 등록 정보를 지정하지 않으면 LDAP 서비스 공급자가 동작을 결정합니다. 

java.naming.security.authentication

인증 보안 수준 

이 속성의 값은 none, simple 또는 strong 키워드 중 하나입니다. 예를 들어, simple을 지정하면 누락된 principal 또는 자격 증명 값을 묻는 프롬프트가 나타납니다. 그러면 아이디 정보를 좀더 안전하게 제공할 수 있습니다.

이 등록 정보를 지정하지 않으면 LDAP 서비스 공급자가 동작을 결정합니다. 

파일 시스템 객체 저장소

Message Queue에서는 관리 대상 객체에 대한 객체 저장소로 로컬 파일 시스템의 디렉토리 사용을 지원합니다. 이 방법은 작업 시스템에는 바람직하지 않지만, 개발 환경에서는 사용하기 쉬운 장점이 있습니다. 그러나, 여러 컴퓨터 노드에 배포된 클라이언트의 중앙 집중식 객체 저장소로 사용할 디렉토리의 경우에는 해당 모든 클라이언트가 디렉토리에 액세스할 수 있어야 합니다. 또한 해당 디렉토리에 액세스할 수 있는 모든 사용자는 Message Queue 관리 도구를 사용하여 관리 대상 객체를 만들고 관리할 수 있습니다.

파일 시스템 디렉토리를 객체 저장소로 사용하려면 표 8–2에 표시된 속성을 지정해야 합니다. LDAP 객체 저장소의 경우 이러한 속성은 위에서 설명한 것과 동일한 일반적인 의미를 지닙니다. 특히 java.naming.provider.url 속성은 객체 저장소를 포함하는 디렉토리의 디렉토리 경로를 지정합니다. 해당 디렉토리가 존재해야 하며 Message Queue 관리 도구 사용자와 이 저장소에 액세스할 클라이언트 응용 프로그램 사용자에게 적절한 액세스 권한이 있어야 합니다.

표 8–2 파일 시스템 객체 저장소 속성

속성 

설명 


java.naming.factory.initial

JNDI 조회를 위한 초기 컨텍스트 

예: 

com.sun.jndi.fscontext.RefFSContextFactory


java.naming.provider.url

디렉토리 경로 

예: 

file:///C:/myapp/mqobjs

관리 객체 속성

Message Queue 관리 대상 객체에는기본적으로 다음과 같은 두 가지 종류가 있습니다.


주 –

SOAP 메시징에서는 특수한 SOAP 종점 관리 대상 객체를 사용합니다. 자세한 내용은 Java 클라이언트용 Message Queue 개발 안내서를 참조하십시오.


각 관리 대상 객체 유형에는 객체의 등록 정보와 동작을 결정하는 특정 속성이 있습니다. 이 절에서는 객체 관리자 명령줄 유틸리티(imqobjmgr)를 사용하여 이러한 속성을 설정하는 방법에 대해 설명합니다. 또한 관리 객체 작업에 설명된 대로 GUI 관리 콘솔을 사용하여 설정할 수도 있습니다.

연결 팩토리 속성

클라이언트 응용 프로그램에서는 연결 팩토리 관리 대상 객체를 사용하여 메시지를 브로커와 교환하는 데 사용할 연결을 만듭니다. 연결 팩토리의 속성은 생성되는 모든 연결의 등록 정보를 정의합니다. 연결이 만들어지고 나면 등록 정보를 변경할 수 없습니다. 따라서 연결 등록 정보를 구성하는 유일한 방법은 연결을 만드는 데 사용되는 연결 팩토리의 속성을 설정하는 것입니다.

Message Queue는 두 종류의 연결 팩토리 객체를 정의합니다.

두 종류 모두 자원, 성능 및 메시지 처리량을 최적화하는 데 사용할 수 있는 동일한 구성 속성을 공유합니다. 이러한 속성은 16 장, 관리 객체 속성 참조에 나열되어 있으며 다음 절에서 설명합니다.

연결 처리

연결 처리 속성은 연결할 브로커 주소를 지정하고, 필요한 경우 연결 실패를 찾아내어 재연결을 시도하는 방법을 지정합니다. 이러한 속성은 표 16–1에 요약되어 있습니다.

브로커 주소 목록

가장 중요한 연결 처리 속성은 imqAddressList로서, 이 속성은 브로커 또는 연결을 설정할 브로커를 지정합니다. 이 속성의 값은 하나의 브로커 주소 또는 (브로커 클러스터의 경우) 쉼표로 구분된 여러 주소를 포함하는 문자열입니다. 브로커 주소는 사용할 연결 서비스( 연결 서비스 참조)와 연결 설정 방법에 따라 다양한 주소 지정 체계를 사용할 수 있습니다.

이러한 주소 지정 체계는 표 16–2에 요약되어 있습니다.

각 브로커 주소의 일반 형식은 다음과 같습니다.

scheme://address

여기서 scheme은 위에 나열된 주소 지정 체계 중 하나이며 address는 브로커 주소 자체를 나타냅니다. 표 16–2의 마지막 열에 표시된 대로, 주소를 지정하는 정확한 구문은 주소 지정 체계에 따라 다릅니다. 표 16–3에서는 다양한 주소 형식의 예를 보여줍니다.

다중 브로커 클러스터 환경의 주소 목록에는 두 개 이상의 브로커 주소가 포함될 수 있습니다. 첫 번째 연결 시도가 실패하면 Message Queue 클라이언트 런타임에서 목록에 있는 다른 주소로 연결을 시도하며, 연결되지 않은 경우 목록의 마지막 항목에 이를 때까지 계속 시도합니다. 두 개의 추가 연결 팩토리 속성이 이러한 연결 시도 방법을 제어합니다.

자동 재연결

연결 팩토리의 imqReconnectEnabled 속성을 true로 설정하면 연결에 실패한 경우 클라이언트가 브로커에 자동으로 다시 연결할 수 있습니다. imqReconnectAttempts 속성은 지정된 브로커 주소에 대한 재연결 시도 횟수를 제어하고, imqReconnectInterval 속성은 시도 간격(초)을 지정합니다.

브로커 주소 목록(imqAddressList)에 여러 주소가 지정되어 있는 브로커 클러스터에서 실패한 연결은 원래의 브로커에서뿐만 아니라 클러스터의 다른 브로커에서도 복원될 수 있습니다. 원래 브로커로의 재연결이 실패하면 클라이언트 런타임은 목록의 다른 주소로 시도합니다. imqAddressListBehaviorimqAddressListIterations 속성은 이전 절에 설명한 대로 연결 시도되는 주소의 순서와 목록 반복 횟수를 제어합니다. 각 주소에 대해 imqReconnectInterval 밀리초 간격으로 반복을 시도하며, imqReconnectAttempts를 통해 지정된 최대 시도 횟수까지 반복을 시도합니다.

자동 재연결은 메시지 사용에 대한 모든 클라이언트 확인 모드를 지원합니다. 연결이 다시 설정된 후 브로커는 이전에 전달한 확인되지 않은 모든 메시지를 다시 전달하며 해당 메시지에 Redeliver 플래그를 표시합니다. 응용 프로그램 코드에서는 이 플래그를 사용하여 이미 사용되었지만 아직 확인되지 않은 메시지가 있는지 확인합니다. 그러나 비영구 가입자의 경우 연결이 닫히게 되면 브로커에 메시지가 저장되지 않습니다. 따라서 연결이 종료된 상태에서 해당 가입자에 대해 생성된 메시지는 재연결 후에도 전달할 수 없으므로 손실됩니다.자동 재연결 중에는 메시지 생성이 차단됩니다. 메시지 생성자는 연결이 다시 설정될 때까지 브로커로 메시지를 보낼 수 없습니다.

자동 재연결은 연결 페일오버를 제공하지만 데이터 페일오버는 제공하지 않습니다. 실패한 브로커 또는 연결이 끊긴 브로커가 가지고 있는 지속성 메시지 및 기타 상태 정보는 클라이언트가 다른 브로커 인스턴스에 재연결될 때 손실될 수 있습니다. 연결 재설정을 시도하는 동안 Message Queue에서는 클라이언트 런타임이 제공한 객체(세션, 메시지 사용자 및 메시지 생성자)를 유지합니다. 연결 실패 시 잠시 동안 임시 대상도 유지 관리됩니다. 클라이언트가 다시 연결하여 임시 대상에 다시 액세스할 수도 있기 때문입니다. 클라이언트에게 다시 연결하여 이러한 대상을 사용할 수 있는 시간을 제공한 후 브로커는 해당 대상을 삭제합니다. 재연결 시 클라이언트측 상태를 브로커에서 완전히 복원할 수 없는 경우(예: 연결 시간 동안에만 존재하는 트랜잭션된 세션 사용 시) 자동 재연결이 수행되지 않으며 연결의 예외 처리기가 대신 호출됩니다. 그리고 나면 응용 프로그램 코드에 따라 예외, 재연결 및 복원 상태를 파악하게 됩니다.

주기적 연결 테스트(핑)

연결을 주기적으로 테스트하거나 “핑”을 실행하도록 Message Queue 클라이언트 런타임을 구성하면 시도한 메시지 전송이 실패하기 전에 먼저 연결 실패를 감지할 수 있습니다. 이러한 테스트는 메시지를 사용하기만 하고 생성하지는 않는 클라이언트 응용 프로그램에 특히 중요합니다. 그렇지 않으면 연결이 실패한 경우 이러한 응용 프로그램을 찾아낼 수 없기 때문입니다. 메시지를 가끔씩만 생성하는 클라이언트에도 이 기능을 유용하게 사용할 수 있습니다.

연결 팩토리 속성 imqPingInterval은 연결을 핑할 빈도(초)를 지정합니다. 기본적으로 이 간격은 30초로 설정되며 값 -1은 핑 작업을 수행할 수 없습니다.

실패한 핑에 대한 응답은 운영 체제 플랫폼마다 다릅니다. 일부 운영 체제에서는 클라이언트 응용 프로그램의 예외 수신기에 예외가 즉시 발생합니다. 클라이언트에 예외 수신기가 없는 경우에는 다음 번 연결 사용 시도가 실패합니다. 다른 시스템에서는 핑이 성공하거나 버퍼 오버플로가 발생할 때까지 연속적으로 핑을 버퍼링하여 브로커에 대한 연결 설정을 계속해서 시도하기도 합니다.

클라이언트 아이디

표 16–4에 나열된 연결 팩토리 속성은 클라이언트 인증과 영구 가입자의 클라이언트 식별자 설정을 지원합니다.

클라이언트 인증

메시지 서비스에서 관리하는 사용자 저장소에 대해 사용자 이름 및 비밀번호를 사용하여 브로커에 연결하려는 모든 시도를 인증해야 합니다. 연결 팩토리 속성 imqDefaultUsernameimqDefaultPassword는 연결을 생성할 때 클라이언트가 명시적으로 제공하지 않을 경우 사용할 기본 사용자 이름 및 비밀번호를 지정합니다.

응용 프로그램 개발 및 테스트 중 사용자 저장소 채우기를 번거롭게 여기는 개발자의 편의를 제공하기 위해 Message Queue는 사용자 이름과 비밀번호가 모두 guest인 guest 사용자 계정을 제공합니다. 또한 이 값은 imqDefaultUsernameimqDefaultPassword 속성의 기본값이기도 하므로, 명시적으로 지정되지 않은 경우 클라이언트는 항상 guest 계정으로 연결을 설정할 수 있습니다. 작업 환경에서 브로커 연결 액세스는 사용자 저장소에 명시적으로 등록되어 있는 사용자로만 제한되어야 합니다.

클라이언트 식별자

Java Message Service 사양에서는 브로커가 클라이언트를 대신하여 지속성 상태를 유지해야 할 때마다 연결이 고유한 클라이언트 식별자를 제공하도록 규정합니다. Message Queue는 이러한 클라이언트 식별자를 사용하여 주제 대상에 대한 영구 가입자를 추적합니다. 영구 가입자가 비활성 상태인 경우 브로커는 주제에 대한 모든 수신 메시지를 보관했다가 가입자가 다시 활성화되면 전달합니다. 브로커는 클라이언트 식별자로 가입자를 식별합니다.

클라이언트 응용 프로그램이 연결 객체의 setClientID 메소드를 사용하여 프로그래밍 방식으로 고유의 클라이언트 식별자를 설정할 수 있지만, 각 식별자가 고유하도록 클라이언트 식별자를 조정하기는 어렵습니다. 일반적으로는 클라이언트를 대신하여 연결을 생성하는 경우 Message Queue에서 고유한 식별자를 자동으로 할당하게 하는 편이 더 좋습니다. 그러기 위해서는 연결 팩토리의 imqConfiguredClientID 속성을 다음 형식의 값으로 설정하면 됩니다.

${u}factoryID

${u} 문자는 속성 값의 처음 네 문자여야 합니다. 중괄호 안에 u 이외의 문자를 지정할 경우 연결 생성 시 예외가 발생하게 됩니다. 이러한 문자가 다른 위치에서 사용되는 경우에는 특별한 의미 없이 일반 텍스트로 간주됩니다. factoryID의 값은 연결 팩토리 객체와 관련된 고유 문자열입니다.

특정 클라이언트에 대한 연결을 생성하는 경우 Message Queue는 ${u} 문자를 u:userName으로 바꾸어 클라이언트 식별자를 구성합니다. 여기서 userName은 연결 인증에 사용되는 사용자 이름입니다. 따라서 해당 연결 팩토리가 생성한 연결은 다른 모든 측면에서는 동일하더라도 각 연결마다 고유한 클라이언트 식별자를 갖게 됩니다. 예를 들어, 사용자 이름이 Calvin이고 연결 팩토리의 imqConfiguredClientID 속성에 대해 지정된 문자열이 ${u}Hobbes이면 지정된 클라이언트 식별자는 u:CalvinHobbes가 됩니다.


주 –

두 클라이언트가 모두 기본 사용자 이름 guest를 사용하여 연결을 시도하는 경우에는 각 클라이언트마다 동일한 ${u} 구성 요소를 가진 클라이언트 식별자를 갖게 되므로 이 방법이 적용되지 않습니다. 이 경우, 연결을 요청한 첫 번째 클라이언트만 연결됩니다. Message Queue에서 클라이언트 식별자가 동일한 두 개의 연결을 생성할 수는 없으므로 두 번째 클라이언트의 연결 시도는 실패하게 됩니다.


imqConfiguredClientID를 사용하여 클라이언트 식별자를 지정한 경우에도 클라이언트 응용 프로그램은 setClientID 연결 메소드를 사용하여 이 설정을 무시할 수 있습니다. 연결 팩토리의 imqDisableSetClientID 속성을 true로 설정하면 이 작업을 막을 수 있습니다. 영구 가입자를 사용하는 응용 프로그램의 경우에는 imqConfiguredClientID를 사용한 관리 방식이나 setClientID를 사용한 프로그램 방식으로 클라이언트 식별자를 설정해야 합니다.

안정성 및 흐름 제어

클라이언트에서 송/수신되는 “페이로드” 메시지와 Message Queue에서 자체적으로 사용하는 제어 메시지(브로커 확인 등)는 동일한 클라이언트 브로커 연결을 생략하기 때문에 과도한 페이로드 트래픽 수준이 제어 메시지 전달을 방해할 수 있습니다. 이 문제를 줄이려면 표 16–5에 나열된 연결 팩토리 속성을 사용하여 두 가지 메시지 유형의 상대적 흐름을 관리할 수 있습니다. 이 속성들은 다음 네 가지 범주로 분류됩니다.

이러한 흐름 제어 기술 중 하나를 사용하려면 신뢰성과 처리량을 적절히 조정해야 합니다. 자세한 내용은 클라이언트 런타임 메시지 흐름 조정을 참조하십시오.

대기열 브라우저 및 서버 세션

표 16–6은 클라이언트 대기열 찾아보기와 서버 세션에 영향을 주는 연결 팩토리 속성을 나열합니다. imqQueueBrowserMaxMessagesPerRetrieve 속성은 대기열 대상 내용을 찾아볼 때 한 번에 검색할 수 있는 최대 메시지 수를 지정합니다. imqQueueBrowserRetrieveTimeout은 메시지 검색 시 최대 대기 시간을 지정합니다. imqQueueBrowserMaxMessagesPerRetrieve는 검색되는 총 메시지 수에는 영향을 주지 않고 클라이언트 런타임에 전달하기 위해 메시지가 청크되는 방법에만 영향을 줍니다. 청크가 클수록 메시지 수는 적고, 청크가 작을수록 메시지 수는 많아집니다. 클라이언트 응용 프로그램은 항상 대기열의 모든 메시지를 받습니다. 속성 값을 변경하면 성능에 영향을 줄 수 있지만, 검색되는 총 데이터 양에는 영향을 주지 않습니다.부울 속성 imqLoadMaxToServerSession은 응용 프로그램 서버 세션에서 연결 사용자의 동작을 제어합니다. 이 속성의 값이 true이면 클라이언트는 서버 세션에 최대 메시지 수까지 로드할 수 있습니다. false이면 한 번에 하나의 메시지만 로드합니다.

표준 메시지 등록 정보

JMS(Java Message Service) 사양은 JMS 공급자(Message Queue 등)가 필요에 따라 지원을 선택할 수 있는 특정 표준 메시지 등록 정보를 정의합니다. 편의상 이러한 표준 등록 정보의 이름은 모두 JMSX로 시작됩니다. 표 16–7에 나열된 연결 팩토리 속성은 Message Queue 클라이언트 런타임에서 특정 표준 등록 정보를 설정할지 여부를 제어합니다. 생성된 메시지의 경우에는 다음 등록 정보를 포함합니다.

사용된 메시지의 경우에는 다음 등록 정보를 포함합니다.

메시지 헤더 대체

표 16–8에 나열된 연결 팩토리 속성을 사용하여 특정 JMS 메시지 헤더 필드에 대해 클라이언트가 설정한 값을 무시할 수 있습니다. 사용자가 지정한 설정은 연결 팩토리에서 가져온 연결에서 생성된 모든 메시지에 사용됩니다. 이 방법으로 무시할 수 있는 헤더 필드는 다음과 같습니다.

이러한 각 필드에는필드를 무시할 수 있는지 여부를 제어하는 부울 속성과 값을 지정하기 위한 부울 속성의 두 가지 속성이 있습니다. 예를 들어, 우선 순위 수준을 설정하기 위한 속성은 imqOverrideJMSPriorityimqJMSPriority입니다. 임시 대상에 적용되는 값을 무시할지 여부를 제어하는 imqOverrideJMSHeadersToTemporaryDestinations 속성도 있습니다.


주 –

무시되는 메시지 헤더는 특정 응용 프로그램의 요구에 맞지 않을 수도 있으므로 이 속성은 반드시 응용 프로그램 설계자 또는 사용자와 상의하여 사용해야 합니다.


대상 속성

물리적 대기열 또는 주제 대상을 식별하는 대상 관리 객체는 표 16–9에 나열된 두 가지 속성만 갖습니다. 중요한 한 가지 속성은 imqDestinationName으로, 이 속성은 관리 대상 객체가 나타내는 물리적 대상의 이름을 제공합니다. 이 이름은 물리적 대상을 만든 imqcmd create dst 명령에 -n 옵션을 사용하여 지정된 이름입니다. 대상 관리 객체와 해당 객체가 나타내는 물리적 대상이 반드시 일대일 관계가 아니어도 됩니다. 하나의 물리적 대상을 여러 관리 대상 객체가 참조할 수도 있고 물리적 대상을 참조하는 관리 대상 객체가 없을 수도 있습니다.또한 imqDestinationDescription이라는 선택적 설명 문자열도 있습니다. 이 문자열을 사용하면 대상 객체를 식별하거나 사용자가 만든 대상 객체를 다른 대상 객체와 구분하기가 쉽습니다.

객체 관리자 유틸리티 사용

Message Queue 객체 관리자 유틸리티(imqobjmgr)를 사용하면 관리 대상 객체를 만들고 관리할 수 있습니다. imqobjmgr 명령은 관리 대상 객체에 대한 다양한 작업을 수행하기 위해 다음과 같은 하위 명령을 제공합니다.

add

관리 대상 객체를 객체 저장소에 추가

delete

객체 저장소에서 관리 대상 객체 삭제

list

객체 저장소에 기존 관리 대상 객체 나열

query

관리 대상 객체에 대한 정보 표시

update

관리 대상 객체의 속성 수정

imqobjmgr 명령의 구문, 하위 명령 및 옵션에 대한 자세한 내용은 객체 관리자 유틸리티를 참조하십시오.

대부분의 객체 관리자 작업의 경우 imqobjmgr 명령 옵션으로 다음 정보를 지정해야 합니다.

관리 객체 추가

imqobjmgr 명령의 add 하위 명령은 연결 팩토리의 관리 대상 객체나 주제 또는 대기열 대상을 객체 저장소에 추가합니다. LDAP 객체 저장소에 저장된 관리 대상 객체에는 cn=; 접두사로 시작하는 조회 이름이 지정되어야 하며, 파일 시스템 객체 저장소의 조회 이름은 특정 접두사로 시작할 필요는 없지만 슬래시 문자(/)를 포함할 수 없습니다.


주 –

객체 관리자는 Message Queue 관리 대상 객체만 나열하고 표시합니다. 객체 저장소에 추가할 관리 대상 객체와 동일한 조회 이름을 가진 비 Message Queue 객체를 포함해야 하는 경우에 이 객체를 추가하려고 하면 오류 메시지가 표시됩니다.


연결 팩토리 추가

클라이언트 응용 프로그램에서 브로커 연결을 생성할 수 있도록 하려면 생성할 연결 유형(대기열 연결 팩토리 또는 주제 연결 팩토리)에 대해 연결 팩토리 관리 대상 객체를 추가합니다. 예 8–1은 대기열 연결 팩토리(관리 대상 객체 유형 qf)를 LDAP 객체 저장소에 추가하는 명령을 보여줍니다. 객체에는 조회 이름 cn=myQCF가 지정되며 jms 연결 서비스를 사용하여 7272 포트 번호를 통해 myHost 호스트에서 실행 중인 브로커에 연결합니다.


예 8–1 연결 팩토리 추가


imqobjmgr add
   -l "cn=myQCF"
   -j "java.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory"
   -j "java.naming.provider.url=ldap://mydomain.com:389/o=imq"
   -j "java.naming.security.principal=uid=homerSimpson,ou=People,o=imq"
   -j "java.naming.security.credentials=doh"
   -j "java.naming.security.authentication=simple"
   -t qf
   -o "imqAddressList=mq://myHost:7272/jms"

대상 추가

대상을 나타내는 관리 객체를 만드는 경우 관리 객체를 객체 저장소에 추가하기 전에 먼저 물리적 대상을 만드는 것이 좋습니다. 물리적 대상 만들기에 설명한 대로 명령 유틸리티(imqcmd )를 사용하여 물리적 대상을 만듭니다.

예 8–2에 나와 있는 명령은 조회 이름 myTopic을 사용하여 주제 대상을 나타내는 LDAP 객체 저장소에 관리 대상 객체를 추가하며, 물리적 대상 이름은 physTopic입니다. 대기열 대상을 추가하는 명령도 이와 비슷하며, 관리 대상 객체 유형(-t 옵션)으로 t("주제 대상") 대신에 q("대기열 대상")를 사용하는 것이 다릅니다.


예 8–2 LDAP 객체 저장소에 대상 추가


imqobjmgr add
   -l "cn=myTopic"
   -j "java.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory"
   -j "java.naming.provider.url=ldap://mydomain.com:389/o=imq"
   -j "java.naming.security.principal=uid=homerSimpson,ou=People,o=imq"
   -j "java.naming.security.credentials=doh"
   -j "java.naming.security.authentication=simple"
   -t t
   -o "imqDestinationName=physTopic"

예 8–3은 LDAP 서버 대신에 Solaris 파일 시스템에 저장된 관리 대상 객체를 사용하는 동일한 명령을 보여줍니다.


예 8–3 파일 시스템 객체 저장소에 대상 추가


imqobjmgr add
   -l "cn=myTopic"
   -j "java.naming.factory.initial=
           com.sun.jndi.fscontext.RefFSContextFactory"
   -j "java.naming.provider.url=file:///home/foo/imq_admin_objects"
   -t t
   -o "imqDestinationName=physTopic"

관리 객체 삭제

객체 저장소에서 관리 대상 객체를 삭제하려면 imqobjmgr 명령의 delete 하위 명령을 사용하고 삭제할 객체의 조회 이름, 유형 및 위치를 지정합니다. 예 8–4에 표시된 명령은 위 대상 추가에서 추가된 객체를 삭제합니다.


예 8–4 관리 객체 삭제


imqobjmgr delete
   -l "cn=myTopic"
   -j "java.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory"
   -j "java.naming.provider.url=ldap://mydomain.com:389/o=imq"
   -j "java.naming.security.principal=uid=homerSimpson,ou=People,o=imq"
   -j "java.naming.security.credentials=doh"
   -j "java.naming.security.authentication=simple"
   -t t

관리 객체 나열

객체 관리자의 list 하위 명령을 사용하면 객체 저장소의 모든 관리 대상 객체 또는 특정 유형의 관리 대상 객체 목록을 가져올 수 있습니다. 예 8–5는 LDAP 서버의 모든 관리 대상 객체를 나열하는 방법을 보여줍니다.


예 8–5 모든 관리 객체 나열


imqobjmgr list
   -j "java.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory"
   -j "java.naming.provider.url=ldap://mydomain.com:389/o=imq"
   -j "java.naming.security.principal=uid=homerSimpson,ou=People,o=imq"
   -j "java.naming.security.credentials=doh"
   -j "java.naming.security.authentication=simple"

예 8–6은 모든 대기열 대상(유형 q)을 나열합니다.


예 8–6 특정 유형의 관리 객체 나열


imqobjmgr list
   -j "java.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory"
   -j "java.naming.provider.url=ldap://mydomain.com:389/o=imq"
   -j "java.naming.security.principal=uid=homerSimpson,ou=People,o=imq"
   -j "java.naming.security.credentials=doh"
   -j "java.naming.security.authentication=simple"
   -t q

관리 객체 정보 보기

query 하위 명령은 객체의 조회 이름과 객체를 포함하는 객체 저장소의 속성을 통해 식별되는 지정된 관리 대상 객체에 대한 정보를 표시합니다. 예 8–7은 조회 이름이 cn=myTopic인 객체에 대한 정보를 표시합니다.


예 8–7 관리 객체 정보 보기


imqobjmgr query
   -l "cn=myTopic"
   -j "java.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory"
   -j "java.naming.provider.url=ldap://mydomain.com:389/o=imq"
   -j "java.naming.security.principal=uid=homerSimpson,ou=People,o=imq"
   -j "java.naming.security.credentials=doh"
   -j "java.naming.security.authentication=simple"

관리 객체 속성 수정

관리 대상 객체의 속성을 수정하려면 imqobjmgr update 하위 명령을 사용합니다. 객체의 조회 이름 및 위치를 입력하고 -o 옵션을 사용하여 새 속성 값을 지정합니다.

관리 객체 속성 수정에서는 예 8–8에서 객체 저장소에 추가된 대기열 연결 팩토리에 대한 imqReconnectAttempts 속성 값을 변경합니다.


예 8–8 관리 대상 객체 속성 수정


imqobjmgr update
   -l "cn=myQCF"
   -j "java.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory"
   -j "java.naming.provider.url=ldap://mydomain.com:389/o=imq"
   -j "java.naming.security.principal=uid=homerSimpson,ou=People,o=imq"
   -j "java.naming.security.credentials=doh"
   -j "java.naming.security.authentication=simple"
   -t qf
   -o "imqReconnectAttempts=3"

명령 파일 사용

imqobjmgr 명령에 대한 -i 옵션을 사용하면 하위 명령 절의 전체 또는 일부를 나타내기 위해 Java 등록 정보 파일 구문을 사용하는 명령 파일의 이름을 지정할 수 있습니다. 이 기능은 일반적으로 입력을 많이 해야 하거나 imqobjmgr의 여러 호출에서 동일한 내용을 입력해야 하는 객체 저장소 속성을 지정하는 데 특히 유용합니다. 명령 파일을 사용하면 명령줄에 허용되는 최대 문자 수를 초과하는 일을 방지할 수도 있습니다.

예 8–9는 객체 관리자 명령 파일의 일반 구문을 보여줍니다. version 속성은 명령줄 옵션이 아닙니다. 이 속성은 Message Queue 제품 버전이 아니라 명령 파일 자체의 버전을 참조하므로 값을 2.0으로 설정해야 합니다.


예 8–9 객체 관리자 명령 파일 구문


version=2.0
cmdtype=[ add | delete | list | query | update ]
obj.lookupName=lookup name
objstore.attrs.objStoreAttrName1=value1
objstore.attrs.objStoreAttrName2=value2
   . . .
objstore.attrs.objStoreAttrNameN=valueN
obj.type=[ q | t | cf | qf | tf | xcf | xqf | xtf | e ]
obj.attrs.objAttrName1=value1
obj.attrs.objAttrName2=value2
   . . .
obj.attrs.objAttrNameN=valueN

예를 들어, 대기열 연결 팩토리를 LDAP 객체 저장소에 추가한 이전의 예 8–1에서 객체 관리자 명령을 살펴보겠습니다. 이 명령을 예 8–10에 표시된 대로 명령 파일에 캡슐화할 수 있습니다. 명령 파일의 이름이 MyCmdFile이면 명령줄에서 다음 명령을 실행할 수 있습니다.

imqobjmgr -i MyCmdFile

예 8–10 명령 파일 예


version=2.0
cmdtype=add
obj.lookupName=cn=myQCF
objstore.attrs.java.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory
objstore.attrs.java.naming.provider.url=ldap://mydomain.com:389/o=imq
objstore.attrs.java.naming.security.principal=\\
                                       uid=homerSimpson,ou=People,o=imq
objstore.attrs.java.naming.security.credentials=doh
objstore.attrs.java.naming.security.authentication=simple
obj.type=qf
obj.attrs.imqAddressList=mq://myHost:7272/jms

명령 파일을 사용하면 나머지 부분을 명령줄에 명시적으로 제공하면서 imqobjmgr 하위 명령 절의 일부만 지정할 수도 있습니다. 예를 들어, 예 8–11에 표시된 명령 파일은 LDAP 객체 저장소의 속성 값만 지정합니다.


예 8–11 부분 명령 파일


version=2.0
objstore.attrs.java.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory
objstore.attrs.java.naming.provider.url=ldap://mydomain.com:389/o=imq
objstore.attrs.java.naming.security.principal=\\
                                       uid=homerSimpson,ou=People,o=imq
objstore.attrs.java.naming.security.credentials=doh
objstore.attrs.java.naming.security.authentication=simple

그리고 나면 이 명령 파일을 사용하여 예 8–12에 표시된 대로 나머지 옵션을 명시적으로 제공하면서 imqobjmgr 명령에 객체 저장소를 지정할 수 있습니다.


예 8–12 부분 명령 파일 사용


imqobjmgr add
   -l "cn=myQCF"
   -i MyCmdFile
   -t qf
   -o "imqAddressList=mq://myHost:7272/jms"

사용자의 플랫폼에 따라 다음 위치에서 명령 파일의 예를 추가로 확인할 수 있습니다.

Solaris:/usr/demo/imq/imqobjmgr Linux:/opt/sun/mq/examples/imqobjmgr Windows:IMQ_HOME/demo/imqobjmgr