如何在应用程序中组织和管理多个数据库凭据?

时间:2010-03-11 05:27:06

标签: java architecture rest restlet

好的,我正在设计一个独立的Web服务(使用RestLET作为我的框架)。我的申请分为3层:

  • 数据层(位于数据库正上方,提供用于连接/查询数据库和数据库对象的API)
  • 对象层(负责从数据层序列化...提供客户端层可以使用的对象,而不必担心数据库)
  • 客户端层(此层是RestLET Web服务...基本上只是从对象层创建对象并完成Web服务请求)

现在,对于我在对象层中创建的每个对象,我想使用不同的凭据(因此我可以对每个对象进行沙箱化...)。对象层不应该知道确切的凭证(IE登录/ pw / DB URL等)。

管理此问题的最佳方法是什么?我想我应该在我的数据层中有一个超类数据库对象...每个子类都包含所需的登录信息......这样我的对象层就可以转到Database db = new SubDatabase();然后继续使用该数据库。

在客户端级别,他们只能转到ItemCollection items = new ItemCollection();并且不知道/控制已连接的数据库。

我问这个是因为我试图让我的平台可扩展,以便其他人可以轻松地从我的平台创建服务。

如果有人对这些架构问题有任何经验或如何管理这类事情,我会很感激任何见解或建议......

如果这令人困惑,请随意提问。谢谢!

我的平台是Java,我使用的REST框架是RestLET,我的数据库是MySQL。

3 个答案:

答案 0 :(得分:2)

我的建议是使用JTA,您可以使用多个数据库和相应数量的数据源。您可以在这里查询更多信息https://test.kuali.org/confluence/display/KULRICE/Datasource+and+JTA+Configuration

答案 1 :(得分:1)

我觉得你所解释的是明智的,你试图不将数据库细节和凭证暴露给cleint级别。

对于这种情况,您需要考虑可能对您有帮助的任何设计模式 我可以想到单例模式,您可以在其中创建一个实例并在Object层中使用它,从而避免向用户显示有关凭证和URL的任何详细信息。

第二个选项,我想到的是使用hibernate层,这将帮助您隐藏细节,只需访问ORM对象,您就可以获得所需内容。

答案 2 :(得分:1)

我会回应@ saugata的评论。查看Spring并将您的数据源实现(或测试的存根!)注入Spring配置中的对象层。这应该以多种方式帮助您的整体应用程序架构:

  1. 您可以动态切换数据库(实例或实现)而无需重新编译代码。
  2. 您将完全从其实现中抽象出数据源 - 允许您将数据库交换为Web服务,队列实现或存根。
  3. 以这种方式解耦您的应用程序将使测试更容易。