【问题标题】:Karaf and Eclipse Equinox OSGI servicesKaraf 和 Eclipse Equinox OSGI 服务
【发布时间】:2014-12-15 16:23:48
【问题描述】:

在一系列关于 Java webframeworks 的博客中,应该在 OSGI 中很好地发挥作用, 我正在仔细观察卡拉夫。我的测试用例非常简单,部署一个 Servlet 在卡拉夫。 OSGI 有不同的 HTTPService 实现,我正在尝试使用 Equinox 实现 (org.eclipse.osgi.services)。

我的包在没有 HTTPService 依赖项的情况下很好地加载,但是当我为 HTTPService [3]、Servlet 添加依赖项并尝试安装功能 [1] 时,我遇到了麻烦 [2]。

注意事项:

  • HTTP 服务本身是使用 OSGI DS 服务安装的 [3]
  • Karaf 配置为使用 Equinox OSGI impl。

因此,投诉是关于 aries-blueprint,但我在尝试安装的捆绑包中并没有依赖它。

欢迎来自社区的建议!

谢谢你, 克里斯托夫·布希耶

[1] 名为 oss2 的 Karaf 功能

<?xml version="1.0" encoding="UTF-8"?>
<features name="oss2-features" xmlns="http://karaf.apache.org/xmlns/features/v1.2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0 http://karaf.apache.org/xmlns/features/v1.2.0">
  <feature name="oss2" version="1.0.0">
    <bundle>file:///Users/Christophe/Documents/Projects/GIT_netxstudio/plugins/base/com.netxforge.oss2.web/target/com.netxforge.oss2.web-1.0.0-SNAPSHOT.jar</bundle>
    <bundle>file:///Users/Christophe/Documents/Spaces/netxstudio/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/javax.servlet_3.0.0.v201112011016.jar</bundle>
    <bundle>file:///Users/Christophe/Documents/Spaces/netxstudio/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.osgi.services_3.3.100.v20130513-1956.jar</bundle>
    <bundle>file:///Users/Christophe/Documents/Spaces/netxstudio/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.osgi_3.9.1.v20140110-1610.jar</bundle>
    <bundle>file:///Users/Christophe/Documents/Spaces/netxstudio/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.equinox.transforms.hook_1.0.401.v20130327-1442.jar</bundle>
    <bundle>file:///Users/Christophe/Documents/Spaces/netxstudio/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins/org.eclipse.equinox.weaving.hook_1.0.200.v20130327-1442.jar</bundle>
  </feature>
</features>

[2] 错误:

karaf@root(bundle)> feature:install oss2
Error executing command: Uses constraint violation. Unable to resolve resource org.apache.aries.blueprint.core [org.apache.aries.blueprint.core/1.4.1] because it is exposed to package 'org.osgi.service.framework' from resources org.eclipse.osgi [org.eclipse.osgi_3.9.1.v20140110-1610] and org.eclipse.osgi [org.eclipse.osgi_3.9.1.v20140110-1610] via two dependency chains.

Chain 1:
  org.apache.aries.blueprint.core [org.apache.aries.blueprint.core/1.4.1]
    import: (osgi.wiring.package=org.osgi.service.framework)
     |
    export: osgi.wiring.package: org.osgi.service.framework
  org.eclipse.osgi [org.eclipse.osgi_3.9.1.v20140110-1610]

Chain 2:
  org.apache.aries.blueprint.core [org.apache.aries.blueprint.core/1.4.1]
    import: (&(osgi.wiring.package=org.apache.aries.util.tracker)(version>=1.0.0)(!(version>=2.0.0)))
     |
    export: osgi.wiring.package=org.apache.aries.util.tracker; uses:=org.osgi.service.framework
  org.apache.aries.util [org.apache.aries.util/1.1.0]
    import: (&(osgi.wiring.package=org.osgi.service.framework)(version>=1.0.0)(!(version>=2.0.0)))
     |
    export: osgi.wiring.package: org.osgi.service.framework
  org.eclipse.osgi [org.eclipse.osgi_3.9.1.v20140110-1610]

[3] 服务

@Component
public class WebDude{

    private HttpService httpService;

    @Activate
    public void activate() {
        try {
            httpService.registerServlet("/dudeme", new WebDudeServlet(), null, null);
        } catch (Exception exception) {
            exception.printStackTrace();
        }
    }

    @Reference
    public void setHTTPService(HttpService httpService) {
        this.httpService = httpService;
    }

    class WebDudeServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;

        @Override
          protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            resp.getWriter().write("I am dude");      
          }
    }
}

【问题讨论】:

    标签: servlets osgi equinox karaf


    【解决方案1】:

    您正在安装 org.eclipse.osgi_3.9.1.v20140110-1610.jar,它本身就是一个 OSGi 框架。您永远不应该将框架包安装到现有框架中。

    改为切换 karaf 以使用 Equinox。在 etc/config.properties 中设置:

    karaf.framework=equinox
    

    然后从您的功能文件中删除上述捆绑包。您甚至可以通过使用 HttpService 和 DS 的 karaf 功能来缩小功能:

    功能:安装 scr http

    所以也许在那之后你可以直接安装你自己的包。

    【讨论】:

    • 正如我在问题中所说,Karaf 已经针对 Equinox 进行了配置。另外我认为安装 org.eclipse.osgi 可能是一个问题,所以我试图将它排除在外,但我得到了完全相同的错误。关于功能:安装 scr http。我可以这样做,但它的全部目的是让它与Equinox HTTPService 实现一起工作。有人做过吗?我的问题也是最初,如何阅读和理解错误信息。与阿帕奇白羊座有什么关系?
    • 该消息意味着捆绑包 org.apache.aries.blueprint.core 无法解析,因为您安装的捆绑包引入了相同包的冲突导出。发生这种情况是因为已经安装了蓝图包,并且 karaf 尝试使用功能安装后可用的新包再次解决它。
    猜你喜欢
    • 2012-08-02
    • 2011-11-01
    • 2016-07-16
    • 2015-04-10
    • 2013-06-03
    • 2010-11-06
    • 2012-04-27
    • 2012-10-10
    • 2018-09-08
    相关资源
    最近更新 更多