我有一个情况我需要在JMS
(分组消息)接收大文件的部分并将其存储在数据库中。同步问题与JMS和JPA
问题是,组中的每条消息将在TABLE A
中为一行,并存在@ManytoOne
至TABLE B
。这意味着对于一个组将只有一个表B中的条目,但表A中的许多条目。
我目前的逻辑是,在插入table A
之前,我正在检查任何条目(@NamedQuery,作为主键在那时不会被MDB
知道),如果没有找到,则创建一个新的(在这里创建主键Table B
)。
由于有接收同一组的消息的MDB
多个实例,在table B
条目被复制得到为同一消息组,由于第一创建的表B条目不尚未comiitted在MDB交易。
要更加清楚:
步骤1:接收消息。
步骤2:创建表A所需的实体。检查表B中是否有相同组ID的条目(READ
),如果找到,设置关系并保留,如果不存在,则为表B创建一个新实体(WRITE
)(通过服务生成主键)设置关系并保留。
问题是,MDB的多个实例为表B创建条目,因为它在READ
期间无法找到条目(由第一个MDB创建),因此WRITING
对于相同组ID的新条目。
有没有什么办法可以解决这个问题? 1.我使用eclipselink和Oracle,使用@PersistenceContext注解来注入容器管理事务和实体管理器。
谢谢
具有多于1个MDB并不能保证你更高的吞吐量(猜测是,在您的使用情况下,DB是最大的因素),这将是MDB实例所允许的数量限制为1的解决方案?易于通过部署描述符来完成。 Glassfish服务器? – fvu