2011-08-10 4 views
0

현재 멀티 테넌시 (multi tenancy) 지원으로 인해 여러 버전의 클래스를 동시에 사용할 수있는 Java 응용 프로그램을 작성 중입니다. 나는 이것을 처리 할 수있는 좋은 접근 방법이 있습니까? 내 기본 접근 방식은 인터페이스를 가지고 Car를 말하고 CarV1, CarV2 등과 같은 다른 버전을 구현하는 것이다. 모든 버전에는 고유 한 클래스가 있습니다.동일한 응용 프로그램에서 다른 버전의 클래스를 사용하는 방법은 무엇입니까?

내 접근 방식이 일종의 부끄러운 생각입니다. 그러나 나는이 주제와 관련된 문헌을 찾지 못했지만 실제로 무엇을 검색해야할지 모른다.

답변

2

인터페이스 아이디어는 신중해야합니다. 그것을 외부 입력, 예를 들어, 외부 입력에 따라 필요한 구현 인스턴스를 생성 할 수있는 팩토리와 결합하십시오. 지. 세입자 - 이드. 동일한 응용 프로그램 인스턴스에서 여러 임차인을 지원할 필요가없는 경우 JDK의 ServiceLocator과 같은 것을 사용하여 파일 기반 구성 방식을 사용할 수도 있습니다.

응용 프로그램 서버에서 실행중인 경우 각각 다른 클라이언트에 대해 구성된 여러 인스턴스를 실행하는 방안을 고려하십시오. 그러면 서버가 인스턴스 분리를 ​​처리합니다.

그렇지 않은 경우 Java EE 이외의 응용 프로그램에서 동시에 (런타임에) 여러 구현이 필요하다고 생각하면 까다로운 문제입니다. 어쩌면 여러 버전의 클래스를 가질 수있는 기능을 제공하는 OSGi 컨테이너를 살펴 보길 원할 것입니다. 그러나 이와 같은 접근 방식은 아직 익숙하지 않은 경우 상당히 복잡합니다.

+1

CDI 컨테이너에서 실행중인 경우 한정자를 사용하여 리소스를 주입 할 수 있습니다. 생산자 방법과 더불어 단일 응용 프로그램 인스턴스가 대체 구현의 런타임 선택으로 다중 사용자 동작을 지원할 수 있습니다. –

+0

좋은 지적! 공장을 직접 작성하는 대신이 방법이 더 좋습니다. –

0

이론적으로 JBoss와 같은 다중 클래스 로더를 사용하여이를 처리 할 수 ​​있습니다.

하지만 다음과 같이 직접 구현하는 것이 좋습니다. 이것은 다소 복잡한 문제이며 쉽게 잘못 이해합니다. 웹 애플리케이션에 대해 이야기하고 있다면, 대신 세입자 당 하나의 웹 애플리케이션 인스턴스를 생성 할 수 있습니다. 독립 실행 형 응용 프로그램에서 작업하는 경우 세입자 당 하나의 인스턴스를 실행할 수 있는지 확인해야합니다.

관련 문제