我的目标是使用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或quickstart?
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。如何注册和发布服务(如何配置端点地址和端口)?
我是osgi的新手。有没有人可以提供一些资源或详细的教程?
答案 0 :(得分:2)
答案 1 :(得分:0)
您需要创建一个OSGI包。有一些原型可以创建maven项目:
您的激活器看起来正确。
这个问题我无法回答,但看起来这个项目可以满足您的需求:https://github.com/hstaudacher/osgi-jax-rs-connector
一般来说,我建议你自己动手OSGI specification,这是一本很好的阅读并解释了很多东西。
答案 2 :(得分:0)
这是我的5美分:
然后,在我的特定情况下,我使用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 installed,然后我的捆绑包看起来像这样:
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)
对于休息,拥有6,10和11束非常重要。
这个端口可以在OSGI的“config.properties”中配置(我使用的是Felix),只需这样做:
org.osgi.service.http.port=28370
然后,要访问该服务,只需使用以下路径:
http://localhost:28370/jersey-http-service/status