Sun Java System Application Server Enterprise Edition 8.2 관리 설명서

4장 JMS(Java Message Service) 자원 구성

이 장에서는 JMS(Java Message Service) API를 사용하는 응용 프로그램의 자원 구성 방법에 대해 설명합니다. 이 장은 다음 내용으로 구성되어 있습니다.

JMS 자원 정보

Application Server의 JMS 공급자

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 자원

JMS(Java Message Service) API에서는 두 종류의 관리 대상 객체를 사용합니다.

이러한 객체는 관리상의 목적으로 만들며 객체를 만드는 방법은 JMS 구현마다 다릅니다. Application Server에서 다음 작업을 수행합니다.

JMS 응용 프로그램에서는 JNDI API를 사용하여 연결 팩토리와 대상 자원에 액세스합니다. JMS 응용 프로그램은 대개 최소한 연결 팩토리 하나와 대상 하나를 사용합니다. 만들 자원을 알아보려면 응용 프로그램을 살펴보거나 응용 프로그램 개발자에게 문의하십시오.

연결 팩토리에는 다음과 같은 세 가지 유형이 있습니다.

대상에는 다음과 같은 두 가지 종류가 있습니다.

J2EE 1.4 Tutorial의 JMS 장에서는 이 두 가지 통신 유형과 JMS의 기타 요소를 자세히 설명합니다(http://java.sun.com/j2ee/1.4/docs/tutorial/doc/index.html 참조).

자원을 만드는 순서는 상관이 없습니다.

J2EE 응용 프로그램의 경우 다음과 같이 Application Server 배포 설명자의 연결 팩토리와 대상 자원을 지정합니다.

JMS 자원 및 커넥터 자원의 관계

Application Server는 jmsra라고 하는 시스템 자원 어댑터를 사용하여 JMS를 구현합니다. 사용자가 JMS 자원을 만들면 Application Server가 커넥터 자원을 자동으로 만들며 이는 관리 콘솔의 트리 보기에 있는 커넥터 노드에 표시됩니다.

사용자가 만든 JMS 연결 팩토리마다 Application Server가 커넥터 연결 풀과 연결 자원을 만듭니다. 사용자가 만든 JMS 대상마다 Application Server가 관리 객체 자원을 만듭니다. 사용자가 JMS 자원을 삭제하면 Application Server에서 커넥터 자원을 자동으로 삭제합니다.

JMS 자원 노드 대신 관리 콘솔의 커넥터 노드를 사용하여 JMS 시스템 자원 어댑터에 대한 커넥터 자원을 만들 수 있습니다.자세한 내용은 7 장, 커넥터 자원을 참조하십시오.

JMS 연결 팩토리

JMS 연결 팩토리는 응용 프로그램에서 다른 JMS 객체를 프로그래밍 방식으로 만들 수 있게 해주는 객체입니다. 이 관리 대상 객체는 ConnectionFactory, QueueConnectionFactoryTopicConnectionFactory 인터페이스를 구현합니다. Application Server 관리 콘솔을 사용하여 JMS 연결 팩토리를 만들고 편집하거나 삭제할 수 있습니다. 새 JMS 연결 팩토리를 만들면 팩토리 및 커넥터 자원에 대한 커넥터 연결 풀도 만들어집니다.

명령줄 유틸리티를 사용하여 JMS 연결 팩토리를 관리하려면 create-jms-resource, list-jms-resources 또는 delete-jms-resource 명령을 사용합니다.

JMS 대상 자원

JMS 대상은 메시지 저장소의 역할을 합니다. 관리 콘솔을 사용하여 JMS 대상 자원을 만들고 수정하거나 삭제할 수 있습니다. 새 JMS 대상 자원을 만들려면 자원 > JMS 자원 > 대상 자원을 선택합니다. 대상 자원 페이지에서 다음 사항을 지정할 수 있습니다.

명령줄 유틸리티를 사용하여 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) 설명서 페이지를 참조하십시오.


JMS 물리적 대상

작업 목적을 위해 항상 물리적인 대상을 만듭니다. 그러나 개발 및 테스트 단계 중에는 이 단계가 필요하지 않습니다. 응용 프로그램이 처음 대상 자원에 액세스할 때 Message Queue가 대상 자원의 이름 등록 정보에서 지정한 물리적 대상을 자동으로 만듭니다. 물리적 대상은 임시적이며 Message Queue 구성 등록 정보에서 지정한 기간 후에는 만료됩니다.

