【发布时间】:2014-07-11 06:16:47
【问题描述】:
我正在使用 JBOSS 5.1.2 MDB 来使用放置在队列中的实体消息。消息生产者可以为同一个实体生成多条消息。这些消息实体由它们的实体编号定义。 (msg_entity_no) 仅当实体不存在时,我必须将记录插入现有实体表,否则我必须更新现有记录。 现有实体表在此实体编号上不是唯一的,因为它具有另一个内部键。即它包含重复的 msg_entity_no
我遇到的问题是,当产生多条消息时,MDB 查询的多个实例同时存在于实体表上。 那时,这两个实例都不存在,然后该进程插入两个消息。与插入不存在的实体相反 然后为后续消息更新记录。
我想摆脱使用注释 @ActivationConfigProperty(propertyName = "maxSession", propertyValue = "1") 并部署到仅允许一个 MDB 实例的 deploy-hasingleton 文件夹,因为这是不可扩展的。
【问题讨论】:
-
你是在集群环境下运行的吗?
-
你的主键是怎么定义的?
-
我们处于集群环境中。该表有一个主键和另一个内部实体编号。
-
@Patrick 能否将 MDB 限制为集群中的一个实例?即一个 jboss 实例上只有一个 mdb 实例?
-
@KennethClark 我们设法通过 maxSession 注释和 deploy-hasingleton 文件夹实现了这一点,但是如果该实例发生故障,则将不再使用消息。
标签: java oracle queue ejb-3.0 jboss5.x