日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

OSGi简介–模块化Java

發布時間:2023/12/3 java 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OSGi简介–模块化Java 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
OSGi聯盟是這一擱淺的管理機構,它始于1999年。其最初目標是為網絡設備創建開放擱淺。 基于此思想,此規范也針對Java引入。 Eclipse在Java中是第一個。 他們于2004年6月推出了基于OSGi的Eclipse IDE。

OSGi是在Java中定義動態模塊的方法。 主要為Java實現的三個OSGi容器是Apache Felix , Eclipse Equinox和Knopflefish 。

為什么選擇OSGi? 因為OSGi提供了將應用程序劃分為多個模塊的能力,并且那些模塊易于與其他依賴項一起管理。 除此之外,它非常容易安裝,更新,停止和刪除沒有停止引擎的模塊(例如:Tomcat Web應用程序容器)。 我們可以使用多種實現方式來影響其他參考。

基于Web的Java框架主要有3個層(表示層,業務層和DAO層)。 在那里,我們可以將其分為三個基于OSGi的模塊。 那么我們可以很容易地將錯誤修復到一層,而不會影響其他錯誤并重新啟動我們的Web容器。 只是我們需要更新模塊。

在OSGi世界中,輸出是捆綁包,可以是Jar或War文件。 捆綁軟件由Java類和其他資源以及一些其他元數據組成(向其他捆綁軟件提供服務和軟件包)。

我將使用Eclipse IDE創建我的第一個捆綁軟件。 因為Eclipse IDe內置了Equinox容器(每個eclipse插件都是OSGi捆綁包)。

創建Eclipse插件項目

  • 轉到新建–>其他–>插件項目 ,然后單擊下一步,將出現新項目創建對話框
  • 提供項目名稱和目標平臺,如下所示。 然后點擊下一步

項目名稱: com.chandana.Hello.HelloWorld
目標平臺:選擇Stranded OSGi

  • 在下一個屏幕中,您可以更改捆綁包信息(這些信息可在MANIFEST.MF中找到,稍后我會提供詳細信息),然后單擊“下一步”按鈕。
  • 之后將出現OSGi項目模板選擇對話框。選擇Hello OSGi Bundle,然后單擊Finish。

幾秒鐘后,Eclipse將生成Hello World Plug-In-Project(我幾秒鐘沒有響應:))

在我的項目結構中是這樣的:

Activator.java

package com.chandana.hello.helloworld;import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext;public class Activator implements BundleActivator {/** (non-Javadoc)* @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)*/public void start(BundleContext context) throws Exception {System.out.println("Hello World!!");}/** (non-Javadoc)* @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)*/public void stop(BundleContext context) throws Exception {System.out.println("Goodbye World!!");}}

Activator是實現BundleActivator的 接口。 它已經停了 然后開始 方法。 ? 當捆綁包啟動或停止時,將調用這些方法 。 此束激活器類在MENIFEST.MF文件( 束激活器條目)中指定。

啟動方法:
捆綁包啟動時,OSGi容器將調用start方法。 我們可以使用此啟動方法進行初始化的數據庫連接,注冊服務以供其他捆綁使用。 停止方式: 捆綁包停止時,OSGi容器調用stop方法。 我們可以使用此方法從服務注冊表中刪除服務,例如清理過程

清單文件

Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: HelloWorld Bundle-SymbolicName: com.chandana.Hello.HelloWorld Bundle-Version: 1.0.0.qualifier Bundle-Activator: com.chandana.hello.helloworld.Activator Bundle-Vendor: CHANDANA Bundle-RequiredExecutionEnvironment: JavaSE-1.6 Import-Package: org.osgi.framework;version="1.3.0"

Bundle-ManifestVersion
Bundle-ManifestVersion標頭顯示OSGi容器,該捆綁包遵循OSGi規范的規則。 值為2表示捆綁軟件符合OSGi規范第4版。 值1表示它符合版本3或更早的版本。

捆綁名稱
Bundle-Name標頭定義捆綁的簡短可讀名稱。

Bundle-SymbolicName
Bundle-SymbolicName標頭指定捆綁包的唯一名稱。 這是您在從其他捆綁包中引用給定捆綁包時將使用的名稱。

