플러그인 및 번들

플러그인을 지원하는 기술은 OSGi 프레임워크를 사용하여 구현됩니다. 이 관점에서 플러그인은 OSGi 번들과 동일합니다. 번들 및 연관된 클래스는 Java 클래스 로딩, 필수조건 관리 및 번들의 라이프 사이클에 대한 프로세스를 지정하고 구현합니다. 이 설명의 나머지 부분에서는 프레임워크의 특정 클래스를 언급하지 않는 한 플러그인번들이라는 용어를 같은 의미로 사용합니다.

플러그인

플러그인 클래스는 플랫폼에서 실행 중인 플러그인을 표시합니다. 이 클래스는 플러그인에 대한 라이프 사이클 측면 및 전체 의미를 통합하는 편리한 위치입니다. 플러그인은 라이프 사이클의 시작중지 측면에 대한 특수화된 기능을 구현할 수 있습니다. 각 라이프 사이클 메소드에는 추가 정보를 제공할 수 있는 BundleContext에 대한 참조가 포함되어 있습니다.

라이프 사이클의 시작 부분은 특별한 설명의 가치가 있습니다. 플러그인의 코드를 일체 실행하지 않고 플러그인에 대한 정보를 플러그인 Manifest 파일에서 가져올 수 있음을 이미 확인했습니다. 일반적으로 Workbench의 일부 사용자 조치는 플러그인의 시작을 필요로 하는 일련의 이벤트를 발생시킵니다. 구현 측면에서 플러그인은 해당 플러그인에 포함되어 있는 클래스를 로드하기 전에는 절대 시작되지 않습니다.

start 메소드는 플러그인의 초기화 및 등록 작동을 구현하기 위한 편리한 위치입니다. 그러나 플러그인을 다른 여러 환경에서도 시작할 수 있습니다. 오브젝트를 데코레이트하는 아이콘을 얻는 것만큼 단순한 작업으로 플러그인의 클래스 중 하나를 로드할 수 있으므로, 플러그인을 시작할 수 있습니다. 초기화가 지나치면 초기화가 필요하기 오래 전에 플러그인 코드 및 데이터가 로드될 수 있습니다. 따라서 플러그인의 초기화 타스크를 자세히 살펴 보고 시작 시 초기화 수행에 대한 대체 방법을 고려하는 것이 중요합니다.

번들 컨텍스트

라이프 사이클 관리는 OSGi "번들" 용어 및 플랫폼의 "플러그인" 용어가 일치하는 위치입니다. 플러그인이 시작되면 플러그인과 관련된 정보를 얻을 수 있는 BundleContext에 대한 참조가 제공됩니다. BundleContext는 시스템의 다른 번들/플러그인을 찾는 데에도 사용될 수 있습니다.

BundleContext.getBundles()는 시스템의 모든 번들에 대한 배열을 얻는 데 사용될 수 있습니다. 다른 번들의 라이프 사이클 상태가 변경되는 시기를 플러그인이 알 수 있도록 BundleEvent의 리스너를 등록할 수 있습니다. 자세한 정보는 BundleContextBundleEvent의 javadoc을 참조하십시오.

3.0 이전에는 유사한 정보를 제공하기 위해 플러그인 레지스트리(IPluginRegistry)가 제공되었습니다. 예를 들어 시스템의 모든 플러그인에 대한 플러그인 설명자에서 이 레지스트리를 조회할 수 있었습니다. 이제 이 레지스트리는 사용되지 않으며 이 목적으로는 BundleContext를 사용해야 합니다. 플랫폼 레지스트리는 이제 확장 및 확장점에 대한 정보용으로 독점적으로 사용됩니다.

번들 활성자

BundleActivator 인터페이스는 플러그인에 구현되는 시작 및 중지 작동을 정의합니다. 플러그인 클래스가 이 기능을 구현하기 위한 편리한 위치이긴 하지만 플러그인 개발자는 플러그인 디자인에 적절한 모든 클래스에 BundleActivator의 인터페이스를 자유롭게 구현할 수 있습니다. 실제로 플러그인에 특정 라이프 사이클 관리가 필요하지 않을 경우 이 인터페이스를 구현할 필요가 전혀 없습니다.

번들

모든 플러그인 아래에는 프레임워크에서 관리하는 OSGi 번들이 있습니다. 번들은 모듈 방식의 OSGi 장치입니다. 기본적으로 번들은 단순히 플랫폼에 설치된 파일(자원 및 코드)의 콜렉션입니다. 각 번들에는 고유 Java 클래스 로더가 있으며, 번들 자체를 시작, 중지 및 설치 제거하는 프로토콜이 포함되어 있습니다. Eclipse 플랫폼 측면에서 번들은 단순히 구현 클래스입니다. 플러그인 개발자는 번들 클래스를 확장하지는 않지만 플러그인 또는 기타 BundleActivator 구현을 사용하여 플러그인을 표시합니다.