6

我的目标是使用 Eclipse 创建一个 Restful 服务 Maven 项目。然后将其打包为一个捆绑包并将其部署到 Fuse ESB karaf OSGi 容器中。到目前为止,我所知道的是如何使用 JAX-RS API 注释,@Path @GET:

package com.restfultest;

import javax.ws.rs.GET;
import javax.ws.rs.Path;

@Path("/example")
public class ExampleService {

@GET
public String sayHello() {
    return "Hello Restful service";
 }
}

我的问题是:1.我应该使用什么 Maven 原型?maven-archetype-webapp 还是快速入门?

2.如何实现Activator?像这样?

public class Activator implements BundleActivator {

private ServiceRegistration<?> registration;

public void start(BundleContext context) throws Exception {
    // TODO Auto-generated method stub
    ExampleService exampleService = new ExampleService();
    registration = context.registerService( ExampleService.class.getName(), exampleService, null );
}

public void stop(BundleContext context) throws Exception {
    // TODO Auto-generated method stub
    registration.unregister();
}

}

3.如何注册和发布服务(如如何配置Endpoint地址和端口)?

我是osgi的新手。谁能给我一些资源或详细的教程?

4

3 回答 3

2
  1. 您可以使用Maven 捆绑插件
  2. 3. Apache CXF DOSGi帮助您将 OSGi 服务发布为 WS/REST。
于 2013-04-04T05:55:23.210 回答
1

这是我的 5 美分:

1. 你应该使用什么 Maven 原型?

  • 我使用了 OSGI HTTP Service (Quick Start),查看这个示例,我认为它更自然。

2.如何实现Activator?

3、如何注册和发布服务?

  • 我建议您下载最新的jersey-ALL-bundle并将其安装在您的 OSGI 上。
  • 然后,在我的特殊情况下,我使用Maven Bundle Plugin来处理运行时的导入和打包,所以,我的 pom.xml 看起来像这样(请注意依赖关系):

    ...
    <packaging>bundle</packaging>
    <build>
        <plugins>
            <!--+
                + OSGi Bundle-Manifiest Generator.
                + -->
            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <version>2.3.7</version>
                <extensions>true</extensions>
                <configuration>
                    <instructions>
                        <Import-Package>javax.servlet.*;version="[2.4,4.0)",*</Import-Package>
                        <Bundle-Activator>com.sample.api.Activator</Bundle-Activator>
                        <Implementation-Title>jersey-osgi-http-service-bundle</Implementation-Title>
                        <Implementation-Version>${project.version}</Implementation-Version>
                    </instructions>
                    <unpackBundle>true</unpackBundle>
                </configuration>
            </plugin>
        </plugins>
    </build>
    
    <dependencies>
        <!--+======================+-->
        <!--+ REST Dependencies    +-->
        <!--+======================+-->
        <dependency>
            <groupId>org.glassfish.jersey.containers</groupId>
            <artifactId>jersey-container-servlet-core</artifactId>
            <version>2.22.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.felix</groupId>
            <artifactId>org.apache.felix.http.bundle</artifactId>
            <version>2.2.0</version>
        </dependency>
        <!--+=========================================+-->
        <!--+ Apache Felix Framework (OSGi framework) +-->
        <!--+=========================================+-->
        <dependency>
            <groupId>org.apache.felix</groupId>
            <artifactId>org.apache.felix.framework</artifactId>
            <version>4.6.0</version>
        </dependency>
    </dependencies>
    
  • 在我的特定情况下,我还安装了 WebConsole,然后我的捆绑包如下所示:

     0|Active     |    0|System Bundle (4.6.0)
     1|Active     |    1|Apache Felix Bundle Repository (2.0.2)
     2|Active     |    1|Apache Felix Gogo Command (0.14.0)
     3|Active     |    1|Apache Felix Gogo Runtime (0.12.1)
     4|Active     |    1|Apache Felix Gogo Shell (0.10.0)
     5|Active     |    1|com.sample-api (1.3.0.SNAPSHOT)
     6|Active     |    1|jersey-all (2.22.1)
     7|Active     |    1|Apache Felix Log Service (1.0.0)
     8|Active     |    1|Apache Felix Configuration Admin Service (1.2.4)
     9|Active     |    1|Apache Felix Shell Service (1.4.2)    
    10|Active     |    1|Apache Felix Http Bundle (2.0.4)    
    11|Active     |    1|HTTP Service (1.0.0)    
    12|Active     |    1|Apache Felix Web Management Console (3.1.2)
    
  • 对于 Rest,拥有 bundle 6、10 和 11 很重要。

  • 只需执行以下操作,即可在 OSGI(我使用 Felix)的“config.properties”中配置端口:

    org.osgi.service.http.port=28370
    
  • 然后,要访问该服务,只需使用以下路径:

    http://localhost:28370/jersey-http-service/status
    
于 2016-02-03T14:20:48.130 回答
0
  1. You'll need to create an OSGI bundle. There are a few archetypes that create maven projects:

  2. Your activator looks correct.

  3. This question I cannot answer, but it looks like this project does what you need: https://github.com/hstaudacher/osgi-jax-rs-connector

In general I recommend you get yourself the OSGI specification, it's a good read and explains a lot of things.

于 2013-04-03T21:24:24.340 回答