Jboss 消息驱动bean在客户端方法完成之前不响应

Jboss 消息驱动bean在客户端方法完成之前不响应,jboss,transactions,jms,jboss-mdb,Jboss,Transactions,Jms,Jboss Mdb,我在Jboss 4.2.2上部署了一个MDB,在同一台服务器上部署了一个客户机,它生成消息,并期望MDB通过在发送消息之前创建的临时队列进行回复 当我运行客户端时,我看到它创建了消息,将其放入队列并等待回复(到目前为止没有问题)。。。但是当我检查日志时,我看到超时已经达到,并且没有收到响应。当超时发生并且客户端的方法完成时,MDB开始处理在客户端将消息放入队列时就应该处理的消息。由于这个时间问题,当MDB尝试回复临时队列时,它失败了,因为客户机已经离开了 如果我从远程服务器运行同一个客户端,我没

我在Jboss 4.2.2上部署了一个MDB,在同一台服务器上部署了一个客户机,它生成消息,并期望MDB通过在发送消息之前创建的临时队列进行回复

当我运行客户端时,我看到它创建了消息,将其放入队列并等待回复(到目前为止没有问题)。。。但是当我检查日志时,我看到超时已经达到,并且没有收到响应。当超时发生并且客户端的方法完成时,MDB开始处理在客户端将消息放入队列时就应该处理的消息。由于这个时间问题,当MDB尝试回复临时队列时,它失败了,因为客户机已经离开了

如果我从远程服务器运行同一个客户端,我没有问题。。。MDB立即从队列中提取消息,客户端在处理完成后立即接收其响应

我正在使用容器管理的事务。我怀疑这与此有关。。。我认为客户端的“发送消息/接收回复”在提交将消息放入队列之前可能都被视为一个事务。。。但我不确定这是否正确。如果是这种情况,为什么我没有从远程客户端看到相同的行为?客户端管理的事务是默认设置吗?这就是我的远程服务器使用的设置吗

你知道怎么解决这个问题吗

提前谢谢!
PJ

听起来这里有两个问题。第一种情况是,请求消息在发送时没有提交,并且可能与接收呼叫处于同一工作单元中。正如您所注意到的,这里的关键是确定远程操作时行为发生变化的原因。或者,显式提交发送的消息

第二个问题是,一旦达到超时,消息最终会提交。解决第一个问题将把这变成一个潜在的问题,似乎已经解决了,但回来咬你以后。根据传输提供商是否认为这是一个例外,行为可能会有所不同。理想情况下,超时被视为异常,事务被回滚。假设您能够处理请求消息的发送,唯一需要超时的事务是接收回复-您肯定不希望在超时或其他异常后导致提交


对不起,我没有更明确的答案。将您的接受保存给确实接受的人,但要注意接收上的事务边界。

听起来这里有两个问题。第一种情况是,请求消息在发送时没有提交,并且可能与接收呼叫处于同一工作单元中。正如您所注意到的,这里的关键是确定远程操作时行为发生变化的原因。或者,显式提交发送的消息

第二个问题是,一旦达到超时,消息最终会提交。解决第一个问题将把这变成一个潜在的问题,似乎已经解决了,但回来咬你以后。根据传输提供商是否认为这是一个例外,行为可能会有所不同。理想情况下,超时被视为异常,事务被回滚。假设您能够处理请求消息的发送,唯一需要超时的事务是接收回复-您肯定不希望在超时或其他异常后导致提交


对不起,我没有更明确的答案。将您的“接受”保存给确实接受的人,但要注意接收上的交易边界。

您好,谢谢您的回复。为了简化我的解释,我省略了我现在看到的相关细节。客户端在本地运行时从EJB3.0运行。我创建了一个远程接口,我可以从一个简单的命令行应用程序访问该接口,EJB将消息发送到队列。当我放置session.commit时,我得到一个异常,表明它不能在XASession中使用。也许我不能在EJB中使用事务?您好,谢谢您的回复。为了简化我的解释,我省略了我现在看到的相关细节。客户端在本地运行时从EJB3.0运行。我创建了一个远程接口,我可以从一个简单的命令行应用程序访问该接口,EJB将消息发送到队列。当我放置session.commit时,我得到一个异常,表明它不能在XASession中使用。也许我不能在EJB中使用事务?