2014-06-22 3 views
0

다른 소스에서 데이터를 가져올 수있는 JavaEE 웹 응용 프로그램에서 작업 중입니다. 데이터는 나중에 처리되고보고되기 위해 데이터베이스에 반입되고 유지됩니다. 특정 소스를 다루는 하나의 기본 데이터 공급자로 시작했지만 나 또는 다른 사람들이 다른 데이터 소스에 대해 데이터 공급자/데이터 공급자 플러그 인을 쓸 수있는 방식으로 응용 프로그램 아키텍처를 디자인하려고합니다.내 웹 응용 프로그램을 확장 할 수 있도록 확장/플러그인/공급자 메커니즘을 사용할 수 있습니까?

서비스 공급자는 핵심 응용 프로그램과 독립적으로 구현 될 수 있으며 분리 된 병에 패키지 될 수 있습니다. 일단 웹 애플리케이션 클래스 패스로 떨어지면, 제공자 구현은 데이터 가져 오기 작업을 트리거하는 애플리케이션 코어에 의해 서비스 제공자로 인식 될 것이다.

이 SPI 또는 확장 점을 구현하는 표준 방법을 찾고 있지만 응용 프로그램의 코드가 부 풀리지 않습니다.

"OSGI 확장 점"은 생각했지만 이것은 rcp 플랫폼 응용 프로그램을위한 것이고 광산은 웹 응용 프로그램입니다. 그래서 나는 지금 그것을 배제했다.

두 번째 아이디어는 미리 정의 된 공급자 인터페이스를 조합 한 다음 사용자 지정 "공급자"주석을 사용하여 구현 클래스 (서비스 공급자)를 표시하는 것입니다.

이 아키텍처 관련 질문을 해결하기 위해 어떤 메커니즘/접근 방식/프레임 워크를 권장 할 수 있습니까? 사전 & 환호에

많은 감사, 마이클

답변

1

나는 이벤트 옵저버를 사용합니다. 응용 프로그램을 시작하는 동안메서드가있는 DiscoverDataProviders 이벤트를 발생시킵니다. 확장 항아리는 이벤트를 관찰하고 스스로 등록 할 수 있습니다.

내가 javax.enterprise.event의 자바 독에 비트를 읽고

+0

http://docs.oracle.com/javaee/6/api/javax/enterprise/event/Observes.html를 참조하십시오. 흥미로운 아이디어! 이것에 대해 좀 더 자세히 설명해 주시겠습니까? 응용 프로그램의 전체 가동 시간 동안 등록을 저장하면 내 다음 큰 질문이 될 것입니다. SingletonRegistry처럼 RAM에 있습니까? 더 좋은 생각이야? 한 가지 더 질문 : 시작시 이벤트 발생? 어떻게해야합니까 (포인터)? 연결된 이벤트 패키지 설명에서 명확하지 않습니다. – Michael

+0

이 방법에 단점이 있다는 것을 인식했습니다. JavaEE 컨테이너 외부의 확장 메커니즘을 테스트 할 수 없습니다. 예를 들어 JUnit을 사용하는 Eclipse IDE에서 말하면 ... – Michael

+0

시작시 이벤트 발생 : (at) Startup 주석이있는 Singleton을 사용하십시오. – ruediste