<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    子在川上曰

      逝者如斯夫不舍晝夜
    隨筆 - 71, 文章 - 0, 評論 - 915, 引用 - 0
    數(shù)據(jù)加載中……

    jBPM開發(fā)入門指南(4)

    7   jBPM 的客戶端開發(fā)

    有了前面的 HelloWorld 后臺流程,我們就要開始客戶端程序了。正如前面提到的,本文不寫 JSP ,而改采用 JUnit 的形式,輸出則用 System.out.println 。舉一反三,知道在方法中輸入及用 println 輸出,在 JSP SWING GUI 界面還不是一樣嘛。

    ?

    這個 JUnit 客戶端,我們就借用創(chuàng)建項目時自動生成的 SimpleProcessTest.java 了,改寫后如下:

    package com.sample;

    ?

    import junit.framework.TestCase;

    ?

    import org.jbpm.JbpmConfiguration;

    import org.jbpm.JbpmContext;

    import org.jbpm.context.exe.ContextInstance;

    import org.jbpm.graph.def.ProcessDefinition;

    import org.jbpm.graph.exe.ProcessInstance;

    ?

    public class SimpleProcessTest extends TestCase {

    ?

    ??? private JbpmConfiguration config = JbpmConfiguration.getInstance();

    ??? private JbpmContext ctx = config.createJbpmContext();

    ??? // helloworld 對應(yīng)于 jbpm_processdefinition 表的 name 字段值,也即 processdefinition.xml name

    ??? // 這個值得取比較耗時,實際項目里最好和“數(shù)據(jù)庫的 JDBC 連接”一樣,讓它共享,不要頻繁打開關(guān)閉。

    ??? private ProcessDefinition processDefinition = ctx.getGraphSession().findLatestProcessDefinition("helloworld");

    ?

    ??? public void testNewRequest() {

    ??????? long id = newRequest();

    ??????? System.out.println("id=" + id);

    ??????? checkNewRequest(id);

    ??????? confirmRequest(id);

    ??????? checkconfirmRequest(id);

    ??????? ctx.close();// 關(guān)閉 jbpm 容器

    ??? }

    ?

    ??? /**

    ??? ? * 創(chuàng)建一個請假單

    ??? ? *

    ??? ? * @return

    ??? ? */

    ??? private long newRequest() {

    ??????? // 創(chuàng)建一個新流程

    ??????? ProcessInstance pi = processDefinition.createProcessInstance();

    ??????? // 取得流程的數(shù)據(jù)環(huán)境

    ??????? ContextInstance ci = pi.getContextInstance();

    ??????? // 創(chuàng)建一張請假單

    ??????? ci.setVariable("name", " 陳剛 www.chengang.com.cn" );

    ??????? ci.setVariable("day", 2);

    ??????? assertEquals(null, ci.getVariable("note"));

    ??????? // 請假申請結(jié)束,轉(zhuǎn)到下一個流程結(jié)點

    ??????? pi.signal();

    ??????? return pi.getId();

    ??? }

    ?

    ??? /**

    ??? ? * 檢查請假單的數(shù)據(jù)

    ??? ? *

    ??? ? * @param id

    ??? ? */

    ??? private void checkNewRequest(long id) {

    ??????? // 從數(shù)據(jù)庫提取原流程

    ??????? ProcessInstance pi = ctx.loadProcessInstance(id);

    ??????? // 取得流程的數(shù)據(jù)環(huán)境

    ??????? ContextInstance ci = pi.getContextInstance();

    ??????? // 創(chuàng)建一張請假單

    ??????? assertEquals(" 陳剛 www.chengang.com.cn" , ci.getVariable("name"));

    ??????? assertEquals(Integer.valueOf(2), ci.getVariable("day"));

    ??????? assertEquals(" 我要請假 " , ci.getVariable("note"));

    ?

    ??????? // 當(dāng)前是結(jié)點為 confirm

    ??????? assertEquals(pi.getRootToken().getNode().getName(), "confirm");

    ??????? // 流程還沒結(jié)束

    ??????? assertFalse(pi.hasEnded());

    ??? }

    ?

    ??? /**

    ??? ? * 審批陳剛的請假申請

    ??? ? *

    ??? ? * @param id

    ??? ? */

    ??? private void confirmRequest(long id) {

    ??????? ProcessInstance pi = ctx.loadProcessInstance(id);

    ??????? ContextInstance ci = pi.getContextInstance();

    ??????? // 不通過

    ??????? ci.setVariable("note", " 不準(zhǔn)請假,繼續(xù)加班 " );

    ??????? // 審批結(jié)束,到下一個流程結(jié)點

    ??????? pi.signal();

    ??? }

    ?

    ??? private void checkConfirmRequest(long id) {

    ??????? ProcessInstance pi = ctx.loadProcessInstance(id);

    ??????? ContextInstance ci = pi.getContextInstance();

    ??????? // ConfirmAction 類在 signal 后執(zhí)行,所以覆蓋了經(jīng)理的審批意見

    ??????? assertEquals(" 準(zhǔn)假 " , ci.getVariable("note"));

    ?

    ??????? // 當(dāng)前是結(jié)點為 end

    ??????? assertEquals(pi.getRootToken().getNode().getName(), "end");

    ??????? // 流程結(jié)束了

    ??????? assertTrue(pi.hasEnded());

    ??? }

    ?

    }

    ?

    這個例子還是很簡單,而且關(guān)鍵是缺少用戶、組、權(quán)限等工作流系統(tǒng)必須的東西,不過沒關(guān)系。下面的內(nèi)容我將完成一個更完整的實例。

    posted on 2006-08-24 18:15 陳剛 閱讀(30960) 評論(37)  編輯  收藏 所屬分類: jBPM

    評論

    # re: jBPM開發(fā)入門指南(4)   回復(fù)  更多評論   

    最近也再研究JBPM,謝謝樓主的文章,加油!
    2006-08-25 18:03 | 劉小偉

    # re: jBPM開發(fā)入門指南(4)   回復(fù)  更多評論   

    單元測試各個方法之間有依賴關(guān)系??
    2006-08-27 14:15 | pikachu

    # re: jBPM開發(fā)入門指南(4)   回復(fù)  更多評論   

    @pikachu
    為了簡潔和閱讀代碼的方便,這里沒有遵照單元測試的原則。比如你所說的方法之間的依賴性,還有對數(shù)據(jù)庫的依賴,這都是單元測試的大忌。如果是要寫真正的項目單元測試,jBPM的隨包文檔要更標(biāo)準(zhǔn)一些。
    2006-08-28 09:06 | 陳剛

    # re: jBPM開發(fā)入門指南(4)   回復(fù)  更多評論   

    如何將用戶、組、權(quán)限同流程點聯(lián)合起來,請說下你的思路好么?

    謝謝你的文章。繼續(xù)加油。
    2006-08-29 11:15 | ktm

    # re: jBPM開發(fā)入門指南(4)   回復(fù)  更多評論   

    @ktm
    后繼文章即將涉及
    2006-08-29 11:18 | 陳剛

    # re: jBPM開發(fā)入門指南(4)   回復(fù)  更多評論   

    附上中表的中文意思
    JBPM_ACTION action記錄表
    JBPM_DECISIONCONDITIONS 結(jié)果條件表
    JBPM_DELEGATION 委托表
    JBPM_EVENT 事件表 處理進(jìn)入或者離開事件
    JBPM_EXCEPTIONHANDLER 異常處理表
    JBPM_ID_GROUP 用戶組表
    JBPM_ID_MEMBERSHIP 用戶成員表 表現(xiàn)用戶和組之間的多對多關(guān)系
    JBPM_ID_PERMISSIONS 用戶權(quán)限表
    JBPM_ID_USER 用戶表
    JBPM_MODULEDEFINITION 模塊定義表
    JBPM_MODULEINSTANCE 模塊實例表
    JBPM_NODE 流程節(jié)點表
    JBPM_POOLEDACTOR 匯集參與著表
    JBPM_PROCESSDEFINITION 流程定義表
    JBPM_PROCESSFILE 流程文件表
    JBPM_PROCESSFILEBLOCK 流程文件塊表
    JBPM_PROCESSINSTANCE 流程實例表
    JBPM_RUNTIMEACTION 運行中行為表
    JBPM_SCRIPTVARIABLES 腳本變量表
    JBPM_SWIMLANE 泳道表
    JBPM_SWIMLANEINSTANCE 泳道實例表
    JBPM_TASK 任務(wù)表
    JBPM_TASKACTORPOOL 用戶行為匯總
    JBPM_TASKINSTANCE 任務(wù)實例
    JBPM_TIMER 計時表
    JBPM_TOKEN 令牌表
    JBPM_TOKENVARIABLEMAP 令牌變量影射表
    JBPM_TRANSITION 轉(zhuǎn)換表
    JBPM_VARIABLEINSTANCE 變量實例表
    JBPM_VARIABLEINSTANCEBLOCK 變量實例塊表
    JBPM_VARIABLEMAPPING 變量影射表
    2006-08-29 11:29 | ktm

    # re: jBPM開發(fā)入門指南(4)   回復(fù)  更多評論   

    期待繼續(xù)!
    2006-08-29 16:10 | maya

    # re: jBPM開發(fā)入門指南(4)   回復(fù)  更多評論   

    Jbpm31DataModel%2FJBoss+jBPM+Definition+Data+Model
    哈哈。好東西。這個圖片
    http://wiki.jboss.org/wiki/attach?page=Jbpm31DataModel%2FJBoss+jBPM+Definition+Data+Model.png
    2006-08-30 16:27 | ktm

    # re: jBPM開發(fā)入門指南(4)   回復(fù)  更多評論   

    樓主加油啊!
    期待你的新作
    2006-08-31 19:59 | nianlu

    # re: jBPM開發(fā)入門指南(4)   回復(fù)  更多評論   

    @ktm
    非常感謝您提供的表說明
    2006-09-01 09:22 | 陳剛

    # re: jBPM開發(fā)入門指南(4)   回復(fù)  更多評論   

    最近也再研究JBPM,但是我有一個問題想和樓主討論下,
    如何將一個業(yè)務(wù)系統(tǒng)和JBPM相結(jié)合,個人淺見認(rèn)為JBPM所提供的變量表的表結(jié)構(gòu)不適合進(jìn)行業(yè)務(wù)數(shù)據(jù)的各種組合查詢.所以我現(xiàn)在的做法是只將流程所涉及的業(yè)務(wù)主鍵ID存入JBPM變量表,再在業(yè)務(wù)系統(tǒng)相關(guān)表中存入processInstanceID & taskInstanceID進(jìn)行流程定位,但是這樣做產(chǎn)生了在服務(wù)和JBPM間的一種看上去不是很好的一種關(guān)聯(lián),致使在我在服務(wù)上要做JBPM的管理 以及 在需要時還要先查出業(yè)務(wù)主鍵集合再到業(yè)務(wù)系統(tǒng)中查出主鍵對應(yīng)的實體信息.小弟學(xué)習(xí)不久可能做法有問題,希望能從樓主那得到開解!
    2006-09-02 18:48 | tom

    # re: jBPM開發(fā)入門指南(4)   回復(fù)  更多評論   

    陳大俠,您好!
    我是個JBPM的初學(xué)者,買過您ECLIPSE的書,之前也把您關(guān)于JBPM的入門指南等全看了好幾遍,我想問一下。。。如果我想要一個自己的JSP頁面,例如我要在頁面上放個下拉列表,放個表格,或者放個FLASH怎么辦。。。JBPM自帶的例子好象只有文本框。。。如果我放自己的東西他們應(yīng)該怎么和JBPM內(nèi)部對應(yīng)起來呢。。。
    望大俠指教一二。。。。呵呵。。。
    2006-09-04 15:17 | gaok

    # re: jBPM開發(fā)入門指南(4)   回復(fù)  更多評論   

    這是人家的學(xué)習(xí) ---Jboss JBPM 學(xué)習(xí)點滴
    (一)JBPM在Mysql 4.0以下運行有問題,主要是select語句的問題。
    (二)JBPM 數(shù)據(jù)庫默認(rèn)的字符段是255個字符,有時需要修改,比如存儲文件的時候。JBPM數(shù)據(jù)庫默認(rèn)的字段類型的定義有時候不一定適合需要,要手工進(jìn)行修改。
    (三)對于工作流定義文件-processdifinition.xml的中文問題解決方案如下:
    (1)xml的Encoding設(shè)定成”GBK“
    (2)對于MySQL,hibernate相應(yīng)的driver設(shè)定成:jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=GBK
    (3)文字在顯示的時候要用toGBK轉(zhuǎn)換才能正確顯示。
    (4)對于Oracle來講,Hibernate使用的C3P0連接池有問題,可用最新的C3P0代替。如果XML定義文件采用UTF8定義,顯示時可不用做GBK轉(zhuǎn)換。

    發(fā)來看看。可能對gaok有幫助
    2006-09-05 09:04 | ktm

    # re: jBPM開發(fā)入門指南(4)   回復(fù)  更多評論   

    @gaok
    JSP-->Servlet-->jBPM,Servlet里的寫法就參考本指南的寫法。
    2006-09-05 09:35 | 陳剛

    # re: jBPM開發(fā)入門指南(4)   回復(fù)  更多評論   

    15:55:56,109 [main] INFO SessionFactoryImpl : Checking 28 named queries
    15:55:56,640 [main] ERROR ErrorCounter : *** ERROR: line 4:47: unexpected token: t
    15:55:56,703 [main] ERROR ErrorCounter : *** ERROR: line 3:43: expecting "set", found 't'
    15:55:56,718 [main] ERROR ErrorCounter : *** ERROR: line 3:43: expecting "set", found 't'
    15:55:56,781 [main] ERROR ErrorCounter : *** ERROR: line 3:48: unexpected token: t
    15:55:56,812 [main] ERROR ErrorCounter : *** ERROR: line 4:33: unexpected token: m
    15:55:56,812 [main] ERROR SessionFactoryImpl : Error in named query: SchedulerSession.deleteTimersForProcessInstance
    org.hibernate.hql.ast.QuerySyntaxError: unexpected token: t near line 3, column 48 [

    delete from org.jbpm.scheduler.exe.Timer t
    where t.processInstance = :processInstance

    為什么部署的時候出現(xiàn)這個錯誤?
    2006-09-07 16:01 | chuanyuan

    # re: jBPM開發(fā)入門指南(4)   回復(fù)  更多評論   

    陳大哥。啥時候上第五章啊。。。

    乎乎·~
    2006-09-09 16:30 | ktm

    # re: jBPM開發(fā)入門指南(4)   回復(fù)  更多評論   

    例子中
    checkconfirmRequest(id); 應(yīng)改為checkConfirmRequest(id);
    assertEquals(" 我要請假 " , ci.getVariable("note"));
    就改為:assertEquals("我要請假" , ci.getVariable("note"));
    2006-09-09 17:10 | zqh

    # re: jBPM開發(fā)入門指南(4)   回復(fù)  更多評論   

    期待你后續(xù)的文章
    2006-09-13 17:08 | 學(xué)習(xí)者

    # re: jBPM開發(fā)入門指南(4)   回復(fù)  更多評論   

    你好,
    我正在研究JBPM,看了您的文章很有啟發(fā),
    不過我對于用戶,權(quán)限,以及怎樣和自己設(shè)計的JSP頁面統(tǒng)一還是不明白?能否就這方面多一點內(nèi)容,十分感謝!
    2006-09-22 10:18 | ppxiaofei

    # 希望你能出書  回復(fù)  更多評論   

    希望陳大哥能出書。看網(wǎng)上的文章不是丟這,就是缺那。
    2006-11-21 10:16 | java愛好者[匿名]

    # re: jBPM開發(fā)入門指南(4)   回復(fù)  更多評論   

    你好! 我看了您的文章受益匪淺。
    我請教個問題,文章中設(shè)置流程實例變量(不知道這樣叫對不對)用的是方法
    ContextInstance ci = pi.getContextInstance();

    // 不通過

    ci.setVariable("note", " 不準(zhǔn)請假,繼續(xù)加班 " );

    但是我看 jbpm的例子中使用的是如下方法:
    taskInstance.setVariable(taskFormParameter.getLabel(), taskFormParameter.getValue());
    這個應(yīng)該和流程中的變量域有關(guān)吧? 是不是這個變量設(shè)置到 taskinstance這個范圍小一點的變量域中比較合適,contextinstance是不是全局都可見不是很好? 還是有參考的標(biāo)準(zhǔn)?
    2006-12-03 20:46 | lyo

    # re: jBPM開發(fā)入門指南(4)   回復(fù)  更多評論   

    @ktm
    那個ER圖什么工具設(shè)計的 ??
    2006-12-11 12:37 | 黃鵬霄[匿名]

    # re: jBPM開發(fā)入門指南(4)   回復(fù)  更多評論   

    期待下一章,大哥快上吧
    2006-12-21 11:03 | wala

    # re: jBPM開發(fā)入門指南(4)   回復(fù)  更多評論   

    我在使用你的客戶端的時候會出現(xiàn)異常
    pi = processDefinition.createProcessInstance();
    pi 為null
    這是那里的問題?
    2007-01-03 20:12 | horsezp

    # re: jBPM開發(fā)入門指南(4)   回復(fù)  更多評論   

    @chuanyuan
    http://www.jboss.org/?module=bb&op=viewtopic&p=3941594

    把jboss中的hibernate.jar & hibernate-matedata.jar 去掉,換上hibnernate3.1.jar以上的版本就行了
    我換上了3.2,行了。
    2007-01-18 17:23 | tony810428@hotmail.com

    # re: jBPM開發(fā)入門指南(4)   回復(fù)  更多評論   

    后臺測試是正常的,客戶端測試的時候出下面的錯誤
    junit.framework.AssertionFailedError: expected:<我要請假> but was:<null>
    2007-04-23 20:27 | yollywu

    # re: jBPM開發(fā)入門指南(4)   回復(fù)  更多評論   

    checkNewRequest(id);
    assertEquals(" 我要請假 " , ci.getVariable("note"));提示錯誤出在這兩處
    2007-04-23 21:53 | yollywu

    # re: jBPM開發(fā)入門指南(4)   回復(fù)  更多評論   

    package simple;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.InputStream;

    import junit.framework.TestCase;

    import org.jbpm.JbpmConfiguration;
    import org.jbpm.JbpmContext;
    import org.jbpm.graph.def.ProcessDefinition;
    public class DeployProcessTest extends TestCase {
    /**
    * 在本方法執(zhí)行完畢后,檢查 jbpm_processdefinition 表會多了一條記錄
    *
    * @throws FileNotFoundException
    */
    public void testDeployProcessDefinition() throws FileNotFoundException {
    // 從 jbpm.cfg.xml 取得 jbpm 的配置
    JbpmConfiguration config = JbpmConfiguration.getInstance();
    // 創(chuàng)建一個 jbpm 容器
    JbpmContext jbpmContext = config.createJbpmContext();
    // 由 processdefinition.xml 生成相對應(yīng)的流程定義類 ProcessDefinition
    InputStream is = new FileInputStream("E:/eclipse/workspace/myjbpm/bin/simple/processdefinition.xml");
    ProcessDefinition processDefinition = ProcessDefinition.parseXmlInputStream(is);
    // 利用容器的方法將流程定義數(shù)據(jù)部署到數(shù)據(jù)庫上
    jbpmContext.deployProcessDefinition(processDefinition);
    // 關(guān)閉 jbpmContext
    jbpmContext.close();
    }

    public static void main(String arg[]){
    DeployProcessTest t = new DeployProcessTest();
    try{
    t.testDeployProcessDefinition();
    }catch(Exception e){
    e.printStackTrace();
    }


    }
    }


    程序執(zhí)行到 ProcessDefinition processDefinition = ProcessDefinition.parseXmlInputStream(is);
    出現(xiàn)以下錯誤:

    15:58:30,625 [main] ERROR JpdlXmlReader : couldn't parse process definition
    org.dom4j.DocumentException: Error on line 2 of document : The processing instruction target matching "[xX][mM][lL]" is not allowed. Nested exception: The processing instruction target matching "[xX][mM][lL]" is not allowed.
    at org.dom4j.io.SAXReader.read(SAXReader.java:482)
    at org.jbpm.jpdl.xml.JpdlParser.parse(JpdlParser.java:57)
    at org.jbpm.jpdl.xml.JpdlXmlReader.readProcessDefinition(JpdlXmlReader.java:138)
    at org.jbpm.graph.def.ProcessDefinition.parseXmlInputStream(ProcessDefinition.java:172)
    at simple.DeployProcessTest.testDeployProcessDefinition(DeployProcessTest.java:24)
    at simple.DeployProcessTest.main(DeployProcessTest.java:34)
    Nested exception:
    org.xml.sax.SAXParseException: The processing instruction target matching "[xX][mM][lL]" is not allowed.
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1269)
    at org.dom4j.io.SAXReader.read(SAXReader.java:465)
    at org.jbpm.jpdl.xml.JpdlParser.parse(JpdlParser.java:57)
    at org.jbpm.jpdl.xml.JpdlXmlReader.readProcessDefinition(JpdlXmlReader.java:138)
    at org.jbpm.graph.def.ProcessDefinition.parseXmlInputStream(ProcessDefinition.java:172)
    at simple.DeployProcessTest.testDeployProcessDefinition(DeployProcessTest.java:24)
    at simple.DeployProcessTest.main(DeployProcessTest.java:34)
    org.jbpm.jpdl.JpdlException: [[FATAL] line 2: The processing instruction target matching "[xX][mM][lL]" is not allowed., [ERROR] couldn't parse process definition]
    at org.jbpm.jpdl.xml.JpdlXmlReader.readProcessDefinition(JpdlXmlReader.java:163)
    at org.jbpm.graph.def.ProcessDefinition.parseXmlInputStream(ProcessDefinition.java:172)
    at simple.DeployProcessTest.testDeployProcessDefinition(DeployProcessTest.java:24)
    at simple.DeployProcessTest.main(DeployProcessTest.java:34)
    請問是什么問題阿
    2007-07-09 16:17 | 小云

    # re: jBPM開發(fā)入門指南(4)   回復(fù)  更多評論   

    java.lang.NullPointException
    還有第41和71行有錯誤,
    為什么啊,有哪位大俠能夠告訴我啊!
    2007-08-17 18:35 | lxp

    # re: jBPM開發(fā)入門指南(4)   回復(fù)  更多評論   

    @horsezp
    我也是同樣的問題,你怎么解決的啊!
    2007-08-17 18:39 | lxp

    # re: jBPM開發(fā)入門指南(4)   回復(fù)  更多評論   

    ProcessInstance pi = processDefinition.createProcessInstance();
    ……
    long id = newRequest();

    NullPointerException異常!!
    換了hibernate3.1也不行
    2007-09-05 14:38 | liumingrui

    # re: jBPM開發(fā)入門指南(4)   回復(fù)  更多評論   

    強烈推薦去看看jboss seam里DvdStore的例子,是系統(tǒng)集成jbpm
    2008-06-05 10:37 | rock_soft

    # re: jBPM開發(fā)入門指南(4) [未登錄]  回復(fù)  更多評論   

    我現(xiàn)在迷糊了,要運行出什么樣的結(jié)果才是正確了呢?在JUnit面板中顯示Failures:1。那就是說失敗了吧,最后結(jié)果打印出了id=1. 如果運行成功了,效果是什么樣子的呢?
    2008-09-23 15:11 | 小鳥

    # re: jBPM開發(fā)入門指南(4) [未登錄]  回復(fù)  更多評論   

    呵呵,我知道為什么了。在這個地方assertEquals(" 我要請假 " , ci.getVariable("note"));,我要請假前后有空格,跟ci.getVariable("note"取的值不相等,所以就錯了。
    2008-09-23 15:25 | 小鳥

    # re: jBPM開發(fā)入門指南(4)   回復(fù)  更多評論   

    public void testNewRequest() { 方法出錯 請問怎么解決啊 急!!!!!!!!!!!!!!!
    2009-07-24 17:34 |

    # re: jBPM開發(fā)入門指南(4)   回復(fù)  更多評論   

    public void testNewRequest() { 方法出錯 請問怎么解決啊 急!!!!!!!!!!!!!!!
    2009-07-24 17:34 |

    # re: jBPM開發(fā)入門指南(4)   回復(fù)  更多評論   

    見教了,好容易入門,呵呵,希望還有更好的工作流例子,共享下
    2009-09-12 11:40 | zw7534313
    主站蜘蛛池模板: caoporn成人免费公开| 国产亚洲精品线观看动态图| 成av免费大片黄在线观看| 91在线亚洲综合在线| 亚洲av福利无码无一区二区| 免费大黄网站在线看| 卡一卡二卡三在线入口免费| 99re6在线视频精品免费下载| 日亚毛片免费乱码不卡一区 | a级特黄毛片免费观看| 色网站在线免费观看| 亚洲人成色99999在线观看| 亚洲激情校园春色| 亚洲三级电影网站| 亚洲精品无码乱码成人| ZZIJZZIJ亚洲日本少妇JIZJIZ| 日韩在线a视频免费播放| 久久电影网午夜鲁丝片免费| 国产亚洲精品美女久久久久| 亚洲国产成人精品无码区在线秒播| 女人张开腿等男人桶免费视频| 88av免费观看入口在线| 国产精品99久久免费观看| 中国黄色免费网站| 国产精品免费久久| 成人久久久观看免费毛片| 免费一级毛suv好看的国产网站 | h在线观看视频免费网站| 亚洲免费在线视频| 少妇太爽了在线观看免费视频| 东方aⅴ免费观看久久av| 国产羞羞的视频在线观看免费| 中文字幕成人免费高清在线视频 | 国产一卡二卡四卡免费| 亚洲香蕉免费有线视频| 国产精品久久久久久亚洲小说 | 黄色成人网站免费无码av| 搡女人真爽免费视频大全| 女人与禽交视频免费看| 国产精品久久久久影院免费| 国产精品公开免费视频|