閑人野居
          好好學(xué)習(xí),天天向上
          posts - 57,  comments - 137,  trackbacks - 0
            接觸了osgi也這么久了,其中也走了不少的彎路。為了更好的推廣osgi,并避免新手能少走一些彎路,接下來的幾篇文章,我會通過幾個簡單的實例,來介紹一下如何快速的掌握osgi。其實,網(wǎng)上有不少好的文章推薦,順便也可以比較一下。BlueDavy的osgi 實戰(zhàn)是值得推薦的,當(dāng)初也是看了之后,少走了很多彎路。參見網(wǎng)址:http://www.aygfsteel.com/BlueDavy/。ModuleFusion 也是一個不錯的項目,里面集成了現(xiàn)有的優(yōu)秀框架,包括hibernate,guice,wicket等。 參見網(wǎng)址:http://code.google.com/p/modulefusion/
            廢話少說,就從一個簡單的Helloworld開始吧。
            要做項目,少不了工具。Eclipse,反正搞java的基本都應(yīng)該有了,這里用的是最近的3.4.1版本,以前一直用3.3.1,這兩天剛更新。java就是這個比較討厭,很多東西不停的更新,然后手上的工具包也得不停的更新。osgi 實現(xiàn),當(dāng)然首選equinox,版本也是3.4.1。其實Eclipse里面已經(jīng)包括了equinox,當(dāng)然單獨下載也沒有問題。看了看equinox,最近又增加了不少的服務(wù),其實很多都是用不著的,別被這些東東嚇著。
            簡單的介紹一下需要的bundle:
            org.mortbay.jetty_5.1.14                 jetty 容器,當(dāng)然是需要的,如果你不需要外部web服務(wù)器的話。
            org.eclipse.osgi_3.4.2.                這是核心的equinox實現(xiàn),也就是系統(tǒng)bundle
            org.eclipse.osgi.services_3.1.2            這也是必備的,作為osgi服務(wù)接口
            org.eclipse.equinox.common_3.4.0            這也是必備的,equinox的共同核心
            org.eclipse.equinox.registry_3.4.0        這是用于equinox 插件擴(kuò)展的,也是必須的。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 注冊服務(wù)
            org.eclipse.equinox.http.jetty_1.1.0        主要的用于啟動jetty的代碼
            javax.servlet_2.4.0                    servlet規(guī)范
            org.apache.commons.logging_1.0.4            用于處理日志
            以上的包都是必須的。
            其他可選的包,以后再介紹。
            好了,先在eclipse中建一個項目吧。創(chuàng)建plugin project而不是java project。當(dāng)然你也可以轉(zhuǎn)成pluign project。
            如以下的圖,一直next
           


            提一下幾個重要的文件:
            osgi bundles,必需的文件為MANIFEST.MF 大寫,在META-INF下面
            plugin.xml,這是eclipse的插件文件,用于擴(kuò)展使用。
            至于build.properties是用于打包的,可以不需要。
           
            修改一下相應(yīng)的信息,如下圖:基本上已經(jīng)創(chuàng)建好了。
            
            簡單說明一下:ID,也就是Bundle-SymbolicName 這是必須的。version 也就是Bundle-Version 也是必須的。其他可以隨便。
           
            下面說明一下,我們需要幾個重要的包,所以需要引入,點擊Dependencies右邊的import packages 的add。
            增加后,如下圖
           
            說明一下,如果你需要引入相應(yīng)的類,就像你在classpath中引入包一下一樣。 
            由于,我們需要擴(kuò)展Servlet,所以還需要http.servlets擴(kuò)展,所以需要引入bundle:..http.registry。如下圖:
           
            下面創(chuàng)建一個簡單的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();
              }
          }
           接下來是關(guān)鍵的一步,定義擴(kuò)展
           如下圖
           
           說明一下:class:org.demo.HelloServlet 就是我們創(chuàng)建的servlet
                    alias:用于瀏覽器訪問的路徑,如http://localhost:8080/hello
           
           基本已經(jīng)就緒,可以啟動。
           創(chuàng)建一個新的osgi framework 運(yùn)行配置,如下圖:
           
           選擇上面的幾個bundle,以及你創(chuàng)建的項目。然后運(yùn)行就可以了,默認(rèn)的端口為80,如果需要更改,配置參數(shù)
           org.osgi.service.http.port=端口號
           如下圖:
           
           現(xiàn)在可以直接在瀏覽器中訪問了,一個osgi 應(yīng)用已經(jīng)完成。
           在console中輸入ss,可以看到下面的提示,表示你的bundles基本已經(jīng)運(yùn)行正常。
           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 布衣郎 閱讀(6155) 評論(8)  編輯  收藏 所屬分類: eclipse

          FeedBack:
          # re: osgi 入門
          2009-02-12 20:50 | ghost
          最近怎么樣?在哪呢?還在老家?
          --zwz  回復(fù)  更多評論
            
          # re: osgi 入門
          2009-02-12 23:46 | leekiang
          兄弟你寫了這么多,可我還是不知道osgi是什么、做什么用  回復(fù)  更多評論
            
          # re: osgi 入門
          2009-02-13 08:49 | rmn190
          嚴(yán)重同意的leekiang的話, 對一個入門的來說, 可能第一點是想知道這個osgi是個什么?它能做什么? 它的核心概念是什么?

          至于寫例子倒是次要些了.   回復(fù)  更多評論
            
          # re: osgi 入門
          2009-02-13 17:56 | 布衣郎
          @rmn190
          同意你的看法,不過這只是開頭而已,接下來,會慢慢解析osgi。以一個例子開頭,只是為了加深印象而已。  回復(fù)  更多評論
            
          # re: osgi 入門
          2009-02-13 22:14 | 與你同飛
          謝謝樓主無私的分享,期待你的后續(xù)文章!  回復(fù)  更多評論
            
          # 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.  回復(fù)  更多評論
            
          # re: osgi 入門
          2009-06-10 13:01 | 阿里哇
          很好的文章,謝謝。
          也特別推薦 BlueDavy的osgi 實戰(zhàn)。  回復(fù)  更多評論
            
          # re: osgi 入門[未登錄]
          2009-06-25 09:56 | 爬山虎
          大哥啊。。
          你的這個例子我怎么運(yùn)行不了。。。。  回復(fù)  更多評論
            

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           

          <2025年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          常用鏈接

          留言簿(12)

          隨筆分類(59)

          隨筆檔案(57)

          blog

          java

          uml

          搜索

          •  

          積分與排名

          • 積分 - 357318
          • 排名 - 155

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 隆尧县| 天水市| 勐海县| 根河市| 甘洛县| 麻栗坡县| 朔州市| 大丰市| 鹿泉市| 无极县| 海原县| 聂拉木县| 新乡县| 蚌埠市| 天津市| 武冈市| 林州市| 扎兰屯市| 万山特区| 东乡族自治县| 米林县| 淮北市| 潢川县| 河北区| 宜兴市| 喜德县| 鄯善县| 额尔古纳市| 谷城县| 恩平市| 玉树县| 玉门市| 内丘县| 科技| 基隆市| 彝良县| 金堂县| 太和县| 正镶白旗| 手游| 紫金县|