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");
}
}
}
질문에서 Karaf은 이미 Equinox 용으로 구성되어 있습니다. 또한 org.eclipse.osgi를 설치하는 것이 문제가 될 수 있다는 것을 알았 기 때문에 나는 그것을 남겨 두려고했는데 정확한 오류가 발생했습니다. 기능 관련 : scr http를 설치하십시오. 그렇게 할 수는 있지만, 그것을 춘분 HTTPService 구현과 함께 사용하게하는 전체 목적입니다. 누구든지이 일을 했습니까? 또한 내 질문은 처음에는 오류 메시지를 읽고 이해하는 방법입니다. Apache Aries와의 관계는 무엇입니까? – user2736833
이 메시지는 설치 한 번들이 동일한 패키지의 충돌하는 내보내기를 가져 오기 때문에 번들 org.apache.aries.blueprint.core를 확인할 수 없음을 의미합니다. 이것은 청사진 번들이 이미 설치되어 있고 karaf가 기능 설치 후에 사용할 수있는 새 번들로 다시 해결하려고하기 때문에 발생합니다. –
아 감사합니다. – user2736833