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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

jboss fuse 教程_在JBoss Fuse / Fabric8 / Karaf中使用Byteman

發(fā)布時(shí)間:2023/12/3 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jboss fuse 教程_在JBoss Fuse / Fabric8 / Karaf中使用Byteman 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

jboss fuse 教程

您是否曾經(jīng)嘗試了解一些簡(jiǎn)單的東西不起作用的過程?

您正在任何眾所周知的上下文中編寫代碼,無論出于何種原因它都無法正常工作。 而且您信任您的平臺(tái),因此您認(rèn)真閱讀了所有日志。
而且您仍然不知道為什么某些行為不符合預(yù)期。

通常,如果我有幸從事開放源代碼項(xiàng)目,那么接下來要做的就是開始閱讀代碼 。 多次工作; 但是幾乎總是沒有編寫該代碼。 而且您對(duì)產(chǎn)品不太了解。 所以,是的,您可以看到上下文中的變量。 您不知道它們的可能值 ,更糟糕的是,您不知道這些值在何處創(chuàng)建甚至何時(shí)創(chuàng)建。

在這一點(diǎn)上,我通常要做的是與調(diào)試器連接。 我永遠(yuǎn)不會(huì)記住Java進(jìn)程需要允許調(diào)試的JVM參數(shù),但是我知道我已經(jīng)在某個(gè)地方編寫了這些參數(shù)。 而且現(xiàn)代IDE會(huì)向我建議這些,因此遠(yuǎn)程連接到復(fù)雜的應(yīng)用程序服務(wù)器并不是什么大麻煩。

好的,我們已連接。 我們可以在離我們認(rèn)為重要的部分不遠(yuǎn)的地方放置一個(gè)斷點(diǎn),并逐步遍歷代碼。 最終增加了更多的優(yōu)勢(shì)。 IDE 變量視圖使我們可以在上下文中查看變量的值。 我們甚至可以瀏覽整個(gè)對(duì)象樹并調(diào)用代碼片段,以防對(duì)象的普通內(nèi)存狀態(tài)不能真正提供所需的準(zhǔn)確信息(假設(shè)您要格式化日期或過濾集合)。

我們擁有所有工具,但是……這是一個(gè)緩慢的過程 。 每次我在特定的斷點(diǎn)處停止時(shí),都必須手動(dòng)瀏覽變量。 我知道,我們可以通過監(jiān)視變量來改善這種情況,這些變量始終位于概述窗口的頂部,可以讓您快速查看已經(jīng)確定的重要內(nèi)容。 但我個(gè)人發(fā)現(xiàn), 只有在變量很少的情況下 ,監(jiān)視才有意義 :由于它們都共享相同的名稱空間,因此當(dāng)您不在一個(gè)范圍內(nèi)時(shí),會(huì)看到許多未設(shè)置的值,這只會(huì)分散您的視線變量。

我最近學(xué)到了一種技巧,可以改善與您共享的這些工作流程,以防您不知道:

IntelliJ ,甚至是Eclipse ,都有一個(gè)巧妙的技巧,使您可以在通過斷點(diǎn)時(shí)添加打印語句 。 如果將其與防止斷點(diǎn)暫停結(jié)合起來,則有一種不錯(cuò)的方法,可以通過日志調(diào)用來擴(kuò)展正在調(diào)試的代碼。

對(duì)于IntelliJ,請(qǐng)?jiān)诖颂帣z查:http://www.jetbrains.com/idea/webhelp/enabling-disabling-and-removing-breakpoints.html

而對(duì)于Eclipse而言,請(qǐng)檢查以下技巧:http://moi.vonos.net/2013/10/adhoc-logging/或讓我知道是否有更清潔或更新穎的方法來達(dá)到相同的結(jié)果。

上面的技巧起作用。 但是它的主要缺點(diǎn)是您要向工作空間添加本地配置 。 您不能輕易與他人分享此內(nèi)容。 您可能希望將工作空間重新用于其他會(huì)話,并且看到所有這些日志條目或斷點(diǎn)會(huì)分散您的注意力

因此,在尋求IDE的外部支持時(shí),我決定嘗試Byteman 。

Byteman實(shí)際上提供的功能遠(yuǎn)遠(yuǎn)超出了我這次所需的功能,這可能是我決定了解是否可以在Fabric8中使用它的主要原因。

快速回顧一下Byteman的工作,直接摘自其文檔:

Byteman是一個(gè)字節(jié)碼操作工具,它使在加載時(shí)或應(yīng)用程序運(yùn)行時(shí)更改Java應(yīng)用程序的操作變得簡(jiǎn)單。
它可以工作,而無需重寫或重新編譯原始程序。

提供:

  • 跟蹤特定代碼路徑的執(zhí)行并顯示應(yīng)用程序或JVM狀態(tài)
  • 通過更改狀態(tài),進(jìn)行計(jì)劃外的方法調(diào)用或強(qiáng)制意外返回或拋出來破壞正常執(zhí)行
  • 安排由獨(dú)立應(yīng)用程序線程執(zhí)行的活動(dòng)的時(shí)間安排
  • 監(jiān)視和收集匯總應(yīng)用程序和JVM操作的統(tǒng)計(jì)信息

