0

我目前正在使用 JBoss 5.1.0 GA 构建来部署我的企业应用程序。在 EJBLocalHome remove() API 的工作中,我面临一个奇怪的问题。我有一个实体 Bean 说“Emp”。我需要删除一个实体 bean 说'emp1'。因此,我将调用 EJBLocalObject remove(),它将调用“Emp”EntityBean#ejbRemove() API 从我的数据库中删除 bean。删除() -> ejbRemove()

对于 Jboss AS,我观察到当我调用 remove() API 时,首先调用 ejbStore() API,然后在同一个事务中调用 ejbRemove() API。在 remove() API 期间,实体 Bean 未被修改。因此不应调用 ejbStore()。但确实如此。因此顺序是:- remove() -> ejbStore() -> ejbRemove()

我在 Websphere AS 上部署了我的应用程序,当我调用 remove() 时,调用顺序是:- remove() -> ejbRemove() 。在这种情况下没有调用 ejbStore()。

谁能说出为什么在 JBoss AS 的情况下会发生这种行为?我觉得 ejbStore() 不应该被调用,因为没有任何更新并且工作应该类似于 Webspehere。

-阿吉特

4

1 回答 1

0

这似乎是 JBoss 特定的问题。查看 JBoss 的内部实现,发现当配置元素 'sync-on-commit-only' 设置为 false 时,它​​会调用 ejbStore。此属性存在于 standardjboss.xml 文件中,默认值为 false。这是 Jboss 规范对这个元素所说的:- “这配置了一个性能优化,将导致实体 bean 状态仅在提交时与数据库同步。通常事务中所有 bean 的状态都需要同步例如,当调用 finder 方法或调用 remove 方法时。”

因此,如果 'sync-on-commit-only' 设置为 false,则调用 ejbStore(),以便在删除 bean 之前实体与数据存储同步。

我唯一注意到的是,无论此属性是否设置为 true/false,实体 bean 都将从数据源中删除。因此它仍然让我想知道为什么在 remove() 期间需要 ejbStore() 调用,因为最终 bean 将从数据源中删除并放回实例池。

-阿吉特

于 2013-04-25T05:44:27.767 回答