7.24. 리소스 어댑터
Jakarta Connectors Resource Adapter를 사용하면 애플리케이션이 모든 메시징 공급자와 통신할 수 있습니다. Jakarta EE 구성 요소(예: Jakarta) 및 기타 Jakarta Enterprise Cryostats 및 Servlet도 메시지를 보내거나 수신할 수 있는 방법을 구성합니다.
7.24.1. IBM MQ Resource Adapter 배포 링크 복사링크가 클립보드에 복사되었습니다!
IBM MQ는 분산 시스템의 애플리케이션이 서로 통신할 수 있는 IBM의 메시징 오리엔드 미들웨어(MOM) 제품입니다. 이는 메시지 및 메시지 큐를 사용하여 수행됩니다. IBM MQ는 메시지 큐에 메시지를 전달하고 메시지 채널을 사용하여 다른 대기열 관리자에게 데이터를 전송합니다. IBM MQ에 대한 자세한 내용은 IBM MQ on the IBM products website를 참조하십시오.
요약
IBM MQ는 JBoss EAP 8.0의 외부 Java Message Service 공급자로 구성할 수 있습니다. 이 섹션에서는 JBoss EAP에서 IBM MQ 리소스 어댑터를 배포하고 구성하는 단계를 설명합니다. 이 배포 및 구성은 관리 CLI 도구 또는 웹 기반 관리 콘솔을 사용하여 수행할 수 있습니다. IBM MQ의 지원되는 구성에 대한 최신 정보는 JBoss EAP 지원 구성을 참조하십시오.
구성 변경 사항을 적용하려면 IBM MQ 리소스 어댑터를 구성한 후 시스템을 다시 시작해야 합니다.
JBoss EAP 8.0은 자카르타 EE 10 구현이므로 모든 EE API에 사용되는 패키지가 javax에서 jakarta로 변경되었으며 Jakarta EE 10 호환 리소스 어댑터가 필요합니다. JBoss EAP 7.x 이전 버전에서 IBM MQ Resource 어댑터를 사용하는 경우 이 jakarta 네임스페이스를 사용하는 IBM MQ Resource Adapter인 wmq.jakarta.jmsra.rar 를 사용해야 합니다.
-
wmq.jmsra.rar에 대한 이전 리소스 어댑터 구성을 제거 및 배포 해제하고wmq.jakarta.jmsra.rar를 사용합니다. -
wmq.jakarta.jmsra.rar를 배포하고 이 섹션에 있는 단계에 따라 를 구성합니다.
사전 요구 사항
시작하기 전에 IBM MQ 리소스 어댑터의 버전을 확인하고 구성 속성을 이해해야 합니다.
-
IBM MQ 리소스 어댑터는
wmq.jakarta.jmsra.rar라는 리소스 아카이브(RAR) 파일로 제공됩니다./opt/mqm/java/lib/jca/파일을 가져올 수 있습니다. JBoss EAP의 각 릴리스에서 지원되는 특정 버전에 대한 자세한 내용은 JBoss EAP 지원 구성 을 참조하십시오.wmq.jakarta.jmsra.rar에서 wmq.jakarta.jmsra.rar 다음 IBM MQ 구성 값을 알고 있어야 합니다. 이러한 값에 대한 자세한 내용은 IBM MQ 제품 설명서를 참조하십시오.
- MQ_QUEUE_MANAGER: IBM MQ 큐 관리자의 이름
- MQ_HOST_NAME: IBM MQ 큐 관리자 연결에 사용되는 호스트 이름입니다.
- MQ_CHANNEL_NAME: IBM MQ 큐 관리자 연결에 사용되는 서버 채널
- MQ_QUEUE_NAME: 대상 대기열의 이름입니다.
- MQ_TOPIC_NAME: 대상 주제의 이름
- MQ_PORT: IBM MQ 큐 관리자 연결에 사용되는 포트
- MQ_CLIENT: 전송 유형
아웃바운드 연결의 경우 다음 구성 값도 숙지해야 합니다.
- MQ_CONNECTIONFACTORY_NAME: 원격 시스템에 대한 연결을 제공할 연결 팩토리 인스턴스의 이름입니다.
프로세스
다음은 IBM에서 제공하는 기본 구성이며 변경될 수 있습니다. 자세한 내용은 IBM MQ 설명서를 참조하십시오.
-
먼저
wmq.jakarta.jmsra.rar파일을EAP_HOME/standalone/deployments/디렉터리에 복사하여 리소스 어댑터를 수동으로 배포합니다. 다음으로 관리 CLI를 사용하여 리소스 어댑터를 추가하고 구성합니다.
/subsystem=resource-adapters/resource-adapter=wmq.jakarta.jmsra.rar:add(archive=wmq.jakarta.jmsra.rar, transaction-support=XATransaction)transaction-support요소는XATransaction으로 설정되었습니다. 트랜잭션을 사용하는 경우 아래 예제와 같이 XA 복구 데이터 소스의 보안 도메인을 제공해야 합니다./subsystem=resource-adapters/resource-adapter=test/connection-definitions=test:write-attribute(name=recovery-security-domain,value=myDomain)XA 복구에 대한 자세한 내용은 JBoss EAP 7.4 구성 가이드의 XA 복구 구성을 참조하십시오.
배포가 아닌 경우 트랜잭션
지원값을NoTransaction으로 변경합니다./subsystem=resource-adapters/resource-adapter=wmq.jakarta.jmsra.rar:add(archive=wmq.jakarta.jmsra.rar, transaction-support=NoTransaction)이제 리소스 어댑터가 생성되었으므로 필요한 구성 요소를 추가할 수 있습니다.
큐에 대한
admin-object를 추가하고 해당 속성을 구성합니다./subsystem=resource-adapters/resource-adapter=wmq.jakarta.jmsra.rar/admin-objects=queue-ao:add(class-name=com.ibm.mq.jakarta.connector.outbound.MQQueueProxy, jndi-name=java:jboss/MQ_QUEUE_NAME) /subsystem=resource-adapters/resource-adapter=wmq.jakarta.jmsra.rar/admin-objects=queue-ao/config-properties=baseQueueName:add(value=MQ_QUEUE_NAME) /subsystem=resource-adapters/resource-adapter=wmq.jakarta.jmsra.rar/admin-objects=queue-ao/config-properties=baseQueueManagerName:add(value=MQ_QUEUE_MANAGER)주제의
admin-object를 추가하고 해당 속성을 구성합니다./subsystem=resource-adapters/resource-adapter=wmq.jakarta.jmsra.rar/admin-objects=topic-ao:add(class-name=com.ibm.mq.jakarta.connector.outbound.MQTopicProxy, jndi-name=java:jboss/MQ_TOPIC_NAME) /subsystem=resource-adapters/resource-adapter=wmq.jakarta.jmsra.rar/admin-objects=topic-ao/config-properties=baseTopicName:add(value=MQ_TOPIC_NAME) /subsystem=resource-adapters/resource-adapter=wmq.jakarta.jmsra.rar/admin-objects=topic-ao/config-properties=brokerPubQueueManager:add(value=MQ_QUEUE_MANAGER)관리되는 연결 팩토리에 대한 연결 정의를 추가하고 해당 속성을 구성합니다.
/subsystem=resource-adapters/resource-adapter=wmq.jakarta.jmsra.rar/connection-definitions=mq-cd:add(class-name=com.ibm.mq.jakarta.connector.outbound.ManagedConnectionFactoryImpl, jndi-name=java:jboss/MQ_CONNECTIONFACTORY_NAME, tracking=false) /subsystem=resource-adapters/resource-adapter=wmq.jakarta.jmsra.rar/connection-definitions=mq-cd/config-properties=hostName:add(value=MQ_HOST_NAME) /subsystem=resource-adapters/resource-adapter=wmq.jakarta.jmsra.rar/connection-definitions=mq-cd/config-properties=port:add(value=MQ_PORT) /subsystem=resource-adapters/resource-adapter=wmq.jakarta.jmsra.rar/connection-definitions=mq-cd/config-properties=channel:add(value=MQ_CHANNEL_NAME) /subsystem=resource-adapters/resource-adapter=wmq.jakarta.jmsra.rar/connection-definitions=mq-cd/config-properties=transportType:add(value=MQ_CLIENT) /subsystem=resource-adapters/resource-adapter=wmq.jakarta.jmsra.rar/connection-definitions=mq-cd/config-properties=queueManager:add(value=MQ_QUEUE_MANAGER)
JBoss EAP의 OVS3 메시징 시스템의 기본 공급자를 JBoss EAP 8.0 메시징 시스템에서 IBM MQ로 변경하려면 관리 CLI를 사용하여 다음과 같이 Cryostat
3하위 시스템을 수정합니다./subsystem=ejb3:write-attribute(name=default-resource-adapter-name,value=wmq.jakarta.jmsra.rar)다음과 같이 Cryostat 코드에서
@ActivationConfigProperty및@ResourceAdapter주석을 구성합니다.@MessageDriven(name="IbmMqMdb", activationConfig = { @ActivationConfigProperty(propertyName = "destinationType",propertyValue = "jakarta.jms.Queue"), @ActivationConfigProperty(propertyName = "useJNDI", propertyValue = "false"), @ActivationConfigProperty(propertyName = "hostName", propertyValue = "MQ_HOST_NAME"), @ActivationConfigProperty(propertyName = "port", propertyValue = "MQ_PORT"), @ActivationConfigProperty(propertyName = "channel", propertyValue = "MQ_CHANNEL_NAME"), @ActivationConfigProperty(propertyName = "queueManager", propertyValue = "MQ_QUEUE_MANAGER"), @ActivationConfigProperty(propertyName = "destination", propertyValue = "MQ_QUEUE_NAME"), @ActivationConfigProperty(propertyName = "transportType", propertyValue = "MQ_CLIENT") }) @ResourceAdapter(value = "wmq.jakarta.jmsra-VERSION.rar") @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) public class IbmMqMdb implements MessageListener { }@ResourceAdapter값의 VERSION 을 RAR 이름에 있는 실제 버전으로 교체해야 합니다.리소스 어댑터를 활성화합니다.
/subsystem=resource-adapters/resource-adapter=wmq.jakarta.jmsra.rar:activate()
7.24.1.1. IBM MQ 리소스 어댑터의 제한 사항 및 알려진 문제 링크 복사링크가 클립보드에 복사되었습니다!
다음 표에는 IBM MQ 리소스 어댑터의 알려진 문제가 나열되어 있습니다. version 열의 확인 표시를 통해 해당 리소스 어댑터 버전에 문제가 있음을 나타냅니다.
| JIRA | 문제에 대한 설명 | IBM MQ 9 |
|---|---|---|
|
IBM MQ 리소스 어댑터는 | ✔ | |
| IBM MQ의 메시지 속성 이름에 다음과 같은 제한 사항이 적용됩니다.
메시지 속성 이름 제한 사항의 전체 목록은 IBM MQ, 버전 9.0 의 속성 이름 제한 사항을 참조하십시오. | ✔ | |
|
| ✔ | |
|
IBM MQ 리소스 어댑터를 사용하여
| ✔ | |
|
IBM MQ 리소스 어댑터는 연결이 시작되기 전에도 큐 및 주제의 메시지를 읽을 수 있습니다. 즉, 사용자가 연결을 시작하기 전에 메시지를 사용할 수 있습니다. 이 문제를 방지하려면 IBM MQ 리소스 어댑터에서 생성한 연결 팩토리가 아닌 | ✔ | |
|
< Cryostat
다음 코드 예제에서는
| ✔ | |
|
JMS 사양에 따라 | ✔ | |
|
| ✔ | |
|
| ✔ | |
|
IBM MQ 리소스 어댑터는 잘못된 인증 정보를 사용할 때
다음은 이 문제를 일으킬 수 있는 코드의 예입니다.
| ✔ | |
|
큐 또는 주제 조회에 사용되는 JNDI 이름이 | ✔ | |
|
| ✔ | |
|
| ✔ | |
|
연결을 종료한 다음 동일한
이 문제는 동일한 | ✔ | |
| 컨테이너 관리 트랜잭션(CMT)에서 상태 저장 세션 빈이 메시지를 주제로 보내려고 하면 다음 메시지와 함께 메시지 전송이 실패합니다.
스택 추적은 다음 예외로 인해 발생할 수 있음을 보여줍니다.
| ||
|
예를 들어, | ✔ |
7.24.2. Apache Log4j 버전 1 API 제거 링크 복사링크가 클립보드에 복사되었습니다!
JBoss EAP 8부터 Apache Log4j 버전 1 API에 대한 지원이 중지되었습니다. log4j.jar 및 log4j 구성을 패키징하지 않은 모든 애플리케이션을 업데이트해야 합니다.
영향:
로그 메시지는 로깅 하위 시스템을 기반으로 더 이상 라우팅되지 않습니다. 애플리케이션이 log4j.jar 패키징하지 않고 다음 명령문 중 하나라도 true인 경우 마이그레이션 변경 사항이 필요합니다.
-
배포에서
log4j를 사용하고log4j구성 파일을 포함하지 않는 경우 새 로깅 facade로 마이그레이션하거나log4j구성을 배포에 추가해야 합니다. -
배포에서
log4j.xml,log4j.properties또는jboss-log4j.xml파일을 사용하는 경우 애플리케이션에log4j.jar를 패키징하지 않습니다.jboss-log4j.xml파일인 경우 파일 이름을log4j.xml로 변경해야합니다. -
custom-handler의 JBoss EAP Logging 하위 시스템에서
log4jv1 appender를 사용하면 더 이상 지원되지 않습니다. -
애플리케이션 클래스가
org.apache.log4j.Logger와 같은 클래스를 가져오는 경우. -
애플리케이션에
jboss-deployment-structure.xml이 포함되어 있거나MANIFEST.MF에org.jboss.log4j.logmanager에 대한 모듈 종속성을 선언하는Dependencies가 지정된 경우 이러한 종속 항목을 제거해야 합니다.
마이그레이션:
-
Apache
Log4jv2클래스를 사용하도록 애플리케이션 클래스를 업데이트하거나 JBoss EAP 8에서 제공하는 다른 로깅 API 중 하나를 사용합니다. -
org.apache.log4j.Logger(log4j v1)클래스를org.apache.logging.log4j.Logger(log4j v2)로 변경합니다. 애플리케이션 패키지
log4j.properties,log4j.xml또는jboss-log4j.xml인 경우::- JBoss EAP 구성에서 로깅을 구성합니다.
-
애플리케이션에서
log4jv2구성 파일이 지원되지 않으므로 애플리케이션에서logging.properties를 구성합니다.
또는
-
로깅 API의 JBoss EAP 8에 따라 대신 Apache
Log4j버전 1 JAR을 애플리케이션에 패키징합니다. 로깅 하위 시스템의jboss-deployment-structure.xml exclude-subsystems를 통해 애플리케이션에서 JBoss Logging API를 제외할 수도 있습니다.
추가 세부 정보:
- 특정 배포에 대한 암시적 로깅 종속 항목 비활성화
-
애플리케이션의
jboss-deployment-structure.xml에서는 다음과 같은 로깅 하위 시스템을 제외하도록exclude-subsystems를 구성합니다.
-
애플리케이션의
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
<deployment>
<exclude-subsystems>
<subsystem name="logging"/>
</exclude-subsystems>
</deployment>
</jboss-deployment-structure>
-
애플리케이션이 EAR 파일이고
example.war라는 하위 배포가 있는 경우,jboss-deployment-structure.xml파일은 EAR 파일 위치/ META-INF/jboss-deployment-structure.xml에 있으며 로깅 하위 시스템은 다음과 같은 하위 배포에서 선언하여 제외됩니다.
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
<sub-deployment name="example.war">
<exclude-subsystems>
<subsystem name="logging"/>
</exclude-subsystems>
</sub-deployment>
</jboss-deployment-structure>
- 모든 배포에 대한 암시적 로깅 종속 항목 비활성화
기본적으로 배포에서 로깅 API를 사용할 수 없도록 하려면 다음 CLI 명령을 사용하여
add-logging-api-dependencies를false로 설정합니다./subsystem=logging:write-attribute(name="add-logging-api-dependencies", value="false")JBoss Module 및 Logging API를 종속성으로 설정하려면
jboss-deployment-structure.xml또는MANIFEST.MF구성 파일을 수정합니다.
<subsystem xmlns="urn:jboss:domain:logging:8.0">
<add-logging-api-dependencies value="false"/>
...
</subsystem>
애플리케이션에서 Apache Log4j v1 JAR 및 log4j 구성을 패키징하는 애플리케이션: * 애플리케이션 로깅이 더 이상 EAP에서 관리되지 않는 경우 애플리케이션 관리입니다. * 로깅 프레임워크가 특정 로그 파일에 작성될 것으로 예상되므로 애플리케이션이 server.log 에 예기치 않은 결과를 쓰려고 시도하지 않아야 합니다.
자세한 내용은 JBoss EAP 8.0에서 Apache Log4j 버전 1이 더 이상 제공되지 않음을 참조하십시오.