| [[OsgiActivator]] |
| = OSGi Camel Routes Activator (deprecated) |
| :page-source: components/camel-osgi-activator/src/main/docs/osgi-activator.adoc |
| |
| *Since Camel 3.1* |
| |
| A small OSGi activator for starting an OSGi Apache Camel Project. |
| |
| The bundle starts a shared CamelContext and registers any RouteBuilder instances |
| (discovered via the OSGi Service Registry), from any other bundles that gets installed. |
| And when the bundles gets uninstalled then the routes are stopped and removed from the shared CamelContext. |
| |
| == Important |
| |
| This OSGi activator is a based prototype for quickly starting up an OSGi container with a single shared |
| CamelContext and then being able to use OSGi dynamism to deploy and undeploy bundlers with Camel routes. |
| |
| Beware that this OSGi activator is a basic implementation and has limited support for dealing with errors |
| when new routes are added which may clash with existing routes (route ids). |
| |
| Configuration of the CamelContext is also very limited. |
| |
| Therefore only use this for prototyping and experiments. This is NOT recommended for production usage. |
| |
| == Install bundle |
| |
| Register an Apache Camel RouteBuilder as an OSGi service. |
| |
| Using OSGi annotations: |
| |
| [source,java] |
| ---- |
| @Component(service = RouteBuilder.class) |
| public class MyRouteBuilder extends RouteBuilder { |
| @Override |
| public void configure() throws Exception { |
| from("timer:test?fixedRate=true&period=1000") |
| .log("Hello"); |
| } |
| } |
| ---- |
| |
| Or Manually: |
| |
| [source,java] |
| ---- |
| public void start(BundleContext context) throws Exception { |
| context.registerService(RouteBuilder.class, new MyRouteBuilder(), null); |
| } |
| ---- |
| |
| And it's automatically added or removed to the context from any bundle! |
| |
| [source,text] |
| ---- |
| Route: route1 started and consuming from: timer://test?fixedRate=true&period=1000 |
| ---- |
| |
| For routes that need to be started before the CamelContext the "camel.osgi.activator.pre-startup" service property may be added. |
| |
| [source,java] |
| ---- |
| @Component(service = RouteBuilder.class, property = {CamelRoutesActivatorConstants.PRE_START_UP_PROP_NAME + "=true"}) |
| public class MyStartupRouteBuilder extends RouteBuilder { |
| @Override |
| public void configure() throws Exception { |
| getContext().setStreamCaching(true); |
| |
| restConfiguration().component("netty-http").port(8080); |
| } |
| } |
| ---- |
| |
| If this RouteBuilder is added after other non pre startup RouteBuilders then CamelContext will automatically restart. This allows pre start up RouteBuilder to run their configure methods before other RouteBuilders. |