首页 文章

JMS Message正在从Hibernate获取过时的数据

提问于
浏览
1

我有一个托管实体,它附加了一个EntityListener . PostUpdate和PostPersist上的EntityListener将实体添加到JMS队列以进行更多处理 . 所以这是场景,我有一个会话bean,它更新实体并合并更改,然后在监听器上触发PostUpdate . 但是当MDB开始使用JMS消息时,它将实体从EntityManager中获取,但它获得的实体是该对象的旧值 . 这是我正在做的基本代码 .

Session Bean Method

@Override
public void updateEntity(Integer entityId, String name) {
    Entity entity = getEntity(entityId);
    entity.setName(name);
    em.merge(entity);
}

Listener Method

@PostPersist
@PostUpdate
public void afterUpsert(Entity entity) {
    this.entity = entity;
    JMSSubmitter submitter = getSubmitterBean();
    submitter.submit(entity.getEntityId());
}

MDB Code

@Override
public void onMessage(Message message) {
    TextMessage textMessage = (TextMessage) message;
    try {
        processMessage(textMessage);
    } catch (Exception ex) {
        logger.error("Unable to process the Entity message", ex);
    }
}

private void processMessage(TextMessage message) throws Exception {
    Integer entityId = new Integer(message.getText());
    //Right here I am getting stale data.
    Entity entity = entityBean.getEntity(entityId);
    // ...
    //Some processing is done here
    // ...
    entity.setSomeOtherValue("blah");

    entityBean.updateEntity(entity);

}

所以我的问题是为什么我遇到这个问题,我认为这是一个交易问题 . 我认为我的初始更新事务在JMS开始使用消息之前没有提交 .

1 回答

相关问题