闲人野居
好好学习,天天向上
posts - 57,  comments - 137,  trackbacks - 0
  接触了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

 
 
 
 
 



posted on 2009-02-12 20:36 布衣郎 阅读(6138) 评论(8)  编辑  收藏 所属分类: eclipse

FeedBack:
# re: osgi 入门
2009-02-12 20:50 | ghost
最近怎么样?在哪呢?还在老家?
--zwz  回复  更多评论
  
# re: osgi 入门
2009-02-12 23:46 | leekiang
兄弟你写了这么多,可我还是不知道osgi是什么、做什么用  回复  更多评论
  
# re: osgi 入门
2009-02-13 08:49 | rmn190
严重同意的leekiang的话, 对一个入门的来说, 可能第一点是想知道这个osgi是个什么?它能做什么? 它的核心概念是什么?

至于写例子倒是次要些了.   回复  更多评论
  
# re: osgi 入门
2009-02-13 17:56 | 布衣郎
@rmn190
同意你的看法,不过这只是开头而已,接下来,会慢慢解析osgi。以一个例子开头,只是为了加深印象而已。  回复  更多评论
  
# re: osgi 入门
2009-02-13 22:14 | 与你同飞
谢谢楼主无私的分享,期待你的后续文章!  回复  更多评论
  
# re: osgi 入门
2009-03-20 03:53 | osgi
In setup Extensions step, I cannot create /hello(servlet), the only thing I can create is Generic text. Please advice.  回复  更多评论
  
# re: osgi 入门
2009-06-10 13:01 | 阿里哇
很好的文章,谢谢。
也特别推荐 BlueDavy的osgi 实战。  回复  更多评论
  
# re: osgi 入门[未登录]
2009-06-25 09:56 | 爬山虎
大哥啊。。
你的这个例子我怎么运行不了。。。。  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航:
 

<2009年2月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
1234567

常用链接

留言簿(12)

随笔分类(59)

随笔档案(57)

blog

java

uml

搜索

  •  

积分与排名

  • 积分 - 356471
  • 排名 - 155

最新评论

阅读排行榜

评论排行榜