The easiest way to access the JBIContainer, which is the main point to use ServiceMix internals, is to cast the ComponentContext to its implementation.
JBIContainer container = ((ComponentContextImpl) getContext()).getContainer();
You can then use the container to access ServiceMix internals, such as creating a client, activating a component dynamically, or any other feature you need.
Note that in ServiceMix 3.1, components sometime uses a wrapped ComponentContext. In such a case (for example, from a POJO inside the JSR181 component), you can use:
public JBIContainer getContainer(ComponentContext context) { try { Field field = context.getClass().getDeclaredField("context"); field.setAccessible(true); context = field.get(context); } catch (Exception e) { } try { Field field = context.getClass().getDeclaredField("container"); field.setAccessible(true); JBIContainer container = (JBIContainer) field.get(context); return container; } catch (Exception e) { return null; } }
See also this JIRA issue.