jboss fuse 教程_JBoss Fuse:使用JEXL的动态蓝图文件
jboss fuse 教程
在本文中,我將展示如何在Apache Aries Blueprint xml文件中添加一些內聯腳本。
我不一定會稱其為最佳實踐,但我一直有這樣的想法:這種能力可能有用。 可能當我被迫使用xml來模擬命令式編程結構(例如使用Apache Ant時)時,我開始想要這個。
而且我發現這個想法在諸如Gradle或Vagrant之類的項目中得到了驗證,在該項目中,一種完整的編程語言實際上是在變相中隱藏著,假裝是特定于領域的語言或令人驚訝的靈活配置語法。
在展示如何在JBoss Fuse中使用MVEL時,我曾經談論過類似的事情。
這次,我將限制自己,展示如何使用可以插入到原本為靜態的xml文件中的小代碼段,這種技巧在您需要執行簡單的操作(例如替換字符串,算術或其他任何操作)的情況下可能會有用。想要避免為此編寫Java類。
讓我說,我這里沒有發明任何新東西。 我只是在展示如何使用Apache Aries項目直接提供的功能,但是我并沒有經常使用該功能。
目的是允許您編寫如下代碼段:
...<bean id="accountFactory" class="org.apache.aries.simple.AccountFactory"> <argument value="$[karaf.home.replaceAll("\\\\", "/")]"> </argument></bean> ...您可以看到我們正在對環境變量的值調用java.lang.String.replaceAll()方法。
我們可以感謝Apache Aries Bluerpint JEXL Evaluator,它是Apache Aries Blueprint的擴展,它實現了“擴展” Aries Blueprint基本功能的自定義令牌處理器。
在此特定情況下,它將令牌插值委托給項目Apache JEXL來完成 。
JEXL,Java表達式語言,它只是一個向Java平臺公開腳本功能的庫。 它的作用不是唯一的,因為您可以通過對Javascript或Groovy的本機支持實現相同的功能。 但是由于已經編寫了與Blueprint的集成,因此我們將使用它,因此我們可以在Apache Karaf或JBoss Fuse實例上直接使用它。
以下說明已在JBoss Fuse 6.2.1上得到驗證:
# install JEXL bundle install -s mvn:org.apache.commons/commons-jexl/2.1.1 # install JEXL Blueprint integration: install -s mvn:org.apache.aries.blueprint/org.apache.aries.blueprint.jexl.evaluator/1.0.0這就是我們所需的全部準備工作,現在我們只需要在Bluerpint文件中使用正確的XSD版本1.2.0 :
xmlns:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.2.0"完成后,我們可以通過以下方式利用功能:
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" xmlns:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaas="http://karaf.apache.org/xmlns/jaas/v1.0.0" xsi:schemalocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd"><ext:property-placeholder system-properties="override" evaluator="jexl" placeholder-prefix="$[" placeholder-suffix="]"><bean id="myString" class="java.lang.String"><argument value="1"></argument></bean><service interface="java.lang.CharSequence" ref="myString"><service-properties><entry key="osgi.jndi.service.name" value="$[karaf.home.toUpperCase()]___$[1+2]"></entry></service-properties></service> </ext:property-placeholder></blueprint>直接將該blueprint.xml復制到deploy/文件夾中,然后您可以從Karaf shell中檢查那些內聯腳本的動態調用實際上已經發生了!
JBossFuse:karaf@root> ls (id blueprint.xml) | grep osgi.jndi.service.name osgi.jndi.service.name = /OPT/RH/JBOSS-FUSE-6.2.1.REDHAT-107___3當您尋找一種快速的方法來創建動態配置時,這在某些情況下可能會很有用。
如果您可能有興趣實施自定義評估程序,則需要提供以下接口:
- https://github.com/apache/aries/blob/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/ext/evaluator/PropertyEvaluator.java
這是您需要公開的服務示例,以便能夠在您的<property-placeholder>節點中進行引用:
<service interface="org.apache.aries.blueprint.ext.evaluator.PropertyEvaluator"><service-properties><entry key="org.apache.aries.blueprint.ext.evaluator.name" value="jexl"></entry></service-properties><bean class="org.apache.aries.blueprint.jexl.evaluator.JexlPropertyEvaluator"> </bean></service>翻譯自: https://www.javacodegeeks.com/2016/05/jboss-fuse-dynamic-blueprint-files-jexl.html
jboss fuse 教程
總結
以上是生活随笔為你收集整理的jboss fuse 教程_JBoss Fuse:使用JEXL的动态蓝图文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: dynamodb java_使用Java
- 下一篇: 住建备案证号怎么查询(住建备案证号)