응용 프로그램에서 여러 데이터베이스 자격 증명을 구성하고 관리하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/2422738

문제

좋아, 그래서 나는 독립형 웹 서비스를 디자인하고있다 (Restlet을 내 프레임 워크로 사용). 내 응용 프로그램은 3 개의 층으로 나뉩니다.

  • 데이터 계층 (데이터베이스 바로 위, 데이터베이스에 연결/쿼리를위한 API 및 데이터베이스 개체를 제공합니다)
  • 객체 레이어 (데이터 계층의 직렬화 책임 ... 클라이언트 계층이 데이터베이스에 대해 걱정하지 않고 사용할 수있는 객체를 제공합니다)
  • 클라이언트 계층 (이 레이어는 Restlet Web Service입니다 ... 기본적으로 객체 레이어에서 객체를 생성하고 웹 서비스 요청을 충족합니다)

이제 객체 레이어에서 생성 한 각 객체에 대해 다른 자격 증명을 사용하고 싶습니다 (따라서 각 객체를 샌드 박스 할 수 있습니다 ...). 객체 계층은 정확한 자격 증명을 알지 않아야합니다 (예 : 로그인/PW/DB URL 등).

이것을 관리하는 가장 좋은 방법은 무엇입니까? 내 데이터 계층에 슈퍼 클래스 데이터베이스 객체가 있어야한다고 생각하고 있습니다. Database db = new SubDatabase(); 그런 다음 해당 데이터베이스를 계속 사용하십시오.

클라이언트 수준에서는 단지 갈 수 있습니다. ItemCollection items = new ItemCollection(); 연결된 데이터베이스에 대한 알 수 없습니다.

나는 다른 사람들이 플랫폼에서 쉽게 서비스를 만들 수 있도록 플랫폼을 확장 할 수 있도록 노력하고 있기 때문에 이것을 묻습니다.

이러한 건축 문제에 대한 경험이 있거나 이런 종류의 관리 방법에 대한 경험이 있다면 통찰력이나 조언에 감사드립니다 ...

이것이 혼란 스러우면 질문을하십시오. 감사!

내 플랫폼은 Java, 내가 사용하는 나머지 프레임 워크는 Restlet이고 데이터베이스는 MySQL입니다.

도움이 되었습니까?

해결책

나는 당신이 설명한 것이 합리적이라고 생각하며 데이터베이스 세부 사항과 자격 증명을 영리한 수준에 노출시키지 않으려 고 노력하고 있습니다.

이 상황의 경우 하나의 인스턴스를 생성하고 객체 레이어에 사용하는 싱글 톤 패턴을 생각할 수있는 디자인 패턴을 생각해야합니다. .

두 번째 옵션, 내가 마음 속으로 얻는 것은 최대 절전 모드 레이어를 사용하는 것입니다. 이는 세부 사항을 숨기고 ORM 객체에 액세스하는 데 도움이되며 원하는 것을 얻을 수 있습니다.

다른 팁

내 제안은 JTA를 사용하여 각 데이터 소스 수와 함께 하나 이상의 데이터베이스를 사용할 수있는 것입니다. 자세한 내용은 여기에서 참조 할 수 있습니다 https://test.kuali.org/confluence/display/kulrice/datasource+and+jta+configuration

나는 @saugata의 의견을 반영 할 것이다. 보다 그리고 스프링 구성의 객체 레이어에 데이터 소스 구현 (또는 테스트를위한 스터브)을 주입하십시오. 이것은 여러 가지 방법으로 전체 응용 프로그램 아키텍처에 도움이 될 것입니다.

  1. 코드 리 컴파일없이 데이터베이스 (인스턴스 또는 구현)를 즉시 전환 할 수 있습니다.
  2. 구현에서 데이터 소스를 완전히 추상화하여 웹 서비스, 큐 구현 또는 스텁을 위해 데이터베이스를 교체 할 수 있습니다.
  3. 이러한 방식으로 응용 프로그램을 분리하면 테스트가 더 쉬워집니다.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top