2014-10-20 4 views
0

В серии блогов по Java webframeworks, которые должны хорошо играть в OSGI, Я внимательно смотрю на Karaf. Мой тестовый пример довольно прямолинейный, разверните сервлет на Karaf. Существуют разные реализации HTTPService для OSGI, я пытаюсь реализовать Equinox (org.eclipse.osgi.services).Karaf и Eclipse Equinox Услуги OSGI

Мой пакет загружается красиво без зависимостей HTTPService, но когда я добавляю зависимости для HTTPService [3], Servlet и пытаюсь установить функцию [1], я столкнулся с проблемой [2].

Примечания:

  • Сам HTTP службы устанавливается с помощью услуги OSGI DS [3]
  • Karaf настроен на использование Equinox OSGi осущ.

Так что жалоба о проекте aries-blueprint, но я не располагаю ею в комплекте, который я пытаюсь установить.

Консультирование сообщества будет очень желанным!

Спасибо, Christophe Bouhier

[1] Функция Karaf имени oss2

<?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] ошибка:

[email protected](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");  
      } 
    } 
} 

ответ

1

Вы устанавливаете org.eclipse.osgi_3.9.1.v20140110-1610.jar, который является самой основой OSGi. Вы никогда не должны устанавливать пакет фреймов в существующую инфраструктуру.

Вместо этого переключатель karaf используется для равноденствия. В etc/config.properties:

karaf.framework=equinox 

Затем оставьте вышеуказанный пакет из вашего файла функций. Вы можете даже сделать особенность меньше, используя функцию karaf для HTTPService и DS:

функции: установить Scr HTTP

Так что, возможно после этого вы можете непосредственно установить свой собственный пакет.

+0

Как я заявляю в вопросе, Karaf уже настроен для Equinox. Также я решил, что установка org.eclipse.osgi может быть проблемой, поэтому я попытался ее оставить, и я получаю ту же ошибку. Относительно особенностей: install scr http. Я мог бы сделать это, но вся цель - заставить его работать с реализацией HTTPService. Это было сделано кем угодно? Также мой вопрос изначально, как читать и понимать сообщение об ошибке. Каково отношение с Apache Aries? – user2736833

+1

Это сообщение означает, что пакет org.apache.aries.blueprint.core не может быть разрешен, так как пакеты, которые вы устанавливаете, вводят конфликтующие экспортные пакеты одного и того же пакета. Это происходит, когда пакет обновлений уже установлен, и karaf пытается снова разрешить его новыми пакетами, доступными после установки функции. –

+0

ах спасибо, это имеет смысл. – user2736833