0

我想将创建/解析目的地的细节封装到某种 DestinationResolver 实现中。

详细信息是创建连接、创建会话、创建/解析目标。

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

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);
    }
}

更新

将特定任务包装在执行操作中是否会有更好的方法?

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

4

1 回答 1

0

不确定我是否完全理解您,JmsTemplate已经为从 JMS 提供者发送/接收消息提供了非常好的抽象——您不必处理原始 JMS ConnectionFactory 或 Session。除非您对 Session 有特定需求 - 比如说在同一个会话中实现队列浏览器或请求/响应等,如果是这种情况,则使用 SessionCallback 和 JmsTemplate 的执行方法的方法就像你提到的那样是一个很好的想法而不是需要编写自己的抽象。

于 2012-01-26T01:23:40.003 回答