我们实施了MDB,它将用户输入和处理并行。我们对用户数据进行了限制检查(例如用户可以拥有的电话号码数)。
我面临的问题是两个不同的线程拾取相同用户的数据并进行处理。第一个线程很好,它检查限制并正确地将手机添加到用户配置文件。第二个线程也是如此。但是限制检查发生在第一个线程提交事务之前,因此传递了限制检查。但它越过了极限。
有什么办法可以解决吗?使一个用户的数据被同一个线程选中是好的。但我不知道该怎么做。
请帮忙。提前谢谢。
编辑:我错过了另外一件事。当它在不同的节点中运行时会发生此问题。
答案 0 :(得分:0)
这取决于Application Server,节点数和应用程序数,但以下情况对我来说还是可以的:
消息顺序单元是WebLogic Server增值功能 使独立的消息生产者或一组生产者能够行动起来 作为一个,将消息分组到一个单元中 处理订单。这个单位被称为秩序单位 要求来自该单元的所有消息按顺序处理 它们的创建顺序。
例如
Thread 1: lastUpd = now()
Thread 1: UPDATE MYTABLE SET LAST_UPDATE=${lastUpd} WHERE ID=${id}
Thread 2: lastUpd = now()
Thread 2: UPDATE MYTABLE SET LAST_UPDATE=${lastUpd} WHERE ID=${id} //remain locked
Thread 1: a lot of work ...
Thread 1 COMMIT
Thread 2: a lot of work ...
Thread 2: lastUpd2= SELECT LAST_UPDATE MYTABLE WHERE ID=${id}
Thread 2: IF lastUpd2!= lastUpd ROLLBACK