精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

初探Java企業級開源框架OSGi

開發 后端
OSGi框架在國外關注率是很高,但在國內的推廣和使用卻不夠廣泛,可能是因為OSGi字面上的意思太過于抽象。本文作者通過對OSGi產生背景與特性的描述像大家詳細介紹了OSGi,并通過一個Hello World的實力帶您詳細了解OSGi的運行機制。

第一次接觸OSGi 是2006年看見的一則網上新聞,該新聞中提到BMW 汽車的通信-娛樂(infotainment)系統采用了OSGi 架構,這套系統主要用來控制汽車上的音箱、燈光、導航和通訊等設備,整個系統由1000多個模塊組成,啟動時間卻只需要3.5秒鐘,這對于一個基于Java 的框架來講,具有兩個重大意義:一、說明了Java 執行效率并不差;二、OSGi 框架的性能尤其優秀。因此筆者對OSGi 框架產生了極大的興趣,后來終于在一個項目中負責研究和開發基于OSGi 框架的應用程序,從此對它便情有獨鐘。令人欣慰的是,OSGi 在2007年取得了諸多戰果:BEA 公司、Eclipse 基金會和Interface21 公司相繼加入OSGi 聯盟;在EclipseCon 2007大會上引起了業界的廣泛關注,其中以Spring-OSGi、Web Service 與OSGi 等技術最為引人注目,這也標志著OSGi 將在未來與企業應用緊密結合;OSGi R4 標準發布,相關內容被成功的寫入JSR 291 規范中;Spring 2.5 框架的發布,宣稱其所有jar 包都兼容OSGi 標準;雖然OSGi 沒能成功進入JavaEE 6 草擬計劃中,但是Sun 公司宣稱會在下一代Java EE 標準中重點考慮OSGi。因此筆者個人認為,在不久的將來OSGi 勢必會在企業應用中發揮出強大的作用,基于OSGi 框架的產品也將層出不窮。本文從OSGi 的歷史背景、OSGi 的特點、OSGi 開源框架介紹、OSGi 開發環境部署、OSGi 版的Hello World 五個部分對OSGi 框架進行概要的介紹,希望讀者能從中有所收獲。

51CTO編輯推薦:OSGi入門與實踐全攻略

OSGi 的歷史背景

什么是OSGi 呢?OSGi——Open Service Gateway Initiative 字面上的意思是一個公共的服務平臺。1999年OSGi 聯盟成立,它是一個非盈利的國際組織,旨在建立一個開放的服務規范,為通過網絡向設備提供服務建立開放的標準,是開放業務網關的發起者。OSGi 聯盟的初始目標是構建一個在廣域網和局域網或設備上展開業務的基礎平臺。歷史總是具有驚人的相似性,正如Java 誕生于一個嵌入式開發的項目中,卻被應用于網絡平臺的開發,對OSGi 的最早設計也是針對嵌入式應用的,諸如機頂盒、服務網關、手機、汽車等都是其應用的主要環境。后來,由于OSGi 的諸多優秀特性(可動態改變系統行為,熱插拔的插件體系結構,高可復用性,高效性等等),它被應用于許多PC 上的應用開發,因此逐步為開發者所知和鐘愛。現在人們對OSGi 的理解已經遠遠不是它字面和初衷所能解釋的了,筆者認為稱其為一個輕巧的、松耦合的、面向服務的應用程序開發框架更為確切一些。

OSGi 真正被大家所知還是和Eclipse 有密切關系的。Eclipse 很多年都是Java 開發者的首選IDE,相信只要是一個Java 開發者,應該沒有人不知道Eclipse 的。在Eclipse 3.0 以前的版本中,它本身有一套自身的插件體系,而該插件體系的設計非常精巧細致,受到許多開發者的推崇,但是Eclipse 基金在Eclipse 3.0 發布的時候,做出了一個大膽的行為,就是將Eclipse 逐步遷移到OSGi 框架中,并自己實現了一個OSGi 開源框架,取名為Equinox,該框架隨著每次Eclipse 的發布也會相應的更新。Eclipse 之所以這么做,其一是因為Eclipse 的插件體系與OSGi 的設計思想不謀而合,其二也是因為OSGi 更為規范,其對插件體系的定義也更為完整一些。事實證明Eclipse 在采用OSGi 架構后,無論從性能、可擴展性這兩個方面來講還是從二次開發的角度來定義,都取得巨大的成功。下圖展示了Eclipse 與OSGi 框架的關系。

