[java] JAX-RS와 OSGi의 통합 방법

OSGi는 자바 모듈 시스템을 위한 표준 스펙이며, JAX-RS는 자바 기반 RESTful 웹 서비스를 개발하기 위한 스펙입니다. 이 두 가지를 함께 사용하여 모듈화된 웹 애플리케이션을 개발하고자 한다면, JAX-RS와 OSGi의 통합 방법을 알아야 합니다.

OSGi 환경에서 JAX-RS 사용하기

  1. 먼저, OSGi 환경에서 JAX-RS를 사용하기 위해 필요한 라이브러리를 포함한 번들을 생성해야 합니다. 이를 위해서는 Maven이나 Gradle과 같은 빌드 도구를 사용할 수 있습니다. 다음은 Maven을 사용하는 예시입니다.

    <dependencies>
        <!-- JAX-RS를 위한 라이브러리 -->
        <dependency>
            <groupId>javax.ws.rs</groupId>
            <artifactId>javax.ws.rs-api</artifactId>
            <version>2.1.1</version>
        </dependency>
           
        <!-- OSGi 환경에서 사용하는 라이브러리 -->
        <dependency>
            <groupId>org.osgi</groupId>
            <artifactId>osgi.core</artifactId>
            <version>7.0.0</version>
        </dependency>
    </dependencies>
    
  2. JAX-RS 어플리케이션을 개발하기 위해 필요한 클래스와 메서드를 작성합니다. 예를 들어, 다음과 같은 간단한 JAX-RS 리소스 클래스를 작성해보겠습니다.

    import javax.ws.rs.GET;
    import javax.ws.rs.Path;
    import javax.ws.rs.Produces;
    import javax.ws.rs.core.MediaType;
       
    @Path("/hello")
    public class HelloResource {
       
        @GET
        @Produces(MediaType.TEXT_PLAIN)
        public String sayHello() {
            return "Hello, World!";
        }
    }
    
  3. OSGi 환경에서 JAX-RS 애플리케이션을 실행하기 위해, JAX-RS 애플리케이션의 진입점을 정의하고, OSGi 번들로 패키징합니다. 예를 들어, 다음과 같이 OSGi 애플리케이션 클래스를 작성할 수 있습니다.

    import org.osgi.framework.BundleActivator;
    import org.osgi.framework.BundleContext;
    import org.osgi.framework.ServiceRegistration;
    import javax.ws.rs.core.Application;
       
    public class Activator implements BundleActivator {
       
        private ServiceRegistration<Application> serviceRegistration;
       
        public void start(BundleContext bundleContext) {
            Application application = new Application() {
                @Override
                public Set<Class<?>> getClasses() {
                    Set<Class<?>> classes = new HashSet<>();
                    classes.add(HelloResource.class);
                    return classes;
                }
            };
       
            serviceRegistration = bundleContext.registerService(Application.class, application, null);
        }
       
        public void stop(BundleContext bundleContext) {
            serviceRegistration.unregister();
        }
    }
    
  4. 이제 Maven을 사용하여 번들을 빌드하고 OSGi 컨테이너에 설치하십시오. 이후 OSGi 애플리케이션을 실행하면, JAX-RS 애플리케이션의 엔드포인트가 OSGi 환경에서 동작하는 것을 확인할 수 있습니다.

참고 자료