捆綁版本
Bundle-Version標頭是捆綁軟件的版本號。

捆綁銷售商
Bundle-Vendor標頭是供應商的描述(例如,這是我的名字)。

進口包裝
Import-Package指示此捆綁包還需要其他Java捆綁包(OSGi)。 我們稱之為依賴性。

出口包裝
導出包指示什么是捆綁包中的公共包,那些導出包可以從其他捆綁包中導入。

運行捆綁包:

  • 對于“運行此項目”,請單擊“運行”->“運行配置”,在OSGi Framework中,右鍵單擊并創建新的“運行配置”。
  • 首先取消選中所有目標平臺,然后單擊“ 添加必需的捆綁包”
  • 之后,單擊“運行”按鈕,應用更改并運行項目。
  • 運行后,項目OSGi控制臺顯示如下。

OSGi終端命令:

開始–啟動指定的捆綁包 停止–停止指定的捆綁包 卸載–卸載指定的捆綁軟件 更新–更新指定的捆綁包 刷新–刷新指定捆綁包的軟件包 b –顯示指定捆綁商品的詳細信息 標頭–打印包標頭 服務–顯示注冊的服務詳細信息

源代碼

接下來,我將描述如何創建基于依賴的OSGi捆綁軟件。

OSGi服務是一個Java對象實例,已向OSGi框架注冊了一組屬性。 可以通過服務注冊表(通過類BundleContext執行)訪問服務。 BundleActivator將在啟動和停止時調用。 當BundleActivator調用start方法時,我們將注冊我們的服務。 之后,任何捆綁包都可以訪問該服務。

服務包:

在服務包中,您需要導出服務,并需要通過服務注冊表進行注冊。 當我們導出服務時,我們僅導出接口包。 與往常一樣,這是從其他捆綁包中隱藏實現。

我已經創建了一個名為HelloService的示例OSGi項目。

清單文件

Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: HelloService Bundle-SymbolicName: com.chandana.hello.HelloService Bundle-Version: 1.0.0 Bundle-Activator: com.chandana.hello.helloservice.Activator Bundle-Vendor: CHANDANA Bundle-RequiredExecutionEnvironment: JavaSE-1.6 Import-Package: org.osgi.framework;version="1.3.0" Export-Package: com.chandana.hello.service Bundle-ActivationPolicy: lazy

服務接口:

public interface HelloService { public String helloMethods(); }

服務實施:

public class HelloServiceImpl implements HelloService {@Overridepublic String helloMethods() {String retValue = "Inside Hello Service method";return retValue;} }

邊界激活劑:

public class Activator implements BundleActivator {ServiceRegistration serviceRegistration;/** (non-Javadoc)* @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)*/public void start(BundleContext context) throws Exception {System.out.println("Bundle Started.....!!!!!");HelloService service = new HelloServiceImpl();serviceRegistration = context.registerService(HelloService.class.getName(), service,null);}/** (non-Javadoc)* @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)*/public void stop(BundleContext context) throws Exception {System.out.println("Bundle Stoped.....!!!!!");serviceRegistration.unregister();} }

使用發布的服務時,可以從另一個捆綁包中導入它。 因此需要為HelloClient創建另一個插件項目

捆綁內容

捆綁包上下文是OSGi運行時中單個捆綁包的上下文,它是在捆綁包啟動時創建的。 捆綁包上下文可用于安裝新捆綁包,通過其他捆綁包獲取注冊的服務以及在框架中注冊服務。

清單文件

Import-Package: org.osgi.framework;version="1.3.0",com.chandana.hello.service

導入捆綁軟件后,您可以訪問該服務。 重要的是只能通過bundle上下文訪問服務。 您可以通過BundleContext.getService()方法獲取實際的服務對象。

激活器類:

public class Activator implements BundleActivator {ServiceReference serviceReference; /** (non-Javadoc)* @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)*/public void start(BundleContext context) throws Exception {serviceReference= context.getServiceReference(HelloService.class.getName());HelloService helloService =(HelloService)context.getService(serviceReference);System.out.println(helloService.helloMethods());}/** (non-Javadoc)* @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)*/public void stop(BundleContext context) throws Exception {context.ungetService(serviceReference);} }

