Вопрос

Я хотел инкапсулировать детали создания / разрешения пункта назначения в какую-то реализацию PeritionResolver.

Детали создают соединение, создание сеанса, создание / разрешение пункта назначения.

такая реализация будет плохой подход?

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 )

Это было полезно?

Решение

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top