osgi 入门
接触了osgi也这么久了,其中也走了不少的弯路。为了更好的推广osgi,并避免新手能少走一些弯路,接下来的几篇文章,我会通过几个简单的实例,来介绍一下如何快速的掌握osgi。其实,网上有不少好的文章推荐,顺便也可以比较一下。BlueDavy的osgi 实战是值得推荐的,当初也是看了之后,少走了很多弯路。参见网址:http://www.blogjava.net/BlueDavy/。ModuleFusion 也是一个不错的项目,里面集成了现有的优秀框架,包括hibernate,guice,wicket等。 参见网址:http://code.google.com/p/modulefusion/。
废话少说,就从一个简单的Helloworld开始吧。
要做项目,少不了工具。Eclipse,反正搞java的基本都应该有了,这里用的是最近的3.4.1版本,以前一直用3.3.1,这两天刚更新。java就是这个比较讨厌,很多东西不停的更新,然后手上的工具包也得不停的更新。osgi 实现,当然首选equinox,版本也是3.4.1。其实Eclipse里面已经包括了equinox,当然单独下载也没有问题。看了看equinox,最近又增加了不少的服务,其实很多都是用不着的,别被这些东东吓着。
简单的介绍一下需要的bundle:
org.mortbay.jetty_5.1.14 jetty 容器,当然是需要的,如果你不需要外部web服务器的话。
org.eclipse.osgi_3.4.2. 这是核心的equinox实现,也就是系统bundle
org.eclipse.osgi.services_3.1.2 这也是必备的,作为osgi服务接口
org.eclipse.equinox.common_3.4.0 这也是必备的,equinox的共同核心
org.eclipse.equinox.registry_3.4.0 这是用于equinox 插件扩展的,也是必须的。plugin.xml就是这个bundle处理的
org.eclipse.equinox.http.servlet_1.0.1 http servlet包,包括了主要的proxyServlet类,作为主要的桥接Servlet
org.eclipse.equinox.http.registry_1.0.1 http servlet,resource 注册服务
org.eclipse.equinox.http.jetty_1.1.0 主要的用于启动jetty的代码
javax.servlet_2.4.0 servlet规范
org.apache.commons.logging_1.0.4 用于处理日志
以上的包都是必须的。
其他可选的包,以后再介绍。
好了,先在eclipse中建一个项目吧。创建plugin project而不是java project。当然你也可以转成pluign project。
如以下的图,一直next
提一下几个重要的文件:
osgi bundles,必需的文件为MANIFEST.MF 大写,在META-INF下面
plugin.xml,这是eclipse的插件文件,用于扩展使用。
至于build.properties是用于打包的,可以不需要。
修改一下相应的信息,如下图:基本上已经创建好了。
简单说明一下:ID,也就是Bundle-SymbolicName 这是必须的。version 也就是Bundle-Version 也是必须的。其他可以随便。
下面说明一下,我们需要几个重要的包,所以需要引入,点击Dependencies右边的import packages 的add。
增加后,如下图
说明一下,如果你需要引入相应的类,就像你在classpath中引入包一下一样。
由于,我们需要扩展Servlet,所以还需要http.servlets扩展,所以需要引入bundle:..http.registry。如下图:
下面创建一个简单的HelloServlet
- public class HelloServlet extends HttpServlet {
- private static final long serialVersionUID = 1L;
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp)
- throws ServletException, IOException {
- doPost(req, resp);
- }
- @Override
- protected void doPost(HttpServletRequest req, HttpServletResponse resp)
- throws ServletException, IOException {
- resp.setContentType("text/html");
- resp.getWriter().print("My fist osgi application");
- resp.getWriter().close();
- }
- }
接下来是关键的一步,定义扩展
如下图
说明一下:class:org.demo.HelloServlet 就是我们创建的servlet
alias:用于浏览器访问的路径,如http://localhost:8080/hello
基本已经就绪,可以启动。
创建一个新的osgi framework 运行配置,如下图:
选择上面的几个bundle,以及你创建的项目。然后运行就可以了,默认的端口为80,如果需要更改,配置参数
org.osgi.service.http.port=端口号
如下图:
现在可以直接在浏览器中访问了,一个osgi 应用已经完成。
在console中输入ss,可以看到下面的提示,表示你的bundles基本已经运行正常。
Framework is launched.
id State Bundle
0 ACTIVE org.eclipse.osgi_3.4.2.R34x_v20080826-1230
1 ACTIVE org.demo.helloworld_1.0.0
2 ACTIVE org.eclipse.equinox.registry_3.4.0.v20080516-0950
3 ACTIVE org.eclipse.osgi.services_3.1.200.v20071203
4 ACTIVE javax.servlet_2.4.0.v200806031604
5 ACTIVE org.eclipse.equinox.http.registry_1.0.100.v20080427-0830
6 ACTIVE org.eclipse.equinox.http.jetty_1.1.0.v20080425
7 ACTIVE org.eclipse.equinox.http.servlet_1.0.100.v20080427-0830
8 ACTIVE org.eclipse.equinox.common_3.4.0.v20080421-2006
9 ACTIVE org.mortbay.jetty_5.1.14.v200806031611
10 ACTIVE org.apache.commons.logging_1.0.4.v20080605-1930
如果你喜欢本文, 请长按二维码,关注公众号 分布式编程.
作者:分布式编程
出处:https://zthinker.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。