JBoss Fuse:使用JEXL的动态蓝图文件

在本文中,我将展示如何在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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/353914.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设置序列

//Oracle 中给主键设置自增长&#xff0c;先设序列&#xff0c;在设置触发器Create table BigCustemer1( ID number(10), cus_name varchar2(20),contacts varchar2(20),phone varchar2(20) ,email varchar2(30),address varchar2(50),notes varchar2(70)); create sequence bi…

材料成形计算机辅助设计,材料成型及计算机辅助设计(综述)

CAE介绍&#xff23;&#xff21;&#xff25;的现状及其软件综述&#xff23;&#xff21;&#xff25;的现状及其软件综述主要内容&#xff1a;1、CAE的现状&#xff1b;2、CAE软件综述。摘要计算机辅助工程(CAE)是一种迅速发展的信息技术&#xff0c;是实现重大工程和工业产…

background-size属性100% cover contain

backgroun-size: 数字&#xff1a;100px 80px 百分比&#xff1a;100% 100% 相对于父元素的&#xff0c;能占满全屏&#xff0c;但是比例可能会失真 cover&#xff1a;占满全屏&#xff0c;可能一部分显示不出来 contain&#xff1a;有一个占满方向占满&#xff0c;背景图不失真…

服务器是计算机的一种 是指,pc服务器是指什么意思

大家好&#xff0c;我是时间财富网智能客服时间君&#xff0c;上述问题将由我为大家进行解答。pc服务器是指电脑服务器&#xff0c;pc即为personal computer个人电脑。电脑服务器是一种高性能计算机&#xff0c;作为网络的节点&#xff0c;存储、处理网络上80%的数据、信息&…

小程序richtext_用于基于SWT的应用程序的RichText编辑器组件

小程序richtext本文将完成使用SWT实现我们自己的RichText编辑器组件的任务。 在为我的一位客户开发基于桌面的应用程序时&#xff0c;我遇到了这样的可视化组件的需求&#xff0c;并希望添加一项功能&#xff0c;以允许用户使用粗体&#xff0c;斜体&#xff0c;删除线等功能来…

《重构-改善既有代码的设计》学习笔记(一)

其实看了重构之后&#xff0c;发现重构和设计模式有很多很多相通的地方&#xff0c;或者有着同样的目的。你完全可以参考设计模式的原则来修改已有的代码。 1.单一职责原则 2.开放--封闭原则 3.依赖倒装原则 4.迪米特原则&#xff08;类松耦合&#xff09; 笔者也在《重构》这本…

展示Java开发人员课程包

60个小时以上的课程&#xff0c;5门所有级别的课程&#xff1a;成为Java编程专家 嘿&#xff0c;怪胎&#xff0c; 本周&#xff0c;在我们的JCG Deals商店中 &#xff0c;我们提供了一个极端的报价 。 我们提供的Java Developer Course Bundle 仅售39美元&#xff0c;而不是…

吃鸡服务器不接受响应,绝地求生:蓝洞优化服务器性能,从此告别掉帧延迟!...

原标题&#xff1a;绝地求生:蓝洞优化服务器性能&#xff0c;从此告别掉帧延迟&#xff01;很多玩家们都非常了解服务器的重要性&#xff0c;服务器响应时间也可以描述为‘网络延迟’。如果服务器的响应时间减少(或者网络延迟减少) 的话&#xff0c;玩家们可以体验到更加顺畅的…

遍历List过程中同时修改

public static void Main(){List<int> list new List<int>();int[] a{0,1,2,3,4,5,6,7,8,9};list.AddRange(a);foreach (var i in list){Console.WriteLine(i);if (i 2){list.Remove(i);}}Console.Read();} 有一个需求&#xff0c;要对List边遍历边将符合条件的L…

fifa15服务器位置,《FIFA 15》全系统教程图文攻略

《FIFA 15》全系统教程图文攻略2014-09-23 11:04:14来源&#xff1a;3DM论坛编辑&#xff1a;评论(0)《FIFA 15》为EA旗下足球模拟游戏&#xff0c;游戏使用了《UFC》所使用的EA的Ignite引擎&#xff0c;球员的全身细节、动作以及物理破坏效果都相当到位&#xff0c;将给带给玩…

