미성숙한 Java OSGI 프레임워크

8798 단어 javastandaloneosgi
OSGI는 여러 구성 요소를 포함하는 복잡한 Java 응용 프로그램을 구축하는 데 사용되는 프레임워크입니다.OSGI를 사용하여 동적으로 로드할 수 있는 Java 응용 프로그램을 구성할 수 있습니다.기본 자바 프로그램을 구축할 때, 모든 모듈에jar 파일을 만들고 클래스 경로로 불러올 수 있습니다.그러나 OSGI 프레임워크가 있으면 언제든지 OSGI jar 파일을 동적으로 로드할 수 있습니다.
OSGI 프레임워크에 대한 용어와 개념에 대해 살펴보겠습니다.

묶다
Bundle은 모든 논리를 포함하는 OSGI 모듈입니다.Bundle은 어떤 서비스를 제공하는 업무 논리를 포함하는jar 파일입니다.일반jar 파일을 제외하고는 목록에 있는 OSGI가 실행될 때 어떻게 작업해야 하는지에 대한 정보도 포함되어 있습니다.MF 파일.이러한 정보에는 번들 이름, 버전, 내보내기 및 가져온 라이브러리가 포함됩니다.
다음은 OSGI 번들 정의의 예제 정의입니다.
 Bundle-Name: Hello World
 Bundle-SymbolicName: org.dhanushka.helloworld
 Bundle-Description: A Hello World bundle
 Bundle-ManifestVersion: 2
 Bundle-Version: 1.0.0
 Bundle-Activator: org.dhanushka.Activator
 Export-Package: org.dhanushka.helloworld;version="1.0.0"
 Import-Package: org.osgi.framework;version="1.3.0"

  • Bundle name 은 Bundle을 식별하는 데 사용됩니다.이것은 선택할 수 있는 문자열 값일 뿐입니다.

  • Bundle SymbolicName은 Bundle의 고유한 식별자입니다.이것은 일반적인 자바 패키지 이름 표준을 따른다.

  • Bundle Description은 이 Bundle에 대한 설명입니다.

  • Bundle ManifestVersion은 OSGI 프레임워크가 Bundle 목록을 읽는 데 사용하는 버전 제어입니다.

  • Bundle Version은 OSGI Bundle에 할당된 버전 번호입니다.

  • Bundle Activator는 모듈의 시작점입니다.당신은 여러 종류로 실현할 수 있습니다.OSGI는 이 속성을 사용하여 번들 시작점으로 사용할 클래스를 표시합니다.잠시 후 우리는 더 많은 bundle activator에 대해 토론할 것이다.

  • 내보내기 패키지는 다른 OSGI 번들에 공개해야 하는 패키지 그룹입니다.내보내기 패키지를 지정하지 않으면 다른 OSGI 패키지는 OSGI 패키지의 클래스에 접근할 수 없습니다.

  • 가져오기 패키지는 OSGI 번들에 필요한 패키지 그룹입니다.다른 OSGI 번들을 참조해야 하는 경우 패키지를 가져와야 합니다.
  • Bundle은 모든 프로그래밍 논리를 포함하는 모듈일 뿐입니다.다른 버블 기능을 가져와서 다른 버블에 자신의 기능을 공개할 수 있습니다.

    서비스
    서비스는 모든 패키지를 한데 연결하는 방식이다.내가 설명한 바와 같이, 여러 개의 패키지는 서비스를 제공하기 위해 연결될 수 있다.
    활성화 방법이 있는 다음 예제 번들 구현을 확인합니다.
    public class Activator implements BundleActivator {
        private BundleContext context;
    
        @Override
        public void start(BundleContext context) throws Exception {
            System.out.println("Starting");
            this.context = context;
        }
    
        @Override
        public void stop(BundleContext context) throws Exception {
            System.out.println("Stopping");
            this.context = null;
        }
    }
    
    이 소스 코드에서 bundle activator는 Activator 클래스입니다.OSGI가 시작되면 start 메서드가 실행됩니다.이는 main 방법과 매우 비슷하다.OSGI 프레임워크가 중지되면 stop 메서드가 실행됩니다.OSGI에 이 번들을 추가할 때마다 start 메소드를 실행하고 stop 메소드를 실행하여 종료합니다.
    보시다시피 이 번들은 다른 OSGI 번들과 아무런 의존 관계가 없습니다.그것은 독립적으로 집행을 시작할 수 있다.특정 조건이 충족되면 번들을 시작해야 하는 경우도 있습니다.OSGI는 조건이 충족될 때까지 start 메서드를 실행하지 않습니다.
    이것은 참고를 통해 실현할 수 있다.주어진 조건이 충족되면 start 방법을 사용할 수 있도록 인용합니다.Activator 클래스에 대한 다음 수정 사항을 검토합니다.
    public class Activator implements BundleActivator {
        private BundleContext context;
    
        @Override
        public void start(BundleContext context) throws Exception {
            System.out.println("Starting");
            this.context = context;
        }
            @Reference(
                name = "activator.service",
                service = ActivatorService.class,
                cardinality = ReferenceCardinality.MANDATORY,
                policy = ReferencePolicy.DYNAMIC,
                unbind = "unsetActivatorService")
        protected void setActivatorService(ActivatorService activatorService) {
                // Set values
         }
    
        protected void unsetActivatorService(ActivatorService activatorService) {
                // Unset values
        }
    
        @Override
        public void stop(BundleContext context) throws Exception {
            System.out.println("Stopping");
            this.context = null;
        }
    }
    
    이 코드에는 이전의 startstop 방법 외에 또 다른 두 가지 방법이 있다.이 의존항을 표시하려면 @Reference 주석을 사용하십시오.여기, 우리는 서비스 명칭과 서비스 종류를 제시했다.참고 사항에서 cardinality을 필수로 정의합니다.기수 표기가 강제이기 때문에 start 함수를 촉발하려면 setActivatorService을 만족시켜야 한다.기본 옵션인 경우 setActivatorService으로 번들을 시작하지 않아도 됩니다.이 방법은 다른 패키지에서 터치할 수 있습니다.다음은 setActivatorService을 어떻게 촉발하는지 예시 코드이다.
    context.getBundleContext().registerService(ActivatorService.class.getName(), activatorService, null);
    
    여기에 activatorServicesetActivatorService으로 보내야 할 상세 정보를 담은 대상이다.이 메서드를 실행하면 OSGI bundle에서 ActivatorService start 메서드를 시작합니다.
    OSGI 프레임워크를 사용하여 고급 응용 프로그램을 구축할 수 있습니다.주입 디자인 모드에 의존하여 동적 플러그인 구성 요소를 구축할 수 있습니다.

    좋은 웹페이지 즐겨찾기