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.