2012-01-25 31 views
0

我想将创建/解析目标的细节封装到某种DestinationResolver实现中。Spring框架JMS目标名称解析方法

正在创建连接,创建会话,创建/解析目标的详细信息。

这样的实施会是一个坏的方法吗?

public class SessionAwareDestinationResolver extends DynamicDestinationResolver { 

    private Session session; 

    @Inject 
    public SessionAwareDestinationResolver(ConnectionFactory connectionFactory) { 
     try { 
      Connection connection = connectionFactory.createConnection(); 
      session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); 
     } catch (JMSException ex) { 
      throw JmsUtils.convertJmsAccessException(ex); 
     } 
    } 

    public Destination resolveDestinationName(String destinationName, 
      boolean pubSubDomain) throws JMSException { 
     return super.resolveDestinationName(session, destinationName, 
       pubSubDomain); 
    } 
} 

UPDATE

会更好的方法来包装在执行动作的特定任务?

http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/jms/core/JmsTemplate.html#execute(org.springframework.jms.core.SessionCallback

回答

1

不知道我是否完全了解你,JmsTemplate已经提供了一个很好的抽象到发送/从JMS提供者收到消息 - 你不必处理原始JMS连接或会话。除非你有特定的会话需求 - 比如在同一会话中实现队列浏览器或请求/响应等,如果是这种情况,像上面提到的那样,使用带有JmsTemplate execute方法的SessionCallback的方法是件好事而不需要编写自己的抽象。

+0

我需要一种解决destinatons而不需要会话的方法。使用该模板为我提供了方法 – predhme