OSGI 번들로 내 서블릿을 확장 가능하게하려고합니다. 새로 추가 된 번들은 서블릿이어야합니다. Felix http://felix.apache.org/documentation/subprojects/apache-felix-http-service.html에서 제공하는 Servlet Bridge 기능이 있는데, 매우 좋았습니다. 설치하는 동안 몇 가지 문제가있었습니다.Apache Felix 서블릿 브릿지 설정
웹 애플리케이션 내부
- 배포 org.apache.felix.http.proxy jar 파일 (WEB-INF/lib에) : 펠릭스 웹 페이지로 는 우리가해야 할 설정 서블릿 다리를 위해 말한다 ; [DONE] 서블릿 컨텍스트 [DONE]
- 가 org.apache.felix.http.proxy.ProxyServlet web.xml의 내측을 정의하는 특성으로 설정하는 BundleContext (ServletContextListener 같은) 시동 수신기에서
- 및 이 모든 요청에 제공하기 위해 등록 [DONE]
- 는 HTTP 세션 관련 이벤트가 전달 될 수 있도록 당신의 web.xml에로 org.apache.felix.http.proxy.ProxyListener을 정의 [DONE]
- javax.servlet; javax.servlet.http; version = 2.6을 반드시 추가하십시오. OSGi 프레임 시스템 패키지 [필수 않음]
- OSGi 프레임 워크 내부에 전개 org.apache.felix.http.bridge (또는 org.apache.felix.http.bundle) [????]
스텝 번호 6은 내 경우 서블릿 브리지를 작동시키기에 충분하지 않은 것 같습니다. 내 번들 서블릿에 대해 1 ~ 5 단계를 모두했습니다. 내 메인 서블릿에는 OSGI 임베디드 메커니즘이 있으므로 자바 코드에서 내 번들을 배포한다. 이 OSGI 실행 프로그램의 코드 조각입니다 : 내가 org.apache.felix.http.bridge
번들을 설치 필요 주 서블릿 코드에서
Map m = new HashMap();
m.putAll(System.getProperties());
m.put(Constants.FRAMEWORK_STORAGE_CLEAN, "onFirstInit");
m.put(Constants.FRAMEWORK_SYSTEMPACKAGES, "org.osgi.service.http");
fwk = getFrameworkFactory().newFramework(m);
fwk.start();
// Install bundle JAR files and remember the bundle objects.
BundleContext ctxt = fwk.getBundleContext();
for (int i = 0; i < jars.size(); i++) {
Bundle b = ctxt.installBundle(((File) jars.get(i)).toURI().toString());
bundleList.add(b);
}
// Start all installed non-fragment bundles.
for (int i = 0; i < bundleList.size(); i++) {
if (!isFragment((Bundle) bundleList.get(i))) {
((Bundle) bundleList.get(i)).start();
}
}
, 일부 내 서블릿 번들에 대한 의존성 (SLF4J,에서 javax.servlet ...) 내 서블릿 번들이 다음 단계 1-5를 만들었습니다. 배포 결과 : Servlet Bundle에 사용할 수있는 HttpService가 없습니다. 내 응용 프로그램에서 사용할 수 없기 때문에 Servlet 번들에 서블릿 인스턴스를 등록 할 수 없습니다. org.apache.felix.http.bridge
의 MANIFEST.MF를 보면
Export-Service: org.osgi.service.http.HttpService
같은 어떤 언급을 찾을 수 없습니다 어떻게이 번들을 사용해야합니까? 서블릿 브리지를 설치하려면 어떻게해야합니까?
안녕하세요. https://github.com/apache/felix/tree/trunk/http/samples/bridge에서 예제를 시도해 보았습니까? –
물론,이 예제는 서블릿 브리지 용 번들을 만드는 방법에 관한 것입니다. 하지만 내 문제는 서버 측에서이 번들을 사용하는 방법입니다. –
이 예제는 서블릿 브리지를 사용하여 war 파일을 빌드하는 방법을 보여줍니다. 번들을 구축하지 않습니다. 예제가 예상대로 작동하는지 궁금합니다. –