摘要:
本文主要描述使用Spring.DM2.0,創建OSGi的HelloWorld演示程序,理解Spring.DM的OSGi框架實現機制。
環境描述:
| 項目 | 版本 |
| Eclipse | 3.7.x |
| JDK | 1.6.x |
| Sprng.DM | spring-osgi-2.0.0.M1-with-dependencies 下載地址 |
一、環境准備
將spring-osgi-2.0.0.M1-with-dependencies ,解壓到一個文件夾中,你能看到以下目錄:
在Eclipse中點擊菜單:File->Import,就會出現導入的對話框,如下圖
選中“Plug-ins and Fragments”,點擊“Next>”,就會出現導入選項對話框,如下圖
在"Import From”中選擇“Directory”,點及后面的”Browse”瀏覽我們剛才解壓spring.dm的文件夾目錄中的"dist“文件夾,然后點”Next>”,
會出現導入對話框,導入如下圖選中的jar包,點擊“finish”,如圖所示
然后同上面的步驟,導入spring-osgi-2.0.0.M1-with-dependencies 解壓目錄中的lib,選擇的jar包如下圖所示,點擊“finish”完成導入
一共從dist和lib目錄里面導入了15個包,
- org.springframeork.osgi.bundle.core
- org.springframeork.osgi.bundle.extender
- org.springframeork.osgi.bundle.io
這3個包是spring.dm的核心包,extender包完成了服務的發布和注入的功能,它會在META-INF下的spring目錄里面找xml文件,來完成配置工作;
這幾個包是org.apache.commons.logging的依賴包,否則會提示如下錯誤:
Reason: Missing Constraint: Import-Package: org.apache.commons.logging; version="[1.1.1,2.0.0)"
最后你能看到在Package Explorer視圖里面看到如下的結果:
到這里就准備好了包引用環境
二、配置OSGi運行配置
在eclipse菜單操作:Run->Run Configurations…,就會出現運行配置的窗口,在左面的面板中右鍵點擊“OSGi Framework”,點擊“New”,如下圖所示
會出現運行配置對話框,如下圖所示;
在上圖中Workspace中選擇運行spring.dm所需要的bundle,所上圖所示那個打的紅色矩形框,在Target Platform中選擇一個osgi和一個loggin包,如上圖所示,點擊checkbox”Only show selected”,應該和上圖一樣,點擊”Validate Bundles”驗證綁定是否正確,我們先把這個run configuration的name設置為:Run_Spring.DM,點擊”Apply”按鈕保存,最后點擊“Run”按鈕,運行配置,在Console窗口中能夠看到,如下圖:
有一個警告(要解決警告問題請查看:Spring.DM web 開發環境搭建 中注意事項章節),先忽略,在控制台按回車鍵,然后輸入:ss,查看插件運行狀態,如下圖所示
這表示,我們的spring.dm環境已經配置好了,接下來我們就要來個HelloWorld了!
三、創建Helloworld演示
在Eclipse菜單中:File->New->Project…,在New Project對話框中選擇如下圖所示(plug-in project)
在上圖中點擊“Next>”就會出現新建工程對話框,選擇如下圖所示
在上圖中把項目名稱改為:spring.dm.helloworld,在“Target Platform”中選擇”an OSGi framework:standard”,點擊“Next>”
在上圖中設置:Provider,然后點擊“Finish”完成項目的創建,新項目創建好后,如下圖中紅框所示
由於我們開發spring.dm不需要Activator,所以要把src下面包“spring.dm.helloworld”中的“Activator.java”刪除掉,刪除后如下圖所示
在上圖中的META-INF中的MANIFEST.MF文件中出現了一個警告,我們雙擊打開MANIFEST.MF文件,選擇MANIFEST標簽,如下圖所示
在上圖中出現了一個警告標志,如長紅色矩形框所示,我們把這一行刪除掉,然后保存;否則會出現找不到Activator的錯誤。目前項目如下圖所示:
在上圖中src下面包spring.dm.helloworld包下面創建一個HelloWorld的java類文件,如下圖所示
在HelloWorld類中寫start和stop兩個方法,打印出下面的狀態,如下所示,
在工程中META-INF文件夾中,新建“spring”文件夾,並在spring文件夾中新建一個helloworld.xml文件,如下圖所示:
helloworld.xml文件的內容如下:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!--Bean定義 --> <bean name="hello" class="spring.dm.helloworld.HelloWorld" init-method="start" destroy-method="stop" > </bean> </beans>
這個bean的配置和我們在使用spring的配置的時候一樣,當我們啟動helloworld的時候會調用start方法,控制台會出現“我正在啟動”,當我們停止helloworld的時候,會調用stop方法,在控制台會打印出“我正在關閉”。
好了,我們的helloworld已經完成了
四、運行HelloWorld
在eclipse菜單中:Run->Run Configurations…,就會出現以下界面,如下圖所示
在上圖中Workspace中把我們新建的helloworld包選中,如上圖所示,點擊“Run”按鈕,運行,我可以看到如下結果,如下圖所示:
我們在控制台中回車,然后輸入:ss ,回車,對狀態進行查詢,結果如下
在上圖中我們helloworld已經啟動了,我們用命令來停止helloworld,在控制台輸入stop 23,回車
我們在控制台可以看到,輸出了“我正在關閉”,輸入ss再查詢狀態,如下圖所示:
在上圖中可以看到,我們helloworld已經處於resolved狀態了。
目前我們已經成功地helloworld出來了!
想了解更多OSGi方面的內容,請持續關注我在博客園的博客.http://herobeast.cnblogs.com.謝謝



























