Message Queue 4.4 업데이트 1에는 새 버그 수정이 포함되고 Message Queue 4.x의 이전 릴리스에서 수정된 버그가 통합되어 있습니다.
다음 절에서는 각 릴리스에서 해결된 버그를 소개합니다
다음 표는 Message Queue 4.4 업데이트 1에서 해결된 버그를 설명합니다. 이 중 일부는 "(OpenMQ)"라고 표시되어 있습니다. 이는 해당 문제가 Sun GlassFish Message Queue을 기반으로 하는 Open Message Queue 오픈 소스 프로젝트에서 해결되었음을 나타냅니다.
표 1–7 Message Queue 4.4 업데이트 1에서 해결된 버그
버그 |
설명 |
---|---|
6590909 |
주소 목록을 덮어쓸 때 DIRECT 모드 MDB가 원격 브로커에 연결하지 않음 |
6616704 |
한 세션 안에서 다수의 소비자가 생성된 경우 브로커 메모리 증가 |
6745761 |
동일한 XA TX(JMSJCA 사용)에서 두 연결을 사용할 때 XAResource.isSameRM()이 True를 반환해야 함 |
6745763 |
동일한 XA TX(JMSRA DIRECT 모드)에서 두 연결을 사용할 때 XAResource.isSameRM()이 True를 반환해야 함 |
6745768 |
동일한 XA TX(JMSRA LOCAL/REMOTE)에서 두 연결을 사용할 때 XAResource.isSameRM()이 True를 반환해야 함 |
6760450 |
MQ(GF) 인스턴스 중지 없이 시스템을 재부팅할 경우 메시지 저장소가 손상됨 |
6766241 |
UMS: SendMsg.html AJAX 예제가 기본 컨텍스트 루트로 /ums를 사용함. /imqums를 사용해야 함 |
6766852 |
DirectXAResource가 브로커 CONFLICT 상태를 "TxID가 이미 사용 중임"이라고 해석함 |
6799428 |
DMQ의 비영속 메시지/비지속 예치 메시지를 사용할 수는 없으나 탐색은 가능함 |
6799428 |
DMQ의 비영속 메시지/비지속 예치 메시지를 사용할 수는 없으나 탐색은 가능함 |
6809353 |
posgtresql(8.1)이 있는 openmq 4.3 HA가 작동하지 않음(imqbrokerd를 시작할 수 없음) |
6809750 |
clientId 연결에 대한 연결 풀링(JMSRA로부터)이 작동하지 않음 |
6812198 |
MQ 토픽 메트릭을 사용한 모니터링에서 클래스캐스트 예외 발생 |
6832000 |
MQ reapExcessConnection JDBC 연결에서 높은 CPU 스핀 발생 |
6833109 |
JDK6이 있는 AIX에서 MQClusterMonitor JMX 샘플 응용 프로그램 예외 발생 |
6835420 |
NoGCDefault 기본값이 정확하지 않게 산출되었습니다. 메모리가 부족할 때 과도한 GC가 발생할 수 있습니다. |
6852018 |
오류 메시지 "지속 가능 소비자{0}을(를) 추가할 수 없습니다. 연결에 ClientID가 설정되지 않았습니다." 잘못 읽힘 |
6856991 |
브로커 재시작 후 지속 가능 소비자 PREPARED 트랜잭션을 롤백하면 NullPointerException 발생 |
6874125 |
경고: MQJMSRA_DC2001: connectionId=555670328604044289:_destroy():가 연결에서 호출됨... |
6878945 |
RFE: JMSBridge:는 사용자 이름/암호를 지정하여 연결 팩토리로부터 연결을 생성할 수 있도록 함 |
6881493 |
HA 브로커에 대해 관리 임시 대상이 저장되지 않아야 함 |
6881753 |
RFE JMSBridge:이 각 메시지를 대상으로 전송하기 전에 jmsbridge 이름으로 해당 메시지를 태깅할 수 있도록 함 |
6884673 |
MQ 4.4 Broker가 MQ 3.7/3.6 Broker와의 클러스터 연결을 설정할 수 없음 |
6886390 |
DMQ로 이동한 영속/Txn 게시 메시지는 DMQ로부터 해당 메시지를 소비할 때 'mq.sys.dmq 없음' 오류를 초래할 수 있음 |
6886515 |
JMX를 사용하여 내장 브로커에서 대상을 삭제할 때 AccessControlException 발생 |
6890628 |
브로커 속성 "imq.autocreate.destination.isLocalOnly=true" 설정이 유효하지 않음 |
6891615 |
glassfish에서 브로커 4.3을 실행할 때 선택기가 작동하지 않는 경우가 있음 |
6891624 |
Msgs 'Remote'가 'imqcmd list dst'의 'Count'보다 커짐 |
6891629 |
선택기에서 산술적 예외 발생 시 사용자가 이해하기 쉬운 메시지 필요 |
6891717 |
ifimq.transaction.autorollback=true,autorollback PREPARED ack가 명확하지 않아 TransactionAckExistEx 발생 |
6891802 |
"[B4061]:Can not use Transaction ID..currently in use"(트랜잭션 ID를 사용할 수 없음. 현재 사용 중임)가 원격 tx ack를 인수한 후 브로커 재시작 시 표시됨 |
6892512 |
메모리 누출: 임시 대상이 tempDest.delete() 호출 시 연결에서 제거되지 않음 |
6895040 |
마스터 브로커에 임시 대상이 있는 경우 uidprefix 잠금 시간 초과 후 시작할 때 슬레이브 브로커가 uidprefix를 가져오지 못함 |
6896230 |
슬레이브와 동기화한 후 마스터 브로커를 재시작하는 동안 마스터 브로커에서 생성된 새 소비자가 일부에 전파되지 않을 수 있음 |
6896764 |
TransactionAcknowledgement의 equals 메소드가 올바르지 않음 |
6898355 |
인수가 완료될 때까지 대기하지 않고 브로커를 재시작할 때 클러스터 managr init에서 인수 잠금이 재설정됨 |
6901405 |
RFE: 지정한 경우 JDBC 벤더 정보 및 벤더 속성 기록 |
16(OpenMQ) |
glassfish에서 브로커 4.3을 실행할 때 선택기가 작동하지 않는 경우가 있음 |
17(OpenMQ) |
posgtresql(8.1)이 있는 openmq 4.3 HA가 작동하지 않음(imqbrokerd를 시작할 수 없음) |
22(OpenMQ) |
설치 프로그램이 존재하지 않는 바이너리를 참조하고 실패함 |
25(OpenMQ) |
TemporaryTopic 생성 시 메모리 누출 |
29(OpenMQ) |
브로커 분리 |
30(OpenMQ) |
Msgs 'Remote'가 'imqcmd list dst'의 'Count'보다 커짐 |
31(OpenMQ) |
선택기에서 산술적 예외가 발생한 경우 사용자가 이해하기 쉬운 메시지 필요 |
32(OpenMQ) |
int-> long 오버플로우 해결 |
33(OpenMQ) |
ja 로케일에서 실행 시 OpenMQ 설치 프로그램: "Invalid SwiXML Descriptor" 오류 |
다음 표는 Message Queue 4.4에서 해결된 버그를 설명합니다.
표 1–8 Message Queue 4.4에서 해결된 버그
버그 |
설명 |
---|---|
6242247 |
두 브로커가 모두 동일한 이름이 사용된 시스템에 있는 경우 MQ 클러스터에 마스터 브로커 시작 및 정지 |
6760937 |
브로커가 다시 시작되는 경우 DB에 다시 연결되지 않음 |
6763252 |
브로커가 만료/제거된 메시지를 인식할 때 NPE가 아닌 의미 있는 메시지를 기록해야 함 |
6765410 |
마스터 브로커가 로컬 인터레스트를 2회 보내고 이로 인해 영구 가입이 이미 활성화된 슬레이브 예외가 발생함 |
6796506 |
원격 PREPARE 회신 수신 시 시간 초과된 경우 롤백 이후 원격 PREPARED 메시지가 다시 전달되지 않음 |
6807708 |
마스터 브로커를 실행하지 않는 경우 임시 대상 삭제에 실패함 |
6812037 |
RFE: MQMessageListenerFunc가 오류를 반환할 경우 afterMessageDelivery에 MQ_CALLBACK_RUNTIME_ERROR 전달 |
6812755 |
MessageDelivery 콜백에서 오류를 반환할 경우 양호 수준인 메시지가 경고여야 함 |
6816023 |
Message.setStringProperty() 예외에서 부적합한 문자 예외에 속성 이름을 표시하지 않음 |
6819095 |
RFE: 클러스터가 입출력 스트림 버퍼 크기 및 TcpNoDelay 설정을 지원해야 함 |
6820585 |
'imqcmd list txn'이 원격 브로커 완료 대기 중 COMMITTED 클러스터 트랜잭션을 표시하지 않음 |
6820588 |
로컬 및 원격 메시지를 모두 소비하는 클러스터 트랜잭션이 대기 상태에서 COMMITTED로 유지됨 |
6821639 |
MQRA-DIRECT 모드에 대한 AS 복구 중 rollback/commitTransaction시 NPE 발생 |
6823364 |
RFE: Solaris에서 C-API 컴파일러를 Sun Studio 12로 업그레이드 |
6829113 |
Tuxedo TM 롤백에서 과도한 부하로 트랜잭션이 시간 초과되었을 때 ConcurrentModificationException 발생 |
6832197 |
비 트랜잭션 원격 ack에서 클라이언트가 ackack를 요청하지 않는 경우 원격 응답을 대기하지 않아야 함 |
6834735 |
START 상태에서 Tuxedo TM 시간 초과 시 의미를 알 수 없는 로그 메시지 "Unexpected Broker Interal Error"(예기치 않은 브로커 내부 오류) 발생 |
6836364 |
와일드카드 가입자의 주제가 가입자보다 먼저 생성된 경우 해당 가입자가 원격 메시지를 수신하지 못함 |
6836691 |
XA 수신기 롤백 후 msg를 커밋하면 수신에서 HA(JCAPS):msg가 이미 예외를 제거함 |
6836749 |
HA(JCAPS): durables 중 하나가 메시지를 롤백한 다음 완결한 후 다시 수신 시 저장소에 ack가 있는 예외 발생 |
6837671 |
HA(JCAPS): 성공적인 커밋 후 XAResourceImpl.rollback을 수행할 때 커밋된 메시지를 계속하여 다시 전달함 |
6839193 |
RFE: C++ 컴파일러를 Visual Studio 2008 SP1로 업그레이드 |
6845625 |
원격 소비자가 반복적으로 생성/종료되면 브로커가 메모리 부족 상태가 됨 |
6852207 |
원격 브로커에 메시지를 보내는 NPE로 인해 read msg pkt에서 원격 브로커가 "메시지를 처리할 수 없게" 됨 |
6853822 |
FAILED txn을 종료할 때 오류 메시지 "Cannot perform operation END_TRANSACTION"(END_TRANSACTION 작업을 수행할 수 없음)가 혼동을 줌 |
6854142 |
3분 간격으로 원격 브로커에 대한 "클러스터 연결 대기 중" "종료된 클러스터 연결" |
6858121 |
원격 txn이 있는 경우 'imqcmd list txn'의 브로커 로그에 'Unknow transaction'(알 수 없는 트랜잭션)이라는 경고가 혼동을 줌 |
6858488 |
원격 참가자 브로커가 자체 COMMITTED tx을 제거한 경우 txn 홈 브로커에서 COMMITTED txn이 제거되지 않음 |
6858905 |
Consumer.destroyConsumer의 ConcurrentModificationException |
6861362 |
RFE: JMSBridge: 목표 대상과 소스 Message.getJMSDestination과의 자동 매핑 지원 |
6861528 |
RFE: 목표 내 다양한 대상에 대한 JMSBridge: MessageTransformer.transform() 분기 메시지 허용 |
6861653 |
트랜잭션 부하가 높은 상황에서 불완전한 다운 원격 브로커를 커밋하기 위해 과도한 클러스터 트랜잭션 정보를 전송함 |
6862413 |
오류 메시지 "mq://xxx.xxx.xx.xx:pppp/ ... is reachable within 60 seconds"(60초 안에 mq://xxx.xxx.xx.xx:pppp/ ...에 연결할 수 있음)가 혼동을 줌 |
6863867 |
다운 원격 브로커에서 보류 중인 커밋이 있는 경우 HA 브로커 재시작 시 MissingResourceException 발생 |
6867596 |
브로커 재시작 후 복구된 PREPARED txn이 브로커를 다시 재시작할 경우 PREPARED 상태로 되돌아감 |
6868525 |
링크 수립에서 원격 브로커에 임시 대상을 전달할 때 NullPointerException 발생 |
6868578 |
수립된 링크가 핸드셰이크를 방해할 경우 일부 확인되지 않은 브로드캐스트/유니캐스트로 인해 링크 다운 발생 |
6871612 |
HA 로그 메시지 "Cant notify transaction.completion.."(트랜잭션 완료를 알릴 수 없음)보류 중인 브로커가 다운된 경우 원격 메시지를 소비할 때 |
6886391 |
메시지가 이미 제거된 경우 인식 메시지에서 NullPointerException 발생 |
다음 표는 Message Queue 4.3에서 해결된 버그를 설명합니다.
표 1–9 Message Queue 4에서 해결된 버그. 3
버그 |
설명 |
---|---|
6634033 |
클러스터 프로토콜이 imqConsumerFlowLimit 값을 클라이언트가 생성된 원격 브로커로 전파하지 않음 |
6713012 |
클러스터의 브로커에서 사용자가 완전 삭제되는 동시에 원격 브로커가 다시 시작되면 일부 메시지가 전달되지 않을 수 있음 |
6727555 |
브로커 로그 메시지 "Max bytes per msg exceeded"에 실제 메시지 크기 및 전환된 max bytes per message 값이 있음 |
6737404 |
JMX 메트릭은 대상(주제 및 대기열)에서 디스패치되었지만 사용자에게 아직 전달되지 않은 메시지 수를 제공해야 함 |
6740568 |
단일 트랜잭션에서 너무 많은 메시지를 사용할 경우 브로커가 예외를 표시함 |
6758524 |
영구 가입을 나열하는 명령(imqcmd list dur -d "foo.*")이 대상 이름에 와일드카드 문자를 허용하지 않음 |
6758952 |
imq.portmapper.hostname=localhost를 설정하면 브로커를 클러스터에 연결할 수 없음 |
6758817 |
imq.cluster.hostname=localhost를 설정하면(권장되지 않음) 다른 시스템의 브로커를 클러스터에 연결할 수 없음 |
다음 표는 Message Queue 4.2에서 해결된 버그를 설명합니다.
표 1–10 Message Queue 4.2에서 해결된 버그
버그 |
설명 |
---|---|
6581592 |
설치 프로그램 또는 제거 프로그램이 텍스트 모드(installer –t)로 실행되는 경우 요약 화면에 로그/요약 파일이 포함된 디렉토리가 표시되지만 이 파일의 이름은 나열되지 않음 |
6585911 |
설치 프로그램의 JDK 선택 화면에 설치 프로그램에 번들로 제공되며 설치 프로그램 실행에 사용되는 JRE가 잘못 포함되어 있음 |
6587112 |
다중 바이트 로켈에서 설치 프로그램 요약 화면에 알 수 없는 문자가 표시됨 |
6587127 |
응답 파일을 참조하여 설치 프로그램을 실행하는 경우(installer -a filename -s) 응답 파일이 없으면 일관성 없고 모호한 오류 메시지가 표시됨 |
6590969 |
클라이언트 연결 인증에 DN 사용자 이름 형식이 허용됨 |
6594381 |
시스템에 이전 버전의 Message Queue 현지화 RPM이 있을 경우 Message Queue 4.1 현지화 RPM 설치(다국어 패키지 화면에서 "Message Queue 다국어 패키지 설치"를 선택하여 실행)에 실패함 |
6599144 |
Message Queue 4.2를 제거할 때 Java SE 6에서는 스플래시 화면과 제거 프로그램이 중지되고 회색의 빈 화면이 표시되지만 Java SE 5에서는 제대로 작동함 |
6615741 |
원래 사용자가 롤백 전에 닫힌 경우 롤백된 트랜잭션 사용자 세션에 전달된 메시지가 재전송되지 않음 |
6629922 |
분산 트랜잭션 처리기에서 비활성 사용자에게 메시지를 올바른 순서로 재전송하지 않음 |
6635130 |
대상이 메모리 또는 메시지 제한에 도달했기 때문에 브로커에서 일시 중지되었던 비지속성 메시지의 생성을 다시 시작하는 것을 생성자에 알리지 못함 |
6641117 |
원래 사용자가 롤백 후에 닫힌 경우 롤백된 트랜잭션 사용자 세션에 전달된 메시지가 재전송되지 않음 |
6683897 |
구성이 성공적으로 완료된 것 같은 경우에도 Message Queue 설치 프로그램의 요약 화면에 설치 프로그램이 일부 컴퓨터의 /dev/sterr에 쓸 수 없다는 구성 오류가 보고됩니다. |
6684069 |
사용자 트랜잭션을 통해 대량의 메시지가 원격 클라이언트로 전달되는 브로커 클러스터에서 트랜잭션 완결이 실패함 |
6688935 |
포트 매퍼 읽기 시간 초과의 기본값이 너무 작음 |
6695238 |
경로에 공백이 있는 위치에 설치된 브로커에 C 클라이언트 응용 프로그램으로 연결할 수 없음 |
6710168 |
중간에 다시 시작하지 않고 대상을 두 번 일시 중지한 경우 사용자가 더 이상 메시지를 사용하지 않음 |
6710169 |
JMX 작업 ConsumerManagerMonitor.getConsumerInfo에서 확인 모드에 대해 항상 SESSION_TRANSACTED를 반환함 |
다음 표는 Message Queue 4.1에서 해결된 버그를 설명합니다.
표 1–11 Message Queue 4.1에서 해결된 버그
버그 |
설명 |
---|---|
6381703 |
메시지를 만든 브로커가 다시 시작되면 트랜잭션된 원격 메시지가 두 번 완결될 수 있음 |
6388049 |
완료되지 않은 분산 트랜잭션을 정리할 수 없음 |
6401169 |
imqcmd에 대한 완결 및 롤백 옵션이 확인을 요청하는 메시지를 표시하지 않음 |
6473052 |
자동 생성된 대기열의 기본값은 라운드 로빈되어야 함 (MaxNumberConsumers = -1) |
6474990 |
imqcmd list dst 명령에 대해 브로커 로그가 ConcurrentModificationException을 표시함 |
6487413 |
제한 동작이 REMOVE_OLDEST 또는 REMOVE_LOWER_PRIORITY일 경우 메모리 누출이 발생함 |
6488340 |
브로커가 회전하고 클라이언트가 응답 확인을 기다림 |
6502744 |
브로커가 사용 불능 메시지 대기열의 기본 제한인 1000개 메시지를 따르지 않음 |
6517341 |
imqReconnectEnabled 등록 정보 값에 관계 없이 클라이언트가 다시 연결될 수 있도록 하여 클라이언트를 향상된 브로커 클러스터에 연결할 경우 클라이언트 런타임의 다시 연결 논리가 향상되어야 함 |
6528736 |
시작 도중 Windows 자동 시작 서비스(imqbrokersvc)에 충돌이 발생함 |
6561494 |
메시지와 사용자가 한 세션을 공유한 경우 메시지가 잘못된 사용자에게 전송됨 |
6567439 |
PREPARED 트랜잭션에서 생성된 메시지가 브로커 다시 시작 후에 완결되면 메시지가 잘못된 순서로 전송됨 |
다음 표는 Message Queue 4.0에서 해결된 버그를 설명합니다.
표 1–12 Message Queue 4.0에서 해결된 버그
버그 번호 |
설명 |
---|---|
4986481 |
Message Queue 3.5의 경우 자동 다시 연결 모드에서 Session.recover 호출이 정지될 수 있었음 |
4987325 |
Session.recover 호출 후 재전송된 플래그가 재전송된 메시지에 대해 false로 설정되었음 |
6157073 |
연결 총 수뿐 아니라 서비스의 연결 수를 포함시키기 위해 새 연결 메시지를 변경함 |
6193884 |
메시지에 ASCII가 아닌 문자를 사용하는 로켈의 경우 Message Queue는 알아 볼 수 없는 메시지를 syslog로 출력함 |
6196233 |
JMSMessageID를 사용하여 메시지를 선택할 수 없음 |
6251450 |
클러스터 종료 도중 connectList의 ConcurrentModificationException |
6252763 |
java.nio.HeapByteBuffer.putLong/Int의 java.nio.BufferOverflowException |
6260076 |
Oracle 저장소에서 시작 후 첫 번째로 게시되는 메시지가 느림 |
6260814 |
JMSXUserID에서의 선택기 처리가 항상 false로 처리됨 |
6264003 |
대기열 브라우저가 완결되지 않은 트랜잭션의 일부인 메시지를 표시함 |
6271876 |
사용되지 않은 메시지를 가진 사용자를 종료할 때 연결 흐름 제어가 제대로 작동하지 않음 |
6279833 |
Message Queue에서 두 개의 브로커가 동일한 jdbc 테이블을 사용해서는 안 됨 |
6293053 |
시스템의 IP 주소가 변경된 경우 저장소를 지우기 전에는(—reset store 사용) 마스터 브로커가 올바르게 시작되지 않음 |
6294767 |
Message Queue 브로커가 여는 네트워크 소켓에 SO_REUSEADDR을 설정해야 함 |
6304949 |
ClientID 등록 정보를 TopicConnectionFactory |
6307056 |
txn 로그에 성능 병목 현상 발생 |
6320138 |
Message Queue C API에 회신 헤더로부터 대기열의 이름을 확인하는 기능이 없음 |
6320325 |
JDK 1.4와 JDK 1.5가 모두 설치된 경우 브로커가 JDK 1.5보다 JDK 1.4를 먼저 선택하는 경우가 있음 |
6321117 |
멀티 브로커 클러스터 초기화 시 java.lang.NullPointerException 발생 |
6330053 |
가입자의 트랜잭션을 완결할 때 jms 클라이언트에서 java.lang.NoClassDefFoundError가 발생함 |
6340250 |
C-API에서 MESSAGE 유형 지원 |
6351293 |
Apache Derby 데이터베이스 지원 추가 |