深圳专业建设网站哪个公司好传奇网站模板免费下载
web/
2025/10/1 5:41:24/
文章来源:
深圳专业建设网站哪个公司好,传奇网站模板免费下载,黑龙省建设厅网站,零库存品牌童装杭州网站建设最近#xff0c;我重新发现了我遗忘的JBoss Fuse功能#xff0c;并且我认为其他人可能会从此提醒中受益 。 这篇文章将重点放在JBoss Fuse和Fabric8上#xff0c;但所有正在寻找最小侵入性方法来为其静态配置文件添加一定程度的动态支持的开发人员也可能会对此感兴趣。 在… 最近我重新发现了我遗忘的JBoss Fuse功能并且我认为其他人可能会从此提醒中受益 。 这篇文章将重点放在JBoss Fuse和Fabric8上但所有正在寻找最小侵入性方法来为其静态配置文件添加一定程度的动态支持的开发人员也可能会对此感兴趣。 在OSGi和Fabric8中进行动态配置的想法 OSGi框架因其类加载行为而经常被人们记住。 但其中一部分还定义了框架必须实现的其他概念和功能。 其中之一是ConfigAdmin 。 ConfigAdmin是一项服务用于定义逻辑上绑定到部署单元的一组外部化的属性文件。 此外部属性文件的生命周期与OSGi捆绑软件生命周期链接 如果您修改外部属性文件则将通知您的捆绑软件 。 根据您对捆绑软件进行编码的方式您可以决定对通知做出反应并以编程方式或通过不同的帮助程序框架例如蓝图 来调用使用新配置的代码。 这种机制既方便又强大并且所有使用OSGi的开发人员都熟悉它。 Fabric8建立在ConfigAdmin的思想之上并对其进行了扩展 。 通过其配置功能Fabric8定义了概要文件的概念该概要文件封装了部署单元和配置。 它在普通OSGi的基础上增加了一些功能并且允许管理任何种类的部署单元不仅是OSGi捆绑软件还有任何种类的配置或静态文件。 如果查看官方文档则会找到Fabric8层提供的“扩展”列表并且您会发现它们主要分为两类 Url Handlers和Property Resolvers 。 我建议对本技术感兴趣的每个人都仔细阅读文档。 但是要提供一个简短的摘要和一个简短的示例请假设您的Fabric概要文件具有使用特定占位符在运行时解析某些值的功能。 例如 # sample url handler usage, ResourceName is a filename relative to the namespace of the containing Profile:
profile:ResourceName# sample property handler, the value is read at deploy time, from the Apache Zookeeper distributed registry that is published when you run JBoss Fuse
${zk:/fabric/registry/containers/config/ContainerName/Property} 开箱即用有多个处理程序涵盖了开发人员认为最常见的用例Zookeeper配置文件蓝图Spring系统属性受管端口等。 而且您可能还想扩展定义自己的扩展的机制例如您可能想对存储在某个系统上的性能指标做出反应您可以编写一个扩展并使用其语法约定从系统中注入值。 所有这些功能的限制静态配置文件 我上面介绍的功能令人兴奋且强大但是它们有一个隐含的限制 它们仅适用于.properties文件或Fabric可以识别的文件 。 这意味着如果您必须管理Fabric ProfileOSGi属性或与之交互的其他特定技术例如Camel则可以使用这些功能但是对于Fabric-Unaware而言 它们没有启用 。 想象一下您有读取.xml配置文件的自定义代码。 并想象您的代码没有引用任何Fabric对象或服务。 您的代码将按原样处理该.xml文件。 标记或路径不会有任何魔术替代因为尽管您在Fabric内部运行但您并未使用任何直接支持的技术也未在通知Fabric时可能需要其服务。 要解决此问题您有3种选择 您为Fabric 编写了扩展 以处理和识别您的静态资源并将动态替换委派给框架代码。 您可以更改部署单元中包含的代码 而不是直接消耗静态资源而是要求Fabric服务为您内插它们 *您使用mvel:网址处理程序并避免触摸任何其他代码 什么是MVEL MVEL实际上是一种编程语言 https : //en.wikipedia.org/wiki/MVEL 。 特别是它也是脚本语言 您可以从源代码直接运行而跳过编译步骤。 实际上它具有多个特定的特性可能使其很有趣地嵌入到另一个应用程序中并可以在运行时用于定义新的行为。 例如由于所有这些原因它也是JBoss Drools项目支持的语言之一可与您可能希望在运行时定义或修改的业务规则一起使用。 为什么对我们有用 主要有两个原因 它可以很好地用作模板语言 Fabric8已经有一个mvel: url处理程序它隐式地还充当资源处理程序 模板语言 模板语言是那些语言系列通常是领域特定语言您可以在其中更改按原样阅读的文本的静态部分和将在解析时处理的动态指令 。 我可能以更复杂的方式说出了我上面已经介绍过的相同想法您可以在文本中包含标记这些标记将按照特定的约定进行翻译。 这听起来完全像我们上面介绍的处理程序所提供的功能。 有一个重要的区别虽然那些是上下文特定的处理程序但MVEL是一种通用技术。 因此不要指望它对Zookeeper或Fabric配置文件有任何了解而是希望它能够支持通用编程语言概念例如循环代码调用反射等。 面料支持它 可在以下位置找到对Fabric中支持的参考 http : //fabric8.io/gitbook/urlHandlers.html 但是让我添加一个实现该功能的原始代码的一段因为即使在JBoss Fuse的上下文之外这也是您可能会发现此方法有趣的部分 https : //github.com/fabric8io/fabric8/blob/1 .x / fabric / fabric-core / src / main / java / io / fabric8 / service / MvelUrlHandler.javaL115-L126 public InputStream getInputStream() throws IOException {assertValid();String path url.getPath();URL url new URL(path);CompiledTemplate compiledTemplate TemplateCompiler.compileTemplate(url.openStream());MapString, Object data new HashMapString, Object();Profile overlayProfile fabricService.get().getCurrentContainer().getOverlayProfile();data.put(“profile”, Profiles.getEffectiveProfile(fabricService.get(), overlayProfile));data.put(“runtime”, runtimeProperties.get());String content TemplateRuntime.execute(compiledTemplate, data).toString();return new ByteArrayInputStream(content.getBytes());
} 这里发生了什么事 首先由于未在代码段中显示请记住这是一个url处理程序。 这意味着针对通过特定uri引用的文件触发了行为获取。 在这种情况下它是mvel: 。 例如有效路径可能是mvel:jetty.xml 。 要注意的另一个有趣且相对简单的事情是与MVEL解释器的交互。 像大多数模板技术一样即使是您可以自己实现的最简单的技术也通常具有 引擎/编译器这里是TemplateCompiler 包含模板的变量这里是url 代表上下文的变量即要向引擎公开的一组变量此处为data 将它们放在一起要求引擎来完成它的工作这里使用TemplateRuntime.execute(...)而您在输出中得到的是一个静态String。 不再使用模板说明而是应用了模板定义的所有逻辑并最终从上下文中获取了一些附加的输入值。 一个例子 我希望我的解释足够简单但是可能有一个例子是表达该概念的最佳方法。 让我们使用JBoss Fuse default.profile包含的jetty.xml 它是JBoss Fuse不会作为任何特殊文件处理的静态资源因此它不提供任何替代功能。 我将在这里展示MVEL集成的两个方面从上下文变量中读取一些值并展示如何使用编程逻辑这里只是2个整数的和 Property namejetty.port default{ Integer.valueOf( profile.configurations[org.ops4j.pax.web][org.osgi.service.http.port] ) 10 }/ 我们正在修改Jetty端口的默认值其初始值来自“配置文件”上下文变量该变量是可识别结构的对象可以访问其余配置 profile.configurations[org.ops4j.pax.web][org.osgi.service.http.port] 我们将其从String显式转换为Integer Integer.valueOf( ... ) 并将静态值10添加到返回值中 .. 10 让我们保存文件停止我们的fuse实例。 重新启动它并重新创建测试结构 # in Fuse CLI shell
shutdown -f# in bash shell
rm -rf data instancesbin/fuse# in Fuse CLI shell
fabric:create --wait-for-provisioning 只需等待并监视日志然后…… 哦哦。 一个错误 发生了什么 这是错误 2015-10-05 12:00:10,005 | ERROR | pool-7-thread-1 | Activator | 102 - org.ops4j.pax.web.pax-web-runtime - 3.2.5 | Unable to start pax web server: Exception while starting Jetty
java.lang.RuntimeException: Exception while starting Jetty
at org.ops4j.pax.web.service.jetty.internal.JettyServerImpl.start(JettyServerImpl.java:143)[103:org.ops4j.pax.web.pax-web-jetty:3.2.5]
…
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)[:1.7.0_76]
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)[:1.7.0_76]
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)[:1.7.0_76]
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)[:1.7.0_76]
at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.set(XmlConfiguration.java:572)[96:org.eclipse.jetty.aggregate.jetty-all-server:8.1.17.v20150415]
at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.configure(XmlConfiguration.java:396)[96:org.eclipse.jetty.aggregate.jetty-all-server:8.1.17.v20150415]
…
Caused by: java.lang.NumberFormatException: For input string: “{profile.configurations[’org.ops4j.pax.web][‘org.osgi.service.http.port’] 1}”
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)[:1.7.0_76]
at java.lang.Integer.parseInt(Integer.java:492)[:1.7.0_76]
at java.lang.Integer.init(Integer.java:677)[:1.7.0_76]
… 29 more 如果您注意到该错误消息则说明我们的模板片段无法转换为Number 。 为什么我们的模板代码片段会在第一个实例中显示 模板引擎应该完成其工作的一部分并给我们返回一个静态String而无需任何对模板指令的引用 我已经故意向您显示此错误以坚持我上面描述的概念但是在初审中可能不会被理解。 Fabric中的MVEL支持被实现为url处理程序。 到目前为止 我们只是修改了静态资源文件的内容但没有向Fabric提供任何提示表明我们希望将该文件作为mvel模板进行处理。 怎么做 使用正确的uri引用同一文件只是一个问题。 因此修改文件default.profile/org.ops4j.pax.web.properties 该文件位于默认Fabric Profile中您可以在其中定义哪个静态文件包含Jetty配置 # change it from org.ops4j.pax.web.config.urlprofile:jetty.xml to
org.ops4j.pax.web.config.urlmvel:profile:jetty.xml 现在再次停止实例删除Fabric配置文件重新创建Fabric并注意您的Jetty实例如何正确运行。 我们可以通过以下方式进行检查 JBossFuse:karafroot config:list | grep org.osgi.service.http.portorg.osgi.service.http.port 8181 从浏览器中您可以验证是否可以通过端口8191访问部署在Jetty顶部的HawtioJBoss Fuse Web控制台 http// localhost8191 / hawtio 翻译自: https://www.javacodegeeks.com/2015/10/jboss-fuse-turn-your-static-config-into-dynamic-templates-with-mvel.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/84872.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!