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 教程

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

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

相关文章

认证令牌_Java应用程序的令牌认证

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

java package报错_Java基础知识总结 - 超详细篇(上)

1&#xff0c;JDK&#xff1a;Java Development Kit&#xff0c;java的开发和运行环境&#xff0c;java的开发工具和jre。2&#xff0c;JRE&#xff1a;Java Runtime Environment&#xff0c;java程序的运行环境&#xff0c;java运行的所需的类库JVM(java虚拟机)。3&#xff0c…

【安卓开发 】Android初级开发(二)Activity启动模式

Activity页面跳转在业务逻辑页面添加以下代码 //跳转到下一个activityIntent intent new Intent(this,MainActivity2.class);startActivity(intent); Activity四种启动模式 具体链接

weblogic 建立websocket连接报404_基于 Serverless 与 Websocket 的聊天工具实现

传统业务实现 Websocket 并不难&#xff0c;然而函数计算基本上都是事件驱动&#xff0c;不支持长链接操作。如果将函数计算与 API 网关结合&#xff0c;是否可以有 Websocket 的实现方案呢&#xff1f;API 网关触发器实现 WebsocketWebSocket 协议是基于 TCP 的一种新的网络协…

java的默认值规则_Java 8:默认方法解析规则

java的默认值规则随着Java 8中默认方法的引入&#xff0c;一个类现在可以从多个位置&#xff08;例如另一个类或接口&#xff09;继承相同的方法。 在这种情况下&#xff0c;可以使用以下规则来确定选择哪种方法&#xff1a; 类或超类方法声明始终优先于默认方法 否则&#x…

【Android OpenGL ES 开发 (五)】纹理相关(二)

纹理放大和缩小的过滤参数 1.使用线性插值效果最佳 2.通过修改 float maxscale 4.0f //放大 float minscale 0.5f //缩小 vertices[0].mPosition[0]0.5f * maxscale; //x vertices[0].mPosition[1]0.5f * maxscale; //y 实现模糊效果 1.利用显卡的并行计算的强大功能对…

python与sqlite3_sqlite3与python2.5,pysqlite和apsw有什么区别

我想知道python2.5,pysqlite和apsw的sqlite3之间的区别&#xff1f;当我尝试使用python2.5在windows vista上安装pysqlite时,我有一个颠簸的运行,请参阅以下内容&#xff1a;>从http://sqlite.org/download.html下载sqlite并将它们解压缩到windows / system32文件夹并将sqli…

monolith_将Java EE Monolith雕刻成微服务

monolith在介绍了为什么微服务应该由事件驱动的简介博客之后&#xff0c;我想采取一些其他步骤&#xff0c;并在有关博客的同时准备我即将进行的一系列演讲&#xff08;在jBCNconf和Red Hat Summit上与您见面&#xff09; 。旧金山 &#xff09;。 在Twitter christianposta上关…

【H.264/AVC视频编解码技术】第四章【SPS序列参数集】

1.H264码流中重要的组成部分,保存针对整个视频序列的参数,丢失SPS的码流通常无法正常解码。 2.SPS信息的保存位置: 封装格式: FLV======会保存在 Tag中的Video Tag Data 部分,会有AVC VIDEO PACKET结构。SPS就包含在其中。 MP4===== H264裸码流: 保存…

spring内容协商管理_Spring框架中的内容协商

spring内容协商管理1.简介 使用BeanNameViewResolver完成的工作就是&#xff0c;我们刚刚在Spring上下文中创建了多个bean视图以生成预期的输出。 Spring很快引入了内容协商策略 &#xff0c;该策略可以使用传统的RESTful ResponseBody方法和HTTP消息转换器&#xff0c;以JSON或…

二叉树专题

二叉树 &#xff08;一&#xff09;二叉树的三种遍历方式&#xff1a; 前序遍历 &#xff1a; 1 2 4 5 3 6 7 &#xff1b; 中序遍历 &#xff1a; 4 2 5 1 6 3 7 &#xff1b; 后序遍历 &#xff1a; 4 5 2 6 7 3 1 &#xff1b; 本质是在递归序的基础上…

echart中拆线点的偏移_Real BIM | Rhino+Grasshopper在双曲异形玻璃幕墙中的应用

转载请联系并注明来源你好&#xff0c;我以自己所做的项目为例&#xff0c;介绍一下我的认知里&#xff0c;BIM技术对于真实项目的作用。案例是一个异形、双曲面的玻璃屋盖幕墙系统。如效果图所示&#xff0c;玻璃屋盖呈波浪状&#xff0c;塔楼装饰条与屋盖装饰条需要无缝连接。…

【安卓开发】Android初级开发(okhttp3发送带header与带参数的GET请求)

1.首先需要先加入相应依赖 dependencies{implementation com.squareup.okhttp3:okhttp:3.13.1 implementation com.squareup.okio:okio:2.2.2} 2.加入互联网权限 <!-- 互联网 --><uses-permission android:name"android.permission.INTERNET" /> <!…

java 文件保存在内存_如何掌握Java内存(并保存程序)

java 文件保存在内存通过AppDynamics解决应用程序问题的速度提高了10倍–以最小的开销在代码级深度监视生产应用程序。 开始免费试用&#xff01; 您花费了无数小时来解决Java应用程序中的错误并在需要的地方获得其性能。 在测试过程中&#xff0c;您注意到应用程序随着时间的…

sql 返回日期的年月部分_公示|2020年11月部分志愿活动名单公示

2020年11月部分志愿活动名单公示2020年11月18日人文与法学学院院楼协助分发教职工运动会服装志愿活动2020年11月19日人文与法学学院院楼“收彩旗”志愿活动2020年11月20日人文与法学学院组织观看2020年全国科学道德和学风建设宣讲教育报告会直播志愿活动(此活动不录入i志愿)202…

【安卓开发 】Android初级开发(三)动画

逐帧动画 方法一&#xff0c;在xml中设置 1.先将图片加入drawable 2.在drawable中新建xml,设置每一帧的图片和时间 <?xml version"1.0" encoding"utf-8"?> <animation-list xmlns:android"http://schemas.android.com/apk/res/android&…

javafx swing_Swing应用程序中的JavaFX 8 DatePicker

javafx swing1.概述 本文显示了一个使用JavaFX 8 DatePicker控件的Java SE 8 Swing应用程序的示例。 DatePicker控件允许用户以文本形式输入日期或从日历弹出窗口中选择日期。 本示例使用其中带有FX控件的Swing JFrame 。 为了将FX内容嵌入Swing应用程序中&#xff0c; javafx…

cup过高是什么意思_做青和焙火有什么关系?

武夷岩茶制作工艺复杂&#xff0c;环环相扣&#xff0c;每一步工艺对下一步工艺都有很大的影响&#xff0c;经过一系列的生化变化&#xff0c;最终呈现一杯好茶在我们面前&#xff0c;那我们最关心的做青和焙火两个问题&#xff0c;有什么影响呢&#xff1f;它们之间既有因果关…

【安卓开发 】Android初级开发(四)ListView

ListView的实现步骤 1.单独一行的布局可以如下 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:orientation"horizontal"android:layout_width&…

platform_SpringOne Platform 2016回顾

platform我最近结束了在拉斯维加斯参加SpringOne Platform会议的总结。 这是我第一次参加SpringOne。 这是聆听演讲并与软件开发领域的一些顶级专家进行对话的一种体验。 如果您没有参加SpringOne&#xff0c;那么您肯定会想要阅读这篇文章。 我们将讨论这四个主题&#xff0c…