Spring框架JMS目标名称解析方法

发布于 2024-12-28 20:32:48 字数 1270 浏览 2 评论 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.会话回调)

I wanted to encapsulate the details of creating / resolving a destination into some sort of DestinationResolver implementation.

The details being creating a connection, creating a session, creating / resolving a destination.

Would such an implementation be a bad approach?

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

Would a better approach just to wrap the specific task in an execute action?

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

倾城泪 2025-01-04 20:32:48

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

Not sure if I completely understood you, JmsTemplate already provides a very good abstraction to sending/receiving message from JMS providers - you do not have to deal with raw JMS ConnectionFactory or Session. Unless you have a specific need for a Session - say to implement a queue browser or a request/response in the same session etc, if that is the case the approach of using a SessionCallback with execute method of JmsTemplate like you have mentioned is a good idea rather than needing to write your own abstraction.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文