如何推迟 JBoss 5.1 中 CMP2.1 bean 的实际数据库插入?
我正在将 Weblogic 9 应用程序迁移到 JBoss 5.1,并遇到以下问题:
会话 ejb 管理 CMP 2.1 实体。这些是在调用 MyEntityLocalHome.create() 方法时插入的。由于数据库表具有“非空”约束,因此某些通常在调用 create() 方法后设置的字段未设置,因此插入失败。
我知道如果经理调用了 create(myNotNullField);方法,传递正确的参数,问题就解决了。不幸的是,管理器使用一个层在运行时发现应该调用哪个 *LocalHome 和哪个 create() 方法(通过内省),并且创建方法是使用实体的 PK 字段发现的。这意味着该层无法找到其参数不属于 PK 一部分的 create() 方法。
在 JBoss 文档中,我找到了一个参数 (insert-after-ejb-post-create),它允许我推迟 ejbPostCreate(...) 方法之后的插入,但这也不能解决我的问题,因为“ LocalHome.create() 调用在数据库插入后仍然返回。
如何将数据库中的实际插入延迟到事务结束,以便管理器可以设置“not null”字段? ,我猜WLS中存在这样的选项...Jboss 5.1中是否存在此参数?
感谢您的帮助:)
I am migrating a Weblogic 9 application to JBoss 5.1, and bumped into the following problem:
A session ejb manages CMP 2.1 entities. Those are inserted at the time of the call to MyEntityLocalHome.create() method. Since the database table has "not null" constraints, some of the fields, who are normally set after the call to the create() method, are not set and the insertion fails.
I know that if the manager called a create(myNotNullField); method, passing the correct parameters, the problem would be solved. Unfortunately, the manager uses a layer that discovers at runtime which *LocalHome and which create() method should be called (by introspection) and the create method is discovered using the PK fields of the entity. That means that the layer cannot find create() methods with parameters that are not a part of the PK.
In the JBoss docs, I found a parameter (insert-after-ejb-post-create) that allows me to postpone the insertion after the ejbPostCreate(...) method, but that doesn't solve my problem either, since the "LocalHome.create() call still returns after the DB insertion.
How can I delay the actual insertion in the DB to the end of the transaction, so that the manager can set the "not null" fields? Since the app works in Weblogic 9, I guess that such an option exists in WLS... does this parameter exists in Jboss 5.1?
Thanks for your help :)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这是通过使用 standardjboss.xml 中的 cmp2.x jdbc2 配置并将 insert-after-ejb-postprocess 设置为 false 来完成的。
This was done by using the cmp2.x jdbc2 configuration, in standardjboss.xml, with insert-after-ejb-postprocess set to false.