Подход к разрешению имени места назначения Spring Framework JMS

Я хотел инкапсулировать детали создания/разрешения пункта назначения в какую-то реализацию 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)


person Community    schedule 25.01.2012    source источник


Ответы (1)


Не уверен, что полностью вас понял, JmsTemplate уже обеспечивает очень хорошую абстракцию для отправки/получения сообщений от провайдеров JMS - вам не нужно иметь дело с необработанными JMS ConnectionFactory или Session. Если у вас нет особой потребности в сеансе - скажем, для реализации браузера очереди или запроса/ответа в том же сеансе и т. д., если это так, подход использования SessionCallback с методом выполнения JmsTemplate, как вы упомянули, является хорошим идею, а не писать собственную абстракцию.

person Biju Kunjummen    schedule 26.01.2012
comment
Мне нужен был способ решить пункты назначения без сеанса. Использование шаблона дает мне средства - person ; 27.01.2012