2017-03-20 4 views
0

실행중인 MDB 인스턴스의 식별자를 가져올 수 있습니까? MDB 풀 (예 : 10)이 있으며 동일한 MDXID를 가진 모든 메시지를 처리하는 동일한 MDB 인스턴스를 갖기 위해 JMSXGroupID 속성에 내 메시지를 설정합니다. 현재 MDB 인스턴스의 식별자를 기록하고 싶습니다 : 어떻게 그 정보를 얻을 수 있습니까?MessageDrivenBean 인스턴스 식별자

+0

MDB 기술은 성능 고려 사항에 대해 상태 비 저장입니다. 당신이 statefull 방법으로 그것을 사용하고 싶다면 당신은 당신의 아키텍처를 되돌려서 리팩토링해야합니다. 너는 잘못된 길을 가고있다. ID를 추가하기를 원할 경우 응용 프로그램 범위의 카운터를 사용하여 @PostConstruct 이벤트 핸들러에서 ID를 추가 할 수 있습니다. –

답변

2

EJB 사양에 따라 식별자가 없지만 MDB 공급 업체 API를 사용하여 구현할 수 있습니다.

@PostConstruct 메서드에서 항상 고유 한 MDB 식별자를 만들 수 있지만, 내 의견으로는 풀의 모든 빈이 같은 방식으로 처리되어야하므로 좋은 해결책이 아닙니다!

JMSXGroupID를 메시지 헤더로 설정하고 MDB의 메시지 선택기를 사용하여 주어진 MDB 구현을 처리하면 주어진 대기열 (<example)>에서 수신 대기중인 Bean이 둘 이상이 될 수 있습니까?

이전에 언급 한 헤더를 추출하고 JMSXGroupID 당 달성하려는 상태의 EJB 싱글 톤 빈을 호출하는 일반 MDB 빈을 만들 수 있습니다.

+0

동일한 큐에서 수신 대기하는 다른 MDB에 대한 선택기가 이미 있습니다. 동일한 엔터티에 상대적인 메시지의 도착 순서를 유지하기 위해 JMSXGroupID를 사용하고 있습니다. 동일한 엔터티에 관련된 모든 메시지를 동일한 MDB로 보내면 순서대로 처리 될 수 있기를 바랍니다. 그렇습니까? – Wallkan

+0

ActiveMQ는 모든 메시지가 동일한 MDB 인스턴스에서 처리되도록 보장하므로 @PostContruct 메서드에서 고유 한 식별자를 만들 수 있습니다. – iskramac

+0

그리고 hashCode() 메서드를 사용하여 다른 인스턴스를 식별한다면? 또는 같은 클래스의 모든 MDB가 같은 hashCode를 공유합니까? – Wallkan