OSGi 的特點

在介紹OSGi 框架的特點之前,先簡單的介紹一下OSGi 框架的各個部分,如下圖所示。

解釋一下上圖中每一層的含義,其中OS 層和JVM 層可以不用詳細介紹了,重點需要關注的是應用程序Bundles 層。框架本身提供的類加載,生命周期管理,服務注冊和規范服務也都是針對Bundles 的。每一個在OSGi 框架中運行的邏輯單元稱為一個Bundle,Bundle 實際是一個符合特定形式的jar 文件。每一個Bundle 的功能可以是抽象的也可以是具體的。所謂抽象,就是它不是一個具體的應用,沒有完成一些業務功能,而只暴露了一些接口或者功能給其他的Bundle 使用;所謂具體,就是該Bundle 可以獨立的完成一個功能,例如連接數據庫,獲取數據等等。Bundle 有六種狀態,分別是:installed(安裝完成,本地資源成功加載),resolved(依賴關系滿足,即該Bundle 要么是準備好運行了,要么是已經被停止了),starting(Bundle 正在被啟動),stopping(Bundle 正在被停止),active(Bundle 被激活,正在運行中),uninstalled(Bundle 被卸載了)。OSGi 有它自身的類加載機制從而控制這些加載的Bundles 彼此之間的依賴關系,而生命周期管理也是OSGi 的一大亮點,由于可動態的對這些加載的Bundles 進行安裝、卸載、啟動、停止等操作,所以可以動態的改變應用程序的運行狀態。當一系列的Bundles 存在于服務器中的時候,那么它們之間必然會存在通信協作的部分,比如說一個通過網頁捕獲用戶輸入的Bundle 執行的時候,它必須首先需要一個Web 服務器服務的支持,那么這個時候服務注冊器就會從整個OSGi容器中尋找這個服務,如果能完成服務的匹配,那么相應的功能就會很自然的實現了。OSGi 規范還規定了一組預設的服務,包括日志、服務管理等等,這些服務在主流的開源框架中都有實現。OSGi 框架中還包括一個安全層,OSGi 的安全層擴展了Java 的安全機制,增并加了一些新的約束以填補了Java安全機制中的遺漏。

#p#

基于上述的介紹,讀者想必應對OSGi 有個大致的概念了,那么接下來就讓我們來看看OSGi 究竟能夠給企業應用帶來什么?它究竟有哪些功能值得我們把寶貴的時間投資在上面?

第一點,也是筆者認為最重要的一點,基于OSGi 的應用程序可動態更改運行狀態和行為。筆者曾經參與過開發J2EE 企業級項目,應用服務器用的是IBM 的Websphere,主要開發基于EJB 2.1 的一些應用程序。整個開發經歷給筆者的最深印象是等待,排除編寫EJB 規范中要求的一系列繁雜的接口,單單對應用程序進行部署和測試,反復啟動服務器就浪費掉很多時間。而在OSGi 框架中,每一個Bundle 實際上都是可熱插拔的,因此,對一個特定的Bundle 進行修改不會影響到容器中的所有應用,運行的大部分應用還是可以照常工作。當你將修改后的Bundle 再部署上去的時候,容器從來沒有重新啟過,在外界看來,這種過程似乎從未發生過。這種可動態更改狀態的特性在一些及時性很強的系統中尤其重要,比如說一個及時銷售系統,當你的服務器因為要更新某個組件從而花上數分鐘時間重新啟動的話,必然導致客戶的流失和利益的損失,但是采用OSGi 架構的應用則完全可以將損失降到最低。眾所周知,Spring 框架以其優秀的特性,占據了當前企業應用開發的半邊天空,而剛剛發布的2.5 版本,宣布所有jar 包均支持OSGi 特性,其維護的子項目Spring-OSGi 也是專門針對Spring 與OSGi 的集成。Spring 早前版本有一點被人所詬病,就是其無法動態的改變其運行狀態,被迫停止服務器,再修改配置文件,而與OSGi 的結合,必然導致這種狀態的終結。最后,筆者認為這種特性也保證了系統有足夠的靈活性和可擴展性,對開發人員也大大節省了需要等待的時間。

