gpt4 book ai didi

apache-cayenne - Cayenne 3.1 - 动态设置数据源

转载 作者:行者123 更新时间:2023-12-04 05:06:09 24 4
gpt4 key购买 nike

我目前使用 Cayenne 3.1B2 作为一些 Web 服务的持久层。服务需要公开几个数据库之一,所有数据库都具有相同的模式,在调用服务操作时确定数据库。
使用哪个数据库的决定需要基于调用服务的客户端的身份。

我将如何定义它并在运行时使用它?似乎我应该定义 2 个数据节点,它们都引用同一个数据图,因为我的所有实体在数据库之间都是相同的。

但是在运行时,我会以某种方式创建两个不同的上下文,每个数据节点一个,如果是这样,我将如何为每个上下文指定它?

任何帮助表示赞赏
谢谢

最佳答案

我将使用 DataMap 和单个 DataNode 创建一个项目。删除它的“DataSource Factory”,因为我们将在代码中指定它(从未尝试过,如果将“DataSource Factory”留空会导致启动时出现任何问题,您可以将其设置为任何提供的选项,例如 JNDIDataSourceFactory,带有理解这只是占位符,将在运行时被忽略)。

现在启动您的 2 个 ServerRuntime,每个都使用同一个映射项目,但 DataSource 有 2 组不同的属性。这些属性导致 Cayenne 忽略 XML 中设置的 DataSource Factory。

Module m1 = new Module() {

@Override
public void configure(Binder binder) {
binder.bindMap(Constants.PROPERTIES_MAP)
.put(Constants.JDBC_DRIVER_PROPERTY, "com.my.Driver")
.put(Constants.JDBC_URL_PROPERTY, "jdbc://db1_url")
.put(Constants.JDBC_USERNAME_PROPERTY, "db1login")
.put(Constants.JDBC_PASSWORD_PROPERTY, "db1password");
}
};

Module m2 = new Module() {

@Override
public void configure(Binder binder) {
binder.bindMap(Constants.PROPERTIES_MAP)
.put(Constants.JDBC_DRIVER_PROPERTY, "com.my.Driver")
.put(Constants.JDBC_URL_PROPERTY, "jdbc://db2_url")
.put(Constants.JDBC_USERNAME_PROPERTY, "db2login")
.put(Constants.JDBC_PASSWORD_PROPERTY, "db2password");
}
};

ServerRuntime r1 = new ServerRuntime("cayenne-project.xml", m1);
ServerRuntime r2 = new ServerRuntime("cayenne-project.xml", m2);

r1 和 r2 应该是应用程序单例,您可以根据每个请求从其中一个创建 ObjectContexts。如果您在请求之间重用 ObjectContexts(例如,这是一个主要是只读的应用程序),您可以从 r1 和 r2 创建 2 个上下文并缓存它们。

关于apache-cayenne - Cayenne 3.1 - 动态设置数据源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15506761/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com