Настройка Apache Felix Servlet Bridge

Я пытаюсь сделать свой сервлет расширяемым с помощью пакетов OSGI: недавно добавленные пакеты также должны быть сервлетами. Есть функция Servlet Bridge, предоставленная Феликсом http://felix.apache.org/documentation/subprojects/apache-felix-http-service.html, выглядит очень хорошо для меня, но у меня возникли некоторые проблемы при ее установке. Как говорит веб-страница Феликса, чтобы настроить мост сервлета, нам нужно сделать:

  1. Разверните файл jar org.apache.felix.http.proxy внутри веб-приложения (WEB-INF / lib); [СДЕЛАННЫЙ]
  2. в слушателе запуска (например, ServletContextListener) установите BundleContext в качестве атрибута контекста сервлета [DONE]
  3. определите org.apache.felix.http.proxy.ProxyServlet внутри вашего web.xml и зарегистрируйте его для обслуживания по всем запросам [DONE]
  4. определите org.apache.felix.http.proxy.ProxyListener как a в вашем web.xml, чтобы разрешить пересылку событий, связанных с сеансами HTTP [DONE]
  5. обязательно добавьте javax.servlet;javax.servlet.http;version=2.6 в системные пакеты OSGi [не обязательно]
  6. разверните org.apache.felix.http.bridge (или org.apache.felix.http.bundle) внутри платформы OSGi [????]

Шаг № 6 кажется недостаточным, чтобы заставить работать мост сервлета в моем случае. Я сделал все шаги 1-5 для моего сервлета пакета. Мой основной сервлет имеет встроенный механизм OSGI, поэтому я развертываю свои пакеты из кода Java. Это часть кода запуска OSGI:

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();
    }
}

Из основного кода сервлета, который я устанавливаю, требуется org.apache.felix.http.bridge bundle, некоторые зависимости для моего набора сервлетов (slf4j, javax.servlet...) и моего набора сервлетов, которые я сделал, выполнив шаги 1-5. Результат развертывания: нет HttpService для Servlet Bundle - это означает, что я не могу использовать его в своем приложении, потому что нет способа зарегистрировать какие-либо экземпляры Servlet в моем комплекте сервлетов.

Глядя на MANIFEST.MF из org.apache.felix.http.bridge Я не нашел упоминания, как Export-Service: org.osgi.service.http.HttpService
Как мне использовать этот комплект? Как мне настроить сервлет-мост?

1 ответ

Решение

Похоже, я допустил ошибку при настройке встроенного OSGI. Теперь у меня все получилось, если кому-то понадобится образец моста сервлета Феликса, посмотрите на это: http://vbashur.blogspot.kr/2014/07/osgi-servlet-bridge-sample.html

Другие вопросы по тегам