我想为OSGi容器创建和部署Web服务。例如,将服务发布到地址:
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>");
}
}
我需要使用的工具:
maven创建项目
将ESB karaf融合为OSGi容器
问题是我不知道如何使用Maven来创建和实现这样的Web服务,例如:
如何指定webapp/web.xml
如何指定pom.xml
:依赖项,包类型,插件
如何注册服务:实现BundlActivator
或配置Spring xml文件
任何人都可以帮我吗?是否有新手的详细教程?
答案 0 :(得分:5)
如果您使用bndtools,请创建一个Declarative Services项目并将此注释添加到您的servlet中:
@Component(provide = Servlet.class, properties = {"alias=/hello"})
public class HelloWorldServlet extends HttpServlet { ... }
然后使用'Apache Felix 4 with Web Console and Gogo'创建一个bnd运行描述符,只需添加Apache Felix Http白板包,你就可以了。您可以在http://localhost:8080/hello
工作原理。 @Component注释使您的类成为一个服务(在这种情况下由于提供属性而成为Servlet服务)。这是在服务属性“别名”中注册的。 Apache Felix Http Whiteboard捆绑包获取这些服务并将它们注册为servlet。我认为它不会比这更简单。
答案 1 :(得分:5)
我想跟进Peter Kriens的回答。通过OSGi规范中提供的@Component
注释,示例可能如下所示:
@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" } )
上面已经使用Apache Felix附带的HttpService
进行了测试。可以在此处找到Apache Felix HTTP服务的文档:http://felix.apache.org/documentation/subprojects/apache-felix-http-service.html
答案 2 :(得分:3)
选中此项,可能会对您有所帮助Create a servlet that accesses an OSGi service
答案 3 :(得分:1)
您可能会发现以下教程很有用:http://www.javabeat.net/2011/11/writing-an-osgi-web-application/。它基于Enterprise OSGi in Action的第二章。第八章还讨论了如何使用像maven这样的构建工具来获得正确的包结构,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。
答案 4 :(得分:0)
要回答您的问题,因为Karaf(FUSE ESB)使用Pax Web作为其默认Web容器,请查看Pax Web以了解其工作原理的详细信息,并且可能最适合您的超过100 integration tests samples 3x} Pax Web为您提供了如何使用它的想法。还有{{3}}可用于向您展示如何使用std。 Http-Service,通过Whiteboard-Extender或WAR / WAB。
答案 5 :(得分:0)
我猜你需要一个servlet桥来访问该服务。您的服务应该作为OSGI包实现; servlet桥必须具有嵌入式OSGI框架。请按照此示例获取详细信息:http://vbashur.blogspot.kr/2014/07/osgi-servlet-bridge-sample.html