Download presentation
Presentation is loading. Please wait.
1
OSGI 整合
2
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
3
圖形介面基礎GUI BASIC Lightweight元件是Swing元件 Heavyweight元件是AWT元件
可將GUI classes分成三類: 容器 – container classes 元件 – component classes 幫手 – helper classes 3 3
4
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
5
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 : 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
6
eclipse OSGI 開發方式 開發平台(IDE) 命令(comment) 用java的 javac 指令執行編譯
用java的 jar 指令來封裝 用筆記本寫作MANIFEST.MF. 開發平台(IDE) eclipse 6 6
7
EQUINOX 到 ,下載最新版eclipse for Java 設定組態 7 7
8
EQUINOX 若已經下載過eclipse,設定組態前, 請確定Target Platform為eclipse 8 8
9
EQUINOX 9 9
10
EQUINOX launch安裝bundle ss列出bundle及其狀態 10 10
11
EQUINOX - 創建HELLOWORLD BUNDLE
建立 Plug-in Project 而非 Java Project 11 11
12
EQUINOX - 創建HELLOWORLD BUNDLE
12 12
13
EQUINOX - 創建HELLOWORLD BUNDLE
Id是bundle的標示 Name取有意義的 Provider為提供者 Activator 在此可自動產生 13 13
14
EQUINOX - 創建HELLOWORLD BUNDLE
建置成功後,可以看見我們創建的Activator會實作 BundleActivator。在start和stop方法加上列印動作 成功! 14 14
15
EQUINOX - 創建HELLOWORLD BUNDLE
15 成功! 15
16
在OSGI框架中的B/S架構 字典查詢功能,可以用本地或遠端字典的服務,功能 實作字典查詢的介面。 引用Service 使用Bundle
字典查詢介面 字典查詢 輸出Bundle 使用Bundle 使用Bundle 本地字典服務 遠端字典服務 s s 提供Service 提供Service 16 16
17
在OSGI框架中嵌入HTTP服務器 另外在Run新的組態,包含以下Bundle:
org.eclipse.osgi_3.5.2.R35x_v javax.servlet_2.5.0.v org.mortbay.jetty.server_ v org.eclipse.equinox.http.jetty_2.0.0.v org.mortbay.jetty.util_ v org.eclipse.equinox.http.servlet_ v 17 17
18
KNOPFLERFISH安裝 Java、JDK Eclipse
18 18
19
KNOPFLERFISH與ECLIPSE整合開發
安裝網址: 19 19
20
KNOPFLERFISH與ECLIPSE整合開發
安裝網址: 20 20
21
KNOPFLERFISH與ECLIPSE整合開發
21 21
22
KNOPFLERFISH與ECLIPSE整合開發
22 22
23
KNOPFLERFISH與ECLIPSE整合開發
視窗偏好設定:選Knopflerfish存庫(Repository) 23 23
24
KNOPFLERFISH與ECLIPSE整合開發
視窗偏好設定:選Knopflerfish存庫(Repository) 24 24
25
KNOPFLERFISH與ECLIPSE整合開發
視窗偏好設定:選Knopflerfish存庫(Repository) 25 25
26
KNOPFLERFISH開發BUNDLE
26 26
27
KNOPFLERFISH開發BUNDLE
我們將此Bundle專案取名叫HelloOSGi 27 27
28
KNOPFLERFISH開發BUNDLE
勾選自動產生Activator 28 28
29
KNOPFLERFISH開發BUNDLE
選擇自動產生Activator後會看見,專案下的 src(source)檔案夾,多了一個名為HelloOSGi的封包 ,發包下有Activator.java 29 29
30
KNOPFLERFISH開發BUNDLE
我們可以編輯Activator.java 30 30
31
KNOPFLERFISH開發BUNDLE
Activator實作BundleActivator的start和stop Bundle被Start會印出HelloOSGi Start~! 31 Bundle被Stop會印出HelloOSGi Stop~! 31
32
KNOPFLERFISH開發BUNDLE
在專案的目錄上按右鍵, 將專案輸出(export) 32 32
33
KNOPFLERFISH開發BUNDLE
選擇輸出成一個Jar 通常是Java下, 選擇JAR file 33 33
34
KNOPFLERFISH開發BUNDLE
Eclipse可自動把jar的 .bundle-pack .classpath .project bundle.manifest 輸出 選擇路徑: 這裡選到桌面,檔名 是HelloOSGi.jar 不要在這裡選擇結束 選下一步 34 34
35
KNOPFLERFISH開發BUNDLE
再下一步後, 請確定manifest檔 的路徑是否正確, 可使用browse… 開啟此專案的 bundle.manifest 每一次,請特別注意 Eclipse不會自動找到 恭喜,可以按完成 35 35
36
KNOPFLERFISH開發BUNDLE
成功後可看到HelloOSGi的jar檔, 此範例我們是放在桌面上。 成功! 36 36
37
開啟KNOPFLERFISH的框架(FRAMEWORK)
選擇在knopflefish.org下的osgi 選擇framework的可執行jar 左鍵點兩下 37 37
38
啟動KNOPFLERFISH 38 38
39
在KNOPFLERFISH上跑BUNDLE
Install成功就會出現 1.左上角從資料夾開HelloOSGi 2.按Play start ,印HelloOSGi Start 3.按停止 stop,印HelloOSGi Stop 39 39
40
OSGI框架實作比較 OSGi core OSGi Configuration Admin
OSGi declarative services Equinox v3.4.2 X Felix v1.8.0 O Knopflerfish v2.3.1
41
UPnP介紹 (Universy Plug )即插即用(UPnP)是由通用即 插即用論壇(UPnP™ Forum)提出的一套網路協 定。該協定的標的是使家庭網路(資料共享、通訊和 娛樂)和公司網路中的各種裝置能夠相互無縫連線, 並簡化相關網路的實作。UPnP 透過定義和發布基 於開放、網際網路通訊網協定標準的 UPnP 裝置控 制協定來實作這一標的。 41
42
Structure of UPnP Device
UPnPService UPnPService UPnPAciotn UPnPStateVariablec UPnPAction UPnPStateVariablec UPnPStateVariablec c 42
43
UPnP Base Driver 08/25/10 圖片來源:
44
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 資料來源: 44
45
ANT - ANOTHER NEAT TOOL buildfile 取 得、提供屬性 路徑參考 常 用任務標籤
資料來源:Java深度歷險 (王森) buildfile 取 得、提供屬性 路徑參考 常 用任務標籤 45 45
46
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
47
ANT的必要:舉例 資料來源:Java深度歷險 (王森) 程式碼之中找不到類別之間的相依性,使得您編譯 Office.java 的時候,編譯器自動編譯Assembly.java ,卻無法編譯Word.java 及Excel.java 47 47
48
ANT – BUILD.XML 資料來源:Java深度歷險 (王森) 在Ant的buildfile中可以定義構建專案時的「屬性」 (property)、「任務」(task),一個build.xml 中可以定義多個任務, 這些任務可能是建立目錄、 編譯Java原始碼、搬移檔案、產生doc文件、進行測 試、產生測試報告等等,這些任務通常組織為一個「 目標」 (target)。 48 48
49
Android OSGi OSGI V.S. ANDROID
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
50
參考資料 http://felix.apache.org/site/upnp-driver- architecture.html
電子書:Java深度歷險 (王森) /消息發布 zone/documentation/phoneme-and-osgi/music-on- android
Similar presentations