从现在开始我一直在与Camel合作,我真的很喜欢它的简单性。 在Java EE之上始终使用它一直是一个挑战,而我最近发表的有关如何做到这一点的演讲之一以及Java EE中引导Camel的不同方法实际上建议使用WildFly-Camel Subsystem 。 在正在进行的系列文章中,我将探索实现此目标的不同方法,并提供大量示例,而这些示例仍是演讲中所缺少的。 我很高兴在评论中或通过Twitter上的@myfear收到您的反馈和要求。

WildFly 8.2骆驼入门

Wildfly-Camel子系统提供了Apache Camel与WildFly Application Server的集成。 它允许您将骆驼路线添加为WildFly配置的一部分。 路由可以部署为Java EE应用程序的一部分。 Java EE组件可以访问Camel Core API和各种Camel Component API。 您的企业集成解决方案可以构造为Java EE和Camel功能的组合。

注意:WildFly-Camel的3.x版本预计将支持最新的WildFly 9。

准备好

将WildFly 8.2.0.Final下载并解压缩到您选择的文件夹中。 将wildfly-camel补丁 (2.3.0)下载并解压缩到wildfly文件夹。 从开始WildFly

bin/standalone[.bat|.sh] -c standalone-camel.xml

建立和运行最快的方法之一是使用Docker和WildFly Camel映像 。 该映像与WildFly 8.1和已安装的Camel子系统捆绑在一起。

定义和使用骆驼上下文

CamelContext表示单个Camel路由规则库。 您使用CamelContext的方式类似于Spring ApplicationContext的方式。 它包含您应用程序的所有路由。 您可以根据需要拥有任意数量的CamelContext,只要它们具有不同的名称即可。 WildFly-Camel让我们将它们定义为a)作为子系统定义本身的一部分在standalone-camel.xml和domain.xml中定义,以及b)或在包含-camel-context.xml后缀文件的受支持的部署工件中进行部署 c)可以通过RouteBilder和CDI集成与路由一起提供。

可以通过两种不同的方式使用已定义的CamelContext:a) 通过Camel-CDI @Injected注入或b)从JNDI树访问。

示例上下文和路由

对于以下示例,我将使用上下文以及通过CDI和RouteBuilder提供的关联路由。 它是一个应用程序范围的Bean,它随应用程序启动自动启动。 @ContextName批注为CamelContext提供了一个特定的名称。

@ApplicationScoped
@Startup
@ContextName("cdi-context")
public class HelloRouteBuilder extends RouteBuilder {@InjectHelloBean helloBean;@Overridepublic void configure() throws Exception {from("direct:start").transform(body().prepend(helloBean.sayHello()).append(" user."));}
}

路线本身并不完全具有挑战性。 它从direct:start中获取一个空的消息正文,并在CDI bean方法“ sayHello”的输出之前添加内容,并在字符串后附加“ user”。 对它。 作为参考,可以在我的GitHub帐户上找到完整的代码。 因此,接下来我们需要找出的是如何在各种Java EE组件规范中使用此路由。

从CDI使用骆驼

Camel从2.10版本开始支持CDI。 在子系统之前和之外,需要对其进行引导。 这不再是必须的,您只需在名称中简单地@Inject即可在@Named CDI bean中使用已部署或定义的CamelContext:

@Inject@ContextName("cdi-context")private CamelContext context;

在JSF,JAX-RS和EJB中使用骆驼

有了有关如何在CDI中使用CamelContext的知识,您将假定,很容易从JSF等中进行相同的操作。 这不是真的。 实际上,您不能将其注入绑定到JSF组件的ManagedBean甚至CDI Bean中。 另外,它在EJB中不起作用。 我没有详细研究它,但假定它与范围有关。 一个合理的解决方法,实际上是一个更好的应用程序设计,是将完整的Camel逻辑放入单独的CDI bean中,然后将其注入。

@Named
public class HelloCamel {@Inject@ContextName("cdi-context")private CamelContext context;private final static Logger LOGGER = Logger.getLogger(HelloCamel.class.getName());public String doSomeWorkFor(String name) {ProducerTemplate producer = context.createProducerTemplate();String result = producer.requestBody("direct:start", name, String.class);LOGGER.log(Level.INFO, result);return result;}
}

ProducerTemplate接口允许您以各种不同的方式将消息交换发送到端点,以使其易于使用Java代码处理Camel Endpoint实例。 在这种情况下,它只是开始路由,并在主体中放置一个String,它表示我正在使用它的组件的名称。

CDI Bean充当组件的后备bean,仅使用它:

@InjectHelloCamel helloCamel;public String getName() {return helloCamel.doSomeWorkFor("JSF");}

返回字符串为“ Hello JSF user”。 这也将写入WildFly服务器日志。 对于所有其他Java EE组件,最好使用相同的方法。

从EJB使用骆驼

如果您使用EJB作为man应用程序组件模型,那么仅使用JNDI方法也是非常合理的:

CamelContext camelctx = (CamelContext) inicxt.lookup("java:jboss/camel/context/cdi-context");

Hawtio –骆驼控制台

子系统中的另一个隐藏的宝石是Hawtio控制台的捆绑。 它是一个用于管理Java内容的模块化Web控制台,并具有一个Apache Camel插件,可可视化您的上下文和路由。 请记住,它是自动配置的安全性,您需要添加管理用户才能访问它。

