zoukankan      html  css  js  c++  java
  • 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

    Java代码  收藏代码
    1. public class HelloServlet extends HttpServlet {  
    2.     private static final long serialVersionUID = 1L;  
    3.     @Override  
    4.     protected void doGet(HttpServletRequest req, HttpServletResponse resp)  
    5.             throws ServletException, IOException {  
    6.         doPost(req, resp);  
    7.     }  
    8.     @Override  
    9.     protected void doPost(HttpServletRequest req, HttpServletResponse resp)  
    10.             throws ServletException, IOException {  
    11.         resp.setContentType("text/html");  
    12.         resp.getWriter().print("My fist osgi application");  
    13.         resp.getWriter().close();  
    14.     }  
    15. }  
     


     接下来是关键的一步,定义扩展
     如下图
     
     说明一下: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

  • 相关阅读:
    这个星期一好像有点无聊
    SQL、LINQ、Lambda三种方式比较
    [C#基础知识]Class和Struct的区别
    C#判断大批量的路径是否存在时,如何缩短判断时间
    批处理 for参数之token详解
    批处理Delims的基本知识
    读取txt文本中每一条路径(一行)并判断,路径不存在的保存在另一txt文本中
    批处理获取一些系统参数
    Cannot read configuration file due to insufficient permissions
    my97datepicker日期选择插件的用法
  • 原文地址:https://www.cnblogs.com/daichangya/p/12959790.html
Copyright © 2011-2022 走看看