【发布时间】:2013-10-17 02:33:20
【问题描述】:
我尝试使用 Session.CLIENT_ACKNOWLEDGE 作为确认模式来启动无事务 JMS 会话。
不幸的是,当我开始会话时,确认模式始终为Session.AUTO_ACKNOWLEDGE。为什么?
我正在从远程 glassfish 客户端连接到 glassfish 服务器(使用标准嵌入式 OpenMQ 代理)。会话初始化代码是
boolean transacted = false;
int acknowledgeMode = Session.CLIENT_ACKNOWLEDGE;
session = getConnection().createSession(transacted, acknowledgeMode);
if(transacted!=session.getTransacted())
throw new UnsupportedOperationException("seems like the broker doesn't want us to use untransacted connection");
if(acknowledgeMode!=session.getAcknowledgeMode())
throw new UnsupportedOperationException("seems like the broker doesn't want us to use Session.CLIENT_ACKNOWLEDGE");
[编辑 1]
Session 是从 Connection/ConnectionFactory 对中获得的,其中使用 JNDI 查找 connectionFactory:
connectionFactory = (ConnectionFactory) getContext().lookup(JMSConstants.CONNECTION_FACTORY_NAME);
所以我确实可以使用远程连接工厂的默认设置,as @raffian suggested
【问题讨论】:
-
您是否正在查找远程连接工厂以获取连接?如果是这样,请检查出厂设置。不同的供应商为各种连接和会话设置提供默认值,
-
@raffian 编辑为您提供更多信息
标签: java session jakarta-ee glassfish jms