如何在GenericDao中检索公共值(IpAddress,TenantId)?

时间:2016-09-13 13:57:14

标签: java playframework playframework-2.0 genericdao

我们正在使用Play! HTTP会话的框架。

tenantIdipAddress是在多个表中共有的列。

当用户登录时,我们会将tenantId存储在HttpContextSession

每当我们需要用户的IP地址时,我们使用Http.Context.current().request().remoteAddress()来存储IP地址。

我们编写了大量查询,现在我们想以tenantId的通用方式保存或查询。

所有查询都通过GenericDao

进行

我们可以在GenericDao中使用以下内容来获取租户ID,以便我们可以在所有查询中附加吗?

Http.Context.session().get("tenantId");

保存或检索这些详细信息的最佳方法是什么?

感谢。

1 个答案:

答案 0 :(得分:0)

您不希望您的DAO必须依赖于表示层,例如HTTP会话。我建议使用抽象来隐藏这些细节。

创建一个名为TenantIdProvider的接口并将其注入DAO。它看起来像这样:

public interface TenantIdProvider
{
    String getTenantId();
}

然后创建一个名为HttpSessionTenantIdProvider的实现。

class HttpSessionTenantIdProvider implements TenantIdProvider
{
    @Override
    public String getTenantId()
    {
        return Http.Context.session().get("tenantId");
    }
}

现在,您的GenericDAO可以引用TenantIdProvider,并且每个需要tenantId的查询都可以通过TenantIdProvider获取它,并且不依赖于您使用的play框架或任何其他表示层。

如果你最终拥有运行和发送通知或其他任务的预定作业,这真的变得很重要,并且他们使用这个DAO。如果这个DAO依赖于HTTP会话,则不可能。您的工作应用程序可以创建一个刚刚返回的TenantIdProvider" system"或类似的东西。