在不使用Spring的情况下在Web应用程序中使用Apache Camel?

时间:2012-12-20 05:27:29

标签: apache-camel

我正在探索在Web应用程序中使用Apache Camel来做一些集成模式。

我发现的唯一例子是使用Spring。

有没有使用Spring的样品?

感谢任何帮助

5 个答案:

答案 0 :(得分:3)

迟到了聚会,但想发布更新的回复。我最近创建了一个名为 Harness 的轻量级框架,该框架使在Camel 中创建Web服务变得非常容易,而无需任何Spring依赖项。它具有一些漂亮的功能,包括:

  • 将Camel对象即插即用地插入“线束”,该线束提供了路由创建,注册表管理和测试所需的样板代码。

  • 使用很少的代码即可快速创建新业务逻辑的能力。这是因为在Camel和Harness之间已经提供了您可能需要的大多数东西。

  • 实现类似Guice的IoC框架的好处,而不必使用像Guice这样的IoC框架。通过使用* .properties文件,该应用程序可以注入模拟,不同的处理器,甚至可以重新连接业务逻辑。

  • 一种重新配置,删除甚至添加业务逻辑的方法,而无需关闭应用程序或影响应用程序可能做的任何其他事情。

可以在here中找到框架核心库。这是Harness文件以及一些辅助工具的地方。

参考实现here。这是功能齐全的Camel微服务,可以用作将Camel骑到需要去的地方的模板。

答案 1 :(得分:1)

Spring通常用于将Camel上下文保存为bean。

随意使用Camel,就像在托管bean的任何其他成员中一样。根据您在webapp中使用的架构,它可能比使用spring更有点琐碎。

通常,您在webapp中创建或重用一些单独的bean(有不同的方法可以做到这一点,例如@Singleton EJB,或者某些DI框架,例如GUICE(和spring ..)。 然后用CamelContext ctx创建一个带有驼峰上下文的实例变量;然后在construcutor / singleton构造函数中,ctx = new DefaultCamelContext();

您现在已经运行了camel,只需使用Java DSL继续添加组件和路由。 Camel的几个组件无论如何都是半依赖Spring的。例如JMS组件,Spring-WS等。此外,您可能有一个棘手的时间将Camel插入没有弹簧的servlet容器中。但这取决于你拥有它的用例。

在此处阅读上下文生命周期 http://camel.apache.org/lifecycle.html

答案 2 :(得分:1)

我想暂时添加对此的支持。但从来没有绕过它,或记录一张票。所以今天我记录了一张票https://issues.apache.org/jira/browse/CAMEL-5906,所以最后我们有一种方法可以使用一个serlvet监听器来引导Camel。关于门票的更多细节。

答案 3 :(得分:1)

为了做到这一点,你应该创建一个实现MyCamelContextInitialisingListener的监听器类javax.servlet.ServletContextListener - 这将包含Camel初始化逻辑。

您在WEB-INF/web.xml

中注册了听众
<web-app>
    <listener>
        <listener-class>com.cheese.MyCamelContextInitialisingListener</listener-class>
    </listener>
<web-app>

听众将包含以下内容:

private CamelContext camelContext;

@Override 
public void contextInitialized(ServletContextEvent sce) {
    camelContext = new DefaultCamelContext();
    camelContext.addRouteBuilder(new MyRouteBuilder());
    camelContext.start();
}

@Override 
public void contextDestroyed(ServletContextEvent sce) {
    camelContext.stop()
}

MyRouteBuilder将是您定义的RouteBuilder实现,它使用Camel Java DSL来定义路由逻辑。

不需要弹簧。

答案 4 :(得分:1)

非常简单,只需执行以下操作:

<display-name>My Web Application</display-name>



<!-- you can configure any of the properties on CamelContext, eg setName will be configured as below -->



    <context-param>
        <param-name>name</param-name>
        <param-value>MyCamel</param-value>
      </context-param>

  <!-- location of Camel route xml files -->
  <context-param>
    <param-name>routeBuilder-MyRoute</param-name>
    <!-- define the routes as a resource from the classpath by prefixing the value with classpath: -->
    <!-- note: instead of using a XML file we can also define the routes in Java code in a RouteBuilder class -->
    <param-value>classpath:camel-config.xml</param-value>
  </context-param>

  <!-- the listener that kick-starts Camel -->
  <listener>
    <listener-class>org.apache.camel.component.servletlistener.CamelServletContextListener</listener-class>
  </listener>

  <!-- Camel servlet used in the Camel application -->
  <servlet>
    <servlet-name>CamelServlet</servlet-name>
    <servlet-class>org.apache.camel.component.servlet.CamelHttpTransportServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>