OSGI實戰第一章

第一章???????? 解開OSGI的面紗

  1. OSGI是什么?是Java平臺的一個模塊化層。
  2. 模塊化:軟件應用程序的代碼被分割為表示獨立內容的邏輯單元,可簡化開發,可通過強化邏輯模塊的界限來提高可維護性。
  3. Java模塊化的不足

a)???????? Java使用訪問修飾符(如public、protected、private和包級私有),解決底層面向對象封裝,而不是邏輯系統劃分。

比如,如果需要代碼在多個包之間課件,那么包內的代碼必須聲明為public,那么所有的模塊都可以使用這個public類。這樣會暴露具體的實現細節,用戶可能依賴于不想要公開的API,使后續的升級更加困難。

b)???????? 易錯的類路徑概念、

原因是類路徑隱藏了代碼版本、依賴和一致性等特性。類路徑不關系代碼版本,無法明確描述依賴關系。建立類路徑的過程是煩瑣易錯的,你只是不停地添加類庫,知道虛擬機不再報找不到類的錯誤。經常出現一個JAR文件的類與另一個JAR文件中不兼容的類交互時會出現NoSuchMethodError異常。

c)???????? 部署和管理支持上的不足。

在Java中存在對多個版本的依賴時,沒有簡單的方法來正確部署這些代碼并執行。在部署之后更新應用和組件也會面臨同樣問題。

  1. OSGI的幫助

a)???????? 當啟動程序時,先確保代碼滿足依賴關系,然后才允許執行代碼。不會出現由于類路徑不正確導致ClassNotFoundException或NoSuchMethodError。

b)???????? 要求在版本和其他約束條件方面上對依賴集進行一致性檢查,不會出現由于依賴庫的錯誤版本導致程序執行時錯誤。

c)???????? 不必擔心由于層次化的類加載模式隱含的限制,導致沒款見共享類時導致類型不一致,如foo instanceof Foo == false。

d)??????? 將一個程序打包成邏輯上獨立的JAR文件,并且只部署哪些某個安裝需要的部分。這大致闡述了OSGi的目的。

e)???????? OSGi為JAR文件定義了新一級的代碼可見性。將一個程序打包成邏輯上獨立的JAR文件,聲明哪些代碼是可以被其他JAR文件訪問。

f)????????? 為程序定義一個插件式的擴展機制。OSGi模塊化特別適合提供強大的擴展性機制,包括支持執行時的動態性。

  1. 架構概覽

OSGi服務平臺包括OSGi框架和OSGi標準服務。

l? OSGI框架是實現并提供OSGi功能的運行環境。

l? OSGi標準服務定義了很多用于執行常見任務(如日志和首選項)的可重用API。

  1. OSGi框架

a)???????? 框架的實現方式:Apache Felix, Eclipse Equinox,KnopFlerfish。Eqinox OSGi框架實現是Eclipse IDE的底層運行時環境。Apache Felix OSGi框架實現是GlassFish v3的運行環境。多種應用長江表明OSGi框架具有很高的價值和靈活性。

b)???????? OSGi框架的分層結構:

???????????????????????? i.????????????? 模塊層,關注于打包和共享代碼。

?????????????????????? ii.????????????? 生命周期層,關注于提供執行時環境模塊管理和對底層OSGi框架的訪問。

????????????????????? iii.????????????? 服務層,關注于模塊,特別是模塊內的組件間的交互和通信。

  1. 模塊層

l? 定義了OSGI模塊的概念,并稱為bundle。

l? Bundle是一個包含元數據、類文件和相關資源的JAR文件。

l? Bundle可以是一個普通的JAR文件+特殊的元數據,也可以是包含構成一個特定應用程序的多個邏輯模塊組成的JAR。

l? Bundle比標準的JAR文件更強大,因為可以明確聲明名導出包。從這個意義上說,Bundle擴展了Java的普通訪問修飾符(public,private,protected)。

l? Bundle可以明確聲明依賴哪些外部包(導入)。

l? 明確聲明導入包和導出包的好處是:OSGI框架可以自動地管理和驗證它們的一致性,稱為bundle解析,使導入包和導出包相匹配,確保bundle版本和其他方面約束的一致性。

  1. 生命周期層

l? 定義了在OSGI框架中是如何動態安裝和管理Bundle的。