第二點,它是一個穩定高效的系統。OSGi 是一個微核的系統,所謂微核是指其核心只有為數不多的幾個jar 包。基于OSGi 框架的系統可分可合,其結構的優勢性導致具體的Bundle 不至于影響到全局,不會因為局部的錯誤導致全局系統的崩潰。每個Bundle 也只有當服務被調用的時候才會啟動,因此性能是較一般的框架高出許多。

第三點,可復用性強。OSGi 框架本身可復用性極強,很容易構建真正面向接口的程序架構,每一個Bundle 都是一個獨立可復用的單元。但是采用OSGi 框架進行企業開發是需要氣魄和勇氣的,因為當前的軟件企業,大多已經積累了許多年,都會遺留下來一些可復用的工具箱程序,而采用OSGi 架構需要重新對這些遺留系統進行封裝,更有可能的是需要把整個體系架構打散了,進行重新的架構和排列。這個開發成本不能說是不高,但筆者認為是值得的,因為從此以后企業可以利用OSGi 獨特的特性,將重復的知識輕易的過濾掉。對于新的開發,可以從企業的Bundles 庫中精簡出可復用的模塊,量身定做新的Bundles,最大限度的利用了以前的積累,這樣的過程更能促使企業競爭力的增強。

OSGi 開源框架介紹

當前的OSGi 開源框架主要包含如下幾個:

Equinox

最知名,也是更新最頻繁的,由于Eclipse 基金的支持,其功能越來越完善,筆者后續的具體開發都是基于該框架來實現的。當前已發布版本是3.3.1 與Eclipse 版本相同,實現了OSGi R4 規范,并提供很多平臺性質的服務,包括:常用功能模塊、日志模塊、Web服務器模塊、Servlet 模塊、JSP 解析模塊等等。由于其與Eclipse 的天然聯系,使得開發基于Equinox 的應用程序變得很簡單,筆者推薦采用此框架進行二次開發。具體內容可以從http://www.eclipse.org/equinox/ 下載。

Knopflerfish

很早的,也很優秀的一個OSGi 框架,也實現了OSGi R4 標準,去年十一月發布了其2.0.2版本。該項目的宗旨在于創建一個易于開發的OSGi 平臺,與Equinox 不同之處在于它本身提供一些小應用實例,包括一個可視化控制臺等,也提供基于Eclipse 的插件。具體內容可以從http://www.knopflerfish.org/ 下載。

Felix

很新的一個OSGi 框架,社區很活躍,更新頻率高,是Apache 的開源項目。該項目2007年8月才出1.0 版,也實現了OSGi R4 規范,也提供相關的基礎服務和擴展服務功能。具體內容可以從http://felix.apache.org/site/index.html 下載。

OSGi 開發環境部署

講了那么多原理,如果不動手實踐一下,總是難以令人信服的。那么現在我們就開始動手搭建開發環境吧。

首先,你需要準備好Eclipse 筆者用的是Eclipse 3.3.1 ,還有從Equinox 網站上下載到的Equinox SDK。

其次,將Equinox SDK 解壓,解壓后是一個Eclipse 目錄,將該目錄下的所有內容拷貝至你的Eclipse 安裝目錄下,就像平時手動安裝Eclipse 插件一樣。

最后,測試下是否安裝成功。啟動你的Eclipse,選擇Run>Open Run Dialog...在彈出的界面中,如果出現了OSGi Framework 的選項,那基本上就是成功了。點擊新建一個OSGi Run方式,這時會列出一系列的加載組件,你可以檢查一下,如果里面有org.eclipse.osgi ,org.eclipse.osgi.services 和一系列以org.eclipse.equinox 開頭的組件,那么就真的安裝成功了。選中org.eclipse.osgi 和org.eclipse.osgi.services,點擊Run 按鈕,控制臺會出現“osgi>”的提示,輸入“ss”,就會看到你運行的這兩個Bundles 的ID和狀態了。每次輸入錯誤的時候,控制臺會打印出完整的命令列表,讀者可以在此參考。#p#

