亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線(xiàn)實(shí)戰(zhàn)洞察。

JCo 3連接SAP系統(tǒng)實(shí)戰(zhàn):環(huán)境搭建、RFC調(diào)用與避坑指南

JCo 3連接SAP系統(tǒng)實(shí)戰(zhàn):環(huán)境搭建、RFC調(diào)用與避坑指南 簡(jiǎn)介這是一份面向Java開(kāi)發(fā)者的SAP JCoSAP Java Connector集成組件包用于解決Java應(yīng)用程序與SAP系統(tǒng)之間的通信與遠(yuǎn)程函數(shù)調(diào)用問(wèn)題。壓縮包共5個(gè)文件大小僅3.06MB包含32位與64位兩個(gè)版本的sapjco3.dll動(dòng)態(tài)鏈接庫(kù)分別存放于X86與X64目錄適配不同操作系統(tǒng)架構(gòu)另有txt說(shuō)明文檔、htm幫助頁(yè)面以及一個(gè)DLL工具exe方便完成dll注冊(cè)、修復(fù)與配置。已有278人學(xué)習(xí)下載。借助該包開(kāi)發(fā)者可以快速定位所需位數(shù)的dll文件按文檔指引配置JCo環(huán)境變量與類(lèi)路徑并在Java代碼中建立SAP連接、調(diào)用BAPI或RFC函數(shù)模塊。對(duì)于正在搭建Java與SAP集成環(huán)境、或需要排查sapjco3.dll加載異常的人員這份資源能提供直接可用的文件與配套說(shuō)明減少?gòu)腟AP官方渠道獲取組件的等待時(shí)間。1. JCo 3 到底是什么Java 程序連目標(biāo)系統(tǒng)前先把它講透做過(guò)企業(yè)應(yīng)用集成的開(kāi)發(fā)者大概率都碰過(guò)這樣一個(gè)包一個(gè)壓縮文件里躺著兩個(gè)文件一個(gè)文件名后綴是 jar另一個(gè)是 dll 或 so。這個(gè)包就是 JCo 3也就是 Java Connector 3Java 語(yǔ)言連接目標(biāo)業(yè)務(wù)系統(tǒng)的官方中間件組件。很多剛接觸的開(kāi)發(fā)者把壓縮包一解壓就直接往 classpath 里丟 jar結(jié)果一運(yùn)行就報(bào) native library 加載失敗或者版本不匹配連第一步都邁不過(guò)去。這篇文章從環(huán)境搭建、連接代碼、參數(shù)配置到踩坑記錄完整拆解 JCo 3 的正確用法定位是讓你照著操作就能把連接跑起來(lái)并且知道失敗時(shí)該看哪里。這套組件適合誰(shuí)正在寫(xiě) Java 與目標(biāo)系統(tǒng)接口的開(kāi)發(fā)者維護(hù)老系統(tǒng)接口的程序員以及負(fù)責(zé) ETL 數(shù)據(jù)同步的數(shù)據(jù)工程師。它不是那種裝完就能自動(dòng)干活的框架而是需要你理解 native 加載機(jī)制、連接池配置和異常分類(lèi)的中間件。下面直接進(jìn)入正題。2. 搭建運(yùn)行環(huán)境版本選擇、目錄規(guī)劃與 dll/so 加載機(jī)制2.1 版本選型32 位還是 64 位先看 jvm.arch 再動(dòng)手不少開(kāi)發(fā)者翻車(chē)的第一個(gè)地方是位版本選錯(cuò)。注意JCo 3 的 jar 包內(nèi)嵌的是 native 層調(diào)用jar 本身不分位數(shù)但 dll/so 文件嚴(yán)格區(qū)分 32 位和 64 位。判斷標(biāo)準(zhǔn)很簡(jiǎn)單查看 JVM 的位數(shù)而不是操作系統(tǒng)的位數(shù)。很多 Windows 上裝了 64 位操作系統(tǒng)但 JDK 裝的是 32 位版本這時(shí)候就必須要 32 位的 dll。驗(yàn)證當(dāng)前 JVM 位數(shù)在命令行運(yùn)行java -version如果輸出里帶 64-Bit 字樣那就是 64 位 JVM如果沒(méi)帶需要進(jìn)一步確認(rèn)。更穩(wěn)妥的方法是在 Java 代碼里打印系統(tǒng)屬性public class JvmArchCheck { public static void main(String[] args) { // os.arch 返回的是 JVM 架構(gòu)而不是操作系統(tǒng)架構(gòu) String arch System.getProperty(os.arch); System.out.println(JVM arch arch); // 常見(jiàn)輸出amd6464位、x8632位 } }代碼邏輯說(shuō)明System.getProperty(os.arch)拿到的是當(dāng)前 JVM 運(yùn)行時(shí)的架構(gòu)標(biāo)識(shí)。amd64代表 64 位x86代表 32 位。這個(gè)屬性是 JVM 啟動(dòng)時(shí)確定的不管你操作系統(tǒng)是什么版本JVM 是什么位數(shù)它就返回什么。參數(shù)說(shuō)明os.arch是系統(tǒng)屬性不是環(huán)境變量不需要額外配置。如果你在容器里跑 Java 應(yīng)用同樣以容器內(nèi) JVM 位數(shù)為準(zhǔn)別拿宿主機(jī)配置來(lái)判斷。我一般會(huì)在拿到 JCo 3 安裝包后的第一件事就是先跑這段代碼把位數(shù)確認(rèn)了再?zèng)Q定用哪個(gè) dll。這一步走錯(cuò)后面所有配置都白搭。2.2 目錄規(guī)劃與加載原理java.library.path 是怎么找 dll 的dll/so 文件并不是放進(jìn)項(xiàng)目的 resources 目錄就能被加載的。Java 通過(guò)System.loadLibrary()加載 native 庫(kù)搜索路徑由java.library.path系統(tǒng)屬性決定默認(rèn)情況下它會(huì)搜索當(dāng)前目錄、PATH環(huán)境變量包含的目錄以及 Windows 的System32目錄。很多教程推薦把 dll 丟進(jìn)System32這確實(shí)能跑通但不推薦。原因有三第一污染系統(tǒng)目錄卸載不干凈第二多個(gè)項(xiàng)目需要不同版本 dll 時(shí)會(huì)沖突第三服務(wù)器環(huán)境通常沒(méi)有 System32 的寫(xiě)權(quán)限。我常用的目錄結(jié)構(gòu)是這樣的D:\app-integration\ |-- lib\ | |-- sapjco3.jar | |-- sapjco3.dll # Windows 64位 | |-- sapjco3.so # Linux 64位如果部署到服務(wù)器 |-- bin\ | |-- start.bat # 啟動(dòng)腳本 |-- logs\啟動(dòng)腳本里通過(guò)-Djava.library.path指定 dll 所在目錄而不是依賴(lài)系統(tǒng) PATHjava -Djava.library.pathD:\app-integration\lib -cp D:\app-integration\lib\sapjco3.jar;D:\app-integration\bin com.example.MyJcoClient參數(shù)說(shuō)明-Djava.library.path指定 native 庫(kù)搜索路徑多個(gè)路徑用分號(hào)分隔Windows或冒號(hào)分隔Linux。-cp指定 classpathjar 包路徑必須包含在內(nèi)。這種做法的好處是項(xiàng)目自帶 runtime 環(huán)境換機(jī)器部署時(shí)只需要把整個(gè)目錄拷過(guò)去改一下路徑就行。2.3 最小安裝清單與驗(yàn)證命令完整的最小運(yùn)行環(huán)境包含以下部分缺一不可組件說(shuō)明備注JDK8 或 11 均可64 位 JDK 配 64 位 dllsapjco3.jarJava 側(cè) API放入 classpathsapjco3.dll / .sonative 連接庫(kù)通過(guò) -Djava.library.path 指定目標(biāo)系統(tǒng)連接信息應(yīng)用服務(wù)器地址、客戶(hù)端、賬號(hào)用于 JCoDestination 配置安裝完成后用 JCo 自帶的方法驗(yàn)證 native 庫(kù)是否加載成功import com.sap.conn.jco.JCo; public class JCoVersionCheck { public static void main(String[] args) { try { // JCo.getVersion() 返回版本信息能正常執(zhí)行說(shuō)明 native 庫(kù)已成功加載 System.out.println(JCo version: JCo.getVersion()); } catch (UnsatisfiedLinkError e) { // 拋出這個(gè)異常說(shuō)明 dll/so 沒(méi)找到或者位數(shù)不匹配 System.err.println(Native library load failed: e.getMessage()); } } }代碼邏輯說(shuō)明JCo.getVersion()是靜態(tài)方法內(nèi)部會(huì)觸發(fā) native 庫(kù)的初始化。如果這一步能正常輸出版本號(hào)說(shuō)明 jar 和 dll 的配對(duì)沒(méi)問(wèn)題。UnsatisfiedLinkError是典型的 native 加載失敗異常出現(xiàn)這個(gè)錯(cuò)誤時(shí)優(yōu)先檢查位數(shù)匹配和java.library.path路徑。運(yùn)行結(jié)果預(yù)期是輸出類(lèi)似 3.x 的版本號(hào)。如果這里過(guò)了環(huán)境搭建就算成功了。3. 第一個(gè)連接程序從 ClassPath 配置到 RFC 調(diào)用3.1 編寫(xiě)最小連接代碼環(huán)境就緒后下一步是寫(xiě)一個(gè)能真正連接目標(biāo)系統(tǒng)的程序。JCo 3 的編程模型核心接口是JCoDestination它代表一個(gè)可復(fù)用的連接配置。最簡(jiǎn)陋的寫(xiě)法是硬編碼配置import com.sap.conn.jco.JCoDestination; import com.sap.conn.jco.JCoDestinationManager; import com.sap.conn.jco.JCoException; public class SimplePing { public static void main(String[] args) { try { // 通過(guò)連接配置名稱(chēng)獲取 JCoDestination 實(shí)例 // 這個(gè)名稱(chēng)必須在配置文件里存在否則拋 JCoException JCoDestination dest JCoDestinationManager.getDestination(DEV_SYSTEM); // ping 目標(biāo)系統(tǒng)驗(yàn)證連接是否可用 dest.ping(); System.out.println(Connection successful!); // 獲取連接屬性打印出來(lái)確認(rèn)連的是哪套環(huán)境 System.out.println(Host: dest.getProperties().getString(jco.client.ashost)); System.out.println(Client: dest.getProperties().getString(jco.client.client)); } catch (JCoException e) { // JCoException 包含錯(cuò)誤碼關(guān)鍵信息在 e.getGroup() 和 e.getKey() System.err.println(Connection failed, error code: e.getGroup()); System.err.println(Error key: e.getKey()); e.printStackTrace(); } } }代碼邏輯說(shuō)明JCoDestinationManager.getDestination()根據(jù)名稱(chēng)查找配置文件里定義的連接返回的JCoDestination是線(xiàn)程安全的可以復(fù)用到多個(gè)線(xiàn)程。dest.ping()向目標(biāo)系統(tǒng)發(fā)送一個(gè)輕量級(jí)探測(cè)包用來(lái)確認(rèn)網(wǎng)絡(luò)和登錄配置是否正常這是排查連接問(wèn)題最直接的手段。參數(shù)說(shuō)明DEV_SYSTEM是連接配置名來(lái)源于下面的屬性文件不是隨便起的名。getProperties()返回該連接的完整屬性集合調(diào)試時(shí)可以用它快速確認(rèn)當(dāng)前連接用的是哪臺(tái)服務(wù)器、哪個(gè)客戶(hù)端。3.2 連接參數(shù)詳解從屬性文件到連接池參數(shù)實(shí)際項(xiàng)目中不會(huì)把連接信息硬編碼在 Java 代碼里。JCo 3 的標(biāo)準(zhǔn)做法是用屬性文件文件名格式是[配置名].jcoDestination放在 classpath 下。例如上面代碼里的DEV_SYSTEM對(duì)應(yīng)創(chuàng)建一個(gè)文件名為DEV_SYSTEM.jcoDestination的文件# 目標(biāo)系統(tǒng)應(yīng)用服務(wù)器地址 jco.client.ashost192.168.1.20 # 系統(tǒng)編號(hào)用于計(jì)算連接端口 jco.client.sysnr00 # 網(wǎng)關(guān)服務(wù)端口一般不需要手動(dòng)指定 jco.client.gwserv # 客戶(hù)端編號(hào)三位數(shù)字 jco.client.client800 # 登錄賬號(hào) jco.client.userINTEGRATION_USER # 登錄密碼 jco.client.passwdSecret123 # 語(yǔ)言代碼ZH 或 EN jco.client.langZH # 連接池最大連接數(shù)超過(guò)這個(gè)數(shù)系統(tǒng)會(huì)排隊(duì)等待 jco.dest.pool_capacity10 # 單連接最大并發(fā)請(qǐng)求數(shù) jco.dest.peak_limit10 # 連接池回收時(shí)間單位毫秒 jco.dest.expiration_time300000 # 連接過(guò)期策略默認(rèn)是池內(nèi)連接按空閑時(shí)間回收 jco.dest.expiration_check_period60000參數(shù)說(shuō)明jco.client.ashost和jco.client.sysnr是必填項(xiàng)系統(tǒng)會(huì)根據(jù)sysnr自動(dòng)計(jì)算 RFC 端口號(hào)端口號(hào)公式為3xx00xx 是系統(tǒng)編號(hào)常見(jiàn)的是3300和3600。jco.client.client是三位數(shù)客戶(hù)端號(hào)登錄時(shí)必須匹配。jco.dest.pool_capacity和jco.dest.peak_limit分別控制連接池總量和單連接并發(fā)量這兩個(gè)參數(shù)對(duì)并發(fā)調(diào)用影響很大后面單獨(dú)講。屬性文件必須放在 classpath 路徑下如果放在 resources 目錄構(gòu)建時(shí)會(huì)自動(dòng)打包進(jìn) jar。也可以用-Djco.destinations.dev_systempath/to/file的方式外部指定但常規(guī)項(xiàng)目用 classpath 就夠了。3.3 調(diào)用 BAPI 與 RFC 函數(shù)的基本流程連接通了之后實(shí)際業(yè)務(wù)調(diào)用通常分兩步調(diào)用系統(tǒng)自帶函數(shù)做連通性測(cè)試再調(diào)用自定義 RFC 函數(shù)獲取業(yè)務(wù)數(shù)據(jù)。連通性測(cè)試常用系統(tǒng)函數(shù)RFC_PING和BAPI_USER_GET_DETAIL用法如下import com.sap.conn.jco.*; public class RfcCallExample { public static void main(String[] args) throws JCoException { JCoDestination dest JCoDestinationManager.getDestination(DEV_SYSTEM); // 第一步獲取目標(biāo)系統(tǒng)函數(shù)模板 JCoFunction function dest.getRepository().getFunction(BAPI_USER_GET_DETAIL); if (function null) { throw new RuntimeException(Function not found in remote system); } // 第二步設(shè)置導(dǎo)入?yún)?shù)用戶(hù)名是必輸項(xiàng) function.getImportParameterList().setValue(USERNAME, INTEGRATION_USER); // 第三步執(zhí)行調(diào)用內(nèi)部走 RFC 協(xié)議 function.execute(dest); // 第四步檢查返回結(jié)構(gòu) JCoStructure returnStruct function.getExportParameterList().getStructure(RETURN); String type returnStruct.getString(TYPE); if (E.equals(type) || A.equals(type)) { // E 代表錯(cuò)誤A 代表異常終止 System.err.println(Call failed: returnStruct.getString(MESSAGE)); } else { // 第五步讀取業(yè)務(wù)數(shù)據(jù) JCoFieldIterator it function.getExportParameterList().getFieldIterator(); while (it.hasNextField()) { JCoField field it.nextField(); System.out.println(field.getName() field.getValue()); } } } }代碼邏輯說(shuō)明調(diào)用 RFC 函數(shù)的流程是固定的四步從destination.getRepository()獲取函數(shù)元數(shù)據(jù)模板設(shè)置導(dǎo)入?yún)?shù)執(zhí)行execute(dest)然后從導(dǎo)出參數(shù)中取返回值。RETURN結(jié)構(gòu)是所有 BAPI 函數(shù)的統(tǒng)一返回格式TYPE字段值為S成功、E錯(cuò)誤、W警告、A異常終止。處理業(yè)務(wù)返回前必須先看TYPE不要盲目從參數(shù)里取數(shù)據(jù)這是經(jīng)驗(yàn)之談。參數(shù)說(shuō)明getImportParameterList().setValue(USERNAME, ...)設(shè)置函數(shù)導(dǎo)入?yún)?shù)getExportParameterList().getStructure(RETURN)獲取返回結(jié)構(gòu)體。如果函數(shù)參數(shù)名拼錯(cuò)JCo 會(huì)在運(yùn)行時(shí)拋JCoRuntimeException提示 field not found這是排查參數(shù)名問(wèn)題的關(guān)鍵線(xiàn)索。4. JCoDestination 進(jìn)階用法連接池、線(xiàn)程安全與異常分類(lèi)4.1 自定義連接工廠與連接池參數(shù)調(diào)優(yōu)JCo 3 默認(rèn)的連接池管理由框架自己控制但生產(chǎn)環(huán)境里我一般會(huì)做一個(gè)輕量封裝把連接配置外部化同時(shí)加上監(jiān)控。核心點(diǎn)是理解兩個(gè)關(guān)鍵參數(shù)pool_capacity和peak_limit。這兩個(gè)參數(shù)的關(guān)系容易混淆。pool_capacity是連接池里最多存放的空閑連接數(shù)peak_limit是單個(gè)物理連接上能同時(shí)執(zhí)行的并發(fā)請(qǐng)求數(shù)量。假設(shè)pool_capacity10、peak_limit10理論最大并發(fā)量是 100。但如果每個(gè)請(qǐng)求都很快毫秒級(jí)10 個(gè)物理連接足夠支撐幾十個(gè)線(xiàn)程并發(fā)如果請(qǐng)求里有慢事務(wù)秒級(jí)或分鐘級(jí)就要適當(dāng)調(diào)大peak_limit和pool_capacity。我一般會(huì)封裝一個(gè)簡(jiǎn)單的連接管理類(lèi)import com.sap.conn.jco.JCoDestination; import com.sap.conn.jco.JCoDestinationManager; import com.sap.conn.jco.JCoException; public class DestinationProvider { // 使用 volatile 確保多線(xiàn)程下可見(jiàn)性 private static volatile JCoDestination dest; private DestinationProvider() { } // 雙重檢查鎖單例模式避免重復(fù)創(chuàng)建 JCoDestination public static JCoDestination getDestination() throws JCoException { if (dest null) { synchronized (DestinationProvider.class) { if (dest null) { dest JCoDestinationManager.getDestination(DEV_SYSTEM); } } } return dest; } // 獲取當(dāng)前連接池狀態(tài)監(jiān)控用 public static String getPoolStatus() { // JCoDestinationManager.getDestination 返回的對(duì)象內(nèi)部包含連接池統(tǒng)計(jì) return dest.toString(); } }代碼邏輯說(shuō)明JCoDestination實(shí)例是線(xiàn)程安全的內(nèi)部有連接池管理不需要每次調(diào)用都重新創(chuàng)建。用單例模式包裝后全局共享一個(gè)JCoDestination就夠了。volatile加雙重檢查鎖是為了防止并發(fā)下重復(fù)初始化。參數(shù)說(shuō)明pool_capacity、peak_limit的合理值需要結(jié)合目標(biāo)系統(tǒng)的 RFC 網(wǎng)關(guān)線(xiàn)程上限來(lái)定。一般建議pool_capacity設(shè)置在 5 到 20 之間peak_limit設(shè)置在 5 到 30 之間。過(guò)大的連接池會(huì)占用目標(biāo)系統(tǒng)側(cè)的 RFC 線(xiàn)程資源反而拖慢整體性能。4.2 長(zhǎng)事務(wù)與事務(wù)邊界處理RFC 調(diào)用默認(rèn)是同步短事務(wù)模式每一個(gè)execute()調(diào)用獨(dú)立提交。但有些業(yè)務(wù)場(chǎng)景需要在一個(gè)事務(wù)里連續(xù)調(diào)用多個(gè)函數(shù)要么全部成功要么全部回滾。JCo 3 提供了事務(wù)支持但很多人沒(méi)用對(duì)。import com.sap.conn.jco.*; public class TransactionExample { public static void main(String[] args) { JCoDestination dest JCoDestinationManager.getDestination(DEV_SYSTEM); // 創(chuàng)建事務(wù)上下文所有函數(shù)調(diào)用會(huì)綁定到這個(gè)事務(wù)上 JCoContext.begin(dest); try { // 第一個(gè)調(diào)用 JCoFunction f1 dest.getRepository().getFunction(BAPI_GOODSMVT_CREATE); f1.getImportParameterList().setValue(DOCUMENTHEADER, createDocumentHeader()); f1.execute(dest); // 第二個(gè)調(diào)用 JCoFunction f2 dest.getRepository().getFunction(BAPI_TRANSACTION_COMMIT); f2.getImportParameterList().setValue(WAIT, X); f2.execute(dest); } catch (JCoException e) { // 出錯(cuò)時(shí)回滾事務(wù) JCoFunction rollback dest.getRepository().getFunction(BAPI_TRANSACTION_ROLLBACK); rollback.execute(dest); System.err.println(Transaction rolled back: e.getKey()); } finally { // 結(jié)束事務(wù)上下文釋放連接 JCoContext.end(dest); } } }代碼邏輯說(shuō)明JCoContext.begin(dest)開(kāi)啟一個(gè)事務(wù)上下文之后的函數(shù)調(diào)用都進(jìn)入同一個(gè) RFC 會(huì)話(huà)直到JCoContext.end(dest)結(jié)束。在這個(gè)上下文里的所有調(diào)用必須顯式提交或回滾常見(jiàn)做法是最后調(diào)BAPI_TRANSACTION_COMMIT提交出異常時(shí)調(diào)BAPI_TRANSACTION_ROLLBACK回滾。關(guān)鍵注意點(diǎn)事務(wù)上下文開(kāi)啟期間JCo 會(huì)獨(dú)占一個(gè)物理連接不會(huì)再?gòu)倪B接池分配其他連接給這個(gè)請(qǐng)求。也就是說(shuō)事務(wù)內(nèi)的所有調(diào)用用的是同一個(gè)后端會(huì)話(huà)這是保證事務(wù)一致性的前提。忘記調(diào)用JCoContext.end()會(huì)導(dǎo)致連接泄漏這是生產(chǎn)環(huán)境最常見(jiàn)的坑之一。4.3 異常分類(lèi)與處理策略JCo 3 的異常體系不算復(fù)雜但分類(lèi)邊界值得說(shuō)清楚異常類(lèi)觸發(fā)場(chǎng)景處理策略JCoException連接失敗、登錄失敗、函數(shù)不存在檢查網(wǎng)絡(luò)、賬號(hào)權(quán)限、函數(shù)名拼寫(xiě)AbapException目標(biāo)系統(tǒng)業(yè)務(wù)邏輯報(bào)錯(cuò)從RETURN結(jié)構(gòu)中取具體錯(cuò)誤消息JCoRuntimeException參數(shù)類(lèi)型錯(cuò)誤、字段不存在檢查代碼里的字段名是否拼寫(xiě)正確UnsatisfiedLinkErrordll 加載失敗、位數(shù)不匹配重新檢查環(huán)境配置處理異常時(shí)的統(tǒng)一原則區(qū)分系統(tǒng)異常和業(yè)務(wù)異常。JCoException是連接層問(wèn)題重試沒(méi)有意義應(yīng)該報(bào)警AbapException是業(yè)務(wù)層拒絕需要根據(jù)錯(cuò)誤消息調(diào)整參數(shù)或流程。try { function.execute(dest); } catch (AbapException e) { // AbapException 表示目標(biāo)系統(tǒng)主動(dòng)返回了錯(cuò)誤結(jié)構(gòu) JCoStructure keyData e.getKey(); System.err.println(Business error, type: keyData.getString(TYPE)); } catch (JCoException e) { // JCoException 表示連接或通信層出了問(wèn)題 if (e.getGroup() JCoException.GROUP_COMMUNICATION) { System.err.println(Network issue, retry later); } else if (e.getGroup() JCoException.GROUP_APPLICATION) { System.err.println(Application error, check auth); } }代碼邏輯說(shuō)明AbapException和JCoException是兩個(gè)獨(dú)立的異常層級(jí)前者對(duì)應(yīng)業(yè)務(wù)錯(cuò)誤后者對(duì)應(yīng)技術(shù)錯(cuò)誤。e.getKey()返回的是目標(biāo)系統(tǒng)返回的錯(cuò)誤詳情結(jié)構(gòu)體包含類(lèi)型、消息、消息號(hào)等信息。e.getGroup()提供更細(xì)粒度的錯(cuò)誤分組GROUP_COMMUNICATION表示通信故障GROUP_APPLICATION表示目標(biāo)系統(tǒng)側(cè)的應(yīng)用程序錯(cuò)誤。5. 避坑專(zhuān)題裝完連不上的五個(gè)典型踩坑記錄5.1 64 位 JDK 配 32 位 dll加載時(shí)報(bào)錯(cuò)現(xiàn)象程序啟動(dòng)時(shí)報(bào)UnsatisfiedLinkError: sapjco3.dll: Cant load AMD 64-bit .dll on a IA 32-bit platform或者反過(guò)來(lái)報(bào)Cant load IA 32-bit .dll on a AMD 64-bit platform。原因jar 包不分位數(shù)但 native 庫(kù)嚴(yán)格區(qū)分。安裝包里的 dll 是 32 位還是 64 位可以在文件屬性里查看或者看文件大小通常 64 位版本稍大。最常見(jiàn)的翻車(chē)場(chǎng)景是服務(wù)器是 64 位 Windows默認(rèn)以為要用 64 位 dll但項(xiàng)目里 JDK 實(shí)際是 32 位。解決先跑第 2 章里的JvmArchCheck確認(rèn) JVM 位數(shù)然后從安裝包里選擇匹配的 dll。如果項(xiàng)目用的是 32 位 JDK換 64 位 JDK 時(shí)還要檢查是否有第三方依賴(lài)同樣存在位數(shù)限制。5.2 classloader 重復(fù)加載導(dǎo)致 native library 沖突現(xiàn)象同一 JVM 里多個(gè) web 應(yīng)用都引用了 sapjco3.jar 和 dll啟動(dòng)第二個(gè)應(yīng)用時(shí)報(bào)java.lang.UnsatisfiedLinkError: native library already loaded in another classloader。原因Java 的 native 庫(kù)加載機(jī)制要求同一個(gè) JVM 進(jìn)程中一個(gè) native 庫(kù)只能被加載一次。web 容器里每個(gè) webapp 有自己的 classloader第一個(gè)應(yīng)用加載了 dll 之后第二個(gè)應(yīng)用再次加載就會(huì)報(bào)沖突。解決把 sapjco3.jar 放到 web 容器的公共 lib 目錄如 Tomcat 的lib/而不是放在每個(gè)應(yīng)用的WEB-INF/lib下。如果容器不支持公共 classloader就做一個(gè)單獨(dú)的獨(dú)立服務(wù)把 JCo 調(diào)用包成 HTTP 接口讓業(yè)務(wù)系統(tǒng)通過(guò)接口調(diào)用這樣能徹底規(guī)避 classloader 沖突。5.3 連接成功但中文亂碼現(xiàn)象調(diào)用BAPI_USER_GET_DETAIL時(shí)返回的用戶(hù)名稱(chēng)字段顯示為亂碼但英文內(nèi)容正常。原因jco.client.langZH設(shè)置了中文語(yǔ)言代碼但目標(biāo)系統(tǒng)的代碼頁(yè)codepage與 Java 側(cè)的字符編碼不一致。目標(biāo)系統(tǒng)一般用 UTF-8 封裝傳輸默認(rèn)代碼頁(yè)是 4103UTF-8或 1100Latin-1如果不匹配就會(huì)亂碼。解決確認(rèn)連接屬性里設(shè)置jco.client.langZH同時(shí)檢查目標(biāo)系統(tǒng)側(cè)的 profile 參數(shù)rdisp/codepage是否為 4103。如果是舊系統(tǒng)用的非 Unicode 代碼頁(yè)Java 側(cè)需要在讀取字符串后手動(dòng)做編碼轉(zhuǎn)換但這屬于最后手段優(yōu)先推動(dòng)目標(biāo)系統(tǒng)啟用 UTF-8。5.4 網(wǎng)關(guān)連接被拒PING 失敗現(xiàn)象dest.ping()拋出JCoException錯(cuò)誤組GROUP_COMMUNICATION錯(cuò)誤信息里能看到類(lèi)似connection refused的字樣。原因目標(biāo)系統(tǒng)的 RFC 網(wǎng)關(guān)沒(méi)有啟動(dòng)或者防火墻屏蔽了 RFC 端口。sysnr對(duì)應(yīng)的端口計(jì)算錯(cuò)了也會(huì)導(dǎo)致這個(gè)問(wèn)題例如sysnr00對(duì)應(yīng)端口是3300sysnr01是3301以此類(lèi)推。解決在命令行測(cè)試端口連通性用telnet或nc# 假設(shè)系統(tǒng)編號(hào) 00端口號(hào)為 3300 nc -zv 192.168.1.20 3300如果端口不通檢查目標(biāo)系統(tǒng)網(wǎng)關(guān)進(jìn)程是否啟動(dòng)、防火墻是否放行。nc -vz的z參數(shù)表示只掃描不發(fā)送數(shù)據(jù)v顯示詳細(xì)信息。如果端口通了但 ping 仍失敗就需要檢查目標(biāo)系統(tǒng)側(cè)的賬號(hào)鎖定狀態(tài)或權(quán)限參數(shù)。5.5 jar 包與 dll 版本混用現(xiàn)象程序能正常加載 native 庫(kù)但調(diào)用函數(shù)時(shí)拋JCoRuntimeException提示version mismatch或函數(shù)執(zhí)行失敗。原因某次升級(jí)時(shí)只替換了 jar 包沒(méi)同步替換 dll。JCo 3 的 jar 和 dll 是配套發(fā)布的兩者之間有版本匹配校驗(yàn)混用時(shí)會(huì)拋錯(cuò)。解決始終保持 jar 與 dll 從同一次發(fā)布中獲取。下載時(shí)選擇完整包不要從不同渠道拼接文件。如果項(xiàng)目里多個(gè)模塊引用了不同來(lái)源的 JCo 版本建議統(tǒng)一到同一個(gè)版本并檢查依賴(lài)樹(shù)里是否有傳遞依賴(lài)引入舊版本。6. 調(diào)優(yōu)與驗(yàn)證從能連上到穩(wěn)定不崩上線(xiàn)前必走的五步檢查連接跑通只是第一步生產(chǎn)環(huán)境要的是穩(wěn)定。我在每次上線(xiàn)前都會(huì)強(qiáng)制自己過(guò)一遍下面這五步這套流程幫我排掉過(guò)不少潛在問(wèn)題現(xiàn)在也分享出來(lái)。第一驗(yàn)證連接池參數(shù)與并發(fā)量的匹配關(guān)系。用JCoDestinationManager.getDestination()拿到連接后打印toString()確認(rèn)pool_capacity和peak_limit的實(shí)際生效值。再用壓測(cè)工具模擬并發(fā)請(qǐng)求觀察目標(biāo)系統(tǒng)側(cè)是否會(huì)報(bào) RFC 線(xiàn)程資源不足。如果并發(fā)超過(guò)預(yù)期先調(diào)連接池參數(shù)不要急著改代碼。第二開(kāi)啟 JCo 運(yùn)行時(shí)日志。按屬性配置的方式更簡(jiǎn)單加一個(gè)系統(tǒng)屬性jco.runtime.logDEBUG但注意啟動(dòng)后輸出量非常大只建議在排障時(shí)短時(shí)間開(kāi)啟。java -Djco.runtime.logDEBUG -Djava.library.pathD:\app-integration\lib -cp D:\app-integration\lib\sapjco3.jar;D:\app-integration\bin com.example.MyJcoClient-Djco.runtime.log是 JCo 框架自帶的日志開(kāi)關(guān)DEBUG級(jí)別會(huì)打印每個(gè) RFC 請(qǐng)求的發(fā)送與響應(yīng)內(nèi)容。生產(chǎn)環(huán)境不要開(kāi)調(diào)試時(shí)開(kāi)完立即關(guān)掉。第三檢查連接池是否有泄漏。重點(diǎn)排查事務(wù)代碼塊里有沒(méi)有遺漏JCoContext.end()。經(jīng)驗(yàn)值是觀察程序運(yùn)行一段時(shí)間后目標(biāo)系統(tǒng)的SMGW事務(wù)里 RFC 連接數(shù)是否持續(xù)增長(zhǎng)如果是說(shuō)明代碼里存在連接未釋放的問(wèn)題。第四驗(yàn)證異常分支的日志完整性。故意用一個(gè)不存在的函數(shù)名跑一次調(diào)用確認(rèn)日志里能記錄到JCoException且不會(huì)導(dǎo)致主線(xiàn)程崩潰。再故意用一個(gè)無(wú)權(quán)限的賬號(hào)跑一次登錄確認(rèn)日志里能看到GROUP_APPLICATION類(lèi)型的錯(cuò)誤。這兩條分支不驗(yàn)證生產(chǎn)環(huán)境第一次出問(wèn)題時(shí)現(xiàn)場(chǎng)日志往往不足以定位。第五觸發(fā)一次真實(shí)的連接中斷測(cè)試。在程序運(yùn)行期間手動(dòng)停掉目標(biāo)系統(tǒng)的網(wǎng)關(guān)進(jìn)程觀察 Java 程序側(cè)的表現(xiàn)連接池里的連接會(huì)不會(huì)自動(dòng)失效下一次調(diào)用會(huì)不會(huì)重新建立連接正常情況下目標(biāo)系統(tǒng)不可達(dá)時(shí)execute()會(huì)拋出JCoException代碼里要做捕獲和重試。沒(méi)有這個(gè)分支線(xiàn)上突然斷一次網(wǎng)整個(gè)服務(wù)就要重啟才能恢復(fù)。從那以后我每次切換環(huán)境或者升級(jí) JCo 版本都會(huì)強(qiáng)制走一遍這五步檢查寧可多花半小時(shí)驗(yàn)證也不愿上線(xiàn)后半夜被電話(huà)叫醒。這套流程不只是為了 JCo連接外部系統(tǒng)的中間件項(xiàng)目都值得這樣過(guò)一遍。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
宗合情欲网| 国产极品精品美女视频| 久久激情四射婷婷丁香五月天| 亚洲成人免费电影| 欧美日韩日产免费网站看| 玖日综合网| 麻豆一区在线| 亚殴在线| 亚洲日本韩国在线| 熟女色综合久久| 超碰九区| 男女一进一出视频久久| 亚洲清纯唯美| 亚洲av热热色| 91久热这里只有精品| 欧美日韩国产三级黄色| 91天天综合网| 91熟女视频网| 色五月第四色| 久久伊人青青草| 丰满人妻无码一区二区三区| 日日夜夜精品| 午夜视频黄| 中文字幕乱亚洲美女精品一区| 嗯嗯啊好大| 超碰色中文| 91久久99久久91熟女精品| 在线岛| 亚洲天天更新| 97伊人网| 成人av毛片在线观看| 久久高潮妇女视频| 亚洲人妻日日日| 偷拍亚洲情色| 欧洲亚洲人妻无码久久三区四区| 国产吹潮女在线观看| 久久爱超碰网| 亚洲Av诱惑| 欧美日韩国产色五月综合在线| 日本黄色裸日本黄色裸体 | 亚州色交| 天天影视网综合少妇| 天天插天天插| 狠插 制服 自拍| 黄色乱论网站| 欧美日日夜夜| 成熟熟女国产精品一区二区| 插B在线观看| 91伊人久久在线| 中文字幕av丝袜| 美女AV一区二区| 国产白嫩精品久久| 精品国产乱码久久久久久日本公司| 性性久久| 亚洲男人天堂网站| 97爱综合| 人妻一区二区三区视频| 99久久综合网| 啊啊啊啊啊在线观看网址| 麻豆精品久久久久久久| 亚洲AV免费在线观看| 中文字幕精品丝袜| 亚洲欧洲激情| 亚洲成aⅴ人片不卡无码| 久久欲| 久操凹凸视频| 桃色五月天| 欧美综合骚| 久操B网| 97欧美精品综合| 国产第二页| 久污| 97色网| 韩日性爱av| 最新日产中文在线麻豆| 日韩一区二区熟女| 九99久久| 久久产精品一区二区三区电影| 强被迫伦姧在线观看无码网站| 综合欧美日韩在线观看| 99超碰色| 97亚洲自在精品在线观看| 欧洲久久一二线| 操操逼视频| 强免费黄色网址| 天天碰操中国年青熟妇| 日本欧美一区二区三区视频麻豆| 欧美日韩中文亚洲v在线综合| 99无码视频| 国产女同性恋视频| 亚洲综合九九| 97干在线| 国产自产自拍| 性站 | 亚洲乱色熟女一区| 欧美躁死她一区二区| 97er欧美性| 淫荡网址| 女同在线视频一区| 亚洲久草AV色图| 国产无码久久高清| 亚洲老熟妇xxx| 超碰这里有精品| 亚洲九九九| 懂色AV蜜臀无码精品APP| 夜夜操av亚洲一区二区| 好爽免费视频| 狠狠干,狠狠操| 日韩精品电影| 综合av社区| 成人三一级一片aaa| 操少妇很爽av| 97中文热色| 黄片免费看黄片免费看| 夜夜夜夜爽| www久久国产精品| 无码国产精品午夜不卡(| 裸模AV女优| 天天干人人看综合| 欧美一区二区三区大综合| 九九亚洲| 成人A片男人的天堂| 美女黄站| 天天干天天日天天射黄色| 伊人99热| 天美麻豆一区二区三区| 婷婷丁香六月天| 一二三四区操操Av| 五月天激情四射| 日夜尻逼网| 国产精品无码在线| 国产精品69久久久久久久| 久久久免费一级黄片| 91性感网站| 一级aaaaa欧美中文字幕录像片| 青青草视频爽一爽| 日韩无码三级影院| 亚洲人妖网| 黄色小视频日本txt| 亚洲色资源| 偷拍自拍在线视频观看| 性高潮久久久久久久久久久| 欧亚乱色熟一区二区三四区| 国产偷拍网站| 91无码人妻| 丁香色五月 97干| 校园春色美腿丝袜 | 天天综合网~91综合网| 免费A V在线| 久热伊人| 午夜成人福利影视| 亚洲性爱无码乱伦av| 男人天堂最新手机版在线青青草| 视频二区美腿丝袜制服人妻欧美 | 亚洲一区中文字幕一区| 97欧美综合| 女性喷水高潮在线观看| 欧美一级专区免费大片| 亚洲av强奸乱伦| 97色综合中文网| 国产性感骚丝袜在线| 精品九九国产无码| 妇女一区二区三区| 亚洲素人综合| 黑丝日韩av丝袜av| www五月| 日韩精品国产一区二区| www男人天堂| 欧美色图亚州激情| 黄色高清无码无码破解免费暗网| 91被操| 夜夜夜夜爽| 加勒比无码一区二区三区| 国产一区二区成人av在线播放| 精品乱码久久久久| 久久久久无码| 亚洲性爱无码乱伦av| 日本在线观看网址| 亚洲欧美综合图片| 男人网站婷婷| 国产亚洲 中文欧美久久| 综合久久欧美| 国产一级高跟丝袜| 日韩熟女乱伦中出| 亚洲无码超碰免费| 男人午夜天堂| 一本色道综合久久欧美| 男人的天堂com| 91电影色诱| 丁香五月天激情综合| 色官网色综合| 无码视频一区二区| 顶级少妇BT天堂| 自偷自拍的亚洲视频| 亚洲AV成人无码一二三久久| 97免费在线观看视频| 色五月AV在线| 亚洲伊人久久精品影院| 91电影色诱| 亚洲色图大香| 操操啪| 手机看av网站在线看| 一级aaaaa欧美中文字幕录像片| 9丨久久九九九| 99在线啪| 内射卯月麻衣| 2020中文字幕在线| 麻豆区久久久久亚| 久久黄黄黄| 久久久九| 久久久999国产精品| 风骚少妇视频中文字幕| 裸体美女久久久| 台湾大香蕉99热| 一区黄二区黄| 欧美日韩电影一区二区| 国产60区。| 精品97精品97| 天天搞欧美| 青青草好吊| 97精品久久久久中文字幕| 日本精品免费一区二区三区四区| 欧美色图 人妻| 久草精品一区 | 亚洲熟女综合| 超碰精品人妻狠狠干| 亚洲超碰AV| 免费的黄片wwwwww| 综合干干干av久久久综合网 | 俞拍自拍| 老司机午夜精品福利视频一区二区 | 激情婷婷| 91女神在线视频| 麻豆精品久久久久久久| 色婷婷淫色网| 97人人爱人人乐| 国产sv美女内射| 日韩成年人性爱视频| 人人性爱视频免费| 操逼视频亚洲| 超碰免费人妻人人| 福利视频网站| 成年女人一区| 色 婷97| 日韩激情视频| julia国产在线| 色与欲影视| 伦激情人妻另类人妻| 欧美综合娱乐久久| www.狠狠| 97在线观视频免费观看| 9丨久久九九九| 激情抓乳插进去啪啪啪日韩 | 午夜一区| 日韩免费大片一级播放| 男人天堂2019亚洲| 日韩大香蕉精品在线视频| 亚洲少妇视频| 黄色区免费观看中文字幕| 99热亚洲| 天海翼久久| 国产老太乱伦一区| 日韩丰满熟妇| 欧美中文字幕男人天堂久久精品 | 先锋激情∨在线视频播放| 久久一区二区三区入口| 久久亚洲天天做| 99热欧美| 国产精品69人妻无码久久久| 欧美少妇一区二区三区| 日日摸日日碰夜夜爽视频| 黄色片一区二区三区四区五区| 激情久久av一区av二区av| 91黑丝少妇| 久久综合18p| 97视频在线观看网站| 午夜性刺激视频免费观看| 精品国产乱码久久久久久口爆网站 | 日韩成人免费电影| 啊啊啊啊好大好硬啊啊啊啊啊| 免费人成毛片乱码| 婷婷99狠狠| 一区二区亚州激情久婷婷欧美| 天天澡天天狠天天天做| 精品超碰中文在线| 超碰吊日色| 国产亚州高清国产拍精| 先锋色眉乱伦资源| AV在线资源| 日韩兔费看黄片| 午夜天堂啪啪| 欧美日韩97| 婷婷久久久| 欧美桃色网| 中文字幕一区电影在线观看| 欧美成人亚洲精品| 狠狠色伊人亚洲综合网站色| 欧美性天天影视| 欧美热图99| 亚洲精品a人片在线观看视| 亚洲永久永久永久永久一级一级一级精品 | 天操天操夜操夜月月年年操操| 91精品女厕偷拍视频| 96精品久久久久中文字幕| 欧美日韩在线小说 | 亚洲AV无码乱码| 殴美,日韩国产伦精品| 超碰色老头| 色色无码| 精品999999| 天天看综合网| 精品视频在线观看| 美女久久久久久久| 欧美人人曰人人操人人射射| 精产国品一区二三产品| 99老司机精品视频在线观看| 蜜臀th| www久久99| 亚洲骚逼少妇| 综合网~91综合网| 大香蕉专区| 91在线国产后入风骚翘臀美女素人| 最近2019中文字幕国语免费版| 激情四射五月天| 国产AV无码AV| 日天天九九天堂666| 婷婷导航| 久久一区无码| 国产久久av| nuu12国产麻豆精品| 色墦五月丁香| 综合国产影视三级| 91色人| 日日狠狠久久偷偷色综合免费| 啊啊啊好想要| 超碰碰小说97| 99九九久久| 国产亚洲精品农村妇女| 97超碰精品图片| 欧美亚洲丝袜美女电影| 99精品在线| 国产色产精品在线观看 | 中文字幕第9页萱萱影音先锋| 亚洲 欧美 另类 综合 偷拍| 婷婷色在线| 另类小说综合网| 九九这里只有精品| 久草精品国产蜜臀 | 偷拍亚洲情色| 午夜欧美J进J出白浆流出久久久| 九九综合久久| 国产精品原创巨作?v网站| 玖玖大干人妻| 欧美熟妇操操视频| 99爱久久视频频| 亚洲国产激情国产av| 色色色日本| 人人妻人人爽| 人妻熟女一区二区三区视频| 九九热在线精品视频| 91精品久久久久久综合五月天| 12一15性XXXX粉嫩国产| 在线洲亚线| 欧美91在线+|+欧美| 超碰碰碰碰| 免费看黄视频亚洲网站| 日韩激情啪啪啪| 成人线上超碰| 亚洲欧美91| 女人天堂网| 亚洲少妇色图自慰直播| 日韩久久超碰色| 亚洲色图91欧美日韩| 亚洲美女自拍偷拍视频| 人人操人人干网页| 午夜精品久久久久久久久久蜜桃| 懂色Av| 天堂综合网| 中文精品少妇天堂| x97av| www.高清无码诱惑一区.com| 国产福利夜| 刺激性视频黄页| 欧美性猛交美女自慰91| 久久国色天香香蕉| 日韩美女久久一区二区三区| 天天干一区二区| 日韩三四五区| 欧美超碰9798| 女同性恋一区二区三区精品视频| 亚洲不卡av在线| 麻豆视频test| 中美日韩毛片| 91五月天| 青青青草伊人精品| 91天美免费| 男生通女生屁股| 噜噜噜亚洲精| 日本综合色图| 99亚洲精品| 东北丰满熟女国产一区| 亚洲蜜桃V妇女| 国产树林里野战在线看| 色5月婷婷| 日本在线一二| 久久这里精品国产99丫e6| 久久精品一区| 亚洲天堂电影网| 桑老女人九区| 国产精品九九九| 91久久九九精品国产综合| 亚洲图片色图欧美另类| 最新啪啪视频| 奸色色 男人天堂 天天射| 极品丝袜无码| 啊啊啊啊啊,啊啊啊啊好舒服,操我舒服啊啊啊 | 日韩簧片免费看| 国产一区二区三区白丝| 日本黄 R色 成 人网站| 亚洲熟女国产综合另类| 国产丸一视频| 久久男人的天堂| 日韩在线一区高清在线| 日本日逼视频网| 9久综合网| 天天综合网~91综合网| 久久系列| 国产精品呦一区二区三区| 亚洲欧美激情在线视频| 少妇被玩视频二三区| 久久一区二区加油站| 超碰97综合| 伊人久久综合影院| 久久天堂婷婷网| 极品后入免费视频| 亚洲97在线观看| 太久视频| 老熟女91av| 精品人妻视频一区二区在线播放| 国产亚洲日韩欧| 精品国产精品一区二区| 97热视频在线观看| 蜜臀无码视频在线观看| 欧美视频在线视频免费va| 色狠狠综合噜一二三区| 日本一卡二区在线| 国产精品久久久无码AV网站| 欧美大香蕉卡久久| AV中文字幕三四五| 亚洲砖码砖专无区2023| 日日A∨| 操国产高清| 国产午夜无码片在线观看影视 | 亚洲欧美另类图片| 日韩成人大片在线观看| 久草新免费| 亚洲九九九| 久久超碰爱| 女人18精品一区二区三区| 免费一级性爱久久| 校园春色综合色| 亚洲丝袜诱惑| 日韩精品一区二区三区四虎影视| 另类专区加勒比| 国产野战露脸在线播放| 日本超碰97日韩精品人妻| 91精品国产91久久青草 | 99热国产| 久久久久久久国产a∨| 亚洲揄拍网| 三男一女不戴套的A片| 久久久久13| 亚洲图片欧美偷拍| 六月婷婷五月丁香| 亚洲欧美日韩不卡人妻| 99热免费| 欧美亚洲91| 九九九九九九九精品视频| 日本一线产区和二线产区伦理片| 久久久九九网站| 美女天天干| 人妻少妇av在线观看| 蜜臀久久99'精品久久久| 很黄很色的视频在线观看| 日日夜夜青青草母狗| 无遮挡一级毛片视频免费的| 天天插夜夜爽| 免费看久久久性性| 久久丝袜| 久久不卡一区二区| 国产亚洲精品A在线观看下载| 久久久精久久久| 久久精品国产欧美日韩亚洲欧美日韩中文久久国产一区 | 亚洲色图久久成人| 亚洲在线网站| 日本999精品| 亚洲中文国际强奸字幕| 精品国产乱码久久久影院| 亚洲色欲天天人妻无码系列专区| 97伊人网| 亚洲视频一二区| 性色av蜜臀av色欲aV| 人妻少妇久久| 女人爽到高潮久久久| 国产精品日本无码A片| 亚码人妻| 91视频国品一二三区| 男女做爰猛烈动高潮A片免费应用| 91九九九小逼| 久99视频| 久久精品福利影院| 精品少妇一区二区三区| 四虎影库国产精品免费| 凹凸久久人人| 四虎精品永久在线播放| 自拍亚洲综合| 日本精品一区三区| 国产精品黄色三级av| 超碰97日韩| 91美女视频在线| 欧美在线播放aaaa| 91精品人妻偷情| 国产青青综合伊人| 啊啊啊啊啊在线视频| 久久久久国产一区二| 亚洲天堂久久久久久粉红视频| 国产精品在线网站| 丝袜AV一二三区| av在线一区二区三区| 国产传媒av天美传媒在线| 精品人妻一区春色| 青青青操| 夜夜操狠狠操| 午夜福利免费精品视频| 综合影院永久入口国产| 性高潮久久久久久久久久久| 久久超碰98| 久久理论字幕视频| 亚洲日韩一区电影| 在线国产一区二区av| 情趣丝袜无码操逼视频| 亚洲在线欧美| 撸无码不卡免费视频| 色 亚洲 91| 射丝袜高跟鞋99| 亚洲操操操| 日本亚洲熟女视频| 亚洲情色中文字幕一区| 波多野结衣一级视频| 9丨久久九九九| 亚洲精品九九九九九九| 欧美综合 站| 亚洲美女30b| 久久久久久久久久久人妻| 日韩欧美视频青青| 99热在线播放| 思思热在线| 丁香五月综合| 337p大胆噜噜噜噜噜91Av| 色综合久久88色综合久久天天| 欧美伊人久久综合网| 国产午夜在线观看| 午夜啪| 日本久久女同性恋视频| 免费精品无码一级毛片牛牛影视| 91狠狠综合| 亚洲天堂精品日韩电影| 国产精品视频内谢女人| 欧美色网| 人人操人人色人人摸| 性爱网站一区二区| 亚洲?V无码专区在线电影| 99在线免费公开视频| 欧美精品日韩久久久九| 国产精品久久久久久久毛片1| 久久五月天婷婷丁香中文字幕| 国产成人无码a| 综合免费无码中文| 精品性爱一区二区| 婷婷五月成人| 啪啪视频mP4| 青青草视频导航官网| 亚洲青色欧美| 欧洲自拍第一页| 亚洲一区二区av| 欧美中文综合| 欧美性爱日韩高清| 国产 v乱码一区二| 大香蕉男女超碰精品在线| 天天看片天天爽| 91久久午夜无码鲁丝片久久人妻| yy少妇精品久久| 熟女熟妇一区二区三区视频| 四虎在线观看视频| 中文字幕国产| 97操操| 伊人影院在线理论播放 | 免费久久一级毛片大黄| 亚洲少妇综合在线播放| 丁香六月婷| 久热精品色情| 91中文字幕在线观看| 激情色图| 欧美强奸一区二区诱惑| 熟女丝袜视频| 日本熟妇精品九九| 久久久性少妇| 日本2020一区二区| 久操精品| 麻豆啪啪啪视频| 极品五月天噜噜| 亚洲欧洲美腿丝袜| 国产丝袜一区二区三区| 天天看夜夜看日日干| 强奸a片网| 人人综合| 精品久久久久久久| xxx0国产在线播放| av操操不卡| 美女t无毒不卡不卡| 成人26uuu| 九九内射在线| 91网站18+| 性爱网站一区二区| 欧美日韩超碰在线| 欧美后入式| 国产在线视频二区| 欧美成人精品一区二区三区| 中国91AV| 自慰白浆在线观看| 日韩精品电影| 中文字幕日韩专区精品系列 | 亚洲综合影片| 亚洲97| 99色热| 天天搞欧美| 在线无码网站| 嗯嗯啊啊视频一区二区三区| 蜜臀一区二区三区在线| 天天欧美欧美亚洲网| 日日摸日日弄日日拍| 中文字幕交换人妻| 骚熟女吞| 激情网色| 日韩少妇在线视频| 亚洲无码太久| 熟女一区二区三区| 日本三级A片网站com| 欧美精品丝袜久久久中文字幕| 久久69| 天堂蜜桃无码视频一区二区| 日夜精品| 欧美极品女人的天堂| 91第一页| 操人妻少妇中文| 97干在线| 欧美 传媒 麻豆 日韩 偷拍| 天天视频黄| 亚洲欧美九九九| 人人搞人人插人人操| 91美女视屏| 欧美gv在线观看| 成人色女网| 天天操人人操狠狠插| 美女91在线观看| 亚洲一区二区三区播放在线| 亚洲色图伊人网| 18禁网站在线播放| 91精品操美女| 婷婷性网| oumeisetu综合| 国产美女口爆吞精视频| 国产美女精品| 最新中文字幕在线亚洲| 亚洲一级黄色毛片| 九久久九九久视频| 人人贴人人摸| 天天干天天拍| 蜜桃臀一区二区aV | 欧美综合777| 性色av网站| 欧美日韩制服| 91老司机在线视频免费观看| 天天精品| 亚洲加勒比久久日本道| 欧美色图私拍91| 国产精品制服丝袜清纯唯美 | 美日韩男女操屄视频| 亚洲天天影视综合网| 超碰成人国产| 秋霞色色影院| 在线观看 99热| 26uuu欧美| 99人妻碰碰碰久久久久禁片| 学生妹天天看| 大稥蕉免费视频这里只有精品| 人妻一区二区三区视频 | 99日韩| 久久久亚洲| 五十路人妻在线| 九色 人妻 大香蕉| 最新中文字幕精品在线| 2017天天拍大香蕉| 欧美玖玖爱免费玖玖| 啊啊啊啊嗯嗯嗯用力好爽 | 91 偷| 97超久碰| 99激情| 亚洲精品天堂久久A∨51成人漫| 超碰97国产欧美| 亚洲欧美精品久| 青青草原人妻| 亚洲操逼视频网站| 久艾草在线精品视频在线观看| 青青草AV色| 极品后入免费视频| 欧美九九爱| 国产AV高清AV无码| 欧美性爱18观看| 精品无av| 久久久久9999妇女| 深夜操逼网| 天天天天天干夜夜夜夜夜操| 久久精品国产AV一区二区三区| 九九热三级片| 另类图片五月天| 国产熟女精品区| 不卡人妻少妇精品毛片一区23区视频 | 九九综合久久| 国产精品视频白浆免费| 国产亚洲日韩欧| 国产精品96| 另类欧美综合| 日日躁狠狠躁天天躁精品| 欧美色天堂网在线视频| 亚洲射综合网| 尻女朋友一夜| 精品熟女一区=区三区| 久热免费视频| www.99在线| 人看人人摸人人操| 天天视频黄网站| 久久成人午夜精品影院 | 亚州色国| 久久久专区| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 精品国产一区二区三区在线播出| 人妻夜夜爽天天爽三区麻豆AV网站| 亚洲清纯综合| 亚洲高清欧美总合| 校园春色亚洲色图| 男女啊啊啊| 日韩在线电影| aa片毛片| 一区二区三区美女超清| 亚洲成人黄色在线观看| 精品视频在线观看精品| 国产精品分类在线观看| 亚洲高清无毛一区二区| 蜜乳AV.COM| 91在线视频观看国产| 黄色性爱网网| 欧美日综合| 伊色综合天堂色97| 91网亚洲| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 91精品人妻| 亚洲 暴爽 AV人人爽日日碰| 日韩精品资源专区二区| 日韩福利综合一区| 国产精品一级特黄aaa大片在线观看| 成人精品久久久午夜福利| 一级片视频啪啪| 成人a大片在线观看| hd成人一区二区在线| 五月婷婷性爱| 99r九九| 亚洲美女色图| 欧美色图99| 1769成人国产精品视频| 国产亚洲精品美女久久久| 爆操无码| 欧美夜夜狠| 九九九九九九九精品视频| 99国内精品| 狠操91,com| 亚洲综合嫩| 国产在线视频二区| 精品成人亚洲午夜电影| 六月丁丁香| 亚洲激情色片 | 91丨九色丨大屁股| 91色噜噜狠狠| 男人的天堂kva| 日本性感人妻91| 性爱1区| 欧美超碰96| 91天美免费| 最新av中文字幕高清| 久久五月视频| 校园春色亚洲无码| 97超碰中文在线| 久久亚洲AV无码专区首页| 男人夜色天堂ss| 色偷偷人人玩人人舔人人操人人摸人人爽| 欧美天天干| 91快色色色色色| 色噜噜人妻av 中文字幕| av草草在线电影| 成人性爱AV在线免费观看| 99色热| 中文字幕日韩人妻视频| 99热官网| 天天操天天日青青草超碰av| 91人妻人人澡人人爽人人精品| 午夜福利成人免费视频| 日日夜夜草草草| 人人操,人人液| 99热精品在线播放| 另类专区加勒比| 久久综合国产精品国产| 欧美日韩国产中文超碰| 玖玖爱视频网站| 欧美网站免费| 天天日天天屌天天操| 日本人妻最新在线中| 国产玖玖| 99久久99九九99九九九| 国内精品伊人久久久久影院会| 东京热精品97综合网| 91人妻人人澡人人爽人人精品| 亚洲男人天堂2019| 午夜美女诱惑电源网| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 精品久久人妻成人网| 超碰97亚洲区| 亚洲欧综合另类无码一区| 东北女人的毛片| 色综合国产在线观看| 狠狠久久四虎| 欧美第一页| 少妇高潮99p| 日韩大香蕉| 97干日韩| 免费操逼91| 69AV女优男人的天堂| 欧美91精品国产自产| 18精品一区| 欧美人与动性人交a| AV一二区| 欧美精品23| 91黑丝美女| 可以在线观看的黄色网址| 北京美女一区二区| 日欧亚洲二三区大片不卡| 久久久久久久久久久久久久久久9| 国产乱伦性爱区| 中文字幕女同在线| 免费黄色A片| 精品丰满熟妇人妻一区| 人人操av| 激情五月天中文字幕色| 欧美综合第一| 久久国产乱子伦精品免费女人| 国产第二页| 亚洲日本韩国在线| 亚洲欧美首页| 自拍欧美| 中文自拍欧美影视| 东京热综合久久一区二区| 久久久久久久少妇| 先锋激情∨在线视频播放| 人人摸人人舔一区二区| 95人妻爽爽人人做人人澡 | 熟妇一区二区三区| 色天堂综合| 国产浮力影院第1页| 久久午夜神马| 快点操死我| 激情干在线| 国产精品日日摸夜夜添骚逼| 熟妇亚洲一区二区三区| 男人a天堂手机在线版| 黑人性暴力毛片| 歐美一級亂黃99在綫精品| 一级aaaaa欧美中文字幕录像片| 9久9久| 粉嫩国产精品久久久| 黑人无码一区二区| 东京热双插| 亚洲涩涩| 97中文天堂| caoni国产亚洲av| 亚洲自拍97| 免费成人在线熟妇网| 色婷婷影院| 成人精品一区二区91毛片不卡| 青青草公开在线免费不卡视频| 男人的天堂激情| 天天干天天狼在线视频| 91天天综合| 欧美啪啪啪91| 91热情品| 人人喜人人妻| 丁香五月综合| 欧美日日操| 91春色| 黄色工厂这里只有精品| 欧美亚洲高清不卡| 116美女午夜| 狼人久草| 日本一区二区不卡精品| 黑人精品XXX一区一二区| 欧美BT 亚洲色图| 尤物视频网 刘玥| 久九干| 亚洲国男人的天堂| 无码视频黄色网战| 手机在线中文字幕国产| 亚洲国产另类在线中文| 欧成人精品一区二区三区| 2017天天透天天通天天擦| 涩爱AV在线| 蜜色网色哟哟| 欧美激情综合色综合啪啪五月| 国产成人免费观看在线视频| 日韩欧美午夜一区二区| 乱伦强奸区日韩| 久久这里只| 亚洲中文sv| 久久国产精品视频| 日韩欧美中文字| 神马久久啊啊| 美日韩在线不卡人妻| 天天日日本| 亚洲色图 欧美热图 清纯唯美 另类自拍 | 国产精品天美传媒| 25国产精品免费观看| 97干在线| 久久婷婷伊人| 在线另类| 欧美色图天堂在线| 五月激情综合网| 99精品在线观看| 亚洲国产精品久久久久久久久久| 超碰99在线观看| 尹人大香蕉视频在线| 五月婷婷无码| 一区二区日韩欧美久久| 性吧在线视频| 欧美淫穴| 亚洲日韩天堂| 热99这里有精品综合久久| 亚洲色图91| www.av家庭乱伦| 中国农村熟妇毛片视频| 在线观看无码三级少妇| 人人艹亚洲| 日本一区二区不卡精品| 91精品国产高清久久久久久,亚洲成人 | 加勒比伊人| 日韩一级性爱无码| 岛国激情视频软件| 日操粉逼逼| 亚洲欧美中文日韩视频中国语| 婷婷操逼| 天天干天天日天天射黄色| 欧美综合色站| 大香蕉色欲AV| 欧美色97| 国产又黄又爽| 在线A日本| 国产精品久久久久综合| 一本道综合色图| 在线综合 亚洲 欧美中文字幕 | 91人妻精华帖| 久久性爱免费送| 五月天激情小说| 美女淫穴| 亚州,欧美在线| 欧美91精品国产自产| 夜夜操青青草| 婷婷五月色| 99青青草国产视频| 四虎免费在线播放| J?P?NESEHD熟女熟妇伦| 欧美亚洲尤物久久| 亚洲色图大香| 婷婷香网站| 日韩精品一区二区人人人| 亚洲春色欧美激情自拍| 牛牛aV| 伊人青青一区成人视频在线观看区| 国产青青美女玩逼视频| 亚州综| 日韩av不卡在线看| 一区二区三区精品黑丝白丝酒店对鸡 | 久久久久9999精品九九九| 99热这里都是精品| 无码国产Av| 北条麻妃99精品青青久久| 天天情欲宗合网| 国产主播福利| 色五月婷婷色| 精品九九九九九九九九九| 日本天天干天天操一区| 日韩一级特黄av毛片| 精品国产乱码久久久久久影片| 免费草草草草草视频| 亚洲欧美日韩制服另类| 婷婷五月天色色| 碰超人人在线一区二区三区| 麻豆久久一区二区三区| 精品成人av一区二区三区在线| 午夜天堂精品久久| 亚洲欧美伦综合| 亚洲偷拍自拍在线视频| 97色妞| 超碰午夜| 天天添天天干电影| 97日韩欧美亚洲| 性色av网站| 亚洲 另类 丝袜 自拍 动漫| 97亚洲精品| 激情综合五月| 3级毛片一二| 在线看片国产精品每日更新| 国产女同性恋视频| 久久久久久网址| 欧美九九爱| 一起草视频在线| AV中文在线| 日韩本不卡视频在线观看 | www.av家庭乱伦| 嗯嗯啊中文字幕| 国产熟女一区二区| 婷婷久久网| 情色五月天就去干| 96久久精品一二三区色欲| 国产女人9999| 综合免费无码中文| 亚洲日韩欧美一区二区| 精品午夜福利国产一区二区在线观看 | 亚洲五月丁香花狠狠干一区二区三区| 中字一区| 青草青草久热| 四虎免费视频| 小情侣高清国产在线视频| 国产精品乱码久久久久久久| 亚洲午夜福利在线影院| 啊啊啊啊啊好舒服视频| 婷婷午夜成人色中色| 一区二区亚州激情久婷婷欧美| 无码av永久免费专区网站| 天天躁狠狠躁av| 国产美女高潮叫床视频| 亚洲 中文 欧美 日韩 在线| 99热99在线| 国产伦精品| 超碰国产情侣自拍网| 老熟女乱伦一区| 亚洲激情色片 | 亚洲精品天天影视综合网| 性暴力欧美猛交在线直播| 日日夜夜噜| 全免费a敌肛交毛片免费| 加勒比无码毛片| 91oumei| 精品一区二区三区国产| 大香蕉国产中文自拍| 亚一综合久久久久久久久久| 日韩专区久久久| 精品国产乱码久久久久A| 思思久热在线精品66| 97色妞| 丁香五月天激情网站| 欧美少妇人妻| 亚洲人妖网| 精品国产精品一区二区| 亚洲福利影院一区久久| 亚洲色图美腿丝袜| 色狠狠综合| 午夜啪| 91激情国产| 美女人妻色网站| 国产操逼逼网| 欧美综合另类| 18禁久极品美女久久哦哟呀!| 日本岛国黄色网址| 色网站导航大全| 97在线日韩中文字幕| 91九九九馒头| 最新中文字幕在线亚洲| 日韩亚洲欧美中文字幕| 亚洲色图 图片| 超碰97爽| 日本五十路熟女一区二区| 九九九九精品九九九九| 加勒比伊人综合| 中文字幕第页| 色久桃花影院在线观看| 91老熟女| 中文字幕日韩情色| 少妇同性| 日韩中文欧美| 久久riav中文精品| 99热| 亚洲激情深爱文学小说网站| 欧亚乱色熟一区二区三四区| 国产精品久久久鸭无码的功能| 欧美成人性爱视频在线播放| av2014 日韩在线中文字幕| 日韩少妇丰满亚洲| 亚洲nv男人的天堂网| 99久久久er直播网址| 内射小黄片| 天天cao在线| 热热色AV| 亚州熟妇精品| 欧美色图片91| 射 色综合| 欧美黄色片AAAAA| 日韩亚洲国产视频| 天天上日日上日韩精品| 美女高潮国产高清| 影音资源男人日韩| 超碰98综合网| 欧美97在线观看| 欧洲天天在线| 天天爽天天操| 91|九色|国产熟女| 国产剧情AV不卡在线观看| 免费的黄片有限公司| 91网九色蝌蚪操熟女| 日韩97P| 9Ⅰ超碰| 香蕉精品二区二区| 99re这里只有精品2| 亚洲色图第一页| 激情小说亚洲视频| 香蕉免费一区二区三区不读| 国产欧美日韩臀| 国产精品熟女AV中文字幕在线播放| 日本99视频| www五月| 久久五月婷| 婷婷五月天综合网| 日本一级一级一级一级| 激情婷婷五月天| 久热这里| 五月天色图影视| 中文字幕人妻丝袜| 久操九九九九| 少妇99成人麻豆| 天天干天天日天天射黄色大片| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 五月激情啪啪| 色五月婷婷五月天| 人妻天堂综合网| 美女啊啊啊啊啊啊啊|