Osgi 泽西2+灰熊2+阿帕奇·菲利克斯+德布雷

Osgi 泽西2+灰熊2+阿帕奇·菲利克斯+德布雷,osgi,Osgi,您如何评价此解决方案 为了在ApacheFelixOSGi上实现所有这些功能,我们为您提供了一个轻量级但功能强大的OSGi解决方案 安装Felix HTTP API和BASE 然后将grizzly-httpservice-bundle-2.3.22.jar复制到bundle目录 然后是完整的web控制台,如果您想先测试它的话 启动所有服务并确保web控制台正常工作 你要做的是: 将Jersy 2 RI目录中的所有lib复制到felix bundle dir。可以删除那些列为非真实描述文件的lib

您如何评价此解决方案

为了在ApacheFelixOSGi上实现所有这些功能,我们为您提供了一个轻量级但功能强大的OSGi解决方案

安装Felix HTTP API和BASE 然后将grizzly-httpservice-bundle-2.3.22.jar复制到bundle目录

然后是完整的web控制台,如果您想先测试它的话

启动所有服务并确保web控制台正常工作

你要做的是:

将Jersy 2 RI目录中的所有lib复制到felix bundle dir。可以删除那些列为非真实描述文件的lib,并将derby.jar也复制到该目录中

这是我正在使用的Felix捆绑包目录:

aopalliance-repacked-2.4.0-b31.jar asm-debug-all-5.0.4.jar derby.jar grizzly-httpservice-bundle-2.3.22.jar hk2-api-2.4.0-b31.jar hk2-locator-2.4.0-b31.jar hk2-utils-2.4.0-b31.jar javassist-3.18.1-GA.jar javax.annotation-api-1.2.jar javax.inject-2.4.0-b31.jar javax.servlet-api-3.0.1.jar javax.ws.rs-api-2.0.1.jar jersey-client.jar jersey-common.jar jersey-container-servlet-core.jar jersey-container-servlet.jar jersey-guava-2.21.jar jersey-media-jaxb.jar jersey-server.jar org.apache.felix.gogo.command-0.14.0.jar org.apache.felix.gogo.runtime-0.16.2.jar org.apache.felix.gogo.shell-0.10.0.jar org.apache.felix.http.api-3.0.0.jar org.apache.felix.http.base-3.0.0.jar org.apache.felix.log-1.0.1.jar org.apache.felix.webconsole-4.2.10-all.jar osgi-resource-locator-1.0.1.jar验证-api-1.1.0.Final.jar

创建一个基本的OSGi包

普通激活器重写方法如下所示。。不包括错误检查:为了让事情更清楚一点。。。但是应该加上

@Override
public void start(BundleContext context) throws Exception {

ServiceReference refHttpService = 
    context.getServiceReference(HttpService.class.getName());

HttpService httpService = (HttpService) context.getService(refHttpService);

ResourceConfig rc = new ResourceConfig(CHelloResource.class);

ServletContainer servletContainer = new ServletContainer(rc);

httpService.registerServlet(
    "/j",
    servletContainer,
    null,
    httpService.createDefaultHttpContext());
}



@Override
public void stop(BundleContext context) throws Exception {

ServiceReference refHttpService = 
    context.getServiceReference(HttpService.class.getName());

HttpService httpService = (HttpService) context.getService(refHttpService);

httpService.unregister("/j");
}
:


分配比预期更简单的资源?要连接JAX-RS和OSGi?

我在代码中发现的一个错误是,您使用的是getService,而不是ungetService

除此之外,您可能希望使用一个框架,这样您就不必摆弄低级别的OSGiAPI。您应该研究声明性服务和蓝图

另一件事是,您提供rest的方法非常轻量级,但也非常有限。例如,您将如何进行日志记录或安全性。因此,ApacheCXF可能是一个不错的选择,因为它提供了许多附加功能


搜索手动安装所需的捆绑包也可能相当麻烦。为此,您可能希望了解ApacheKaraf,它在易于安装的特性中提供了许多基础设施,如http和rest支持。它比纯felix轻一点,但一开始就容易多了

我怀疑这个问题是否会就此得到回答。[……;-……]你希望从社区得到什么样的答案?这不是一个技术问题。在你的博客上发布类似的教程会更合适。欢迎任何反馈。我认为它更适合OSGi用户。有时候人们有更好的做事方式。这是我的方式。如果有人能给它打分,那就太好了。执行情况是好是坏?为什么。这个问题本身就是一个解决办法。但是有很多方法可以解决问题。问题在哪里…?谢谢你的反馈!的确,apachecxf/Karaf已经完成了所有这一切。但我喜欢某种微足迹OSGi骨架的想法。原因是……我一直在考虑在低内存环境中使用这种配置。即使是树莓皮。或者在某个地方的一便士虚拟机上提供服务。REST的安全性一直困扰着我,原因有很多。但让我看看日志记录和安全性。真有趣!PS:我喜欢使用低级API:我也在寻找一种更轻量级的方法。这里可能有趣的一件事是karaf 4中的新karaf配置文件。它允许构建一个固定的应用程序,例如,不需要shell或功能服务。我进一步研究了这个问题,我将坚持使用ApacheFelix,安全性以及所有这些都不是什么大问题。PS:看看UPNP支持吧,它太棒了!超小,正是我想要的: