多线程Web应用程序中的Java bean数据完整性问题

时间:2012-07-23 04:11:03

标签: java xml concurrency javabeans data-integrity

我的Web应用程序有一个XML配置文件,使用JAXB读取,每个JVM生命周期只读一次 - 在第一次调用应用程序时。结果缓存在单例类中的Java bean中 - 再次只缓存一次。此单例类具有一个公共方法,用于从Bean中读取数据并输出指定类别的项ID列表。每次请求应用程序时都会调用此方法一次。

<category code='AA'>
    <item id='1' />
    <item id='2' />
    <item id='5' />
    <item id='7' />    
    <item id='8' />
    <item id='19' />
</category>
<category code='BB'>
    <item id='12' />
    <item id='13' />
    <item id='15' />
    <item id='17' />    
    <item id='18' />
    <item id='19' />
</category>

前面提到的商品ID对于给定的类别是唯一的。读取bean并返回ID列表的逻辑,在开发环境中进行测试时,可以很好地保持并按预期返回数据。但是,在生产环境中,只要达到关键并发,逻辑就会在几天后开始在列表中返回重复的ID。

我绝对肯定应用程序中没有其他代码调用Java bean上的任何“set”mutator,而不是在初始化对象时。日志还表明正在读取的XML和正在创建的bean每个JVM生命周期只执行一次。即便如此,当应用程序的流量很高(每秒大约10个事务)时,这些bean的输出也会被破坏。一旦损坏,它就会一直保持这种状态,直到JVM再次被回收。

我尝试过的一个解决方案是不在线程之间共享bean,并在每次调用应用程序时从XML创建它们。这解决了重复的ID问题,但我担心每次应用程序调用中的JAXB操作都可能存在性能风险。

为什么会发生这种情况的任何想法,以及我们如何在共享bean时避免这个问题?

0 个答案:

没有答案
相关问题