廢話少說,就從一個簡單的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