2016-09-13 2 views
11

우리는 Play! HTTP 세션 용 프레임 워크.GenericDao에서 공통 값 (IpAddress, TenantId)을 검색하는 방법은 무엇입니까?

tenantIdipAddress은 여러 테이블에서 공통적으로 사용되는 열입니다. 사용자가 로그인 할 때

, 우리가 저장되어있는 tenantId 우리는 우리가 IP 주소를 저장하는 Http.Context.current().request().remoteAddress()을 사용하는 사용자의 IP 주소를 필요로 할 때마다

HttpContextSession있다.

많은 쿼리가 작성되었으며 이제는 tenantId에 대한 일반적인 방식으로 저장하거나 쿼리하려고합니다.

모든 쿼리

우리는 우리가 모든 쿼리에 추가 할 수 있도록 세입자 ID를 가져 GenericDao에 다음을 사용할 수

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에 삽입하십시오.

public interface TenantIdProvider 
{ 
    String getTenantId(); 
} 

그런 다음 HttpSessionTenantIdProvider라는 구현을 만듭니다.

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

이제 GenericDAO는 TenantIdProvider에 대한 참조와 tenantId가 TenantIdProvider를 통해 얻을 수있는 필요와 플레이 프레임 워크 또는 당신이 사용하는 다른 프리젠 테이션 계층에 대한 종속성이없는 모든 쿼리를 할 수 있습니다.

알림이나 다른 작업을 실행하고 보내는 예약 된 작업이 끝나면이 DAO가 사용됩니다. 이 DAO가 HTTP 세션에 의존하면 불가능합니다. 귀하의 직업 응용 프로그램은 "시스템"또는 이와 유사한 것을 반환 한 TenantIdProvider를 만들 수 있습니다.

관련 문제