관리 콘솔에서 물리적 대상을 만들려면 구성 > 물리적 대상을 선택합니다. 물리적 대상 만들기 페이지에서 물리적 대상의 이름을 지정하고 대상의 유형(topic 또는 queue)을 선택합니다. 물리적 대상 페이지의 필드 및 등록 정보에 대한 자세한 내용은 관리 콘솔 온라인 도움말을 참조하십시오.

작업 목적을 위해 항상 물리적인 대상을 만듭니다. 그러나 개발 및 테스트 단계 중에는 이 단계가 필요하지 않습니다. 응용 프로그램에서 처음 대상 자원에 액세스할 때 대상 자원의 등록 정보에서 지정한 물리적 대상을 Message Queue에서 자동으로 만듭니다. 물리적 대상은 임시적이며 Message Queue 구성 등록 정보에서 지정한 기간 후에는 만료됩니다.

명령줄 유틸리티를 사용하여 JMS 물리적 대상을 관리하려면 create-jmsdest, flush-jmsdest 또는 delete-jmsdest 명령을 사용합니다.

JMS 공급자

JMS 공급자에 대한 일반 등록 정보 구성

관리 콘솔의 JMS 서비스 페이지를 사용하여 모든 JMS 연결에서 사용할 등록 정보를 구성합니다. 관리 콘솔에서 구성 > Java Message Service를 선택합니다. JMS 서비스 페이지에서 다음 일반 JMS 설정을 제어할 수 있습니다.

위의 모든 등록 정보 값은 런타임 시에도 업데이트할 수 있습니다. 그러나, 등록 정보가 업데이트된 후 만들어진 해당 연결 팩토리만 업데이트된 값을 갖습니다. 기존 연결 팩토리는 계속 원래 등록 정보 값을 갖습니다. 또한, 거의 대부분의 경우 해당 값을 적용하려면 Application Server를 다시 시작해야 합니다. Application Server를 다시 시작하지 않아도 업데이트할 수 있는 등록 정보는 기본 JMS 호스트뿐입니다.

명령줄 유틸리티를 사용하여 JMS 공급자를 관리하려면 set 또는 jms-ping 명령을 사용합니다.

원격 서버 액세스

공급자와 호스트를 원격 시스템으로 변경하면 모든 JMS 응용 프로그램이 원격 서버에서 실행됩니다. 로컬 서버와 하나 이상의 원격 서버를 모두 사용하려면 원격 서버에 액세스하는 연결을 만드는 AddressList 등록 정보를 사용하여 연결 팩토리 자원을 만듭니다.

외부 JMS 공급자

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용 일반 자원 어댑터 구성

응용 프로그램 서버의 관리 도구를 사용하여 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에 사용할 수 있어야 합니다.

  1. 커넥터 모듈을 배포한 것과 동일한 방식으로 일반 자원 어댑터를 배포합니다.

    이에 대한 작업 단계는 관리 콘솔 온라인 도움말을 참조하십시오. 배포 중 install-dir/lib/addons/resourceadapters/genericjmsra/genericra.rar을 일반 자원 어댑터의 위치로 지정해야 합니다. 또한, 자원 어댑터 등록 정보 절에 설명된 등록 정보를 지정해야 합니다.

  2. 커넥터 연결 풀을 만듭니다.

    이에 대한 작업 단계는 관리 콘솔 온라인 도움말을 참조하십시오. 새 커넥터 연결 풀 페이지의 자원 어댑터 콤보 상자에서 genericra를 선택하고 연결 정의 콤보 상자에서 javax.jms.QueueConnectionFactory를 선택합니다. 또한, ManagedConnectionFactory 등록 정보 절에 설명된 등록 정보를 지정합니다.

  3. 커넥터 자원을 만듭니다.

    이 작업에 대한 자세한 절차는 관리 콘솔 온라인 도움말을 참조하십시오. 새 커넥터 자원 페이지에서, 이전 단계에서 만든 풀을 선택합니다.

  4. 관리 대상 객체 자원을 만듭니다.

    이 작업에 대한 자세한 절차는 관리 콘솔 온라인 도움말을 참조하십시오. 새 관리 객체 자원 페이지에서 genericra를 자원 어댑터로, javax.jms.Queue를 자원 유형으로 선택합니다. 다음을 누르고 두 번째 페이지에서 등록 정보 추가를 누릅니다. 추가 등록 정보 테이블에서 DestinationProperties라는 새 등록 정보를 Name\\=clientQueue 값으로 지정합니다. 다른 등록 정보에 대한 자세한 내용은 관리 대상 객체 자원 등록 정보 절을 참조하십시오.

  5. 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";를 추가합니다.