l? 目的一:在應用程序外部,精確定義啦bundle生命周期的操作(安裝、更新、啟動、停止和卸載)。

l? 目的二:定義了bundle如何訪問它們的執行環境。如何訪問它們的執行環境。執行環境為bundle提供了一種與OSGi框架交互的方式和執行時的一些便利。

l? 生命周期層整體支持創建可從外部(和遠程)管理的而應用程序,或者完全自我管理的應用程序,或者兩者的任意組合。

  1. 服務層

l? 使用基于接口的面向服務的交互模式。

l? 主要涉及面向服務的發布、查找和綁定。服務提供者將服務發布到服務注冊中心;服務客戶端通過搜索服務注冊中心,查找可供使用的服務。

l? 基于接口,提倡接口與實現之間的分離。OSGI服務是Java接口,表示服務提供者和服務客戶端之間的一種契約。服務層通過基于服務的動態性(服務可以在任何時刻出現或消失)來擴展聲明周期層基于bundle的動態性。結果產生了一種支持模塊化和靈活性的編程模式。

  1. 如何使用OSGi框架中的層?

a)???????? 涉及應用,將它分解為一些服務接口(普通的基于接口和編程)和這些接口的客戶端。

b)???????? 使用你選定的工具和方法來實現服務提供者和客戶端組件。

c)???????? 將服務提供者和客戶端組件打包成獨立的JAR文件,然后用合適的OSGi元數據擴展每個JAR文件。

d)???????? 啟動OSGi框架

e)???????? 安裝和啟動所有來自步驟c的JAR文件。

轉載于:https://www.cnblogs.com/gosmarter/p/6516580.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/372763.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/372763.shtml
英文地址,請注明出處:http://en.pswp.cn/news/372763.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

輕松完成Birt報告

