기본 메시징 제공자: 문제점 해결 팁
이 특정 팁 세트를 사용하면 기본 메시징 제공자에 대한 JMS 메시징 문제점을 해결하는 데 도움이 될 수 있습니다.
WebSphere® Application Server 메시징 관련 문제점 해결에 대한 일반 팁은 메시징 문제점 해결 팁의 내용을 참조하십시오. 이 주제에서는 기본 메시징 제공자 및 서비스 통합 기술 사용별 추가 팁을 제공합니다.
- 기존 메시지를 이용하고 있지 않아서 대상이 가득 차고 메시지를 더 이상 수신할 수 없음
- JMS 애플리케이션이 더 이상 메시지를 전송하거나 수신할 수 없음
- Java EE(Java Platform, Enterprise Edition) 클라이언트 컨테이너 내에서 실행 중인 JMS 클라이언트 애플리케이션이 ConnectionFactory.createConnection 메소드 호출에 실패함
기존 메시지를 이용하고 있지 않아서 대상이 가득 차고 메시지를 더 이상 수신할 수 없음
- JMS(Java™ Message Service) 활성화 스펙을 통해 연결되는 하나 이상의 메시지 Bean
- JMS 연결 팩토리와 JMS 대상을 통해 연결되는 하나 이상의 엔터프라이즈 Bean
이 대상의 애플리케이션 자원 관리 콘솔 패널을 사용하여 대상을 사용하는 JMS 자원 및 애플리케이션의 구성을 검사하십시오.
이 패널로 여러 관련 자원의 상위 레벨 보기를 제공하여 문제점의 원인을 찾을 수 있습니다.
JMS 애플리케이션이 더 이상 메시지를 전송하거나 수신할 수 없음
- JMS(Java Message Service) 활성화 스펙을 통해 연결되는 하나 이상의 메시지 Bean
- JMS 연결 팩토리와 JMS 대상을 통해 연결되는 하나 이상의 엔터프라이즈 Bean
애플리케이션의 배치 디스크립터 또는 애플리케이션의 코드를 통해, 애플리케이션을 메시지 Bean 또는 엔터프라이즈 Bean에 연결합니다. 배치 디스크립터를 통해 애플리케이션을 연결한 경우, 이 애플리케이션의 메시징 자원 관리 콘솔 패널을 사용하여 설치된 비즈니스 애플리케이션 전체를 보고 애플리케이션에서 사용하는 JMS 자원의 구성을 검사하십시오.
이 패널로 여러 관련 자원의 상위 레벨 보기를 제공하여 문제점의 원인을 찾을 수 있습니다.
Java EE(Java Platform, Enterprise Edition) 클라이언트 컨테이너 내에서 실행 중인 JMS 클라이언트 애플리케이션이 ConnectionFactory.createConnection 메소드 호출에 실패함
CWSIJ0005E: An instance of the channel framework service to use for communication
cannot be found.
- 원인
기본 메시징 제공자의 ConnectionFactory가 채널 프레임워크 서비스에 대한 종속성을 가집니다. JNDI 네임스페이스에서 검색을 사용하여 채널 프레임워크 서비스를 찾습니다. 이름 지정 서비스에 연결하기 위해서 ConnectionFactory는 기본 생성자를 사용하여 작성된 InitialContext 오브젝트를 사용합니다.
JMS 클라이언트가 애플리케이션 서버 환경 내에서 실행되는 경우 InitialContext 오브젝트가 이름 지정 서비스에 성공적으로 연결될 수 있고 채널 프레임워크 서비스를 찾으며 createConnection에 대한 호출이 성공적으로 완료됩니다.
그러나 JMS 클라이언트가 Java EE 클라이언트 컨테이너 내에서 실행되는 경우 InitialContext 오브젝트는 java.naming.provider.url 시스템 특성의 값을 사용하여 연결한 이름 지정 서비스의 위치를 판별합니다. 이 특성에 값이 지정되지 않으면 JMS 클라이언트는 로컬 클라이언트 머신의 포트 2809에 있는 이름 지정 서비스에 연결을 시도합니다. 클라이언트 머신에서 실행되는 서버가 없는 경우 로컬 머신에서 이 포트를 청취하는 이름 지정 서비스가 없습니다. 이로 인해 createConnection 메소드가 실패하게 됩니다.
- 솔루션
- JMS 클라이언트 애플리케이션은 다음 양식의 코드를 사용하여 프로그래밍 방식으로 java.naming.provider.url의 값을 지정할 수 있습니다.
String key = "java.naming.provider.url"; String value = "iiop://some.remote.machine:9810"; System.setProperty(key, value);
ConnectionFactory 오브젝트에 대해 createConnection 메소드를 호출하기 전에 이 코드를 실행해야 합니다.
또는 명령행에서 launchClient 스크립트를 사용하여 Java EE 클라이언트 컨테이너를 시작하는 경우 다음 명령행 매개변수 중 하나를 지정할 수 있습니다.- launchClient <CLIENT EAR> -CCBootstrapHost=some.remote.machine -CCBootstrapPort=981
- launchClient <CLIENT EAR> -CCproviderURL=iiop://some.remote.machine:9810
이렇게 하면 제공자 URL이 프로그래밍 방식으로 지정되지 않는 경우 InitialContext 오브젝트는 명령행에서 지정된 제공자 URL을 사용하도록 기본값 설정됩니다.