Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Akka Camel and Spring

I want to combine Akka, Apache Camel, Spring and do not know the way forward for leveraging the three things in the same project.

I was successfully able to

1. write some working code with akka, akka-camel extension and camel routes(Java DSL)
2. use camel and spring (use java DSL but spring for transactions and etc..)

Now I need to combine 1 and 2. Can anyone suggest me the simplest way to achieve this?

EDIT Some say AKKA no longer supports Spring due to conflict in object instantiation as per the link below Why spring integration doc for akka exists only for 1.3.1 but not for next versions

Also a similar question is there without a proper solution being presented but the post is about 2 years old akka-camel 2.2.1 route definition using Spring XML

In one blog post (which I can't get hold of the link right now) a method has been described which is in summary, the actors are defined and used Akka way and what ever the processing Akka actors does to be wired using Spring. But there wasn't any solid example.

like image 745
SashikaXP Avatar asked Sep 23 '15 02:09

SashikaXP


1 Answers

I imagine your #2 looks like this:

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:ctx="http://www.springframework.org/schema/context"
       xmlns:camel="http://camel.apache.org/schema/spring"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd >

  <!-- Camel route configuration -->
    <camelContext id = "testCamelRouteContext" xmlns="http://camel.apache.org/schema/spring">
        <route id="test_data_webservice">
            <from uri="jetty:http://localhost:8888/myTestService"/>
            <log logName="HTTP LOG" loggingLevel="INFO" message="HTTP REQUEST: ${in.header.testdata}"/>
            <process ref="myTestService"/>
        </route>
    </camelContext>

    <context:annotation-config />

    <bean class="com.package.service" id="myTestService"/>

        <bean id="genericDao" class="com.dao.Impl">
        <property name="dataSource" ref="datasource" />
    </bean>

    <bean id="testingDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        datasource stuff
    </bean>
</beans>

Is it possible that you can get this camel context through Akka? Something like.

Add in your Akka config:

akka.camel.context-provider="myNewContext"

New ContextProvider class:

class myNewContext extends ContextProvider{
    override def getContext(system: ExtendedActorSystem): SpringCamelHybridContext
}

I am guessing this is where the bean injection collision between Spring and Akka could occur. I have never used Akka before so my answer is trivial but I wanted to see if I could provide some help to you.

like image 179
KDoyle Avatar answered Sep 28 '22 12:09

KDoyle