자원 어댑터 등록 정보

다음 표는 자원 어댑터를 만들 때 사용할 등록 정보를 나타냅니다.

등록 정보 이름

유효 값

기본값

설명

ProviderIntegrationMode

javabean/jndi

javabean

자원 어댑터와 JMS 클라이언트 간의 통합 모드를 결정합니다. 

ConnectionFactoryClassName

Application Server 클래스 경로에 사용할 수 있는 클래스 이름. 예를 들면 다음과 같습니다. 

com.sun.messaging.ConnectionFactory

없음 

JMS 클라이언트의 javax.jms.ConnectionFactory 구현 클래스 이름입니다. ProviderIntegrationModejavabean으로 지정된 경우에 사용됩니다.

QueueConnectionFactoryClassName

Application Server 클래스 경로에 사용할 수 있는 클래스 이름. 예를 들면 다음과 같습니다. 

com.sun.messaging.QueueConnectionFactory

없음 

JMS 클라이언트의 javax.jms.QueueConnectionFactory 구현 클래스 이름입니다. ProviderIntegrationModejavabean으로 지정된 경우에 사용됩니다.

TopicConnectionFactoryClassName

Application Server 클래스 경로에 사용할 수 있는 클래스 이름. 예를 들면 다음과 같습니다. 

com.sun.messaging.TopicConnectionFactory

없음 

JMS 클라이언트의 javax.jms.TopicConnectionFactory 구현 클래스 이름입니다. ProviderIntegrationModejavabean으로 지정된 경우에 사용됩니다.

XAConnectionFactoryClassName

Application Server 클래스 경로에 사용할 수 있는 클래스 이름. 예를 들면 다음과 같습니다. 

com.sun.messaging.XAConnectionFactory

없음 

JMS 클라이언트의 javax.jms.ConnectionFactory 구현 클래스 이름입니다. ProviderIntegrationModejavabean으로 지정된 경우에 사용됩니다.

XAQueueConnectionFactoryClassName

Application Server 클래스 경로에 사용할 수 있는 클래스 이름. 예를 들면 다음과 같습니다. 

com.sun.messaging.XAQueueConnectionFactory

없음 

JMS 클라이언트의 javax.jms.XAQueueConnectionFactory 구현 클래스 이름입니다. ProviderIntegrationModejavabean으로 지정된 경우에 사용됩니다.

XATopicConnectionFactoryClassName

Application Server 클래스 경로에 사용할 수 있는 클래스 이름. 예를 들면 다음과 같습니다. 

com.sun.messaging.XATopicConnectionFactory

없음 

JMS 클라이언트의 javax.jms.XATopicConnectionFactory 구현 클래스 이름입니다. ProviderIntegrationModejavabean으로 지정된 경우에 사용됩니다.

TopicClassName

Application Server 클래스 경로에 사용할 수 있는 클래스 이름. 예를 들면 다음과 같습니다. 

com.sun.messaging.Topic

없음 

JMS 클라이언트의 javax.jms.Topic 구현 클래스 이름입니다. ProviderIntegrationModejavabean으로 지정된 경우에 사용됩니다.

QueueClassName

Application Server 클래스 경로에 사용할 수 있는 클래스 이름. 예를 들면 다음과 같습니다. 

 

com.sun.messaging.Queue

없음 

JMS 클라이언트의 javax.jms.Queue 구현 클래스 이름입니다. ProviderIntegrationModejavabean으로 지정된 경우에 사용됩니다.

SupportsXA

True/false

FALSE

JMS 클라이언트가 XA를 지원할지 여부를 지정합니다. 

ConnectionFactoryProperties

쉼표로 구분된 이름 값 쌍 

없음 

javabean 등록 정보 이름 및 JMS 클라이언트의 ConnectionFactory 값을 지정합니다. ProviderIntegrationModejavabean으로 지정된 경우에만 사용됩니다.

JndiProperties

쉼표로 구분된 이름 값 쌍 

없음 