context.getServiceReference()方法返回HelloService OSGi服務引用,使用該服務引用可以訪問實際的服務對象。

對于“運行此項目”,請單擊“ 運行”->“運行配置” ,在OSGi Framework中,右鍵單擊并創建新的“運行配置” 。 確保HelloServiceHelloClient

問題
如果客戶端訪問服務時未啟動服務,會發生什么情況?
如果您停止了該服務捆綁包,會發生什么?

代碼倉庫
http://code.google.com/p/osgi-world/source/browse/#svn/trunk/com.chandana.hello.HelloService
http://code.google.com/p/osgi-world/source/browse/#svn/trunk/com.chandana.hello.HelloClient

參考:來自JCG合作伙伴的 OSGi(Java模塊化) 簡介和OSGi – 2(OSGi服務)簡介 ? Chandana Napagoda博客上的Chandana Napagoda 。


翻譯自: https://www.javacodegeeks.com/2012/01/introduction-to-osgi-modular-java.html

總結

以上是生活随笔為你收集整理的OSGi简介–模块化Java的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 激情丁香六月 | 日韩欧美福利 | 久久综合免费 | a级淫片 | 国产女人18水真多毛片18精品 | 男生操女生动漫 | 歪歪视频在线观看 | 蜜乳av一区二区 | 肉感丰满的av演员 | 亚洲欧洲成人精品久久一码二码 | 国产精品大屁股白浆一区 | 超碰牛牛| 中文字幕乱码一区二区三区 | 欧美日韩国产一区 | 麻豆传媒网站在线观看 | 欧洲精品一区二区三区久久 | 91人人视频| 国产久草av| 男人的天堂网av | 亚洲一区二区三区黄色 | 亚洲AV无码阿娇国产精品 | 日本视频h | 一区二区三区免费在线观看 | 国产黄色片子 | 一区二区视频观看 | 欧美混交群体交 | 国产乱码一区二区三区在线观看 | 草草地址线路①屁屁影院成人 | 国内自拍av | 亚洲一区免费在线观看 | 国产激情av一区二区三区 | 天天色婷婷 | 日韩精品视频在线 | 国产一二精品 | 免费网站观看www在线观看 | 青青草手机在线观看 | 尤物视频免费在线观看 | 人妻丝袜一区 | 天天操操操 | 狠狠操91 | 午夜免费影院 | 色多多视频在线 | 日日碰狠狠添天天爽无码 | 日韩黄色大片 | 青娱网电信一区电信二区电信三区 | 精品美女久久久久 | 午夜成人免费视频 | 精品一区二区三区三区 | 麻豆黄色片 | 那个网站可以看毛片 | 国产一二视频 | 中文字幕亚洲视频 | 国产在线a视频 | 一区二区国产欧美 | 超碰黄色 | 黄色免费一级视频 | 久久精品在线 | 成熟丰满熟妇高潮xxxxx视频 | 日本激情网 | 色撸撸在线 | 日韩视频网站在线观看 | 日本大尺度吃奶做爰视频 | 国产第一页屁屁影院 | 久久久久99精品成人片毛片 | 高清国产mv在线观看 | 中文字幕成人在线视频 | 久久精品久久99 | 国产女人18水真多18精品一级做 | 黄色www视频| www黄色在线观看 | 国产婷婷久久 | 日韩经典第一页 | 永久免费毛片 | 一区二区视频在线观看免费 | 日韩精品一区三区 | 日本少妇激情视频 | 一级做a爱视频 | 亚洲综合五月天婷婷丁香 | 人妻奶水人妻系列 | 福利资源在线 | sao虎视频在线精品永久 | 成人免费做受小说 | 欧美日韩观看 | 久久免费成人 | 激情四虎 | www.av72| 国产欧美久久久久 | 蜜桃av一区二区 | 大胸喷奶水www视频妖精网站 | 色狠久| 国产精品国产三级国产普通话蜜臀 | 天天射寡妇射 | 免费看成人毛片 | 乱人伦xxxx国语对白 | 美女福利视频在线观看 | 国产三级一区二区 | 欧美性xxxxx极品娇小 | 人人爱人人艹 | 亚洲女优视频 |