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

java ee各类组件

从现在开始我一直在与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 {

    @Inject
    HelloBean helloBean;

    @Override
    public 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中使用骆驼

hello_jsf

有了有关如何在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放入正文中,该String表示我正在使用它的组件的名称。

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

@Inject
    HelloCamel 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插件,可可视化您的上下文和路由。 请记住,它是自动配置的安全性,您需要添加管理用户才能访问它。

AwsDockerReverseProxy

进一步阅读和帮助

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

java ee各类组件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值