国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
OSGi Pure Plugin Architecture Introduction

OSGi體系結(jié)構(gòu)

OSGi 的初衷是面向嵌入式系統(tǒng)的應(yīng)用,支持在一個Java虛擬機上加載和啟動多個Java應(yīng)用程序。隨著OSGi在Eclipse3.0上的應(yīng)用成功,其逐漸成為構(gòu)建純插件結(jié)構(gòu)的企業(yè)級應(yīng)用軟件系統(tǒng)的首選平臺。

OSGi 是一個純插件的體系結(jié)構(gòu),OSGi 框架實現(xiàn)是一個最為核心的插件,邏輯實現(xiàn)分層見下面兩張圖:


            

L0層Java執(zhí)行環(huán)境

OSGi最初規(guī)范定位到嵌入式系統(tǒng),例如家電、汽車、手機等執(zhí)行環(huán)境,所以插件要配置適合的運行環(huán)境與Policy。當(dāng)OSGi框架加載插件時會對插件要求的執(zhí)行環(huán)境做校驗。例如,Eclipse中可以配置下圖中的執(zhí)行環(huán)境:



L1模塊層(組件或插件層)

L1模塊層(插件層 或組件層)定義插件的ClassLoading策略(Policy),這也是OSGi最為出色和吸引人的地方。我們知道,任何一個Java平臺的插件體系結(jié)構(gòu),首先要解決的是ClassLoading的問題。OSGi在Java動態(tài)ClassLoading基礎(chǔ)之上,提供了完美的插件ClassLoading解決方案。傳統(tǒng)J2SE程序,有單一的Classpath包含所有的classes與resources,L1插件層為每個OSGi插件提供了私有的Classpath和獨立的Classloader,有效的控制了插件間的Class隔離、依賴與協(xié)作。

插件間的Class依賴關(guān)系見下圖(版權(quán)歸www.osgi.org):


插件的類空間(Class Space)見下圖(版權(quán)歸www.osgi.org):


插件的類加載過程:



L2插件生命周期管理層

L2層負(fù)責(zé)運行時動態(tài)安裝(Install)、啟動(Start)、停止(Stop)、更新(Update)或卸載(Uninstall)插件。

插件的生命周期見下圖(版權(quán)歸www.osgi.org):


L3服務(wù)注冊層

L3提供了一個動態(tài)的服務(wù)注冊模型,插件可以注冊(register)、發(fā)現(xiàn)(lookup)、使用(reference)服務(wù)。

該層的服務(wù)注冊采用ServiceLocator模式,見下面圖示:



該層的實現(xiàn)由于沒有直接的IoC容器支持,被很多過分相信IoC作用的人所批評。MartinFowler曾經(jīng)說過,“說一個系統(tǒng)是基于IoC的,就好像說一個汽車有四個輪子”,IoC只不過是一種模式和設(shè)計原則,任何一個設(shè)計得比較好的面向?qū)ο笙到y(tǒng)都或多或少的具備這樣的特征,這與存不存在一個獨立的IoC容器關(guān)系不大,盡管IoC容器在開發(fā)上帶來很大的便利與優(yōu)勢。另外一個方面,IoC容器本質(zhì)上還是一個Service Registry,只不過增加依賴裝配功能,所以在OSGi的服務(wù)注冊模型上,可以很容易的支持IoC。

OpenCore在該層的服務(wù)模型下實現(xiàn)了非常靈活的分級IoC容器,支持插件級、應(yīng)用程序級、網(wǎng)絡(luò)級的IoC功能。
2006-12-25

OpenCore:OSGi上部署Apache Common Log

關(guān)鍵字: apache common log
Apache CommonLog提供的動態(tài)Logger發(fā)現(xiàn)機制實在損害Apache基金會的聲譽,這是一個看似巧妙實際上畫蛇添足的設(shè)計。這種機制無法保證在有多ClassLoader的JEE或OSGi環(huán)境下正常工作,這幾天收到了Spring-OSGi google群組發(fā)出的“Commonslogging madness”信件超過20封,今天又在java-blog上收到“common logwoes"的文章,估計這個問題把很多人搞瘋了:)

最后,這幫家伙終于討論出了解決方案,就是用SLF4J來替換Apache Common Log的實現(xiàn)。我們今天用這個方案替換掉了OpenCore原來的common log插件,靜態(tài)幫定到Log4J,工作良好。

具體插件實現(xiàn)如下:

lib目錄加入:
jcl104-over-slf4j-1.1.0.jar
log4j-1.2.13.jar 
slf4j-api-1.1.0.jar 
slf4j-log4j12-1.1.0.jar

插件的自描述文件(MANIFEST.MF)配置:
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.apache.commons.log
Bundle-Version: 2.0.0
Bundle-ClassPath: .,
 lib/slf4j-api-1.1.0.jar,
 lib/log4j-1.2.13.jar,
 lib/jcl104-over-slf4j-1.1.0.jar,
 lib/slf4j-log4j12-1.1.0.jar

Bundle-Vendor: %pluginProvider
Bundle-Localization: plugin
Export-Package: org.apache.commons.logging;version="1.1.0"
Bundle-RequiredExecutionEnvironment: J2SE-1.5
Import-Package: org.osgi.framework
Bundle-Activator: org.apache.commons.log.osgi.Activator

然后實現(xiàn)一個簡單的Activator,根據(jù)自己需求配置Log4j:

package org.apache.commons.log.osgi;

import java.io.File;

import org.apache.log4j.PropertyConfigurator;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;

public class Activator implements BundleActivator {

    public void start(BundleContext context) throws Exception {
        File file = new File("./etc/log4j.properties");
        PropertyConfigurator.configure(file.toURI().toURL());
    }

    public void stop(BundleContext context) throws Exception {
    }
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
使用Slf4 j取代系統(tǒng)已有的 Apache Common-Logging 實現(xiàn)日志
Java常用日志框架介紹
spring+osgi 動態(tài)模型二; 打包和部署基于Spring的OSGi應(yīng)用程序
Java日志框架:SLF4J, Apache Common
log4j的有關(guān)jar包總結(jié)
OSGi與Spring:設(shè)置Spring DM開發(fā)環(huán)境
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服