OSGi 版HelloWorld

到了真的寫一個HelloWorld 的時候了,該應用設計如下圖:

 這個應用包含五個Bundles:SayHello Bundle 包含一個接口,只有唯一的方法sayHello();BobSays、RodSays、KentSays 三個Bundles 分別實現了三個具體的sayHello();而SayHelloService Bundle 提供了說hello 的機會,是具體的一個服務應用,在功能上有點類似于main 函數的味道。這個HelloWorld demo 的目的不但可以讓讀者小試牛刀,而且可以同時體會一下OSGi 最大的優點——服務狀態的可更改性。BobSays、RodSays、KentSays 實現了SayHello 暴露的接口,它們是sayHello 的具體執行者,但是在SayHelloService 調用的過程中,我們可以動態的改變到底是誰來說。為了實現這個demo,還需要簡單介紹一下OSGi 最簡單的實現機制:OSGi Bundles 之間包的依賴關系。每一個OSGi Bundle 的類文件可分為私有的、引入的、暴露的三種,如下圖所示

在OSGi 中Exported Classes 是以包的方式暴露的,如圖所示,SayHello 中暴露了接口所在的包,對應的BobSays等三個Bundles 和SayHelloService Bundle 都引入了該包,這是OSGi 中最簡單的通信方式,OSGi 規范中推薦使用面向服務的通信方式,這里只是舉一個簡單的實例,因此不用做的那么復雜。
 
回到正題,啟動你的Eclipse,新建一個名為SayHello 的plug-in project,在Target Platform 選項中,選擇an OSGi Framework:Equinox。筆者自己設置了Activator 路徑為org.osgi.demo.sayHello.Activator,每個Activator 都具有兩個方法,start() 和 stop(),這兩個方法是該bundle 啟動、停止的時候,調用的方法,通常在這里注冊、初始化或注銷該Bundle 服務的過程,這里不需要更改任何Activator 中的內容,用系統自動生成的就可以了。在建立好項目后,會出現對SayHello 項目的配置,這里可以通過dependencies 選項卡,設置需要的plug-in 和引入的package;可以通過runtime 選項卡的設置,確定暴露哪些包。我們新建一個org.osgi.demo.say 包,并建立SayHello 接口,只有一個返回void的方法sayHello() ,并將此包設為暴露的。這些設置都保存在項目的META-INF目錄下的MANIFEST.MF文件中,以后要更改的話,只需打開該文件即可。 SayHello 接口的代碼如下:

public interface SayHello {
    public void sayHello();
}

同樣類似的新建一個名為BobSays 的plug-in project。筆者設置的包為org.osgi.demo.bob,這里需要在配置dependencies 的時候,將包org.osgi.demo.say 引入。創建新的類BobSays,代碼如下:

public class BobSays implements SayHello {
    public void sayHello() {
        System.out.println("Bob says \"Hello OSGi world\"");
    }
}

這里需要覆寫在BobSays Bundle 中的Activator 的兩個方法,具體代碼如下:

public class Activator implements BundleActivator {

    private ServiceRegistration serviceReg = null;


    public void start(BundleContext context) throws Exception {
        serviceReg = context.registerService(SayHello.class.getName(),
                new BobSays(), null);// 1
    }

    public void stop(BundleContext context) throws Exception {
        if (serviceReg != null)
            serviceReg.unregister();// 2
    }
}

完成的主要功能是:1、在啟動服務的時候,注冊BoySays 服務為一個SayHello 服務;2、在停止服務的時候,從上下文中卸載該服務。

類似的創建KentSays、RodSays 兩個project。

最后,創建一個名為SayHelloService 的plug-in project。筆者設置的包為org.osgi.demo.service,同樣在配置dependencies 的時候,將包org.osgi.demo.say 引入。創建SayHelloService類,代碼如下:

public class SayHelloService {

    private SayHello say;

