Uploaded image for project: 'Camel'
  1. Camel
  2. CAMEL-5722

Classloader mixup when consumers across bundles share the same camel-jetty port

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Critical
    • Resolution: Fixed
    • 2.8.0
    • 2.9.5, 2.10.3, 2.11.0
    • camel-jetty
    • None
    • OSGi environment, Karaf 2.2.2.

    • Unknown

    Description

      Happens in an OSGi environment; but it is also applicable in modular servers that build dynamic classloaders (e.g. JBoss AS) per deployed artifacts (WAR, module, EAR, etc.).

      If bundles A and B are both creating camel-jetty consumers on the same TCP port, the consumers will share the underlying Jetty connector. Moreover, the Jetty connector is indeed created by the first consumer that initialises on that TCP port.

      Since the Camel route executes on the Jetty Connector thread, all class resolutions will happen against the classloader of the bundle that initialises first.

      This makes class resolution absolutely undeterministic and erratic. Quite a nasty bug IMHO.

      Perhaps this can be fixed by adding a call to Thread.setContextClassLoader() passing the classloader of the JettyHttpEndpoint, as soon as a request comes in?

      Attachments

        Issue Links

          Activity

            People

              raulvk Raúl Kripalani
              raulvk Raúl Kripalani
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: