블로그 이미지
Max.

calendar

1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

Notice

2008.02.11 08:58 이전글(~2009)
기본예제-1에 이어서 MDP(Message Driven POJO)로 JMS를 구현해 본다.
javax.jms.MessageListener를 구현하여 onMessage메서드를 만들면 되지만 Spring은 MessageListenerAdapter를 이용하여 보다 청아한(깨끗한-단어좋다) POJO를 만들수 있게 도와 준다.

구현구조

Queue/Topic --> Message Listener Container  --> Message Listener Adapter
                                                                          --(handelMessage())--> POJO


1. Message Listener Container 설정

    <bean class="org.springframework.jms.listener.SimpleMessageListenerContainer">
        <property name="connectionFactory" ref="connectionFactory" />
        <property name="destination" ref="maxDestination"/>
        <property name="messageListener" ref="pureMemberMdp"/>
    </bean>


ActiveMQ의 ConnectionFactory 와 엮는다. messageListener 속성은 Message Listener Adapter를 이용한 POJO 클래스이다. 이것은 근본적으로 javax.jms.MessageListener을 구현해야 하나 Spring은 Message Listener Adapter를 써서 POJO스럽게 구현하는걸 도와준다.


2. Message Listener Adapter 설정

    <bean id="pureMemberMdp" class="org.springframework.jms.listener.adapter.MessageListenerAdapter">
        <property name="delegate" ref="memberMdp"/>
        <property name="defaultListenerMethod" value="processInfo"/>
        <property name="messageConverter" ref="memberConterver"/>
    </bean>

    <bean id="memberConverter" class="net.max.jms.MemberMessageConverter"/>


MessageListenerContainer에 엮기 위한 Adapter 클래스로 delegate 속성에 실제 엮일 POJO 클래스를 넣어 주며, defaultListenerMethod 속성에 해당 메서드명을 넣는다. 컨버터는 예제1과 동일하다.
이제 마지막으로 POJO 클래스를 작성한다.

3. POJO 클래스 작성

public class MemberMdp {

    public void processInfo(Member member){
        System.out.println("메시지를 받았습니다.----------------");
        System.out.println(member.getName() + "(" + member.getEmail() + ")");
    }
}


말 그대로 POJO 이다.  메시지를 받는 부분은 Spring의 MessageListenerAdapter에 의해서 Simple하게 작성할수 있다.

4. 테스트 해보자.
public class SimpleTest {
    @Autowired
    private JmsTemplate jmsTemplate;
    @Autowired
    private MemberMdp memberMdp;
   
    @Test
    public void testSimple(){
        Member member = new Member();
        member.setName("Max");
        member.setEmail("max@test.com");
        // 보내기
        jmsTemplate.convertAndSend(member);
       
        assertEquals(memberMdp.getMember().getEmail(),member.getEmail());
        System.out.println(memberMdp.getMember().getEmail());
    }
}

메시지 보내는것은 테스트에 하드코딩하고 받는것은 콘솔창에서 확인하게 하였다.
결과 :
메시지를 받았습니다.----------------
Max(max@test.com)
max@test.com

사용자 삽입 이미지

기존보다 더욱 단순해 졌다.
다음 예제에서는 <jms> 테그로 xml을 더욱 단순화시켜 보자.


(*.jar는 Maven으로 대신하고, 이클립스 프로잭트를 통째로 압축한 파일)
신고

'이전글(~2009)' 카테고리의 다른 글

찜한 아파트  (12) 2008.02.12
처음부터 다시 만들기(과연...)  (0) 2008.02.12
Spring JMS 기본예제-2  (6) 2008.02.11
Spring JMS 기본예제-1  (6) 2008.02.04
Spring OSGi 학습하기 좋은곳은?  (7) 2008.01.29
먹기엔 덜익은 DDD 와 Rich Domain Model  (4) 2008.01.28
posted by Max.
TAG ,