WebObjects/数据库兼容性和比较/OpenBase
外观
从 WebObjects 系统写入多个表的大量数据时,可能会发生死锁。OpenBase 通过中止其中一个事务并将错误返回到 WebObjects 应用程序来解决死锁问题。
解决此问题的一个可能方法是在打开事务后立即识别要写入的表。必要的 SQL 代码类似于以下内容。
START TRANSACTION WRITE TABLE foo, bar INSERT INTO foo... INSERT INTO bar... COMMIT
随 LEWOStuff (http://www.lindesay.co.nz/) 提供了一个名为 JavaOPENBASEJDBCAdaptor 的框架。该框架能够在每个 EOF 生成的交易开始后放置这些锁,以防止死锁发生。您需要将框架构建产品复制到本地库文件夹。在 MacOS-X 下,这将是...
/Library/Frameworks/JavaOPENBASEJDBCAdaptor.framework
然后,您需要将此框架添加到 X-Code WO 项目中的 Frameworks 组中。在 WebObjects “Application” 子类的构造函数中,插入以下形式的一些代码以使该适配器与您的模型一起使用。
EOModel model = EOModelGroup.defaultGroup().modelNamed("MyModel"); if(null!=model) model.setAdaptorName("OPENBASEJDBC");
此代码将找到适配器的框架,加载适配器以及在模型中设置适配器。如果您使用 EOF 的 SQL 日志记录,则 WRITE TABLE ... 子句也将写入日志中。
如果您要使用此框架,则无需在项目中包含 LEWOStuff 框架。