2016-09-13 2 views
11

Wir verwenden das Spiel! Framework für HTTP-Sitzungen.Wie allgemeine Werte (IpAddress, TenantId) in GenericDao abgerufen werden?

tenantId und ipAddress sind Spalten, die für mehrere Tabellen gelten.

Wenn der Benutzer angemeldet ist, werden wir die tenantId in HttpContextSession

speichern Jedes Mal, wenn wir die IP-Adresse des Benutzers benötigen wir Http.Context.current().request().remoteAddress() werden unter Verwendung der IP-Adresse zu speichern.

Wir haben riesige Menge von Abfragen geschrieben und jetzt wollen wir in generischer Weise für tenantId speichern oder abfragen.

die Anfragen geht über GenericDao

Alle

können wir folgendes in GenericDao zu bekommen Mieter Id verwenden, so dass wir in allen Fragen anhängen?

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

Was wäre der beste Ansatz zum Speichern oder Abrufen dieser Details?

Danke.

+2

'50' rep wird dir keine Antwort auf eine off-topic/zu breite/meinungsbasierte Antwort geben, die höchstwahrscheinlich geschlossen wird und wahrscheinlich sofort nach Ablauf der Bounty gelöscht wird. –

+1

Sie haben Version von Play Framework, 1.x und 2.x nicht wesentlich anders angegeben. –

+1

2.x Version ist die aktuelle Version wird verwendet – Kathiresa

Antwort

0

Sie möchten nicht, dass Ihr DAO auf Präsentationsebenen wie eine HTTP-Sitzung angewiesen ist. Ich würde eine Abstraktion empfehlen, um diese Details zu verbergen.

Erstellen Sie eine Schnittstelle namens TenantIdProvider und injizieren Sie sie in Ihr DAO. Es würde wie folgt aussehen:

public interface TenantIdProvider 
{ 
    String getTenantId(); 
} 

Dann eine Implementierung HttpSessionTenantIdProvider genannt erstellen.

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

Jetzt ist Ihre GenericDAO kann einen Verweis auf TenantIdProvider haben und jede Abfrage, die die tenantId benötigt, kann es durch die TenantIdProvider erhalten und keine Abhängigkeit von der Spiel Rahmen oder jede andere Präsentationsschicht, die Sie verwenden.

Dies wird wirklich wichtig, wenn Sie geplante Jobs terminiert haben, die ausgeführt werden und Benachrichtigungen oder eine andere Aufgabe senden, und sie dieses DAO verwenden. Wenn dieses DAO von einer HTTP-Sitzung abhängig wäre, wäre dies nicht möglich. Ihre Job-App könnte einen TenantIdProvider erstellen, der gerade "system" oder so ähnlich zurückgegeben hat.

Verwandte Themen