2010-11-16 15 views
1

我有一个消息驱动Bean,它接收审计消息。这些消息还包含有关正在审计的系统的信息。收到消息时,如果系统不存在或重新使用现有系统,则MDB可以创建该系统。跨实例同步对MDB方法的访问

我面临的挑战是,当了很多新的系统消息的同时接收,创建了多个MDB实例,并且最终创建重复的系统。向数据库添加约束是解决该问题的一种方法。在这种情况下,有没有办法避免应用程序中的这些重复项,MDB?

回答

-1

你可以尝试这样的事:

private Object LOCK; 
public void onMessage() { 
    code… 
    synchronized(LOCK) { 
     check if system exists, create if necessary 
    } 
    more code… 
} 
+0

这个代码将在单个实例上仅同步,使得LOCK静将在所有类实例同步,感谢 – n002213f 2010-11-17 06:18:35

+0

你是对的,当然。接得好。 – 2010-11-17 12:50:08

+0

-1:你不应该在bean中使用非最终的静态变量。 – 2013-10-16 12:33:44

1

确保只有一个线程处理所有消息。这可以在激活规范,连接池中进行配置。