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