You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 2 Next »

Camel Components for Google App Engine

Tutorial

A good starting point for using Camel on GAE is the Tutorial for Camel on Google App Engine

The Camel components for Google App Engine (GAE) are part of the camel-gae project and provide connectivity to GAE's cloud computing services. They make the GAE cloud computing environment accessible to applications via Camel interfaces. Following this pattern for other cloud computing environments could make it easier to port Camel applications from one cloud computing provider to another. The following table lists the cloud computing services provided by Google App Engine and the supporting Camel components. The documentation of each component can be found by following the link in the Camel Component column.

GAE service

Camel component

Component description

URL fetch service

ghttp

Provides connectivity to the GAE URL fetch service but can also be used to receive messages from servlets.

Task queueing service

gtask

Supports asynchronous message processing on GAE by using the task queueing service as message queue.

Mail service

gmail

Supports sending of emails via the GAE mail service. Receiving mails is not supported yet but will be added later.

Memcache service

 

Not supported yet.

XMPP service

 

Not supported yet.

Images service

 

Not supported yet.

Persistence service

 

Not supported yet.

Authentication service

 

Not supported yet.

Camel context

Usage of the CamelContext implementations org.apache.camel.impl.DefaultCamelContext and org.apache.camel.spring.SpringCamelContext on GAE is not possible out of the box. JMX must be disabled because the javax.management package is not part of the GAE JRE. Usage of the Camel-specific Spring configuration XML schema from the http://camel.apache.org/schema/spring namespace doesn't work either. Camel uses a JAXB-dependent bean definition parser but JAXB is (currently) not supported by GAE. To work around these restrictions camel-gae provides the following CamelContext implementations.

  • org.apache.camel.component.gae.context.GaeDefaultCamelContext (extends org.apache.camel.impl.DefaultCamelContext)
  • org.apache.camel.component.gae.context.GaeSpringCamelContext (extends org.apache.camel.spring.SpringCamelContext)

Both disable JMX before startup. The GaeSpringCamelContext additionally provides setter methods adding route builders as shown in the next example.

appctx.xml
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
    
    <bean id="camelContext" 
        class="org.apache.camel.component.gae.context.GaeSpringCamelContext">
        <property name="routeBuilder" ref="myRouteBuilder" />
    </bean>
    
    <bean id="myRouteBuilder"
        class="org.example.MyRouteBuilder">
    </bean>
    
</beans>

Alternatively, use the routeBuilders property of the GaeSpringCamelContext for setting a list of route builders.

The web.xml

Running Camel on GAE requires usage of the CamelHttpTransportServlet from camel-servlet. The following example shows how to configure this servlet together with a Spring application context XML file.

web.xml
<web-app 
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="
http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
    
    <servlet>
        <servlet-name>CamelServlet</servlet-name>
        <servlet-class>org.apache.camel.component.servlet.CamelHttpTransportServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>appctx.xml</param-value>
        </init-param>
    </servlet>

    <!--
        Mapping used for external requests
     -->
    <servlet-mapping>
        <servlet-name>CamelServlet</servlet-name>
        <url-pattern>/camel/*</url-pattern>
    </servlet-mapping>
    
    <!--
        Mapping used for web hooks accessed by task queueing service.
     -->
    <servlet-mapping>
        <servlet-name>CamelServlet</servlet-name>
        <url-pattern>/worker/*</url-pattern>
    </servlet-mapping>

</web-app>

The location of the Spring application context XML file is given by the contextConfigLocation init parameter. The appctx.xml file must be on the classpath. The servlet mapping makes the Camel application accessible under http://<appname>.appspot.com/camel/... when deployed to Google App Engine where <appname> must be replaced by a real GAE application name. The second servlet mapping is used internally by the task queueing service for background processing via web hooks. This mapping is relevant for the gtask component and is explained there in more detail.

  • No labels