2016-09-13 9 views
11

Play!を使用しています。 HTTPセッションのフレームワークGenericDaoで共通の値(IpAddress、TenantId)を取得する方法は?

tenantIdおよびipAddressは、複数の表に共通の列です。ユーザーがログインしている場合は、我々は、IPアドレスを格納するHttp.Context.current().request().remoteAddress()を使用しているユーザーのIPアドレスを必要とするたびに

、我々はtenantIdHttpContextSession

を格納しています。

大量のクエリが書かれており、現在はtenantIdの一般的な方法でクエリを保存またはクエリしたいと考えています。

すべてのクエリがGenericDao

を経由して行く私たちは、すべてのクエリに追加することができるようにテナントIDを取得するためにGenericDaoに次のように使用することはできますか?

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

これらの詳細を保存または取得するにはどうすればよいでしょうか?

ありがとうございました。

+2

'50' repは、ほとんどの場合閉鎖され、おそらく賞金の有効期限が切れた直後に削除される、トピック外の/広すぎる/意見に基づく回答への回答を得られません。 –

+1

Play Framework、1.xおよび2.xのバージョンを提供していませんでした。 –

+1

2.xバージョンは現在のバージョンが使用されています – Kathiresa

答えて

0

あなたは、DAOがHTTPセッションのようなプレゼンテーションレイヤのものに頼る必要はありません。私はこれらの詳細を隠すために抽象概念を推奨します。

TenantIdProviderというインターフェイスを作成し、DAOに挿入します。その後HttpSessionTenantIdProviderと呼ばれる実装を作成

public interface TenantIdProvider 
{ 
    String getTenantId(); 
} 

:それは次のようになります。

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

今、あなたのGenericDAOはTenantIdProviderへの参照とtenantIdはTenantIdProviderを通してそれを得ることができます必要とプレイフレームワークまたはあなたが使用する他のプレゼンテーション層の依存関係を持っていないすべてのクエリを持つことができます。

これは、通知やその他のタスクを実行して送信するスケジュールされたジョブが終了し、このDAOを使用すると実際に重要になります。このDAOがHTTPセッションに依存していれば、それは不可能です。あなたの仕事アプリは、単に "システム"かそのようなものを返したTenantIdProviderを作成する可能性があります。

関連する問題