2014-10-20 4 views
0

OSGI에서 원활하게 작동해야하는 Java webframeworks에 대한 일련의 블로그에서 나는 Karaf를 면밀히 검토하고 있습니다. 내 테스트 사례는 꽤 간단하며 Karaf에 Servlet 을 배포하십시오. OSGI에 대한 다른 HTTPService 구현이 있는데, 나는 Equinox 구현 (org.eclipse.osgi.services)을 시도하고있다.Karaf와 Eclipse Equinox OSGI 서비스

내 번들은 HTTPService 종속성없이 멋지게로드되지만 HTTPService [3], Servlet에 대한 종속성을 추가하고 [1] 기능을 설치하려고하면 문제가 발생합니다 [2].

참고 :

  • HTTP 서비스 자체 [3]
  • Karaf이 춘분 OSGI IMPL를 사용하도록 구성되어 OSGI DS 서비스를 사용하여 설치된다.

그래서 불만은 aries-blueprint에 관한 것이지만 설치하려고하는 번들에는 불만이 없습니다.

커뮤니티의 조언을 환영합니다!

는 크리스토프 Bouhier을 주셔서 감사합니다

[1]

<?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] 오류 oss2라는 Karaf 기능 :

[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

OSGi 프레임 워크 자체 인 org.eclipse.osgi_3.9.1.v20140110-1610.jar을 설치 중입니다. 기존 프레임 워크에 프레임 워크 번들을 설치해서는 안됩니다.

대신에 춘분을 사용하여 춘분을 사용하십시오. etc/config.properties에서 다음을 설정하십시오.

karaf.framework=equinox 

그런 다음 기능 파일에서 위 번들을 제외하십시오.

기능 : 당신도 HttpService를하고 DS의 karaf 기능을 사용하여 기능을 작게 만들 수 있습니다 직접 자신의 번들을 설치할 수 후 그래서 아마 SCR에 http

를 설치합니다.

+0

질문에서 Karaf은 이미 Equinox 용으로 구성되어 있습니다. 또한 org.eclipse.osgi를 설치하는 것이 문제가 될 수 있다는 것을 알았 기 때문에 나는 그것을 남겨 두려고했는데 정확한 오류가 발생했습니다. 기능 관련 : scr http를 설치하십시오. 그렇게 할 수는 있지만, 그것을 춘분 HTTPService 구현과 함께 사용하게하는 전체 목적입니다. 누구든지이 일을 했습니까? 또한 내 질문은 처음에는 오류 메시지를 읽고 이해하는 방법입니다. Apache Aries와의 관계는 무엇입니까? – user2736833

+1

이 메시지는 설치 한 번들이 동일한 패키지의 충돌하는 내보내기를 가져 오기 때문에 번들 org.apache.aries.blueprint.core를 확인할 수 없음을 의미합니다. 이것은 청사진 번들이 이미 설치되어 있고 karaf가 기능 설치 후에 사용할 수있는 새 번들로 다시 해결하려고하기 때문에 발생합니다. –

+0

아 감사합니다. – user2736833

관련 문제