2012-11-10 1 views
1

많은면과 다양한 기능을 가진 매우 일반적인 응용 프로그램을위한 플러그인 확장 성 메커니즘을 만들고 싶습니다. 내가 개발하는 일에 대해사용할 플러그인 아키텍처

조금 더 자세히 :

  • 나는 GUI 응용 프로그램을 가지고 있고 확장 점을 많이 제공합니다. 메뉴, 동작, 도구 모음 버튼 등을 추가하고 싶습니다.
  • 편집 된 데이터의 변경을 모니터링하는 비 GUI 서비스가 있습니다. 그런 서비스를 등록하고 싶습니다.

저는 Equinox (예 : 응용 프로그램 제약으로 인해 사용할 수 없습니다)와 확장 및 확장 점을 포함하는 매우 훌륭한 확장 성 메커니즘을 고려하고 있습니다. 이 접근 방식의 문제점은 무엇입니까? 이 문제에 대한 대체 솔루션은 무엇입니까?

+1

이 질문은 토론 및 의견을 묻는 질문이며, 따라서 적절하지 않습니다. [FAQ] (http://stackoverflow.com/faq)에는 이러한 유형의 질문이 디자인에 적합하지 않다고 분명히 언급되어 있습니다. 건설적이지 않은 것으로 결론 짓기. 다른 유사한 메커니즘을 검색하려면 검색 엔진을 사용하십시오. Google과 Bing은 그 목적을 위해 모두 잘 작동합니다. –

+1

@KenWhite 질문이 너무 모호하지 않도록 다시 정리했습니다. –

답변

3

UI 확장 성을 위해 Eclipse RCP는 확실히 해당 영역에서 많은 기능을 제공합니다.

하위 계층의 경우, 춘분 도구가 여러 가지 가능한 런타임 환경 중 하나 일 뿐인 OSGi를보고있는 것처럼 들립니다. 사양에 맞게 코딩하면 Equinox, Felix ... 또는 응용 프로그램에 대한 다른 구현을 사용할 수 있습니다.

확장성에 대해 이야기 할 때 실제로 무엇을 찾고 있는지 정의하지 않았고 개방형 질문을 제기하는 중에 닫히는 경우가 있습니다.

3

어떤 종류의 응용 프로그램을 작성하십니까? 확장 및 확장 점의 일식 메커니즘은 eclipse rcp의 독점 개념입니다. 그래서 당신이 일식 rcp GUI를 작성한다면 이것은 갈 길입니다.

서버 응용 프로그램을 작성하면 OSGi 서비스가 훨씬 적합합니다. 서버 응용 프로그램의 경우 Equinox 대신 Apache Karaf을 사용하는 것이 좋습니다. Karaf는 Equinox를 OSGi 프레임 워크로 실행할 수 있지만 maven repos 및 로깅 지원에서 배치하는 것과 같은 많은 추가 기능을 제공합니다. 여기에 OSGi와 Apache Karaf를 사용하여 간단한 서버 응용 프로그램을 작성하는 방법에 대한 small tutorial이 있습니다. OSGi 서비스를 사용하여 API와 구현을 분리하는 방법을 보여줍니다.

확장 성을 위해 하나의 API와 둘 이상의 서비스 구현을 사용하는 것이 좋습니다. 이것은 또한 가능합니다. 인터페이스에 대한 서비스 목록을 가져올 수 있으며 추가 또는 제거 된 서비스에 대한 알림을받을 수도 있습니다.

+0

설명에 대한 자세한 설명을 추가했습니다. –

+0

eclipse rcp gui의 경우 확장명이 올바른 위치에 있어야합니다. Eclipse 4의 경우 이것이 사실인지 확실하지 않지만 OSGi 서비스에 많은 인프라가 추가로 포함되어 있습니다. –

1

OGSi를 사용할 때주의해야 할 점은 각 번들 (= 모듈)에 클래스 로더를 사용하여 서로 번들을 격리한다는 점입니다. 이것은 종종 OSGi 환경에서 사용하도록 설계되지 않은 라이브러리를 사용할 때 특히 고통 스럽습니다. 결과적으로 거의 모든 클래스 로딩 문제를 해결할 수 있지만 상황을 파악하는 데는 상당한 시간이 소요될 수 있습니다.

또한 스프링을 사용하여 프로그램을 모듈화하고 확장 할 수 있습니다. Spring의 애플리케이션 컨텍스트는 중첩 될 수 있기 때문에 "모듈"은 부모의 스프링 빈을 사용할 수 있지만 그 반대로는 사용할 수 없다. Spring은 클래스 패스에있는 모든 jar의 애플리케이션 컨텍스트 파일을 자동으로 발견하도록 지시받을 수있다. 이 접근법을 사용하여 Eclipse 확장 점을 모델링하려면 한 모듈이 다른 모듈이 후크하는 데 사용할 수있는 "register"메소드가있는 bean을 제공 할 수 있습니다. 다른 모듈의 서비스를 사용하는 것은 참조를 얻는 것만 큼 간단합니다 (응용 프로그램 컨텍스트 계층 구조가 적절하게 설정되었다고 가정 할 때) 봄에 서비스 빈에 연결됩니다.