在本文中,我将展示如何在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:使用JEXL的动态蓝图文件相关推荐

  1. jboss fuse 教程_JBoss Fuse:使用JEXL的动态蓝图文件

    jboss fuse 教程 在本文中,我将展示如何在Apache Aries Blueprint xml文件中添加一些内联脚本. 我不一定会称其为最佳实践,但我一直有这样的想法:这种能力可能有用. 可 ...

  2. jboss fuse 教程_JBoss Fuse –使用MVEL将您的静态配置转换为动态模板

    jboss fuse 教程 最近,我重新发现了我已经忘记的JBoss Fuse功能,并且我认为其他人可能会从此提醒中受益 . 这篇文章将重点放在JBoss Fuse和Fabric8上,但所有正在寻找最 ...

  3. jboss fuse 教程_使用JBoss Fuse和OpenShift进行Cloud Native Camel骑行

    jboss fuse 教程 红帽公司最近发布了一个微服务集成工具包,用于在OpenShift v3的Docker和Kubernetes环境中运行我们的微服务. 为了帮助人们更好地理解这一点,我将Rid ...

  4. 使用JBoss Fuse和OpenShift进行Cloud Native Camel骑行

    红帽公司最近发布了一个微服务集成工具包,用于在OpenShift v3的Docker和Kubernetes环境中运行我们的微服务. 为了帮助人们更好地理解这一点,我将Rider Auto应用程序迁移到 ...

  5. aix pax_通过Pax考试对JBoss Fuse 6.x进行集成测试,第一部分

    aix pax JBoss Fuse是一个功能强大的分布式集成平台,具有内置功能,可用于针对集成的微服务部署进行集中式配置管理,服务发现,版本控制,API网关,负载平衡,故障转移等. JBoss Fu ...

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

    jboss fuse 教程 您是否曾经尝试了解一些简单的东西不起作用的过程? 您正在任何众所周知的上下文中编写代码,无论出于何种原因它都无法正常工作. 而且您信任您的平台,因此您认真阅读了所有日志. ...

  7. jenkins jboss_与JBoss Fuse,Jenkins和Nexus的持续集成

    jenkins jboss 最近,我正在整理一个快速启动的Maven项目,以展示组织JBoss Fuse项目的可能方法. 该项目可以在Github上找到: https : //github.com/p ...

  8. 基于JBoss Fuse 6.2的JBoss BPM微服务集成指南

    今年年初,我们宣布了JBoss BPM Suite令人兴奋的示例项目,该项目围绕一个正在运行的在线Travel Agency项目展开. 最初是利用Web服务,后来我们在JBoss Fuse的帮助下迁移 ...

  9. JBoss Fuse 6.2发布–指导如何快速尝试

    在上周的红帽峰会上,宣布发布了JBoss Fuse 6.2 . 我要祝贺保险丝团队发布此版本. 我知道他们今年以来一直非常努力地进行质量检查,并确保质量检查通过了企业产品所期望的高品质壁垒. 因此,带 ...

最新文章

  1. 技术图文:如何改进算法的运行效率?
  2. c printf 缓冲区分析
  3. 旋转散点图_聚类分析的结果如何用散点图展示出来?
  4. 狂神说学习笔记 Java流程控制
  5. ftp服务器生成文件,ftp服务器自动生成文件
  6. C# 字符串string的基本操作
  7. 归并排序执行次数_一文了解C/C++经典排序算法
  8. Atitit. 项目文档目录大纲 总集合  v2
  9. openssl CRL证书
  10. 马哥2020linux笔记下载,马哥linux 基础命令笔记
  11. wim工具扫描linux磁盘,图文解说WIMTOOL的安装及利用该工具编辑WIM文件
  12. joomla 网页修改_修改Joomla的8个技巧和技巧! 范本
  13. Windows补丁修复- Microsoft Windows HTTP.sys远程代码执行漏洞 (MS15-034)(CVE-2015-1635)
  14. PAT初级1031(C++)查验身份证
  15. 用计算机怎么弹赢在江湖,赢在江湖-姜鹏-和弦谱-《弹吧》官网tan8.com-和弦谱大全,学吉他,秀吉他...
  16. 参考C++高级进阶教程
  17. matlab spline三次样条插值x,Spline(三次样条插值)
  18. Bean with name ‘XX‘ has been injected into other beans [XX,XX] in its raw version.......... 错误分析及解决
  19. 怎样做 SEO,具体的计划是什么?
  20. 数据中心机房物理建设

热门文章

  1. 【最全最详细】使用publiccms实现动态可维护的导航菜单栏
  2. EF框架中,在实体中手动更新字段,数据库数据未同步到程序中应该怎么解决呢?
  3. 调用反射类的指定方法
  4. String转Double
  5. 关于文档的基本操作---ElasticSearch
  6. java泛型程序设计——类型变量限定 + 泛型代码和虚拟机
  7. wcf:rest_REST:管理多对多关系
  8. java解决错误经验_在Java错误进入生产之前的新处理方式
  9. sidecar_Spring Cloud Sidecar –节点初始化
  10. ejb生命周期_EJB 3.x:生命周期和并发模型(第1部分)