이 장에서는 JMS(Java Message Service) API를 사용하는 응용 프로그램의 자원 구성 방법에 대해 설명합니다. 이 장은 다음 내용으로 구성되어 있습니다.
Application Server는 Sun Java System Message Queue(이전의 Sun ONE Message Queue) 소프트웨어를 Application Server에 통합하여 JMS(Java Message Service) API를 구현합니다. 기본적인 JMS API 관리 작업에는 Application Server 관리 콘솔을 사용합니다. Message Queue 클러스터 관리를 포함한 고급 작업에는 MQ-install-dir/imq/bin 디렉토리에 제공된 도구를 사용합니다.
Message Queue 관리에 대한 자세한 내용은 Message Queue 관리 설명서를 참조하십시오.
JMS(Java Message Service) API에서는 두 종류의 관리 대상 객체를 사용합니다.
연결 팩토리, 응용 프로그램에서 다른 JMS 객체를 프로그래밍 방식으로 만들 수 있게 해주는 객체
대상, 메시지를 위한 저장소 역할
이러한 객체는 관리상의 목적으로 만들며 객체를 만드는 방법은 JMS 구현마다 다릅니다. Application Server에서 다음 작업을 수행합니다.
JMS 응용 프로그램에서는 JNDI API를 사용하여 연결 팩토리와 대상 자원에 액세스합니다. JMS 응용 프로그램은 대개 최소한 연결 팩토리 하나와 대상 하나를 사용합니다. 만들 자원을 알아보려면 응용 프로그램을 살펴보거나 응용 프로그램 개발자에게 문의하십시오.
연결 팩토리에는 다음과 같은 세 가지 유형이 있습니다.
QueueConnectionFactory 객체 - 지점간 통신에 사용됩니다.
TopicConnectionFactory 객체 - 게시-가입 통신에 사용됩니다.
ConnectionFactory 객체 - 지점간 통신과 게시-가입 통신 모두에 사용할 수 있으므로 새로운 응용 프로그램에 권장합니다.
대상에는 다음과 같은 두 가지 종류가 있습니다.
Queue 객체 - 지점간 통신에 사용됩니다.
Topic 객체 - 게시-가입 통신에 사용됩니다.
J2EE 1.4 Tutorial의 JMS 장에서는 이 두 가지 통신 유형과 JMS의 기타 요소를 자세히 설명합니다(http://java.sun.com/j2ee/1.4/docs/tutorial/doc/index.html 참조).
자원을 만드는 순서는 상관이 없습니다.
J2EE 응용 프로그램의 경우 다음과 같이 Application Server 배포 설명자의 연결 팩토리와 대상 자원을 지정합니다.
resource-ref 또는 mdb-connection-factory 요소의 연결 팩토리 JNDI 이름을 지정합니다.
Message-Driven Bean의 ejb 요소와 message-destination 요소에서 대상 자원 JNDI 이름을 지정합니다.
Enterprise Bean 배포 설명자의 message-driven 요소 또는 message-destination-ref 요소 내에서 message-destination-link 요소의 물리적 대상 이름을 지정합니다. 이 이름을 message-destination 요소에도 지정합니다. message-destination-ref 요소는 새 응용 프로그램에서 더 이상 사용되지 않는 resource-env-ref 요소를 대체합니다. Application Server 배포 설명자의 message-destination 요소에서 물리적 대상 이름을 대상 자원 이름과 연결합니다.
Application Server는 jmsra라고 하는 시스템 자원 어댑터를 사용하여 JMS를 구현합니다. 사용자가 JMS 자원을 만들면 Application Server가 커넥터 자원을 자동으로 만들며 이는 관리 콘솔의 트리 보기에 있는 커넥터 노드에 표시됩니다.
사용자가 만든 JMS 연결 팩토리마다 Application Server가 커넥터 연결 풀과 연결 자원을 만듭니다. 사용자가 만든 JMS 대상마다 Application Server가 관리 객체 자원을 만듭니다. 사용자가 JMS 자원을 삭제하면 Application Server에서 커넥터 자원을 자동으로 삭제합니다.
JMS 자원 노드 대신 관리 콘솔의 커넥터 노드를 사용하여 JMS 시스템 자원 어댑터에 대한 커넥터 자원을 만들 수 있습니다.자세한 내용은 7 장, 커넥터 자원을 참조하십시오.
JMS 연결 팩토리는 응용 프로그램에서 다른 JMS 객체를 프로그래밍 방식으로 만들 수 있게 해주는 객체입니다. 이 관리 대상 객체는 ConnectionFactory, QueueConnectionFactory 및 TopicConnectionFactory 인터페이스를 구현합니다. Application Server 관리 콘솔을 사용하여 JMS 연결 팩토리를 만들고 편집하거나 삭제할 수 있습니다. 새 JMS 연결 팩토리를 만들면 팩토리 및 커넥터 자원에 대한 커넥터 연결 풀도 만들어집니다.
명령줄 유틸리티를 사용하여 JMS 연결 팩토리를 관리하려면 create-jms-resource, list-jms-resources 또는 delete-jms-resource 명령을 사용합니다.
JMS 대상은 메시지 저장소의 역할을 합니다. 관리 콘솔을 사용하여 JMS 대상 자원을 만들고 수정하거나 삭제할 수 있습니다. 새 JMS 대상 자원을 만들려면 자원 > JMS 자원 > 대상 자원을 선택합니다. 대상 자원 페이지에서 다음 사항을 지정할 수 있습니다.
자원의 JNDI 이름. JMS 자원에 대해 이름 지정 하위 컨텍스트 접두어 jms/를 사용하는 것이 좋습니다. 예를 들면 다음과 같습니다. jms/Queue.
자원 유형. javax.jms.Topic 또는 javax.jms.Queue일 수 있습니다.
대상 자원의 추가 등록 정보. 이러한 모든 설정 및 추가 등록 정보에 대한 자세한 내용은 관리 콘솔 온라인 도움말을 참조하십시오.
명령줄 유틸리티를 사용하여 JMS 대상을 관리하려면 create-jms-resource 또는 delete-jms-resource 명령을 사용합니다.
asadmin create-jms-resource 명령에 addresslist 등록 정보(host:mqport,host2:mqport,host3:mqport 형식)를 지정하려면 \\를 사용하여 :을 이스케이프 처리합니다. 예를 들면 host1\\:mqport,host2\\:mqport,host3\\:mpqport입니다.
이스케이프 문자 사용에 대한 자세한 내용은 asadmin(8) 설명서 페이지를 참조하십시오.
작업 목적을 위해 항상 물리적인 대상을 만듭니다. 그러나 개발 및 테스트 단계 중에는 이 단계가 필요하지 않습니다. 응용 프로그램이 처음 대상 자원에 액세스할 때 Message Queue가 대상 자원의 이름 등록 정보에서 지정한 물리적 대상을 자동으로 만듭니다. 물리적 대상은 임시적이며 Message Queue 구성 등록 정보에서 지정한 기간 후에는 만료됩니다.
관리 콘솔에서 물리적 대상을 만들려면 구성 > 물리적 대상을 선택합니다. 물리적 대상 만들기 페이지에서 물리적 대상의 이름을 지정하고 대상의 유형(topic 또는 queue)을 선택합니다. 물리적 대상 페이지의 필드 및 등록 정보에 대한 자세한 내용은 관리 콘솔 온라인 도움말을 참조하십시오.
작업 목적을 위해 항상 물리적인 대상을 만듭니다. 그러나 개발 및 테스트 단계 중에는 이 단계가 필요하지 않습니다. 응용 프로그램에서 처음 대상 자원에 액세스할 때 대상 자원의 등록 정보에서 지정한 물리적 대상을 Message Queue에서 자동으로 만듭니다. 물리적 대상은 임시적이며 Message Queue 구성 등록 정보에서 지정한 기간 후에는 만료됩니다.
명령줄 유틸리티를 사용하여 JMS 물리적 대상을 관리하려면 create-jmsdest, flush-jmsdest 또는 delete-jmsdest 명령을 사용합니다.
관리 콘솔의 JMS 서비스 페이지를 사용하여 모든 JMS 연결에서 사용할 등록 정보를 구성합니다. 관리 콘솔에서 구성 > Java Message Service를 선택합니다. JMS 서비스 페이지에서 다음 일반 JMS 설정을 제어할 수 있습니다.
Application Server에서 JMS 서비스가 시작될 때까지 대기한 후 서버 시작이 중단되는 시간을 나타내는 시작 시간 초과 기간을 선택합니다.
JMS 서비스를 관리할 위치(로컬 또는 원격 호스트)를 결정하는 JMS 서비스 유형을 선택합니다.
시작 인수를 지정하여 JMS 서비스 시작을 사용자 정의합니다.
다시 연결 확인란을 선택하여 연결이 끊어진 경우 JMS 서비스에서 메시지 서버 또는 AddressList의 주소 목록에 다시 연결할지 여부를 지정합니다.
다시 연결 간격(초)을 지정합니다. AddressList의 각 주소에 대한 재연결 시도와 목록의 연속된 주소에 이 값이 적용됩니다. 이 시간 간격이 너무 짧을 경우 브로커가 복구할 시간이 없습니다. 너무 길 경우에는 지연이 지나치게 길게 느껴질 수 있습니다.
다시 연결 시도 횟수를 지정합니다. 클라이언트 런타임에서 AddressList의 주소에 연결(또는 다시 연결)을 몇 번 시도한 후 해당 목록의 다음 주소로 연결을 시도할지를 필드에 입력합니다.
기본 JMS 호스트를 선택합니다.
주소 목록 동작 드롭다운 목록에서 AddressList의 주소 순서대로(priority) 다시 연결을 시도할지 아니면 임의의 순서대로(random) 다시 연결을 시도할지 선택합니다.
주소 목록 반복 필드에 연결을 설정하거나 재설정할 때 JMS 서비스가 AddressList를 반복하는 횟수를 입력합니다.
기본값이 아닌 체계나 서비스를 사용할 경우 MQ 체계 및 MQ 서비스 필드에 Message Queue 주소 체계 이름과 Message Queue 연결 서비스 이름을 입력합니다.
위의 모든 등록 정보 값은 런타임 시에도 업데이트할 수 있습니다. 그러나, 등록 정보가 업데이트된 후 만들어진 해당 연결 팩토리만 업데이트된 값을 갖습니다. 기존 연결 팩토리는 계속 원래 등록 정보 값을 갖습니다. 또한, 거의 대부분의 경우 해당 값을 적용하려면 Application Server를 다시 시작해야 합니다. Application Server를 다시 시작하지 않아도 업데이트할 수 있는 등록 정보는 기본 JMS 호스트뿐입니다.
명령줄 유틸리티를 사용하여 JMS 공급자를 관리하려면 set 또는 jms-ping 명령을 사용합니다.
공급자와 호스트를 원격 시스템으로 변경하면 모든 JMS 응용 프로그램이 원격 서버에서 실행됩니다. 로컬 서버와 하나 이상의 원격 서버를 모두 사용하려면 원격 서버에 액세스하는 연결을 만드는 AddressList 등록 정보를 사용하여 연결 팩토리 자원을 만듭니다.
JMS용 일반 자원 어댑터는 IBM Websphere MQ, Tibco EMS 및 Sonic MQ와 같은 외부 JMS 공급자의 JMS 클라이언트 라이브러리를 래핑할 수 있으며 이에 따라 모든 JMS 공급자를 Sun Java System Application Server와 같은 Java EE 1.4 응용 프로그램 서버에 통합할 수 있는 Java EE Connector 1.5 자원 어댑터입니다. 이 어댑터는 .rar 아카이브로서, Java EE 1.4 응용 프로그램 서버의 관리 도구를 사용하여 배포 및 구성할 수 있습니다.
응용 프로그램 서버의 관리 도구를 사용하여 JMS용 일반 자원 어댑터를 배포하고 구성할 수 있습니다. 이 절에서는 Sun Java System Application Server에 JMS용 일반 자원 어댑터를 구성하는 방법에 대해 설명합니다. 일반적으로 자원 어댑터는 JMS 공급자가 XA를 지원하는지 여부를 나타내도록 구성할 수 있습니다. 또한, JMS 공급자와의 가능한 통합 모드를 나타내도록 구성할 수도 있습니다. 자원 어댑터는 두 가지 통합 모드를 지원합니다. 첫 번째 모드는 JNDI를 통합 수단으로 사용합니다. 이 경우, 관리 대상 객체는 JMS 공급자의 JNDI 트리에 설정되며 일반 자원 어댑터에서 사용할 목적으로 조회됩니다. 해당 모드가 통합에 적합하지 않은 경우 JMS 관리 대상 객체 javabean 클래스의 Java 리플렉션을 통합 모드로 사용할 수도 있습니다. Sun Java System Application Server의 관리 콘솔 또는 CLI를 사용하여 자원 어댑터를 구성할 수 있습니다. 이 방법은 다른 자원 어댑터를 구성하는 방법과 다르지 않습니다.
자원 어댑터를 배포하기 전에 JMS 클라이언트 라이브러리를 Application Server에 사용할 수 있어야 합니다. 일부 JMS 공급자의 경우 클라이언트 라이브러리에 원시 라이브러리가 포함되어 있을 수도 있습니다. 이 경우, 원시 라이브러리도 Application Server JVM에 사용할 수 있어야 합니다.
커넥터 모듈을 배포한 것과 동일한 방식으로 일반 자원 어댑터를 배포합니다.
이에 대한 작업 단계는 관리 콘솔 온라인 도움말을 참조하십시오. 배포 중 install-dir/lib/addons/resourceadapters/genericjmsra/genericra.rar을 일반 자원 어댑터의 위치로 지정해야 합니다. 또한, 자원 어댑터 등록 정보 절에 설명된 등록 정보를 지정해야 합니다.
커넥터 연결 풀을 만듭니다.
이에 대한 작업 단계는 관리 콘솔 온라인 도움말을 참조하십시오. 새 커넥터 연결 풀 페이지의 자원 어댑터 콤보 상자에서 genericra를 선택하고 연결 정의 콤보 상자에서 javax.jms.QueueConnectionFactory를 선택합니다. 또한, ManagedConnectionFactory 등록 정보 절에 설명된 등록 정보를 지정합니다.
커넥터 자원을 만듭니다.
이 작업에 대한 자세한 절차는 관리 콘솔 온라인 도움말을 참조하십시오. 새 커넥터 자원 페이지에서, 이전 단계에서 만든 풀을 선택합니다.
관리 대상 객체 자원을 만듭니다.
이 작업에 대한 자세한 절차는 관리 콘솔 온라인 도움말을 참조하십시오. 새 관리 객체 자원 페이지에서 genericra를 자원 어댑터로, javax.jms.Queue를 자원 유형으로 선택합니다. 다음을 누르고 두 번째 페이지에서 등록 정보 추가를 누릅니다. 추가 등록 정보 테이블에서 DestinationProperties라는 새 등록 정보를 Name\\=clientQueue 값으로 지정합니다. 다른 등록 정보에 대한 자세한 내용은 관리 대상 객체 자원 등록 정보 절을 참조하십시오.
Sun Java System Application Server의 보안 정책을 다음과 같이 변경합니다.
sjsas_home/domains/domain1/config/server.policy를 수정하여 java.util.logging.LoggingPermission "control"을 추가합니다.
sjsas_home/lib/appclient/client.policy를 수정하여 permission javax.security.auth.PrivateCredentialPermission "javax.resource.spi.security.PasswordCredential * \"*\"","read";를 추가합니다.
다음 표는 자원 어댑터를 만들 때 사용할 등록 정보를 나타냅니다.
ManagedConnectionFactory 등록 정보는 connector-connection-pool을 만들 때 지정됩니다. 자원 어댑터를 만들 때 지정된 모든 ManagedConnectionFactory 등록 정보는 대체될 수 있습니다. ManagedConnectionFactory에만 사용할 수 있는 추가 등록 정보는 다음과 같습니다.
등록 정보 이름 |
유효 값 |
기본값 |
설명 |
---|---|---|---|
ClientId |
유효 클라이언트 아이디 |
없음 |
JMS 1.1 사양으로 지정된 ClientID입니다. |
ConnectionFactoryJndiName |
JNDI 이름 |
없음 |
JMS 공급자의 JNDI 트리에 바인딩된 연결 팩토리의 JNDI 이름입니다. 관리자는 JMS 공급자에 모든 연결 팩토리 등록 정보(clientID 제외)를 제공해야 합니다. 이 등록 정보 이름은 ProviderIntegrationMode가 jndi로 지정된 경우에만 사용됩니다. |
ConnectionValidationEnabled |
true/false |
false |
true로 설정하면 자원 어댑터는 예외 Listener를 사용하여 연결 예외를 포착하고 CONNECTION_ERROR_OCCURED 이벤트를 Application Server에 보냅니다. |
이 등록 정보는 관리 대상 객체 자원을 만들 때 지정됩니다. 관리 대상 객체 자원의 모든 자원 어댑터 등록 정보는 대체될 수 있습니다. 관리 대상 객체 자원에만 사용할 수 있는 추가 등록 정보는 다음과 같습니다.
등록 정보 이름 |
유효 값 |
기본값 |
설명 |
---|---|---|---|
DestinationJndiName |
JNDI 이름 |
없음 |
JMS 공급자의 JNDI 트리에 바인딩된 대상의 JNDI 이름입니다. 관리자는 JMS 공급자에 모든 등록 정보를 제공해야 합니다. 이 등록 정보 이름은 ProviderIntegrationMode가 jndi로 지정된 경우에만 사용됩니다. |
DestinationProperties |
쉼표로 구분된 이름 값 쌍 |
없음 |
이 등록 정보는 javabean 등록 정보 이름 및 JMS 클라이언트의 대상 값을 지정합니다. ProviderIntegrationMode가 javabean으로 지정된 경우에만 사용됩니다. |
이 등록 정보는 MDB의 Sun 특정 배포 설명자에 activation-config-properties로 지정되어 있습니다. 활성화 사양의 모든 자원 어댑터 등록 정보는 대체될 수 있습니다. 활성화 사양에만 사용할 수 있는 추가 등록 정보는 다음과 같습니다.
등록 정보 이름 |
유효한 값 |
기본값 |
설명 |
---|---|---|---|
MaxPoolSize |
정수 |
8 |
동시 메시지 전달을 수행하기 위해 자원 어댑터에서 내부적으로 만든 서버 세션 풀의 최대 크기입니다. 이 값은 MDB 객체의 최대 풀 크기와 같아야 합니다. |
MaxWaitTime |
정수 |
3 |
자원 어댑터는 이 등록 정보에 지정된 시간(초) 동안 내부 풀에서 서버 세션을 가져오기 위해 대기합니다. 이 제한이 초과되면 메시지 전달이 실패합니다. |
SubscriptionDurability |
영구적 또는 비영구적 |
비영구적 |
JMS 1.1 사양에서 지정된 SubscriptionDurability입니다. |
SubscriptionName |
없음 |
JMS 1.1 사양에서 지정된 SubscriptionName입니다. |
|
MessageSelector |
유효 메시지 선택기 |
없음 |
JMS 1.1 사양에서 지정된 MessageSelector입니다. |
ClientID |
유효 클라이언트 아이디 |
없음 |
JMS 1.1 사양에서 지정된 ClientID입니다. |
ConnectionFactoryJndiName |
유효 JNDI 이름 |
없음 |
JMS 공급자에 만들어진 연결 팩토리의 JNDI 이름입니다. 자원 어댑터가 이 연결 팩토리를 사용하여 메시지를 수신하기 위한 연결을 만듭니다. ProviderIntegrationMode가 jndi로 지정된 경우에만 사용됩니다. |
DestinationJndiName |
유효 JNDI 이름 |
없음 |
JMS 공급자에 만들어진 대상의 JNDI 이름입니다. 자원 어댑터가 이 대상을 사용하여 메시지를 수신하기 위한 연결을 만듭니다. ProviderIntegrationMode가 jndi로 지정된 경우에만 사용됩니다. |
DestinationType |
javax.jms.Queue 또는 javax.jms.Topic |
null |
MDB가 수신할 대상 유형입니다. |
DestinationProperties |
쉼표로 구분된 이름 값 쌍 |
없음 |
이 등록 정보는 javabean 등록 정보 이름 및 JMS 클라이언트의 대상 값을 지정합니다. ProviderIntegrationMode가 javabean으로 지정된 경우에만 사용됩니다. |
RedeliveryAttempts |
정수 |
메시지로 인해 MDB 런타임 예외가 발생한 경우 메시지를 전달할 시간입니다. |
|
RedeliveryInterval |
시간(초) |
메시지로 인해 MDB 런타임 예외가 발생한 경우의 재전달 시도 간격입니다. |
|
SendBadMessagesToDMD |
true/false |
false |
전달 시도 횟수가 초과된 경우 자원 어댑터가 해당 메시지를 사용 불능 메시지 대상으로 보내야 할지를 나타냅니다. |
DeadMessageDestinationJndiName |
유효한 JNDI 이름 |
없음 |
JMS 공급자에 만들어진 대상의 JNDI 이름입니다. 이 값은 사용 불능 메시지를 위한 목표 대상입니다. ProviderIntegrationMode가 jndi로 지정된 경우에만 사용됩니다. |
DeadMessageDestinationClassName |
대상 객체의 클래스 이름 |
없음 |
ProviderIntegrationMode가 javabean으로 지정된 경우에 사용됩니다. |
DeadMessageDestinationProperties |
쉼표로 구분된 이름 값 쌍 |
없음 |
이 등록 정보는 javabean 등록 정보 이름 및 JMS 클라이언트의 대상 값을 지정합니다. 이는 ProviderIntegrationMode가 javabean으로 지정된 경우에만 사용됩니다. |
ReconnectAttempts |
정수 |
연결 시 예외 Listener에서 오류를 포착한 경우 다시 연결을 시도할 시간입니다. |
|
ReconnectInterval |
시간(초) |
다시 연결 시도 간격입니다. |