    public void helloWorld() {
        for (int i = 0; i < 10; i++) {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
                System.err.println("Thread can't sleep");
            }
            say.sayHello();
        }
    }

    public void setSay(SayHello say) {
        this.say = say;
    }
}

這里采用依賴注入的方式,所以有一個setSay() 方法,來設置一個具體的SayHello。helloWorld() 方法就是調用特定的SayHello.sayHello() 來完成的,用10秒鐘的時間打印十次sayHello() 的具體內容。該Bundle 的Activator 代碼如下:

public class Activator implements BundleActivator {

    private ServiceRegistration serviceReg = null;

    public void start(BundleContext context) throws Exception {
        SayHelloService sayService = new SayHelloService();
        serviceReg = context.registerService(SayHelloService.class.getName(),
                sayService, null);// 1
        ServiceReference serviceRef = context
                .getServiceReference(SayHello.class.getName());// 2
        sayService.setSay((SayHello) context.getService(serviceRef));// 2
        sayService.helloWorld();// 3
    }


    public void stop(BundleContext context) throws Exception {
        if (serviceReg != null)
            serviceReg.unregister();
    }
}

完成的主要功能是:1、注冊SayHelloService 服務;2、獲取一個的SayHello 服務;3、并注入到SayHelloService 服務中,現在注入的服務是從服務上下文中具體獲取的,而到底是哪個,只有在運行時狀態才能決定。

至此,所有的Bundles 我們都已經完成了,選擇Open Run Dialog...,并選中上述五個Bundles 和OSGi 核心Bundle,點擊Run 按鈕。輸入“ss”,列出了6個Bundles 的狀態,此時,如果你的SayHelloService Bundle 狀態是Resolved,那么你可以通過命令“start ‘SayHelloService Bundle 狀態的id’”,啟動SayHelloService,此時你會看到打印出的10條hello world信息。讀者可以手動利用用命令“start” 和“stop” 改變sayHello 的具體執行者,動態的更換實際sayHello 的執行者。這個簡單的HelloWorld 應用,可以說明SayHelloService 在具體執行的過程中行為是可動態改變的,并且改變只是局部的。

小結

讀完本文,實際動手做過HelloWorld,想必讀者對OSGi 框架也應該有所了解了,OSGi 框架在國外關注率是挺高的,但是在國內的推廣和使用卻不夠廣泛,可能是因為OSGi 字面上的意思太過于抽象,因此筆者在這里將這個優秀的框架介紹給大家,本片只是一個簡單的介紹,并不涉及OSGi 框架深入的知識。

【編輯推薦】

  1. 探索Eclipse的OSGi控制臺
  2. OSGi企業級分布式ModuleFusion1.0.1發布
  3. OSGi和未來Java企業開發的方向
責任編輯:佚名 來源: 51CTO.com
相關推薦

2010-03-29 17:05:07

OSGi

2009-03-30 09:42:28

OSGiJavaJCP

2009-08-21 13:55:05

企業級Java云云工廠SpringSourc

2010-04-07 08:55:00

OSGiSpring

2011-07-05 14:07:36

2013-10-18 11:01:30

OpenStack云計算開源

2011-08-15 16:02:15

OpenNMS網管軟件

2016-09-12 10:21:40

2021-06-14 09:46:11

開源混合云云計算

2013-12-10 21:39:14

CentOS 6.5CentOS

2014-01-09 14:01:20

開源CentOS紅帽

2022-06-18 18:18:43

紅帽開源混合云

2018-11-20 09:35:42

開源技術 數據

2009-01-13 09:05:45

tomcatSpring框架Web服務器

2018-02-02 11:21:25

云計算標準和應用大會

2010-08-04 15:20:15

Flex企業級開發

2012-06-14 13:26:22

2014-09-24 13:32:41

企業號

2014-12-03 11:41:19

企業級技術技術趨勢2015年

2013-05-06 14:34:42

開源Linux 6.3紅帽企業級Linux
點贊
收藏

51CTO技術棧公眾號

