0

我有一个使用 Project Wonder 框架的 WebObjects 应用程序。如果我没记错的话,似乎回到过去,在我们开始使用 Project Wonder 之前,我们可以在不重新启动应用程序的情况下更改我们的数据库连接设置。几年前迁移到 Wonder 项目后,我们失去了动态更改数据库设置的能力。看来 Project Wonder 预计连接设置在启动时已经作为 WebObjects 属性存在,因此在应用程序启动后更改属性没有任何影响。那时我们并没有过多地反对它,并且认为当数据库更改时简单地重新启动应用程序并没有什么大不了的,因为我们没有预料到这样的更改会经常出现。

多年来情况发生了变化,并且在更改数据库后要求重新启动不再像以前那样合理。我试着四处寻找,在 Project Wonder / WebObjects 中缓存设置的内容,但还没有找到答案。我想知道是否有人在 WebObjects / Project Wonder 应用程序中动态更改数据库设置。

4

2 回答 2

0

我不认为这是“过去”或“现在使用 Project Wonder”的问题。我认为当 WO 移植到 Java 时,这种行为发生了变化。

从理论上讲,一个人应该能够做到这一点。在实践中,我认为它的效果不够好,值得。WO 和 EOF 中的所有数据结构都是延迟实例化的。如果你想切换数据库,你需要销毁所有,我的意思是所有,引用旧数据库的对象。是否有可能找到大部分并清除它们?是的,这甚至不是太难。是否有可能找到所有这些?也许不吧。

一方面,Java 的动态性远低于 ObjC。很多东西都是在java中的静态块中实例化的。所有这些类都可以注册在 EOModel 更改时发生的通知。他们都注册了吗?可能不是。

因此,您可以摆脱一些应用程序的状态,您将能够使用新数据库做一些事情,事情可能会工作一段时间,然后它们可能会停止工作。你也许能找出原因。或者你可以重新启动该死的应用程序......

于 2013-06-26T19:48:55.103 回答
0

或者你可以在这里按照这些 lil 说明进行操作;)

要在运行时更改连接,您必须基本上设置对象存储协调器

您可以像这样创建自定义对象存储协调器:

NSMutableDictionary<String, String> temp = new NSMutableDictionary<String, String>();
temp.put("URL", String.format("%s?useBundledJdbcInfo=true", url));
temp.put("username", username);
temp.put("password", password);
temp.put("name", name);

connectionDictionary=temp.immutableClone();

// Create a new Object store coordinator
objectStoreCoordinator = new ERXObjectStoreCoordinator();
ERXModelGroup.setModelGroupForObjectStoreCoordinator(
    objectStoreCoordinator, ERXModelGroup.defaultGroup()
);

// Set the model that you want to use to connect to multiple databases
EOAdaptor adaptor =ERXDatabaseContext.registeredDatabaseContextForModel(
    ERXModelGroup.defaultGroup().modelNamed("YourModelName"), 
    objectStoreCoordinator
).adaptorContext().adaptor();

// update the connection dictionary
adaptor.setConnectionDictionary(
    updateDictionary(adaptor.connectionDictionary(), 
    connectionDictionary)
);

有了这个,您可以轻松创建指向您选择的数据库的新编辑上下文

ERXEC.newEditingContext(objectStoreCoordinator);

如果您的应用程序被多个用户使用,并且他们都需要在多个 DB 之间切换而不相互干扰,我建议您不要使用 Shared Editing Context。

像这样,您可以避免人们更改对象存储协调器以导致其他人也指向该数据库(不是那么有趣)。

于 2013-10-17T11:00:10.407 回答