10

我想创建一个 Web 服务并将其部署到 OSGi 容器。例如,将服务发布到地址:

http://localhost:8080/testservice. 

该服务在 servlet 中生成 HTML 响应。

我搜索了很多并得到:

public class HelloWorldServlet extends HttpServlet {
  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    out.println("<html>");
    out.println("<head>");
    out.println("<title>Hola</title>");
    out.println("</head>");
    out.println("<body bgcolor=\"white\">");
    out.println("</body>");
    out.println("</html>");
  }
}

我需要使用的工具:

  1. maven 创建项目

  2. 将 ESB karaf 融合为 OSGi 容器

问题是我不知道如何使用 Maven 来创建和实现这样的 web 服务,比如:

  • 如何指定webapp/web.xml

  • 如何指定pom.xml:依赖项、包类型、插件

  • 如何注册服务:实现BundlActivator或配置 Spring xml 文件

谁能帮我这个?新手有详细教程吗?

4

6 回答 6

6

如果您使用 bndtools,请创建一个声明式服务项目并将此注释添加到您的 servlet:

 @Component(provide = Servlet.class, properties = {"alias=/hello"})
 public class HelloWorldServlet extends HttpServlet { ... }

然后使用“带有 Web 控制台和 Gogo 的 Apache Felix 4”创建一个 bnd 运行描述符,只需添加 Apache Felix Http 白板包就可以了。您可以在以下位置找到您的 servlethttp://localhost:8080/hello

这个怎么运作。@Component 注释使您的类成为服务(由于提供属性,在这种情况下为 Servlet 服务)。这是使用服务属性“别名”注册的。Apache Felix Http Whiteboard 包获取这些服务并将它们注册为 servlet。我认为没有比这更简单的了。

于 2013-05-01T06:52:18.277 回答
5

我想跟进Peter Kriens的回答。使用@ComponentOSGi 规范中可用的注释,该示例可能如下所示:

@Component(service = Servlet.class, property = { "osgi.http.whiteboard.servlet.pattern = /hello" })
public class HelloWorldServlet extends HttpServlet { ... }

@Component注释是从导入的,并且org.osgi.service.component指定已实现服务的属性已将其名称更改为service

尽管它的名字,property例如可以包含多个属性

@Component(service = ..., property = { "a=b", "c=d" })

或者您可以使用properties指定一个或多个属性文件,如下所示:

@Component(service = ..., properties = { "OSGI-INF/servlet.properties" } )

以上内容已经HttpService通过 Apache Felix 自带的测试。Apache Felix HTTP 服务的文档可以在这里找到:http: //felix.apache.org/documentation/subprojects/apache-felix-http-service.html

于 2016-12-05T19:41:28.023 回答
3

检查这个,可能可以帮助您创建一个访问 OSGi 服务的 servlet

于 2013-05-01T06:28:23.753 回答
1

要回答您的问题,由于 Karaf (FUSE ESB) 使用 Pax Web 作为其默认的 Web 容器,请查看Pax Web以了解更多详细信息,了解它是如何工作的,并且可能最适合您在 Pax Web 的 100 多个集成测试中为您提供关于如何使用它的想法。还有一些示例可向您展示如何使用这两种标准。Http-Service,通过 Whiteboard-Extender 或作为 WAR/WAB。

于 2013-05-02T06:35:02.713 回答
1

您可能会发现以下教程很有帮助:http ://www.javabeat.net/2011/11/writing-an-osgi-web-application/ 。它基于Enterprise OSGi in Action的第二章。第八章还讨论了如何使用 maven 等构建工具来获得正确的 bundle 结构,http://coding.alasdair.info/2011/01/creating-web-application-bundle-using.html也有有用的 Maven 说明。

在高层次上,您的最佳途径可能是利用 Apache Aries 或 Eclipse Gemini 之类的东西来允许您运行 WAB(Web 包)。WAB 的结构几乎与 WAR 完全相同,只是清单中包含 OSGi 元数据。您的 servlet 类本身将与非 OSGi 案例相同。该框架将处理发现和启动您的 servlet。

于 2013-05-01T14:59:02.963 回答
0

我猜您需要一个 servlet 桥接器才能访问该服务。你的服务应该被实现为一个 OSGI 包;servlet 桥必须具有嵌入式 OSGI 框架。请按照此示例了解详细信息:http: //vbashur.blogspot.kr/2014/07/osgi-servlet-bridge-sample.html

于 2014-07-08T06:39:24.297 回答