久久精品国内一区二区三区水蜜桃 | 午夜精品久久久久久久久久久久| 91精品综合久久久久久五月天| 欧美黄色激情视频| 日韩制服一区| 亚洲影院在线观看| 欧美日韩国产综合视频在线| 亚洲 国产 日韩 欧美| 亚洲午夜精品一区二区国产| 日韩不卡中文字幕| 路边理发店露脸熟妇泻火| www天堂在线| 久久午夜电影| 久久福利视频导航| av网站有哪些| 精品国产亚洲一区二区三区在线| 91麻豆福利精品推荐| 国产国语videosex另类| 中国xxxx性xxxx产国| 亚洲承认视频| 亚洲成av人片一区二区| 亚洲在线观看视频网站| 亚洲女同二女同志奶水| 成人精品毛片| 欧美狂野另类xxxxoooo| 国产免费黄色小视频| 四虎久久免费| 91蜜桃网址入口| 91免费在线观看网站| 波多野结衣在线观看视频| 国产综合欧美| 日韩中文字幕在线观看| 女~淫辱の触手3d动漫| 亚洲一区二区三区免费| 欧美日韩一区二区三区免费看| 农民人伦一区二区三区| 国产日产一区二区| 中文欧美字幕免费| 国产美女久久精品| 91九色丨porny丨肉丝| 欧美激情aⅴ一区二区三区| 欧美一级二级三级蜜桃| 中文字幕无码不卡免费视频| 俺来也官网欧美久久精品| 18成人在线视频| 亚洲高清视频一区二区| 欧美色图另类| 91热门视频在线观看| 国产视频在线观看一区| 亚洲第一天堂在线观看| 国产成人午夜电影网| 成人激情视频在线观看| 在线视频免费观看一区| 日韩高清不卡一区二区三区| 日韩av电影手机在线| av大片在线免费观看| 国产精品日韩欧美一区| 7m精品福利视频导航| 日韩欧美视频在线免费观看| 日韩午夜免费| 欧美在线影院在线视频| 中文字幕免费在线观看视频| 亚洲女同在线| 日产精品久久久一区二区福利| 久久久精品视频网站 | 日韩精品欧美成人高清一区二区| 8090成年在线看片午夜| 国偷自拍第113页| 国产亚洲毛片| 国产成人在线一区| 亚洲精品国产精品国自产网站按摩| 噜噜噜久久亚洲精品国产品小说| 欧洲亚洲免费视频| 中文字幕欧美在线观看| 欧美日本一区二区高清播放视频| 欧美日本国产在线| 国产亚洲第一页| 亚洲免费观看| 国产精品jvid在线观看蜜臀| 中文字幕人妻丝袜乱一区三区| 美国欧美日韩国产在线播放| 亚洲最大av网站| 亚洲乱码国产乱码精品精软件| a在线欧美一区| 欧美另类一区| 欧美尤物美女在线| 一区二区三区成人| 中国丰满人妻videoshd| 另类一区二区| 精品国产成人在线影院| 成人免费无遮挡无码黄漫视频| 久久网站免费观看| 国外成人免费在线播放| 国产视频1区2区| 狠狠色伊人亚洲综合成人| 1卡2卡3卡精品视频| 无码精品一区二区三区在线 | 国精产品视频一二二区| 午夜欧美理论片| 日本精品中文字幕| 国产精品国产av| 92国产精品观看| 亚洲欧洲精品一区| 国产伦子伦对白在线播放观看| 91激情在线视频| 美女又黄又免费的视频| 精品国产91乱码一区二区三区四区 | 久久一区二区三区av| h视频网站在线观看| 亚洲午夜免费福利视频| 精品少妇无遮挡毛片| 伊色综合久久之综合久久| 亚洲少妇中文在线| 黄色一级片在线| 日韩精品一二三四| 国产在线一区二区三区四区| 1024国产在线| 欧美视频一区二区三区…| 日本网站在线看| 91九色综合| 亚洲国产成人久久综合| 中文字幕无码日韩专区免费| 亚洲在线免费| 国产精品久久久久久久免费大片| 天天在线视频色| 色狠狠色噜噜噜综合网| www.啪啪.com| 午夜视频精品| 成人啪啪免费看| 国产精品无码2021在线观看| 五月天婷婷综合| 在线观看免费视频国产| 亚洲xxx拳头交| 国产精品自拍视频| 飘雪影院手机免费高清版在线观看 | 国产一区二区在线观看视频| 91精品国产综合久久男男 | 视频一区在线| 久久久999精品免费| 中文字幕黄色av| 久久精品亚洲一区二区三区浴池| 福利视频一二区| 成人另类视频| 久久久中文字幕| 午夜精品久久久久久久96蜜桃| 亚洲欧洲三级电影| 中文字幕成人免费视频| 日韩精品一区二区久久| 国产精品久久久久不卡| 国产精品免费播放| 91福利视频久久久久| 在线不卡av电影| 久久国产66| 日本一区二区三区视频免费看| xx欧美视频| 亚洲天堂av电影| 午夜一级黄色片| 国产精品久久久久久久浪潮网站| 黄色三级视频在线| 日韩中文字幕高清在线观看| 国产精品自产拍在线观看| 日韩专区在线| 欧美一区二区二区| 久久精品欧美一区二区| 国产 欧美在线| 免费成人午夜视频| 国产欧美日韩免费观看| 久久久精品2019中文字幕神马| 岳乳丰满一区二区三区| 中文字幕日韩av资源站| 免费高清视频在线观看| 黄色另类av| 久久综合毛片| 久久av影院| 欧美福利视频在线观看| 视频三区在线| 56国语精品自产拍在线观看| 别急慢慢来1978如如2| 欧美精品羞羞答答| 91在线视频精品| 黄色影院在线看| 亚洲精选中文字幕| 在线观看免费高清视频| 一区二区三区在线高清| 黄色录像a级片| 麻豆91小视频| 国产av熟女一区二区三区 | 韩国福利视频一区| 青青视频在线观| 91.麻豆视频| 国产精品黄色网| 欧美激情一区在线观看| 熟妇女人妻丰满少妇中文字幕| 国产亚洲永久域名| 日本黄色播放器| 色狠狠久久av综合| 成人精品一区二区三区电影黑人| av2020不卡| 综合136福利视频在线| 性中国古装videossex| 日韩欧美主播在线| 国精品无码一区二区三区| 老司机午夜精品视频| 亚洲av首页在线| 国产精品嫩模av在线| 7777精品久久久大香线蕉小说| jizz内谢中国亚洲jizz| 毛片精品免费在线观看| 精品美女视频在线观看免费软件 | 加勒比av中文字幕| 国精一区二区| 国产经典一区二区三区 | 欧美黑人巨大xxx极品| 天堂在线视频观看| 日韩制服诱惑| 久久久亚洲影院你懂的| aaa在线观看| 亚洲男人天堂九九视频| 国产黄色小视频在线观看| 91福利小视频| 日韩av黄色片| 一区二区视频在线| 可以免费看av的网址| 久久久久亚洲综合| 国产成人精品无码片区在线| 精品一区二区三区在线观看| 日本一区二区三区四区高清视频| 日本免费精品| 国产精品一区专区欧美日韩| 免费毛片b在线观看| 亚洲黄色www网站| 精品国产亚洲AV| 欧美精品亚洲一区二区在线播放| 五月婷婷激情视频| 精品日本高清在线播放| 日韩成人免费在线视频| 亚洲高清在线精品| 日韩片在线观看| 国产成都精品91一区二区三| 伊人五月天婷婷| 精品一二线国产| 三级一区二区三区| 精品亚洲国内自在自线福利| 天美星空大象mv在线观看视频| 麻豆91精品| 国产激情在线观看视频| 久久久久中文| av免费网站观看| 青娱乐精品视频在线| 天天爽人人爽夜夜爽| 看片的网站亚洲| 三级性生活视频| 国产一区二区电影| 四川一级毛毛片| 国产sm精品调教视频网站| 精品国产aⅴ一区二区三区东京热 久久久久99人妻一区二区三区 | 久久aimee| 精品国产乱码久久久久久108| 精品久久ai| 美女被啪啪一区二区| 国产欧美日韩视频在线| 日韩一区二区三区高清| 日韩在线二区| 欧美 国产 精品| 一区三区视频| 国产熟女高潮视频| 免费成人在线观看| 日韩不卡的av| www.亚洲精品| 久久婷婷五月综合| 中文字幕一区在线观看视频| 亚洲色图综合区| 亚洲电影一级黄| 天天干,天天干| 91精品一区二区三区在线观看| 国产熟女一区二区丰满| 亚洲国产成人91精品| 欧美日韩在线中文字幕| 久久激情五月丁香伊人| 另类视频在线| 国产不卡视频在线| 成人综合日日夜夜| 韩日午夜在线资源一区二区 | 久久av影院| 国产精品久久久久久久久久直播| 免费看日本一区二区| 一区二区在线观看网站| 久久97精品| 午夜精品一区二区三区四区| 亚洲一区二区三区无吗| 18禁免费观看网站| 久久成人久久鬼色| 日本少妇xxxx| 国产精品国产三级国产| 日本三级视频在线| 欧美视频日韩视频在线观看| av中文字幕播放| 亚洲午夜激情免费视频| 污污视频在线看| 永久555www成人免费| 99在线播放| 国产精品高潮呻吟久久av无限| 精品国产亚洲一区二区三区在线| 欧美日韩国产高清视频| 你懂的国产精品永久在线| 男人天堂网视频| 国产成人高清在线| 国产白丝一区二区三区| 亚洲福利一二三区| 91中文字幕在线播放| 欧美喷水一区二区| 午夜av免费观看| 欧美乱大交xxxxx| 欧美日韩伦理一区二区| 老司机精品福利在线观看| 中文在线日韩| 九九精品久久久| 久久青草国产手机看片福利盒子 | 欧美日韩国产色综合一二三四| 动漫av免费观看| av激情亚洲男人天堂| 老女人性淫交视频| 在线成人免费视频| yourporn在线观看视频| 欧美在线视频观看免费网站| 91精品日本| 国产1区2区3区中文字幕| 美女视频黄 久久| 在线观看国产精品一区| 欧美日韩亚洲精品内裤| 精品久久国产视频| 另类专区欧美制服同性| 日日夜夜亚洲| 亚洲不卡1区| 免费不卡在线视频| 国产免费一区二区三区网站免费| 精品国产成人在线| 成人免费观看在线视频| 色综合色综合久久综合频道88| 亚洲伊人伊成久久人综合网| 亚洲国产精品www| 免费成人美女在线观看.| 亚洲一区二区自偷自拍 | 伊人久久大香线蕉无限次| 亚洲 自拍 另类小说综合图区| 国产成人欧美日韩在线电影| 91日韩中文字幕| 日韩视频一区在线观看| 在线黄色网页| 97av自拍| 尤物在线精品| 中文精品在线观看| 欧美性猛交xxxx偷拍洗澡| 免费在线观看一级毛片| 日韩av免费在线播放| 精品美女久久| wwwwwxxxx日本| 最新国产精品久久精品| 国产色片在线观看| 欧美国产精品人人做人人爱| 国产精品17p| 日韩欧美国产二区| 青娱乐精品视频| 91视频综合网| 亚洲精美色品网站| 深夜成人影院| 亚洲综合欧美日韩| 国产成a人亚洲| 五月婷婷中文字幕| 精品一区二区三区电影| 日本肉肉一区| 97超碰免费观看| 成人h动漫精品一区二区| 国产免费av一区二区| 亚洲天堂日韩电影| 国产精品日本一区二区不卡视频| www.一区二区.com| 91丨porny丨在线| 中文字幕丰满人伦在线| 久久99久国产精品黄毛片入口| 噜噜噜天天躁狠狠躁夜夜精品| 黄色一级大片在线观看| 中文字幕亚洲在| 熟妇人妻一区二区三区四区| 国产成人综合久久| 欧美在线国产| 国产精品高清无码在线观看| 欧美日韩成人在线| av中文在线资源库| 视频一区二区在线观看| 国产成人综合亚洲网站| 无码人妻久久一区二区三区| 久久高清视频免费| 沈樵精品国产成av片| 国产高清999| 色拍拍在线精品视频8848| 中国av在线播放| 日本一区二区视频| 成人免费毛片片v| 一级黄色大片网站|