JMS 공급자의 JNDI에 연결하는 데 사용할 JNDI 공급자 등록 정보를 지정합니다. ProviderIntegrationModejndi로 지정된 경우에만 사용됩니다.

CommonSetterMethodName

메소드 이름 

없음 

일부 JMS 공급업체가 자체 관리 대상 객체의 등록 정보를 설정하는 데 사용하는 일반 setter 메소드 이름을 지정합니다. ProviderIntegrationModejavabean으로 지정된 경우에만 사용됩니다. Sun Java System Message Queue의 경우 이 등록 정보의 이름은 setProperty입니다.

UserName

JMS 사용자 이름 

없음 

JMS 공급자 연결에 사용할 사용자 이름입니다. 

Password

JMS 사용자 비밀번호 

없음 

JMS 공급자 연결에 사용할 비밀번호입니다. 

RMPolicy

ProviderManaged 또는 OnePerPhysicalConnection

ProviderManaged

트랜잭션 관리자에서 XAResourceisSameRM 메소드를 사용하여 두 XAResources가 나타내는 자원 관리자 인스턴스가 동일한지 확인합니다.

RMPolicyProviderManaged(기본값)로 설정되면, JMS 공급자는 RMPolicy를 결정하게 되며 일반 자원 어댑터의 XAResource 래퍼는 isSameRM 호출을 메시지 대기열 공급자의 XA 자원 구현에 위임하기만 합니다. 이 기능은 대부분의 메시지 대기열 제품에 대해 완벽하게 작동해야 합니다.

IBM MQ 시리즈와 같은 일부 XAResource 구현은 물리적 연결당 하나의 자원 관리자를 사용합니다. 이 경우, 동일한 대기열 관리자에 대한 인바운드 및 아웃바운드 통신이 단일 트랜잭션 내에 있으면(예: MDB가 대상에 응답을 보냄) 문제가 발생합니다.

RMPolicyOnePerPhysicalConnection으로 설정되면, 일반 자원 어댑터에 있는 XAResource 래퍼 구현의 isSameRM은 래핑된 객체에 위임하기 전에 두 XAResource가 동일한 물리적 연결을 사용하는지 확인합니다. 이 등록 정보에 대한 자세한 내용은 Glassfish 웹 사이트에서 이슈 트래커 데이터베이스의 이슈 번호 5를 참조하십시오.

ManagedConnectionFactory 등록 정보

ManagedConnectionFactory 등록 정보는 connector-connection-pool을 만들 때 지정됩니다. 자원 어댑터를 만들 때 지정된 모든 ManagedConnectionFactory 등록 정보는 대체될 수 있습니다. ManagedConnectionFactory에만 사용할 수 있는 추가 등록 정보는 다음과 같습니다.

등록 정보 이름

유효 값

기본값

설명

ClientId

유효 클라이언트 아이디 

없음 

JMS 1.1 사양으로 지정된 ClientID입니다.

ConnectionFactoryJndiName

JNDI 이름 

없음 

JMS 공급자의 JNDI 트리에 바인딩된 연결 팩토리의 JNDI 이름입니다. 관리자는 JMS 공급자에 모든 연결 팩토리 등록 정보(clientID 제외)를 제공해야 합니다. 이 등록 정보 이름은 ProviderIntegrationModejndi로 지정된 경우에만 사용됩니다.

ConnectionValidationEnabled

true/false 

false 

true로 설정하면 자원 어댑터는 예외 Listener를 사용하여 연결 예외를 포착하고 CONNECTION_ERROR_OCCURED 이벤트를 Application Server에 보냅니다.

관리 대상 객체 자원 등록 정보

이 등록 정보는 관리 대상 객체 자원을 만들 때 지정됩니다. 관리 대상 객체 자원의 모든 자원 어댑터 등록 정보는 대체될 수 있습니다. 관리 대상 객체 자원에만 사용할 수 있는 추가 등록 정보는 다음과 같습니다.

등록 정보 이름

유효 값

기본값

설명

DestinationJndiName

JNDI 이름 

없음 

JMS 공급자의 JNDI 트리에 바인딩된 대상의 JNDI 이름입니다. 관리자는 JMS 공급자에 모든 등록 정보를 제공해야 합니다. 이 등록 정보 이름은 ProviderIntegrationModejndi로 지정된 경우에만 사용됩니다.

DestinationProperties

