Hi

You would need more JARs than just camel-core, such as camel-vm etc as
well, and many others.
And this is really IMHO a bad practice on tomcat to mess with
classloading using this shared lib.






On Thu, Aug 6, 2020 at 4:46 PM Steve973 <steve...@gmail.com> wrote:
>
> We have an application stack, deployed in Tomcat, that consists of several
> Spring Boot applications. As part of our operations, we want to send some
> messages to a vm endpoint, where a camel route will consume those messages
> and then publish them to a JMS topic for any of the other Spring Boot
> applications that are interested in messages on that topic.
>
> When I start the application stack, there are three spring boot apps that
> utilize camel, and I see camel start properly in the logs. But when one of
> the apps sends a message to the vm endpoint, the route that consumes from
> that endpoint and routes the messages to the jms topic does not seem to get
> that message. I have placed the camel-core jar in my tomcat lib directory.
> In the spring boot maven plugin configuration, I have specified an
> exclusion of the camel-core jar. Oddly enough, that jar is in the
> WEB-INF/lib of the war anyway! So I have stopped Tomcat, removed that jar
> from the exploded war, and restarted Tomcat, but that does not change the
> behavior of the messaging.
>
> Here are the versions that we are using:
>
>    - Spring Boot 2.3.1
>    - Camel 3.4.2
>    - Tomcat 8.5.5
>
> The first spring boot app that links everything together, with the camel
> route that consumes from the vm endpoint and produces that message on the
> jms topic is our "routing engine". It uses camel-spring-boot-starter,
> spring-boot-starter-artemis, camel-vm-starter, artemis-jms-server and
> camel-jms-starter. Its RouteBuilder's configure method looks like this:
>
> from("vm:task")
>     .log(LoggingLevel.WARN, "********** Received task message");
>     .to("jms:topic:local.private.task")
>     .routeId("taskToJms");
>
> The app that produces messages to the vm endpoint uses
> camel-spring-boot-starter and camel-vm-starter. In that app, it has a
> @Service class that receives a ProducerTemplate that is auto-wired in the
> constructor. When the application invokes this component to send the
> message, I see a line in the logs that says
>
> o.a.c.impl.engine.DefaultProducerCache (169) - >>>> vm://task Exchange[]
>
> so it appears that the message is being produced and sent properly to the
> vm endpoint. However, I see no indication that it has been
> received/consumed in the routing engine's camel route, since the route's
> log line is not logging anything, and since I see no other indications of
> receiving the message in the log. The strange thing is that I am not
> getting the error of not having any consumers on the vm:task endpoint that
> I was getting before I put the camel-core jar in tomcat's lib directory.
>
> Am I doing anything obviously wrong? How can I get the spring boot maven
> plugin to really exclude camel-core? And why are the messages (sent to the
> vm endpoint) not being consumed by the route in the routing engine? Thanks
> in advance for any help.



-- 
Claus Ibsen
-----------------
http://davsclaus.com @davsclaus
Camel in Action 2: https://www.manning.com/ibsen2

Reply via email to