OSGI 整合
SWING V.S AWT Java在GUI的程式設計,有名的library是 AWT(Abstract Windows Tookit),但在Java run時 ,AWT 元件與平台以peers的方式互動。 當專案變得複雜,peer-based運作起來變得heavy 取而代之的,是更穩定(robust)、多功能(versatile) 也更有彈性(flexible)的library – Swing componets 2 2
圖形介面基礎GUI BASIC Lightweight元件是Swing元件 Heavyweight元件是AWT元件 可將GUI classes分成三類: 容器 – container classes 元件 – component classes 幫手 – helper classes 3 3
JDK PROBLEMS WITH JARS NO runtime concept .Java VM running, the contents of all the JARs are simply concatenated and treated as a single, global list: the so-called “Classpath”. NO standard metadata to indicate their dependencies.They are not versioned, and multiple versions of JARs cannot be loaded simultaneous. NO mechanism for information hiding between JARs 4 4
A TYPICAL OSGI MANIFEST.MF FILE 1 Manifest-Version: 1.0 2 Created-By: 1.4.2_06-b03 (Sun Microsystems Inc.) 3 Bundle−M a n i f e s t V e r s i o n : 2 4 Bundle−Name : My First OSGi Bundle 5 Bundle−S y m b o l i c N a m e : org . osgi . e x a m p l e 1 6 Bundle−V e r s i o n : 1 . 0 . 0 7 Bundle−R e q u i r e d E x e c u t i o n E n v i r o n m e n t : J2SE −1.5 8 Import−P a c k a g e : javax . swing 一個合格的bundle,Bundle-SymbolicName 是必須的,且不可重複。 一個SymbolicName註冊在一個Framework上。 5 5
eclipse OSGI 開發方式 開發平台(IDE) 命令(comment) 用java的 javac 指令執行編譯 用java的 jar 指令來封裝 用筆記本寫作MANIFEST.MF. 開發平台(IDE) eclipse 6 6
EQUINOX 到 http://eclipse.org/ ,下載最新版eclipse for Java 設定組態 7 7
EQUINOX 若已經下載過eclipse,設定組態前, 請確定Target Platform為eclipse 8 8
EQUINOX 9 9
EQUINOX launch安裝bundle ss列出bundle及其狀態 10 10
EQUINOX - 創建HELLOWORLD BUNDLE 建立 Plug-in Project 而非 Java Project 11 11
EQUINOX - 創建HELLOWORLD BUNDLE 12 12
EQUINOX - 創建HELLOWORLD BUNDLE Id是bundle的標示 Name取有意義的 Provider為提供者 Activator 在此可自動產生 13 13
EQUINOX - 創建HELLOWORLD BUNDLE 建置成功後,可以看見我們創建的Activator會實作 BundleActivator。在start和stop方法加上列印動作 成功! 14 14
EQUINOX - 創建HELLOWORLD BUNDLE 15 成功! 15
在OSGI框架中的B/S架構 字典查詢功能,可以用本地或遠端字典的服務,功能 實作字典查詢的介面。 引用Service 使用Bundle 字典查詢介面 字典查詢 輸出Bundle 使用Bundle 使用Bundle 本地字典服務 遠端字典服務 s s 提供Service 提供Service 16 16
在OSGI框架中嵌入HTTP服務器 另外在Run新的組態,包含以下Bundle: org.eclipse.osgi_3.5.2.R35x_v20100126 javax.servlet_2.5.0.v200806031605 org.mortbay.jetty.server_6.1.15.v200905151201 org.eclipse.equinox.http.jetty_2.0.0.v20090520-1800 org.mortbay.jetty.util_6.1.15.v200905182336 org.eclipse.equinox.http.servlet_1.0.200.v20090520- 1800 17 17
KNOPFLERFISH安裝 Java、JDK Eclipse http://www.knopflerfish.org/download.html 18 18
KNOPFLERFISH與ECLIPSE整合開發 安裝網址:http://www.knopflerfish.org/eclipse-update/ 19 19
KNOPFLERFISH與ECLIPSE整合開發 安裝網址:http://www.knopflerfish.org/eclipse-update/ 20 20
KNOPFLERFISH與ECLIPSE整合開發 21 21
KNOPFLERFISH與ECLIPSE整合開發 22 22
KNOPFLERFISH與ECLIPSE整合開發 視窗偏好設定:選Knopflerfish存庫(Repository) 23 23
KNOPFLERFISH與ECLIPSE整合開發 視窗偏好設定:選Knopflerfish存庫(Repository) 24 24
KNOPFLERFISH與ECLIPSE整合開發 視窗偏好設定:選Knopflerfish存庫(Repository) 25 25
KNOPFLERFISH開發BUNDLE 26 26
KNOPFLERFISH開發BUNDLE 我們將此Bundle專案取名叫HelloOSGi 27 27
KNOPFLERFISH開發BUNDLE 勾選自動產生Activator 28 28
KNOPFLERFISH開發BUNDLE 選擇自動產生Activator後會看見,專案下的 src(source)檔案夾,多了一個名為HelloOSGi的封包 ,發包下有Activator.java 29 29
KNOPFLERFISH開發BUNDLE 我們可以編輯Activator.java 30 30
KNOPFLERFISH開發BUNDLE Activator實作BundleActivator的start和stop Bundle被Start會印出HelloOSGi Start~! 31 Bundle被Stop會印出HelloOSGi Stop~! 31
KNOPFLERFISH開發BUNDLE 在專案的目錄上按右鍵, 將專案輸出(export) 32 32
KNOPFLERFISH開發BUNDLE 選擇輸出成一個Jar 通常是Java下, 選擇JAR file 33 33
KNOPFLERFISH開發BUNDLE Eclipse可自動把jar的 .bundle-pack .classpath .project bundle.manifest 輸出 選擇路徑: 這裡選到桌面,檔名 是HelloOSGi.jar 不要在這裡選擇結束 選下一步 34 34
KNOPFLERFISH開發BUNDLE 再下一步後, 請確定manifest檔 的路徑是否正確, 可使用browse… 開啟此專案的 bundle.manifest 每一次,請特別注意 Eclipse不會自動找到 恭喜,可以按完成 35 35
KNOPFLERFISH開發BUNDLE 成功後可看到HelloOSGi的jar檔, 此範例我們是放在桌面上。 成功! 36 36
開啟KNOPFLERFISH的框架(FRAMEWORK) 選擇在knopflefish.org下的osgi 選擇framework的可執行jar 左鍵點兩下 37 37
啟動KNOPFLERFISH 38 38
在KNOPFLERFISH上跑BUNDLE Install成功就會出現 1.左上角從資料夾開HelloOSGi 2.按Play start ,印HelloOSGi Start 3.按停止 stop,印HelloOSGi Stop 39 39
OSGI框架實作比較 OSGi core OSGi Configuration Admin OSGi declarative services Equinox v3.4.2 X Felix v1.8.0 O Knopflerfish v2.3.1
UPnP介紹 (Universy Plug )即插即用(UPnP)是由通用即 插即用論壇(UPnP™ Forum)提出的一套網路協 定。該協定的標的是使家庭網路(資料共享、通訊和 娛樂)和公司網路中的各種裝置能夠相互無縫連線, 並簡化相關網路的實作。UPnP 透過定義和發布基 於開放、網際網路通訊網協定標準的 UPnP 裝置控 制協定來實作這一標的。 41
Structure of UPnP Device UPnPService UPnPService UPnPAciotn UPnPStateVariablec UPnPAction UPnPStateVariablec UPnPStateVariablec c 42
UPnP Base Driver 08/25/10 圖片來源:http://felix.apache.org/site/upnp-driver-architecture.html
ANDROID BUILD aapt javac dx apkbuilder -u adb jarsigner 44 Source code Resources Assets Manifest Key Libraries Create packaged resource compile To Dalvik bytecodes Create unsigned apk Sign apk Publish or Test Packaged resource file Classes dex Unsigned apk Signed apk R javac dx apkbuilder -u adb jarsigner 資料來源:http://asantoso.wordpress.com/2009/09/15/how-to-build-android-application-package-apk-from-the-command-line-using-the-sdk-tools-continuously-integrated-using-cruisecontrol/ 44
ANT - ANOTHER NEAT TOOL buildfile 取 得、提供屬性 路徑參考 常 用任務標籤 資料來源:Java深度歷險 (王森) buildfile 取 得、提供屬性 路徑參考 常 用任務標籤 45 45
ANT - ANOTHER NEAT TOOL 資料來源:Java深度歷險 (王森) 由 James Duncan Davidson在Make工具無法滿足 他的需求下所撰寫出來的構建(build)工具,目前 由Apache Software Foundation持續進行開發。 Ant並不取代IDE,它補強了IDE,而也沒有IDE可 以取代Ant,他們是互補的,不是相互取代的。 Ant幫你自動完成以下任務: 編譯Java原始碼 建立jar、war、zip檔案 自動測試與生成報告 從CVS等管理系統取得原始碼 46 46
ANT的必要:舉例 資料來源:Java深度歷險 (王森) 程式碼之中找不到類別之間的相依性,使得您編譯 Office.java 的時候,編譯器自動編譯Assembly.java ,卻無法編譯Word.java 及Excel.java 47 47
ANT – BUILD.XML 資料來源:Java深度歷險 (王森) 在Ant的buildfile中可以定義構建專案時的「屬性」 (property)、「任務」(task),一個build.xml 中可以定義多個任務, 這些任務可能是建立目錄、 編譯Java原始碼、搬移檔案、產生doc文件、進行測 試、產生測試報告等等,這些任務通常組織為一個「 目標」 (target)。 48 48
Android OSGi OSGI V.S. ANDROID http://www.adon-line.de/kunden/prosystBlog/?p=18 OSGI V.S. ANDROID 49 OSGi Android Dalvik Process Isolation Application Model Java VM Existance of VM Technology Classloader Isolation Versioning Standard Remote Management Class Sharing Existance of Component Model open Existance of Service Model Inter-process communication 49
參考資料 http://felix.apache.org/site/upnp-driver- architecture.html 電子書:Java深度歷險 (王森) http://www.javaworld.com.tw/roller/moli/category /消息發布 http://www.ist-music.eu/developer- zone/documentation/phoneme-and-osgi/music-on- android