쉼표로 구분된 이름 값 쌍 

없음 

이 등록 정보는 javabean 등록 정보 이름 및 JMS 클라이언트의 대상 값을 지정합니다. ProviderIntegrationModejavabean으로 지정된 경우에만 사용됩니다.

활성화 사양 등록 정보

이 등록 정보는 MDB의 Sun 특정 배포 설명자에 activation-config-properties로 지정되어 있습니다. 활성화 사양의 모든 자원 어댑터 등록 정보는 대체될 수 있습니다. 활성화 사양에만 사용할 수 있는 추가 등록 정보는 다음과 같습니다.

등록 정보 이름

유효한 값

기본값

설명

MaxPoolSize

정수 

동시 메시지 전달을 수행하기 위해 자원 어댑터에서 내부적으로 만든 서버 세션 풀의 최대 크기입니다. 이 값은 MDB 객체의 최대 풀 크기와 같아야 합니다. 

MaxWaitTime

정수 

자원 어댑터는 이 등록 정보에 지정된 시간(초) 동안 내부 풀에서 서버 세션을 가져오기 위해 대기합니다. 이 제한이 초과되면 메시지 전달이 실패합니다. 

SubscriptionDurability

영구적 또는 비영구적 

비영구적 

JMS 1.1 사양에서 지정된 SubscriptionDurability입니다.

SubscriptionName

 

없음 

JMS 1.1 사양에서 지정된 SubscriptionName입니다.

MessageSelector

유효 메시지 선택기 

없음 

JMS 1.1 사양에서 지정된 MessageSelector입니다.

ClientID

유효 클라이언트 아이디 

없음 

JMS 1.1 사양에서 지정된 ClientID입니다.

ConnectionFactoryJndiName

유효 JNDI 이름 

없음 

JMS 공급자에 만들어진 연결 팩토리의 JNDI 이름입니다. 자원 어댑터가 이 연결 팩토리를 사용하여 메시지를 수신하기 위한 연결을 만듭니다. ProviderIntegrationModejndi로 지정된 경우에만 사용됩니다.

DestinationJndiName

유효 JNDI 이름 

없음 

JMS 공급자에 만들어진 대상의 JNDI 이름입니다. 자원 어댑터가 이 대상을 사용하여 메시지를 수신하기 위한 연결을 만듭니다. ProviderIntegrationModejndi로 지정된 경우에만 사용됩니다.

DestinationType

javax.jms.Queue 또는 javax.jms.Topic

null 

MDB가 수신할 대상 유형입니다. 

DestinationProperties

쉼표로 구분된 이름 값 쌍 

없음 

이 등록 정보는 javabean 등록 정보 이름 및 JMS 클라이언트의 대상 값을 지정합니다. ProviderIntegrationModejavabean으로 지정된 경우에만 사용됩니다.

RedeliveryAttempts

정수 

 

메시지로 인해 MDB 런타임 예외가 발생한 경우 메시지를 전달할 시간입니다. 

RedeliveryInterval

시간(초) 

 

메시지로 인해 MDB 런타임 예외가 발생한 경우의 재전달 시도 간격입니다. 

SendBadMessagesToDMD

true/false 

false 

전달 시도 횟수가 초과된 경우 자원 어댑터가 해당 메시지를 사용 불능 메시지 대상으로 보내야 할지를 나타냅니다. 

DeadMessageDestinationJndiName

유효한 JNDI 이름 

없음 

JMS 공급자에 만들어진 대상의 JNDI 이름입니다. 이 값은 사용 불능 메시지를 위한 목표 대상입니다. ProviderIntegrationModejndi로 지정된 경우에만 사용됩니다.

DeadMessageDestinationClassName

대상 객체의 클래스 이름 

없음 

ProviderIntegrationModejavabean으로 지정된 경우에 사용됩니다.

DeadMessageDestinationProperties

쉼표로 구분된 이름 값 쌍 

없음 

이 등록 정보는 javabean 등록 정보 이름 및 JMS 클라이언트의 대상 값을 지정합니다. 이는 ProviderIntegrationModejavabean으로 지정된 경우에만 사용됩니다.

ReconnectAttempts

정수 

 

연결 시 예외 Listener에서 오류를 포착한 경우 다시 연결을 시도할 시간입니다. 

ReconnectInterval

시간(초) 

 

다시 연결 시도 간격입니다.