Java EE 8 MVC:全局异常处理

在之前的先前文章中&#xff0c;我们了解了在Java EE MVC中访问请求信息&#xff08;例如查询或路径参数 &#xff09;的各种方法。 这篇文章显示了如何将全局异常处理应用于MVC应用程序。 假设我们有一个控制器方法可能抛出IllegalArgumentException&#xff1a; Controller…

可以显示网页服务器或者文件系统,浏览器是指可以显示网页服务器或者文件系统的HTML文件(标准通用标记语言的一个应用)内容,并让用户与这些文件交互的一种软件...

参考答案如下浏览技术进步有哪些类型&#xff1f;它们对贸易条件有什么影响&#xff1f;OSPF 协议生成的路由分为四类&#xff0c;指可准通些种软按优先级从高到低顺序来说分别是&#xff1a;区域内路由、区域间路由、第一类外部路由、第二类外部路由。并不是所有的商品都适合于…

hdu 3016 Man Down

题意&#xff1a;给你n个板子&#xff0c;初始100生命&#xff0c;到达每个板子加血或者扣血&#xff0c;求从最上面的板子落到地面的最优解 题解&#xff1a;对于每一个木板&#xff0c;只有从左下或者从右下&#xff0c;所以从下往上来看&#xff0c;到达第n个木板的最优解为…

主机做服务器共享文件,主机做文件共享服务器

主机做文件共享服务器 内容精选换一换用户要使用CSG&#xff0c;首先要注册一个华为云帐号&#xff0c;才有访问华为云资源的权限。目前CSG服务处于公测阶段&#xff0c;需要申请公测并通过审核才能使用&#xff0c;商用后自动开通。此外为确保用户能正确快速使用CSG服务&#…

java nosql_使用NoSQL实现实体服务–第4部分:Java EE

java nosql现在&#xff0c;我已经准备好了一个框架式的合同优先型Web服务&#xff0c;并使用Ektorp和CouchDB创建了一个数据访问层 &#xff0c;是时候将它们连接到一个可以正常工作的实体服务中了 。 为此&#xff0c;我将使用Java EE和Glassfish 3.1。 值得注意的是&#xf…

iOS安装CocoaPods的详细步骤

之前的文章没有说明如何安装CocoaPods&#xff0c;现在向大家一一说明&#xff1a; 1.升级ruby环境 应该输入&#xff1a;$ sudo gem update --system sudo是强制升级 2.更换ruby镜像 首先先移除现有ruby镜像&#xff1a;终端输入&#xff1a;$ gem sources --remove https://r…

i7怎么老是显示无服务器,i7处理器真有这么差?网友:懂电脑的人都不买!

大家都知道i7处理器的性能非常强劲&#xff0c;但是很多人买电脑时却选择i5或者AMD的&#xff0c;这是为什么&#xff1f;仅仅是价格原因么&#xff1f;可是为什么即使是预算足够&#xff0c;那些懂电脑的人也不会去选择I7处理器&#xff0c;难道名声在外的i7处理器真有这么差&…

JQuery入门

jQuery基础语法 $(selector).action() 查找标签 选择器 id选择器&#xff1a; $("#id") 标签选择器&#xff1a; $("tagName") class选择器&#xff1a; $(".className") 配合使用&#xff1a; $("div.c1") // 找到有c1 class类的div…

Java应用程序的令牌认证

建筑物身份管理&#xff0c;包括身份验证和授权&#xff1f; 尝试Stormpath&#xff01; 我们的REST API和强大的Java SDK支持可以消除您的安全风险&#xff0c;并且可以在几分钟内实现。 注册 &#xff0c;再也不会建立auth了&#xff01; 2016年5月12日更新&#xff1a;构建…

mac 远程ftp服务器文件共享,mac 远程ftp服务器文件

mac 远程ftp服务器文件 内容精选换一换云堡垒机配置了FTP/SFTP远程备份&#xff0c;报请检查服务器密码或网络连接情况错误&#xff0c;不能启动远程备份。选择备份具体某一天日志&#xff0c;提示备份正在执行&#xff0c;但远程服务器未接收到该备份文件。原因一&#xff1a;…