這是使用Birt插件在Eclipse中構建報告的完整指南。 Birt或Business Intelligence and Reporting工具是一種無需編寫太多Java代碼即可生成報告的工具。 如果您使用的是ireport,那么您知道我在說什么:)(晶體報告..毫無意義&#xff…

MySQL 的 RowNum 實現

MySQL 下面沒有RowNum,排序后序號卻無法得到,比較麻煩! SELECT rownum:rownum1 rownum, CollectSn From(SELECT rownum:0,bbgmain.* FROM qbdb.bbgmain WHERE collectsn! ORDER BY collectsn limit 10) t轉載于:https://www.cnblogs.com/hym-…

java jdbc事務管理_hibernate事務管理 (jdbc jta)

評論# re: hibernate事務管理 (jdbc jta)2007-07-29 10:18pigJTA事務的開始Transaction tx session.beginTransaction();應該不是這樣吧,應該是從容器中獲得。 回復 更多評論# re: hibernate事務管理 (jdbc jta)2007-07-29 12:35slxpig建議看看hibernate referen…

@Resource VS @Autowired

Resource 和 Autowired 均是用于bean注入的注解,都可以寫在字段和setter方法上,如果都寫在字段上,就無需寫setter方法。 Autowired 由Spring的org.springframework.beans.factory.annotation.Autowired提供 默認byType方式注入,并且對象不能為…

用于Spring應用程序的Gradle原型

我發布了Gradle原型,可用于基于Springframework創建Java / Groovy應用程序。 當然,它不是一個真正的原型,因為這樣的創作是不可能的 。不過,你可以創建,編輯和部署應用服務器很少的步驟。 對于可部署的軟件項目而言&am…

java tm無響應_Java(TM) Platform SE binary 未響應 是怎么個情況?

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓988098 [Thread-10] INFO sound.oo0O - Creating streaming player for music with id [faction_pirate_encounter_02_hostile.ogg]988099 [Thread-10] INFO sound.OooO - Playing music with id [faction_pirate_encounter_02_hos…

ROS and PCL install

ROS hydro安裝指南: http://wiki.ros.org/cn/hydro/Installation/Ubuntu (加ppa源后直接安裝) Linux OpenCV安裝指南:http://blog.sciencenet.cn/blog-571755-694742.html (從源代碼編譯) PCL:…

揭開Python科學計算的面紗

春牛春杖。無限春風來海上。便與春工。染得桃紅似肉紅。 春幡春勝。一陣春風吹酒醒。不似天涯。卷起楊花似雪花。 標準的Python中用列表保存一組值,可以當做數組使用,但是由于其值類型任意,所以列表中保存的是指針,這樣的話保存一…

FXML:使用BuilderFactory的自定義組件

當您想使用FXML時,您將需要能夠添加自己的組件。 這很容易,您只需要添加一個import語句。 FXML文件中以大寫字母開頭的元素將被解釋為實例,如果它們是Java Bean,則最重要:如果它們具有無參數的標準構造函數&#xff0c…

Excel 一鍵上傳到數據庫

<a class"edit" id"batchImport"> 批量導入 </a> js代碼彈窗&#xff1a; $("#batchImport").click(function(){ //彈窗彈窗下列內容 var html<form id"execlForm" method"post" enctype&quo…

SQL——實例記錄(對查詢結果排行號)

select 訂單編號, DENSE_RANK() over(order by 訂單編號) from test 排序結果&#xff1a; 55678-0-1 1 55678-0-1 1 33454-0-1 2 33454-0-1 2 33454-0-1 2 這種是按照訂單不同的順序依次往后排 當然也可以在 over后面加上你想要的起始號 例&#xff1a;DE…

TeamCity構建依賴項

介紹 構建依存關系的主題既不重要也不是次要的。 各種構建工具從不同的角度處理此主題&#xff0c;從而提供各種解決方案&#xff0c;每種解決方案都有其優點和缺點。 熟悉發行版和快照依賴項的Maven和Gradle用戶可能不了解TeamCity快照依賴項&#xff0c;或者認為他們與Maven…

復選框操作checked選中為true,反之為False,也可以賦值為true,false

轉載于:https://www.cnblogs.com/shiluoliming/p/6518236.html

java 個稅計算_【JAVA300例】10、計算個人所得稅

邏輯是這樣的。每個等級計算的系數都不一樣。分別有多個檔位。要判斷處于什么檔位然后用特殊的公式去計算。原版是從小到大判斷&#xff0c;每次寫條件很煩。這里換成從大到小。節省敲代碼時間。import java.util.Scanner;public class Test010{public static void main(String…

Java是否越來越接受靜態導入?

曾經有一段時間&#xff0c;至少在禮貌的社會中&#xff0c;人們普遍認為使用“ 不是 ”一詞是不可接受的。 確實&#xff0c;那時&#xff08;也許直到今天&#xff09;&#xff0c;許多人確實&#xff08;也確實&#xff09;認為不是一個真實的詞。 盡管這個詞并沒有 引起爭議…

Stream 工具方法

inputstream 轉 string 1、使用字符流 InputStream is TestZhimaCustomerCertificationInitialize.class.getClassLoader().getResourceAsStream("config/rsa_private_key_pkcs8.pem"); InputStreamReader isr new InputStreamReader(is); BufferedReader br new…

從0開始學習 GitHub 系列匯總筆記

本文學習自Stromzhang, 原文地址請移步&#xff1a;從0開始學習 GitHub 系列匯總 我的筆記&#xff1a; 0x00 從0開始學習GitHub 系列之[初識GitHub] GitHub 影響力 a.全球頂級科技公司紛紛加入 GitHub &#xff0c;并貢獻他們自己的項目代碼 Google: https://github.com/goog…

Drools Guvnor –管理訪問

外部化業務或技術規則對于可伸縮應用程序非常重要&#xff0c;但是應該管理BRMS服務訪問。 guvnor使用基于角色的授權提供控件UI訪問和操作。 在drools-guvnor參考手冊中列出了幾種權限類型。 具有所有權限的管理員。 分析師或只讀分析師&#xff1a;特定類別的分析師權限。 軟…

java文件操作和_JAVA文件操作類和文件夾的操作

JAVA文件操作類和文件夾的操作package com.gamvan.tools;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.FileWriter;import java.io.IOException;import java.io.InputStream;import jav…

CCNA基礎知識摘錄

cisco設備的啟動要點&#xff1a;1、檢測硬件(保存在rom)2、載入軟件&#xff08;IOS&#xff09;&#xff08;保存在Flash&#xff09;3、調入配置文件&#xff08;密碼&#xff0c;IP地址&#xff0c;路由協議都保存在此&#xff09;&#xff08;此文件保存在NVRAM&#xff0…