进一步阅读和帮助

  • 在Freenode上与开发人员交谈
  • WildFly-Camel子系统文档
  • GitHub上的WildFly Camel
  • Apache Camel网站

翻译自: https://www.javacodegeeks.com/2015/07/using-camel-routes-in-java-ee-components.html

在Java EE组件中使用骆驼路线相关推荐

  1. java ee各类组件_在Java EE组件中使用骆驼路线

    java ee各类组件 从现在开始我一直在与Camel合作,我真的很喜欢它的简单性. 在Java EE之上使用它一直是一个挑战,我最近发表了一篇关于如何做到这一点的演讲,而在Java EE中引导Cam ...

  2. 在 Java EE 组件中使用 Camel Routes

    2019独角兽企业重金招聘Python工程师标准>>> 摘要:你可以通过集成 Camel 和 WildFly 应用服务器(使用 WildFly-Camel 子系统)在 Java EE ...

  3. rest服务swagger_在Java EE 7上骑骆驼–带有Swagger文档的REST服务

    rest服务swagger 骆驼开箱即用. Swagger集成就是其中之一. 不幸的是,大多数已经存在的功能都严重依赖于Spring. 但这并不能阻止我们在普通的Java EE 7应用程序中使用它们, ...

  4. 在Java EE 7上骑骆驼–带有Swagger文档的REST服务

    骆驼开箱即用. Swagger集成就是其中之一. 不幸的是,大多数已经存在的功能都严重依赖于Spring. 但这并不能阻止我们在普通的Java EE 7应用程序中使用它们,因为有时它只是服务器的轻量级 ...

  5. Java EE 7中包含哪些JSR?

    我开始填写所有应该加入Java EE 7的Java规范请求的表. 由于平台版本仍在确定中,因此某些细节很难确定. 完整的Java EE 7 EJB产品具有以下标准组件和API: 名称 版 描述 JSR ...

  6. react api_使用Java EE 8中的React式API加速服务

    react api 服务通常可以通过异步处理进行优化,即使不改变其对外界的行为. 某些服务效率不高的原因是,它们需要等待其他服务提供结果才能继续下去. 让我们看一下如何在不等待外部REST服务的情况下 ...

  7. 使用Java EE 8中的反应式API加速服务

    服务通常可以通过异步处理进行优化,即使不改变其对外界的行为. 某些服务效率不高的原因是,它们需要等待其他服务提供结果才能继续下去. 让我们看一下如何在不等待外部REST服务的情况下调用它们,并独立进行 ...

  8. js ajax 访问java函数,将url分配给Java EE项目中的ajax(js)函数

    我正在Ajax中尝试使用我的第一个项目,并且在分配指向要从服务器中获取的文件的绝对URL时遇到问题.将url分配给Java EE项目中的ajax(js)函数 这是我的函数: function fetc ...

  9. java ee组件的类型_CDI(Weld)高级7JavaEE环境组件资源

    1. Defining a resource CDI规范使用术语资源是指,一般地,以下列任何一种类型的对象,在Java EE组件环境可能是可用的: JDBC Datasources, JMS Queu ...

最新文章

  1. php连接Mysql
  2. android web3j 代币查询_wallet-eth 以太坊代币钱包 助记词 私钥 keystore 转账
  3. Docker 容器技术 — Swarm 集群
  4. c++中的list用法
  5. NoSQL(一):NoSQL数据库、redis
  6. 所有controller interceptor_filter、interceptor、aspect不知如何选择
  7. 那些年干过的事(六)—无源码修改版本号
  8. ffmpeg 推流同时录像命令_ffmpeg推流命令
  9. linux句柄过大导致无法登陆
  10. Microsoft SQL Server Compact 4.0ADO.NET Entity Framework 4.1MVC3
  11. jpa原生query_Spring Data Jpa @Query原生SQL
  12. 条款一:尽量使用const、inline而不是#define
  13. 我经常逛的技术网站,个个经典
  14. ZZULIOJ-1007鸡兔同笼
  15. 机电一体化柔性生产线加工系统
  16. 你距离哈佛学霸到底有多远?实力证明,真正的学霸精神不是智商,而是。。。
  17. Tair ldb(leveldb存储引擎)实现介绍
  18. Python海龟绘图入门篇
  19. 三星优化器 适用于绝大部分安卓手机 超级好用!!
  20. Git删除本地多个分支

热门文章

  1. 【程序员】保持一颗虚心好学的心态去敲代码
  2. “小朋友”们节日快乐呀~
  3. SpringMVC对Ajax请求的处理
  4. python统计段落单词词频_使用Python统计文件中词频,并且生成词云
  5. (转)如何查看java本地方法
  6. (精华)转:RDD:创建的几种方式(scala和java)
  7. 奇技淫巧:在spring官网上下载历史版本的spring插件,springsource-tool-suite
  8. XML——StAX Streaming API for XML(read+write)
  9. Mybatis报错:nested exception is org.apache.ibatis.binding.BindingException: Parameter ‘XXX‘ not found
  10. java8默认内存收集器_使用正确的垃圾收集器将Java内存使用量降至最低