메시징 문제점 해결 팁
이러한 팁은 WebSphere® 메시징 구성의 문제점을 해결하는 데 도움을 줍니다.
메시징 관련 문제점을 식별하고 해결하는 데 도움을 받기 위해 WebSphere Application Server 추적 및 로깅을 사용할 수 있습니다.
메시징과 관련된 문제점을 식별하고 해결하는 데 도움을 받기 위해
컴포넌트 추적(CTRACE) 설정에서 설명된 대로 WebSphere Application Server 추적 및
로깅 기능을 사용할 수 있습니다.
WebSphere Application Server 메시지 및 로그에서 IBM MQ 오류 메시지 또는 이유 코드를 발견하면 IBM MQ Information Center의 메시지 섹션을 참조하십시오.
문제점 진단 및 수정: 학습 자원에 있는 링크를 사용하여 문제점을 식별하고 문서화했는지 확인하십시오.
- WebSphere MQ 자원 어댑터 구성이 자동으로 업데이트되지 않고 수동 유지보수를 필요로 함
- 수정팩 설치 시 java.lang.ClassNotFoundException 예외가 발생함
- z/OS용 WebSphere MQ의 메시지가 JMS 애플리케이션에서 이용되고 있지 않음
- JMS 애플리케이션이 더 이상 메시지를 전송하거나 수신할 수 없음
- MDB 리스너 시작에 실패함
- 보안이 사용으로 설정된 JMS 애플리케이션 실행 중 문제점
Solaris에서 zh_TW.EUC 로케일이 설정되면 애플리케이션 서버가 시작되지 않음
- JMS 메시지 처리 중 서버 메모리 이용 및 java.lang.OutOfMemoryError 예외 발생
- TopicConnectionFactory 속성 충돌 오류
- WSEC5061E: SOAP 본문이 서명된 예외가 아님
- IBM MQ를 외부 JMS 제공자로 사용할 때 오류가 발생함
javax.jms.JMSException: MQJMS3024: MDB 리스너를 시작할 수 없음
WebSphere MQ 메시징 제공자 채널 프레임워크 메시지가 서버 시작 중 표시됨
WebSphere MQ 자원 어댑터 구성이 자동으로 업데이트되지 않고 수동 유지보수를 필요로 함
WebSphere Application Server 수정팩을 적용하면 일반적으로 IBM MQ 자원 어댑터가 자동으로 업데이트됩니다. 그러나 환경의 일부 노드에서 IBM MQ 자원 어댑터를 수동으로 업데이트한 경우 수정팩을 적용해도 해당 노드의 서버가 사용하는 자원 어댑터는 자동 업데이트되지 않습니다.
이 문제를 해결하려면 IBM MQ 자원 어댑터 관리의 내용을 참조하십시오.
수정팩 설치 시 java.lang.ClassNotFoundException 예외가 발생함
J2CA0043E: An exception occurred while trying to instantiate a ResourceAdapter
JavaBean instance for the installed ResourceAdapter defined by key #removed#
z/OS용 WebSphere MQ의 메시지가 JMS 애플리케이션에서 이용되고 있지 않음
z/OS용 WebSphere MQ의 메시지가 WebSphere Application Server에 배치되고 연결 팩토리 또는 활성화 스펙을 사용하는 JMS 애플리케이션에 의해 이용되고 있지 않습니다.
JMS 애플리케이션이 더 이상 메시지를 전송하거나 수신할 수 없음
- JMS(Java™ Message Service) 활성화 스펙을 통해 연결되는 하나 이상의 메시지 Bean
- JMS 연결 팩토리와 JMS 대상을 통해 연결되는 하나 이상의 엔터프라이즈 Bean
- 지정된 애플리케이션에 대한 JMS 자원 보기는 이 애플리케이션의 메시징 자원 패널을 참조하십시오.
- 지정된 기본 메시징 제공자 대상에 대한 애플리케이션 및 JMS 자원 보기는 이 대상의 애플리케이션 자원 패널을 참조하십시오.
MDB 리스너 시작에 실패함
WMSG0019E: Unable to start MDB Listener {0}, JMSDestination {1} : {2}
- 관리 자원이 올바르게 구성되었는지 확인하십시오. 예를 들어, 관리 콘솔을 사용하여 리스너 포트 특성 중 대상 JNDI 이름 및 연결 팩토리 JNDI 이름을 확인하십시오. 리스너 포트의 다른 특성, 대상 및 연결 팩토리가 정확한지 확인하십시오.
- 큐가 존재하고 JMS 서버에 추가되었는지 확인하십시오.
- 큐 관리자 및 JMS 서버가 시작되었는지 확인하십시오.
- 원격 큐 관리자 리스너가 시작되었는지 확인하십시오.
보안이 사용으로 설정된 경우 컴포넌트 관리 인증 별명이 메시지 구동 Bean이 사용하는 큐 연결 팩토리 또는 주제 연결 팩토리에서 지정되었는지 확인하십시오.
보안이 사용으로 설정된 경우 MDB 리스너를 시작하는 데 사용되는 사용자 ID에 적절한 권한이 부여되는지 확인하십시오. 자세한 정보는 보안이 사용으로 설정된 JMS 애플리케이션 실행 중 문제점의 내용을 참조하십시오.
보안이 사용으로 설정된 JMS 애플리케이션 실행 중 문제점
WMSG0019E: Unable to start MDB Listener PSSampleMDB, JMSDestination Sample/JMS/listen :
javax.jms.JMSSecurityException:
이 예제는 제공된 보안 신임 정보가 유효하지 않음을 나타냅니다. - 인증 메커니즘이 Application으로 설정되는 경우 애플리케이션은 유효한 신임 정보를 제공해야 합니다.
- 인증 메커니즘이 Container로 설정되는 경우
컨테이너 관리 인증 별명으로 JMS 연결 팩토리를 구성하고 연관된 사용자 ID 및 비밀번호가 유효한지 확인해야 합니다.
또는 bindings 전송 모드에서 실행 중일 때 커넥터 스레드 ID 지원을 이용할 수 있습니다.
![[AIX Solaris HP-UX Linux Windows]](../images/dist.gif)
![[IBM i]](../images/iseries.gif)
MQJMS2013 invalid security authentication supplied for MQQueueManager:
JMS 연결에서 JMS 제공자로
IBM MQ을 사용하고 바인딩 전송 모드를 사용하며
지정된 사용자가 WebSphere Application Server 프로세스를 위해 현재 로그온한 사용자가 아닌 경우
IBM MQ에 의한 JMS
바인딩 인증은 올바르지 않은 보안 인증 오류를 생성합니다. - 보안 신임 정보를 사용합니다. 이를 수행하려면 지정된 사용자가 WebSphere Application Server 프로세스를 위해 현재 로그온된 사용자인지 확인하십시오.
- 보안 신임 정보를 사용하지 않습니다. IBM MQ 연결 팩토리에서 Component-managed Authentication Alias 및 Container-managed Authentication Alias 특성이 설정되지 않는지 확인하십시오.
메시징 보안에 대한 자세한 정보는 메시지 보안의 내용을 참조하십시오.
![[AIX Solaris HP-UX Linux Windows]](../images/dist.gif)
Solaris에서 zh_TW.EUC 로케일이 설정되면 애플리케이션 서버가 시작되지 않음
Solaris에서 로케일을 zh_TW.EUC로 설정하고 IBM MQ를 JMS 제공자로 사용하는 경우 애플리케이션 서버가 시작되지 않을 수 있습니다.
이 문제점을 해결하려면 LANG 및 LC_ALL 변수를 zh_TW로 설정하십시오.
JMS 메시지 처리 중 서버 메모리 이용 및 java.lang.OutOfMemoryError 예외 발생
기본 메시징 제공자를 사용할 때 JMS 메시지는 애플리케이션 서버 프로세스 내에서 메시징 엔진에 의해 처리됩니다. 이 접근법은 애플리케이션 서버 JVM 힙에서 메모리를 이용합니다. 대형 메시지의 중요한 동시 처리가 있고 JVM 힙에 대해 사용 가능한 메모리의 양이 이 이벤트를 처리하기에 충분하지 않은 경우 java.lang.OutOfMemoryError 예외가 처리되고 애플리케이션 서버가 종료됩니다.
- 메시지를 동시에 처리하는 메시지 구동 Bean을 배치할 때 잠재적인 동시 엔드포인트별로 애플리케이션 서버 메모리를 추정하십시오. 동시에 메시지 요청을 처리하는 각 엔드포인트는 서버 JVM 힙에 최소 두 배 이상의 메시지 크기를 추가하고 특히 2단계 트랜잭션이 실행되는 경우 그 이상을 추가할 수 있음에 유의하십시오.
- WebSphere Application Server 관리 콘솔을 시작하십시오.
- Initial Heap Size 및 Maximum Heap Size 특성을 설정하여 애플리케이션 서버 JVM 힙에 사용 가능한 메모리의 양을 구성하십시오. 으로 이동한 다음
- Maximum concurrent endpoints 특성을 설정해서 메시지를 처리할 수 있는 동시 MDB 엔드포인트 수를 구성하십시오. 으로 이동한 후, 이 메시징 구동 Bean에 대한 활성화 스펙의
TopicConnectionFactory 속성 충돌 오류
WSVR0017E: Error encountered binding the J2EE resource, TopicConnectionFactory, as <JNDI_NAME>
from file:<RESOURCES_FILE> com.ibm.ws.runtime.component.binder.ResourceBindingException: invalid
configuration passed to resource binding logic. REASON: Failed to create connection factory:
Error raised constructing AdminObject, error code: TopicConnectionFactory attributes clash :
TopicConnectionFactory attributes clash
이 문제점은 등록자를 작성하는 데 사용되며 브로커 버전을 "기본"으로 지정하고 메시지 선택 값을 "브로커"로 지정하는 JMS 주제 연결 팩토리의 구성으로 인해 발생합니다. "기본" IBM MQ 브로커(MA0C SupportPac 브로커)는 "브로커" 메시지 선택을 지원하지 않습니다.
이 문제점을 해결하려면 메시지 선택 값을 "클라이언트"로 지정하도록 JMS 주제 연결 팩토리를 변경하십시오. 이는 IBM MQ 기본 브로커(MA0C SupportPac 브로커)에 대해 유일하게 지원되는 값입니다.
WSEC5061E: SOAP 본문이 서명된 예외가 아님
com.ibm.wsspi.wssecurity.SoapSecurityException: WSEC5061E: The SOAP Body is not signed.; null
- 웹 서비스 보안으로 구성되는 웹 서비스 애플리케이션이 WebSphere Application Server 보안이 사용으로 설정된 애플리케이션에서 실행되고 있습니다.
- 이 웹 서비스 애플리케이션은 JMS 전송을 사용하여 SOAP 요청을 대상 웹 서비스로 전송합니다.
- JMS 자원은 원격 IBM MQ 서버를 사용하여 IBM MQ 큐에 연결합니다.
- 같은 IBM MQ 서버를 통해 같은 큐를 사용하도록 구성되는 다른 동일 웹 서비스 애플리케이션이 WebSphere Application Server 보안이 사용으로 설정되지 않은 다른 애플리케이션 서버에서 실행되고 있습니다.
이 문제점은 원래 애플리케이션에서 전송된 요청이 같은 큐를 통하지만 보안이 사용으로 설정되지 않은 다른 애플리케이션 서버로 처리되는 경우 발생합니다.
- IBM MQ 서버에서 고유한 포트를 사용하여 고유 큐 관리자를 작성하십시오.
- 새 큐 관리자 및 포트를 사용하도록 JMS 자원을 재구성합니다. 예를 들어, IBM MQ 메시징 제공자에 대한 큐 연결 팩토리 구성에 설명된 대로 WebSphere Application Server 관리 콘솔을 사용하여 IBM MQ 큐 연결 팩토리의 특성을 변경합니다.
- 애플리케이션을 다시 실행합니다.
IBM MQ를 외부 JMS 제공자로 사용할 때 오류가 발생함
IBM MQ을 외부 JMS 제공자로 사용하고 사용자 관리 트랜잭션 내에서 IBM MQ 큐로 메시지를 전송하는 경우 트랜잭션이 커미트되기 전에 메시지가 대상에 도착할 수 있습니다. 이 문제점은 IBM MQ 자원 관리자가 사용자 관리 트랜잭션에 편입되지 않는 경우에 발생됩니다.
이 문제점을 해결하려면 컨테이너 관리 트랜잭션을 사용하십시오.
![[AIX Solaris HP-UX Linux Windows]](../images/dist.gif)
![[IBM i]](../images/iseries.gif)
javax.jms.JMSException: MQJMS3024: MDB 리스너를 시작할 수 없음
- jmsadmin 도구를 사용하여 tcf의 특성으로 클라이언트 ID를 설정합니다. 예를 들면, tcf(myTCF) clientid(myID)를 변경합니다.
- TopicConnection.setClientID()를 사용하여 클라이언트 ID를 프로그래밍 방식으로 설정합니다.
- 관리 콘솔을 사용하여 클라이언트 ID 필드를 관리적으로 설정하여 WebSphere MQ 메시징 제공자 주제 연결 팩토리 설정를 수정합니다.
![[z/OS]](../images/ngzos.gif)
WebSphere MQ 메시징 제공자 채널 프레임워크 메시지가 서버 시작 중 표시됨
다음 메시지는 후속 재시도에서 연결에 성공한 경우라도 서버 시작 중 제어 영역 부속 요소(CRA) 프로세스에서 다음 메시지가 여러 번 표시될 수 있습니다. 이 메시지는 z/OS TCP 프록시 채널이 비동기 방식으로 시작됨으로 인해 발행되고 오류가 발생했음을 나타내지는 않습니다.
Trace: 2009/06/17 08:24:41.434 01 t=9C6B58 c=UNK key=P8 (00000011)
Description: Log Java Message
Message: CHFW0030E: Error starting chain _InboundTCPProxyBridgeService because
of exception com.ibm.wsspi.channel.framework.exception.RetryableChannelException:
An exception was thrown when attempting to start the TCPProxyChannel
com.ibm.ws.channel.framework.imp l.ChannelFrameworkImpl
이러한 메시지로 다음 예와 비슷한 FFDC(First Failure
Data Capture) 출력이 발생할 수 있습니다. Exception = com.ibm.wsspi.channel.framework.exception.RetryableChannelException
Source = com.ibm.ws.channel.framework.impl.ChannelFrameworkImpl.startChainInternal
probeid = 2577
Stack Dump = com.ibm.wsspi.channel.framework.exception.RetryableChannelException:
An exception was thrown when attempting to start the TCPProxyChannel
at com.ibm.ws.tcpchannelproxy.jfap.impl.TCPProxyInboundChannel.
start(TCPProxyInboundChannel.java:153)
at com.ibm.ws.channel.framework.impl.ChannelFrameworkImpl.
startChannelInChain(ChannelFrameworkImpl.java:1410)
at com.ibm.ws.channel.framework.impl.ChannelFrameworkImpl.
startChainInternal(ChannelFrameworkImpl.java:2863)
at com.ibm.ws.channel.framework.impl.WSChannelFrameworkImpl.
startChainInternal(WSChannelFrameworkImpl.java:960)
at com.ibm.ws.channel.framework.impl.ChannelFrameworkImpl.
startChainInternal(ChannelFrameworkImpl.java:2794)
at com.ibm.ws.channel.framework.impl.ChannelFrameworkImpl.
startChain(ChannelFrameworkImpl.java:2779)
at com.ibm.ws.runtime.component.ChannelFrameworkServiceImpl.
startChain(ChannelFrameworkServiceImpl.java:666)
at com.ibm.ws.sib.jfapchannel.framework.impl.ChannelFrameworkReference$TCPProxy
BridgeServiceInboundChainStartupRunnable.run(ChannelFrameworkReference.java:1641)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1550)
Caused by: com.ibm.ws.tcpchannelproxy.jfap.NotYetInitializedException:
Server is not yet initialized
at com.ibm.ws.tcpchannelproxy.jfap.TCPProxyBridgeServicesImpl.
startListening(TCPProxyBridgeServicesImpl.java:558)
at com.ibm.ws.tcpchannelproxy.jfap.impl.TCPProxyInboundChannel.
start(TCPProxyInboundChannel.java:131)
... 8 more
Trace: 2009/06/17 08:24:51.449 01 t=9C6B58 c=UNK key=P8 (13007002)
ThreadId: 00000003
FunctionName: com.ibm.ws.channel.framework.impl.WSChannelFrameworkImpl
SourceId: com.ibm.ws.channel.framework.impl.WSChannelFrameworkImpl
Category: AUDIT
ExtendedMessage: BBOO0222I: CHFW0019I: The Transport Channel Service has started
chain _InboundTCPProxyBridgeService.