在我的特定情況下,我將使用列出的行為中的第一個(gè),但是您可以輕易地猜到所有其他方面在某些時(shí)候都可以派上用場(chǎng):

  • 添加一些邏輯來防止NullPointerException
  • 短路一些邏輯,因?yàn)槟龅降腻e(cuò)誤不在代碼庫中,但您仍然想看看如果不存在該錯(cuò)誤會(huì)發(fā)生什么
  • 可以想象的其他任何事情……

開始使用Byteman通常特別容易 。 您甚至沒有被迫使用特定指令啟動(dòng)jvm。 您可以只附加到已經(jīng)運(yùn)行的進(jìn)程! 這在大多數(shù)情況下都有效,但不幸的是,由于OSGi的影響,在默認(rèn)配置下不適用于Karaf。 但不用擔(dān)心,該功能僅是簡(jiǎn)單的配置編輯

您必須編輯文件:

$KARAF_HOME/etc/config.properties

并添加此2包到proprerty org.osgi.framework.bootdelegation :

org.jboss.byteman.rule,org.jboss.byteman.rule.exception

該屬性用于指示osgi框架從父Classloader的那些包中提供類。 參見http://felix.apache.org/site/apache-felix-framework-configuration-properties.html

這樣,您將避免在觸發(fā)Byteman規(guī)則時(shí)引發(fā)ClassCastException 。

這幾乎是我們?cè)贔use上使用Byteman所需的所有額外工作。

這是我與平臺(tái)互動(dòng)的實(shí)際示例

# assume you have modified Fabric8's config.properties and started it and that you are using fabric8-karaf-1.2.0-SNAPSHOT# find your Fabric8 process id $ ps aux | grep karaf | grep -v grep | cut -d ' ' -f3 5200# navigate to the folder where you have extracted Byteman cd /data/software/redhat/utils/byteman/byteman-download-2.2.0.1/ # export Byteman env variable: export BYTEMAN_HOME=$(pwd) cd bin/ # attach Byteman to Fabric8 process, no output expected unless you enable those verbose flags sh bminstall.sh 5200 # add this flags if you have any kind of problem and what to see what's going on: -Dorg.jboss.byteman.debug -Dorg.jboss.byteman.verbose # install our Byteman custom rules $ sh bmsubmit.sh ~/Desktop/RBAC_Logging.btm install rule RBAC HanldeInvoke install rule RBAC RequiredRoles install rule RBAC CanBypass install rule RBAC UserHasRole # invoke some operation on Fabric8 to trigger our rules: $ curl -u admin:admin 'http://localhost:8181/jolokia/exec/io.fabric8:type=Fabric/containersForVersion(java.lang.String)/1.0' {"timestamp":1412689553,"status":200,"request":{"operation...... very long response}# and now check your Fabric8 shell:OBJECT: io.fabric8:type=FabricMETHOD: containersForVersionARGS: [1.0]CANBYPASS: falseREQUIRED ROLES: [viewer, admin]CURRENT_USER_HAS_ROLE(viewer): true

我的Byteman規(guī)則如下:

RULE RBAC HanldeInvoke CLASS org.apache.karaf.management.KarafMBeanServerGuard METHOD handleInvoke(ObjectName, String, Object[], String[]) AT ENTRY IF TRUE DO traceln(" OBJECT: " + $objectName + "METHOD: " + $operationName + "ARGS: " + java.util.Arrays.toString($params) ); ENDRULERULE RBAC RequiredRoles CLASS org.apache.karaf.management.KarafMBeanServerGuard METHOD getRequiredRoles(ObjectName, String, Object[], String[]) AT EXIT IF TRUE DO traceln(" REQUIRED ROLES: " + $! ); ENDRULERULE RBAC CanBypass CLASS org.apache.karaf.management.KarafMBeanServerGuard METHOD canBypassRBAC(ObjectName) AT EXIT IF TRUE DO traceln(" CANBYPASS: " + $! ); ENDRULERULE RBAC UserHasRole CLASS org.apache.karaf.management.KarafMBeanServerGuard METHOD currentUserHasRole(String) AT EXIT IF TRUE DO traceln(" CURRENT_USER_HAS_ROLE(" + $requestedRole + "): " + $! ); ENDRULE

顯然,這只是Byteman可以為您提供服務(wù)的簡(jiǎn)短示例。 我邀請(qǐng)您閱讀項(xiàng)目文檔,因?yàn)槟赡軙?huì)發(fā)現(xiàn)不錯(cuò)的結(jié)構(gòu) ,這些結(jié)構(gòu)可以使您編寫更簡(jiǎn)單的規(guī)則或?qū)ζ溥M(jìn)行完善以僅在與您相關(guān)的情況下才真正觸發(fā)(如果在我的示例中,您在輸出中看到一些噪音,您可能已經(jīng)打開了正在執(zhí)行輪詢的Hawtio實(shí)例,從而觸發(fā)了一些已安裝的規(guī)則)。

特別感謝Andrew Dinn向我解釋了Byteman的工作方式和最初失敗的原因。

由于我的錯(cuò)誤,截屏視頻不是最佳選擇,但是由于我有一個(gè)Hawt.io實(shí)例調(diào)用受保護(hù)的JMX操作,因此您清楚地看到了增加的噪音!

翻譯自: https://www.javacodegeeks.com/2014/10/use-byteman-in-jboss-fuse-fabric8-karaf.html

jboss fuse 教程

總結(jié)

以上是生活随笔為你收集整理的jboss fuse 教程_在JBoss Fuse / Fabric8 / Karaf中使用Byteman的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。