Seems reasonable, since presumably OsgiPackageScanClassResolver is
more made to be used in an OSGI environment than the
DefaultPackageScanClassResolver.  This might also solve a problem I
was having, where OsgiDefaultCamelContext.getComponentNames() was
coming up empty.

Can you test with a non-core component as well, such as mail?

On Mon, Jun 27, 2011 at 4:21 PM, Michael Furtak <[email protected]> wrote:
> Ok. I seem to have found a resolution. Now the question is whether or not it 
> is appropriate. :)
>
> Since we seemed to agree that classes are not being found by their 
> annotations, I tried to backtrace how that was being resolved. Where I wound 
> up was in 
> org.apache.camel.core.osgi.OsgiTypeConverter.createRegistry(OsgiTypeConverter.java:166)
>
> There, it seems to be setting up the DefaultTypeConverter which will be used 
> as the delegate. It sets it up to use a DefaultPackageScanClassResolver, 
> which seems to be failing to find anything. If I change:
>
> protected DefaultTypeConverter createRegistry() {
>  // base the osgi type converter on the default type converter
>  DefaultTypeConverter answer = new DefaultTypeConverter(new 
> DefaultPackageScanClassResolver() {
>    @Override
>    public Set<ClassLoader> getClassLoaders() {
>      // we don't need any classloaders as we use osgi service tracker instead
>      return Collections.emptySet();
>    }
>  }, injector, factoryFinder);
> // ...
>
> to:
>
> protected DefaultTypeConverter createRegistry() {
>  // base the osgi type converter on the default type converter
>  PackageScanClassResolver resolver = new 
> OsgiPackageScanClassResolver(bundleContext);
>  DefaultTypeConverter answer = new DefaultTypeConverter(resolver, injector, 
> factoryFinder);
>
>
> then I get a successful startup and a working test case:
>
> from("file:data/inbox").to("file:data/outbox");
>
>
> Hurrah! So, is this a reasonable fix? Does the code I replaced in 
> OsgiTypeConverter make sense as written?
>
> Thanks to all who've helped so far.
>
> -Mike
>
>
>
>
>
>
>
> THIS MESSAGE IS INTENDED FOR THE USE OF THE PERSON TO WHOM IT IS ADDRESSED. 
> IT MAY CONTAIN INFORMATION THAT IS PRIVILEGED, CONFIDENTIAL AND EXEMPT FROM 
> DISCLOSURE UNDER APPLICABLE LAW. If you are not the intended recipient, your 
> use of this message for any purpose is strictly prohibited. If you have 
> received this communication in error, please delete the message and notify 
> the sender so that we may correct our records.
>
> -----Original Message-----
>
>
>
> From: Donald Whytock [mailto:[email protected]]
> Sent: Monday, June 27, 2011 1:56 PM
> To: [email protected]
> Subject: Re: Camel under OSGi without Spring et al.
>
> No specific thoughts, no.  It's fairly clear you're waiting for
> TypeConverterLoader to be registered before you're trying to start the
> CamelContext, and (if this is all the code you have loaded) you're not
> trying to access a file component.  Honestly, I think it should work,
> but again I'm not familiar with Declarative Services.
>
> My startup log file has some lines yours doesn't...
>
> org.apache.camel.camel-core[org.apache.camel.impl.osgi.Activator] :
> Found 13 @Converter classes to load
> org.apache.camel.camel-core[org.apache.camel.impl.osgi.Activator] :
> Loading converter class:
> org.apache.camel.component.file.GenericFileConverter
> org.apache.camel.camel-core[org.apache.camel.impl.osgi.Activator] :
> Loading converter class: org.apache.camel.component.bean.BeanConverter
> org.apache.camel.camel-core[org.apache.camel.impl.osgi.Activator] :
> Loading converter class: org.apache.camel.converter.CamelConverter
> org.apache.camel.camel-core[org.apache.camel.impl.osgi.Activator] :
> Loading converter class:
> org.apache.camel.converter.CollectionConverter
> org.apache.camel.camel-core[org.apache.camel.impl.osgi.Activator] :
> Loading converter class: org.apache.camel.converter.IOConverter
> org.apache.camel.camel-core[org.apache.camel.impl.osgi.Activator] :
> Loading converter class: org.apache.camel.converter.NIOConverter
> org.apache.camel.camel-core[org.apache.camel.impl.osgi.Activator] :
> Loading converter class: org.apache.camel.converter.ObjectConverter
> org.apache.camel.camel-core[org.apache.camel.impl.osgi.Activator] :
> Loading converter class:
> org.apache.camel.converter.TimePatternConverter
> org.apache.camel.camel-core[org.apache.camel.impl.osgi.Activator] :
> Loading converter class: org.apache.camel.converter.jaxp.DomConverter
> org.apache.camel.camel-core[org.apache.camel.impl.osgi.Activator] :
> Loading converter class: org.apache.camel.converter.jaxp.StaxConverter
> org.apache.camel.camel-core[org.apache.camel.impl.osgi.Activator] :
> Loading converter class:
> org.apache.camel.converter.jaxp.StreamSourceConverter
> org.apache.camel.camel-core[org.apache.camel.impl.osgi.Activator] :
> Loading converter class: org.apache.camel.converter.jaxp.XmlConverter
> org.apache.camel.camel-core[org.apache.camel.impl.osgi.Activator] :
> Loading converter class:
> org.apache.camel.converter.stream.StreamCacheConverter
>
> which might correspond to the "Searching for annotations" line in your
> log.  Random thought...are annotations enabled in your JVM?
>
> I'm sending the rest of the pieces of my bundle (under separate cover,
> as the list apparently eats attachments; available to others on
> request).  If that doesn't work for you either, my guess is something
> in your Camel config.
>
> Don
>
> On Mon, Jun 27, 2011 at 12:26 PM, Michael Furtak <[email protected]> wrote:
>> Hi Don,
>>
>> Thanks for your continued help. I've had my efforts diverted elsewhere for a 
>> bit, but I'm back to trying to explore this again today.
>>
>> Following this message: 
>> http://camel.465427.n5.nabble.com/Camel-under-OSGi-without-Spring-et-al-tp4507473p4511826.html
>>
>> I've modified my test environment slightly. I've added the 
>> TypeConverterLoader to the list of services that my CamelStarter requires 
>> before it activates. That means that it now binds a ComponentResolver with 
>> (component=file) and a TypeConverterLoader before the activate method is 
>> invoked. That is also visible in the log. However, the call to 
>> camelContext.start() still produces an exception.
>>
>>
>>
>>
>> <?xml version="1.0" encoding="UTF-8"?>
>> <scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0"; 
>> name="com.cra.camelsandbox.CamelStarter">
>>   <implementation class="com.cra.camelsandbox.CamelStarter"/>
>>   <reference bind="bindComponentResolver" cardinality="1..1" 
>> interface="org.apache.camel.spi.ComponentResolver" name="ComponentResolver" 
>> policy="dynamic" target="(component=file)" unbind="unbindComponentResolver"/>
>>   <reference bind="bindTypeConverterLoader" cardinality="1..1" 
>> interface="org.apache.camel.spi.TypeConverterLoader" 
>> name="TypeConverterLoader" policy="dynamic" 
>> unbind="unbindTypeConverterLoader"/>
>> </scr:component>
>>
>>
>>
>>
>> public class CamelStarter
>> {
>>  private static final transient Logger LOG = 
>> LoggerFactory.getLogger(CamelStarter.class);
>>
>>  protected void activate(ComponentContext context)
>>  {
>>    try
>>    {
>>      LOG.trace("activating");
>>      CamelContext camelContext = new 
>> OsgiDefaultCamelContext(context.getBundleContext());
>>      camelContext.start();
>>    }
>>    catch (Throwable t)
>>    {
>>      t.printStackTrace();
>>    }
>>  }
>>
>>  protected void deactivate(ComponentContext context)
>>  {
>>    LOG.trace("deactivating");
>>  }
>>
>>  protected void bindComponentResolver(ComponentResolver cr)
>>  {
>>    LOG.trace("Binding ComponentResolver");
>>    // Ignored, since the ComponentResolver is not directly used
>>  }
>>
>>  protected void unbindComponentResolver(ComponentResolver cr)
>>  {
>>    LOG.trace("Unbinding ComponentResolver");
>>    // Ignored, since the ComponentResolver is not directly used
>>  }
>>
>>  protected void bindTypeConverterLoader(TypeConverterLoader tcl)
>>  {
>>    LOG.trace("Binding TypeConverterLoader");
>>    // Ignored, since the ComponentResolver is not directly used
>>  }
>>
>>  protected void unbindTypeConverterLoader(TypeConverterLoader tcl)
>>  {
>>    LOG.trace("Unbinding TypeConverterLoader");
>>    // Ignored, since the ComponentResolver is not directly used
>>  }
>> }
>>
>>
>>
>> I've also tweaked my logging settings to capture Camel's output, in the hope 
>> that it provides some more context:
>>
>>
>>
>> <START CONSOLE>
>>
>> [27 Jun 2011 12:20:11]  INFO  [Start Level Event Dispatcher] Activator - 
>> Camel activator starting
>> [27 Jun 2011 12:20:11]  DEBUG [Start Level Event Dispatcher] Activator - 
>> Bundle started: scala-library
>> [27 Jun 2011 12:20:11]  DEBUG [Start Level Event Dispatcher] Activator - 
>> Bundle started: org.eclipse.osgi.services
>> [27 Jun 2011 12:20:11]  DEBUG [Start Level Event Dispatcher] Activator - 
>> Bundle started: org.eclipse.equinox.event
>> [27 Jun 2011 12:20:11]  DEBUG [Start Level Event Dispatcher] Activator - 
>> Bundle started: org.eclipse.equinox.util
>> [27 Jun 2011 12:20:11]  DEBUG [Start Level Event Dispatcher] Activator - 
>> Bundle started: org.eclipse.equinox.ds
>> [27 Jun 2011 12:20:11]  INFO  [Start Level Event Dispatcher] Activator - 
>> Camel activator started
>> [27 Jun 2011 12:20:11]  DEBUG [Start Level Event Dispatcher] Activator - 
>> Bundle started: org.apache.camel.camel-core
>> [27 Jun 2011 12:20:11]  DEBUG [Start Level Event Dispatcher] Activator - 
>> Found entry: META-INF/services/org/apache/camel/component/bean in bundle 
>> org.apache.camel.camel-core
>> [27 Jun 2011 12:20:11]  DEBUG [Start Level Event Dispatcher] Activator - 
>> Found entry: META-INF/services/org/apache/camel/component/browse in bundle 
>> org.apache.camel.camel-core
>> [27 Jun 2011 12:20:11]  DEBUG [Start Level Event Dispatcher] Activator - 
>> Found entry: META-INF/services/org/apache/camel/component/class in bundle 
>> org.apache.camel.camel-core
>> [27 Jun 2011 12:20:11]  DEBUG [Start Level Event Dispatcher] Activator - 
>> Found entry: META-INF/services/org/apache/camel/component/dataset in bundle 
>> org.apache.camel.camel-core
>> [27 Jun 2011 12:20:11]  DEBUG [Start Level Event Dispatcher] Activator - 
>> Found entry: META-INF/services/org/apache/camel/component/direct in bundle 
>> org.apache.camel.camel-core
>> [27 Jun 2011 12:20:11]  DEBUG [Start Level Event Dispatcher] Activator - 
>> Found entry: META-INF/services/org/apache/camel/component/file in bundle 
>> org.apache.camel.camel-core
>> [27 Jun 2011 12:20:11]  DEBUG [Start Level Event Dispatcher] Activator - 
>> Found entry: META-INF/services/org/apache/camel/component/language in bundle 
>> org.apache.camel.camel-core
>> [27 Jun 2011 12:20:11]  DEBUG [Start Level Event Dispatcher] Activator - 
>> Found entry: META-INF/services/org/apache/camel/component/log in bundle 
>> org.apache.camel.camel-core
>> [27 Jun 2011 12:20:11]  DEBUG [Start Level Event Dispatcher] Activator - 
>> Found entry: META-INF/services/org/apache/camel/component/mock in bundle 
>> org.apache.camel.camel-core
>> [27 Jun 2011 12:20:11]  DEBUG [Start Level Event Dispatcher] Activator - 
>> Found entry: META-INF/services/org/apache/camel/component/properties in 
>> bundle org.apache.camel.camel-core
>> [27 Jun 2011 12:20:11]  DEBUG [Start Level Event Dispatcher] Activator - 
>> Found entry: META-INF/services/org/apache/camel/component/ref in bundle 
>> org.apache.camel.camel-core
>> [27 Jun 2011 12:20:11]  DEBUG [Start Level Event Dispatcher] Activator - 
>> Found entry: META-INF/services/org/apache/camel/component/seda in bundle 
>> org.apache.camel.camel-core
>> [27 Jun 2011 12:20:11]  DEBUG [Start Level Event Dispatcher] Activator - 
>> Found entry: META-INF/services/org/apache/camel/component/timer in bundle 
>> org.apache.camel.camel-core
>> [27 Jun 2011 12:20:11]  DEBUG [Start Level Event Dispatcher] Activator - 
>> Found entry: META-INF/services/org/apache/camel/component/vm in bundle 
>> org.apache.camel.camel-core
>> [27 Jun 2011 12:20:11]  DEBUG [Start Level Event Dispatcher] Activator - 
>> Found entry: META-INF/services/org/apache/camel/language/bean in bundle 
>> org.apache.camel.camel-core
>> [27 Jun 2011 12:20:11]  DEBUG [Start Level Event Dispatcher] Activator - 
>> Found entry: META-INF/services/org/apache/camel/language/constant in bundle 
>> org.apache.camel.camel-core
>> [27 Jun 2011 12:20:11]  DEBUG [Start Level Event Dispatcher] Activator - 
>> Found entry: META-INF/services/org/apache/camel/language/file in bundle 
>> org.apache.camel.camel-core
>> [27 Jun 2011 12:20:11]  DEBUG [Start Level Event Dispatcher] Activator - 
>> Found entry: META-INF/services/org/apache/camel/language/header in bundle 
>> org.apache.camel.camel-core
>> [27 Jun 2011 12:20:11]  DEBUG [Start Level Event Dispatcher] Activator - 
>> Found entry: META-INF/services/org/apache/camel/language/property in bundle 
>> org.apache.camel.camel-core
>> [27 Jun 2011 12:20:11]  DEBUG [Start Level Event Dispatcher] Activator - 
>> Found entry: META-INF/services/org/apache/camel/language/simple in bundle 
>> org.apache.camel.camel-core
>> [27 Jun 2011 12:20:11]  DEBUG [Start Level Event Dispatcher] Activator - 
>> Found entry: META-INF/services/org/apache/camel/language/tokenize in bundle 
>> org.apache.camel.camel-core
>> [27 Jun 2011 12:20:11]  DEBUG [Start Level Event Dispatcher] Activator - 
>> Found entry: META-INF/services/org/apache/camel/language/xpath in bundle 
>> org.apache.camel.camel-core
>> [27 Jun 2011 12:20:11]  DEBUG [Start Level Event Dispatcher] Activator - 
>> Bundle started: org.eclipse.osgi.util
>> [27 Jun 2011 12:20:11]  DEBUG [Start Level Event Dispatcher] Activator - 
>> Bundle started: com.cra.camel.core.osgi
>> [27 Jun 2011 12:20:11]  DEBUG [Start Level Event Dispatcher] Activator - 
>> Bundle started: se.scalablesolutions.akka.actor
>> [27 Jun 2011 12:20:11]  DEBUG [Start Level Event Dispatcher] Activator - 
>> Bundle started: commons-management
>> [27 Jun 2011 12:20:11]  DEBUG [Start Level Event Dispatcher] Activator - 
>> Bundle started: org.eclipse.equinox.log
>> [27 Jun 2011 12:20:11]  DEBUG [Start Level Event Dispatcher] Activator - 
>> Bundle started: org.apache.log4j
>> [27 Jun 2011 12:20:11]  TRACE [Component Resolve Thread] CamelStarter - 
>> Binding ComponentResolver
>> [27 Jun 2011 12:20:11]  TRACE [Component Resolve Thread] CamelStarter - 
>> Binding TypeConverterLoader
>> [27 Jun 2011 12:20:11]  TRACE [Component Resolve Thread] CamelStarter - 
>> activating
>> [27 Jun 2011 12:20:12]  TRACE [Component Resolve Thread] 
>> DefaultPackageScanClassResolver - Adding ContextClassLoader from current 
>> thread: org.eclipse.core.runtime.internal.adaptor.ContextFinder@193722c
>> [27 Jun 2011 12:20:12]  DEBUG [Component Resolve Thread] 
>> OsgiCamelContextHelper - Using OsgiCamelContextNameStrategy
>> [27 Jun 2011 12:20:12]  DEBUG [Component Resolve Thread] 
>> OsgiCamelContextHelper - Using OsgiClassResolver
>> [27 Jun 2011 12:20:12]  DEBUG [Component Resolve Thread] 
>> OsgiCamelContextHelper - Using OsgiFactoryFinderResolver
>> [27 Jun 2011 12:20:12]  DEBUG [Component Resolve Thread] 
>> OsgiCamelContextHelper - Using OsgiPackageScanClassResolver
>> [27 Jun 2011 12:20:12]  TRACE [Component Resolve Thread] 
>> OsgiPackageScanClassResolver - Adding ContextClassLoader from current 
>> thread: org.eclipse.core.runtime.internal.adaptor.ContextFinder@193722c
>> [27 Jun 2011 12:20:12]  DEBUG [Component Resolve Thread] 
>> OsgiCamelContextHelper - Using OsgiComponentResolver
>> [27 Jun 2011 12:20:12]  DEBUG [Component Resolve Thread] 
>> OsgiCamelContextHelper - Using OsgiLanguageResolver
>> [27 Jun 2011 12:20:12]  DEBUG [Component Resolve Thread] 
>> OsgiCamelContextHelper - Using OsgiDataFormatResolver
>> [27 Jun 2011 12:20:12]  INFO  [Component Resolve Thread] 
>> OsgiDefaultCamelContext - Apache Camel  (CamelContext: 13-camel-2) is 
>> starting
>> [27 Jun 2011 12:20:12]  INFO  [Component Resolve Thread] 
>> OsgiDefaultCamelContext - JMX enabled. Using ManagedManagementStrategy.
>> [27 Jun 2011 12:20:12]  TRACE [Component Resolve Thread] ServiceHelper - 
>> Starting service: 
>> org.apache.camel.management.ManagedManagementStrategy@1865b28
>> [27 Jun 2011 12:20:12]  WARN  [Component Resolve Thread] 
>> OsgiDefaultCamelContext - Cannot find needed classes for JMX lifecycle 
>> strategy. Needed class is in spring-context.jar using Spring 2.5 or newer 
>> (spring-jmx.jar using Spring 2.0.x). NoClassDefFoundError: 
>> org/springframework/jmx/export/metadata/JmxAttributeSource
>> [27 Jun 2011 12:20:12]  WARN  [Component Resolve Thread] 
>> OsgiDefaultCamelContext - Cannot use JMX. Fallback to using 
>> DefaultManagementStrategy (non JMX).
>> [27 Jun 2011 12:20:12]  TRACE [Component Resolve Thread] ServiceHelper - 
>> Starting service: org.apache.camel.core.osgi.OsgiTypeConverter@1d62270
>> [27 Jun 2011 12:20:12]  TRACE [Component Resolve Thread] OsgiTypeConverter - 
>> AddingService: {org.apache.camel.spi.TypeConverterLoader}={service.id=36}
>> [27 Jun 2011 12:20:12]  TRACE [Component Resolve Thread] OsgiTypeConverter$1 
>> - Adding ContextClassLoader from current thread: 
>> org.eclipse.core.runtime.internal.adaptor.ContextFinder@193722c
>> [27 Jun 2011 12:20:12]  TRACE [Component Resolve Thread] 
>> DefaultTypeConverter - Adding fallback type converter: 
>> org.apache.camel.impl.converter.ToStringTypeConverter@d73c7a which can 
>> promote: false
>> [27 Jun 2011 12:20:12]  TRACE [Component Resolve Thread] 
>> DefaultTypeConverter - Adding fallback type converter: 
>> org.apache.camel.impl.converter.PropertyEditorTypeConverter@1e845c2 which 
>> can promote: false
>> [27 Jun 2011 12:20:12]  TRACE [Component Resolve Thread] 
>> DefaultTypeConverter - Adding fallback type converter: 
>> org.apache.camel.impl.converter.EnumTypeConverter@125fefa which can promote: 
>> true
>> [27 Jun 2011 12:20:12]  TRACE [Component Resolve Thread] 
>> DefaultTypeConverter - Adding fallback type converter: 
>> org.apache.camel.impl.converter.ArrayTypeConverter@19e8f17 which can 
>> promote: true
>> [27 Jun 2011 12:20:12]  TRACE [Component Resolve Thread] 
>> DefaultTypeConverter - Adding fallback type converter: 
>> org.apache.camel.impl.converter.FutureTypeConverter@13ad33d which can 
>> promote: false
>> [27 Jun 2011 12:20:12]  TRACE [Component Resolve Thread] 
>> DefaultTypeConverter - Adding fallback type converter: 
>> org.apache.camel.impl.converter.AsyncProcessorTypeConverter@7109c4 which can 
>> promote: true
>> [27 Jun 2011 12:20:12]  TRACE [Component Resolve Thread] ServiceHelper - 
>> Starting service: 
>> org.apache.camel.impl.converter.DefaultTypeConverter@1aed5f9
>> [27 Jun 2011 12:20:12]  TRACE [Component Resolve Thread] ServiceHelper - 
>> Starting service: 
>> org.apache.camel.impl.converter.PropertyEditorTypeConverter@1e845c2
>> [27 Jun 2011 12:20:12]  DEBUG [Component Resolve Thread] 
>> DefaultTypeConverter - Loading type converters ...
>> [27 Jun 2011 12:20:12]  INFO  [Component Resolve Thread] 
>> AnnotationTypeConverterLoader - Loading file 
>> META-INF/services/org/apache/camel/TypeConverter to retrieve list of 
>> packages, from url: 
>> bundleresource://5.fwk5184781/META-INF/services/org/apache/camel/TypeConverter
>> [27 Jun 2011 12:20:12]  DEBUG [Component Resolve Thread] OsgiTypeConverter$1 
>> - Searching for annotations of org.apache.camel.Converter in packages: 
>> [org.apache.camel.component.file, org.apache.camel.component.bean, 
>> org.apache.camel.converter]
>> [27 Jun 2011 12:20:12]  DEBUG [Component Resolve Thread] OsgiTypeConverter$1 
>> - Found: []
>> [27 Jun 2011 12:20:12]  TRACE [Component Resolve Thread] ServiceHelper - 
>> Stopping service 
>> org.apache.camel.impl.converter.PropertyEditorTypeConverter@1e845c2
>> [27 Jun 2011 12:20:12]  INFO  [Component Resolve Thread] 
>> OsgiDefaultCamelContext - Apache Camel  (CamelContext:13-camel-2) is 
>> shutting down
>> [27 Jun 2011 12:20:12]  INFO  [Component Resolve Thread] 
>> DefaultShutdownStrategy - Starting to graceful shutdown 0 routes (timeout 
>> 300 seconds)
>> [27 Jun 2011 12:20:12]  DEBUG [Component Resolve Thread] 
>> DefaultExecutorServiceStrategy - Created new single thread pool for source: 
>> org.apache.camel.impl.DefaultShutdownStrategy@4ecfdd with name: 
>> ShutdownTask. -> 
>> java.util.concurrent.Executors$FinalizableDelegatedExecutorService@30d82d
>> [27 Jun 2011 12:20:12]  TRACE [Component Resolve Thread] 
>> ExecutorServiceHelper - Created thread[ShutdownTask]: Thread[Camel Thread 0 
>> - ShutdownTask,5,main]
>> [27 Jun 2011 12:20:12]  DEBUG [Camel Thread 0 - ShutdownTask] 
>> DefaultShutdownStrategy - There are 0 routes to shutdown
>> [27 Jun 2011 12:20:12]  INFO  [Component Resolve Thread] 
>> DefaultShutdownStrategy - Graceful shutdown of 0 routes completed in 0 
>> seconds
>> [27 Jun 2011 12:20:12]  TRACE [Component Resolve Thread] ServiceHelper - 
>> Service already stopped: org.apache.camel.core.osgi.OsgiTypeConverter@1d62270
>> [27 Jun 2011 12:20:12]  TRACE [Component Resolve Thread] ServiceHelper - 
>> Shutting down service org.apache.camel.core.osgi.OsgiTypeConverter@1d62270
>> [27 Jun 2011 12:20:12]  TRACE [Component Resolve Thread] ServiceHelper - 
>> Stopping service 
>> org.apache.camel.management.DefaultManagementStrategy@164dbd5
>> [27 Jun 2011 12:20:12]  INFO  [Component Resolve Thread] 
>> OsgiDefaultCamelContext - Uptime: 0.063 seconds
>> [27 Jun 2011 12:20:12]  INFO  [Component Resolve Thread] 
>> OsgiDefaultCamelContext - Apache Camel  (CamelContext: 13-camel-2) is 
>> shutdown in 0.016 seconds
>> org.apache.camel.RuntimeCamelException: Error staring OSGiTypeConverter due: 
>> Failed to load type converters because of: Cannot find any type converter 
>> classes from the following packages: [org.apache.camel.component.file, 
>> org.apache.camel.component.bean, org.apache.camel.converter]
>>        at 
>> org.apache.camel.core.osgi.OsgiTypeConverter.createRegistry(OsgiTypeConverter.java:206)
>>        at 
>> org.apache.camel.core.osgi.OsgiTypeConverter.getDelegate(OsgiTypeConverter.java:164)
>>        at 
>> org.apache.camel.core.osgi.OsgiTypeConverter.addingService(OsgiTypeConverter.java:69)
>>        at 
>> org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:896)
>>        at 
>> org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:261)
>>        at 
>> org.osgi.util.tracker.AbstractTracked.trackInitial(AbstractTracked.java:184)
>>        at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:339)
>>        at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:273)
>>        at 
>> org.apache.camel.core.osgi.OsgiTypeConverter.doStart(OsgiTypeConverter.java:102)
>>        at org.apache.camel.impl.ServiceSupport.start(ServiceSupport.java:67)
>>        at org.apache.camel.impl.ServiceSupport.start(ServiceSupport.java:54)
>>        at 
>> org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:60)
>>        at 
>> org.apache.camel.impl.DefaultCamelContext.startServices(DefaultCamelContext.java:1613)
>>        at 
>> org.apache.camel.impl.DefaultCamelContext.addService(DefaultCamelContext.java:899)
>>        at 
>> org.apache.camel.impl.DefaultCamelContext.getTypeConverter(DefaultCamelContext.java:984)
>>        at 
>> org.apache.camel.impl.DefaultCamelContext.getTypeConverterRegistry(DefaultCamelContext.java:1001)
>>        at 
>> org.apache.camel.impl.DefaultCamelContext.forceLazyInitialization(DefaultCamelContext.java:1940)
>>        at 
>> org.apache.camel.impl.DefaultCamelContext.doStartCamel(DefaultCamelContext.java:1423)
>>        at 
>> org.apache.camel.impl.DefaultCamelContext.doStart(DefaultCamelContext.java:1336)
>>        at org.apache.camel.impl.ServiceSupport.start(ServiceSupport.java:67)
>>        at org.apache.camel.impl.ServiceSupport.start(ServiceSupport.java:54)
>>        at 
>> org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:1314)
>>        at com.cra.camelsandbox.CamelStarter.activate(CamelStarter.java:21)
>>        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>        at 
>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>>        at 
>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>>        at java.lang.reflect.Method.invoke(Method.java:597)
>>        at 
>> org.eclipse.equinox.internal.ds.model.ServiceComponent.activate(ServiceComponent.java:210)
>>        at 
>> org.eclipse.equinox.internal.ds.model.ServiceComponentProp.activate(ServiceComponentProp.java:139)
>>        at 
>> org.eclipse.equinox.internal.ds.model.ServiceComponentProp.build(ServiceComponentProp.java:339)
>>        at 
>> org.eclipse.equinox.internal.ds.InstanceProcess.buildComponent(InstanceProcess.java:588)
>>        at 
>> org.eclipse.equinox.internal.ds.InstanceProcess.buildComponents(InstanceProcess.java:196)
>>        at 
>> org.eclipse.equinox.internal.ds.Resolver.buildNewlySatisfied(Resolver.java:441)
>>        at 
>> org.eclipse.equinox.internal.ds.Resolver.enableComponents(Resolver.java:213)
>>        at 
>> org.eclipse.equinox.internal.ds.SCRManager.performWork(SCRManager.java:800)
>>        at 
>> org.eclipse.equinox.internal.ds.SCRManager$QueuedJob.dispatch(SCRManager.java:767)
>>        at org.eclipse.equinox.internal.ds.WorkThread.run(WorkThread.java:89)
>>        at java.lang.Thread.run(Thread.java:619)
>> Caused by: org.apache.camel.TypeConverterLoaderException: Failed to load 
>> type converters because of: Cannot find any type converter classes from the 
>> following packages: [org.apache.camel.component.file, 
>> org.apache.camel.component.bean, org.apache.camel.converter]
>>        at 
>> org.apache.camel.impl.converter.AnnotationTypeConverterLoader.load(AnnotationTypeConverterLoader.java:79)
>>        at 
>> org.apache.camel.impl.converter.BaseTypeConverterRegistry.loadTypeConverters(BaseTypeConverterRegistry.java:395)
>>        at 
>> org.apache.camel.impl.converter.DefaultTypeConverter.doStart(DefaultTypeConverter.java:41)
>>        at org.apache.camel.impl.ServiceSupport.start(ServiceSupport.java:67)
>>        at org.apache.camel.impl.ServiceSupport.start(ServiceSupport.java:54)
>>        at 
>> org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:60)
>>        at 
>> org.apache.camel.core.osgi.OsgiTypeConverter.createRegistry(OsgiTypeConverter.java:202)
>>        ... 37 more
>> [27 Jun 2011 12:20:12]  DEBUG [Start Level Event Dispatcher] Activator - 
>> Bundle started: com.cra.camelsandbox.core
>> [27 Jun 2011 12:20:12]  DEBUG [Start Level Event Dispatcher] Activator - 
>> Bundle started: slf4j.api
>> [27 Jun 2011 12:20:12]  DEBUG [Start Level Event Dispatcher] Activator - 
>> Bundle started: org.eclipse.osgi
>>
>> <END CONSOLE>
>>
>>
>>
>> The lines:
>>
>> [27 Jun 2011 12:20:12]  DEBUG [Component Resolve Thread] OsgiTypeConverter$1 
>> - Searching for annotations of org.apache.camel.Converter in packages: 
>> [org.apache.camel.component.file, org.apache.camel.component.bean, 
>> org.apache.camel.converter]
>> [27 Jun 2011 12:20:12]  DEBUG [Component Resolve Thread] OsgiTypeConverter$1 
>> - Found: []
>>
>> ...seem indicative of the problem to my untrained eye. Do you have any 
>> further thoughts about what I am doing wrong?
>>
>>
>>
>> Thanks again,
>> -Mike
>>
>>
>>
>>
>>
>>
>>
>>
>> THIS MESSAGE IS INTENDED FOR THE USE OF THE PERSON TO WHOM IT IS ADDRESSED. 
>> IT MAY CONTAIN INFORMATION THAT IS PRIVILEGED, CONFIDENTIAL AND EXEMPT FROM 
>> DISCLOSURE UNDER APPLICABLE LAW. If you are not the intended recipient, your 
>> use of this message for any purpose is strictly prohibited. If you have 
>> received this communication in error, please delete the message and notify 
>> the sender so that we may correct our records.
>>
>> -----Original Message-----
>>
>>
>>
>> From: Donald Whytock [mailto:[email protected]]
>> Sent: Tuesday, June 21, 2011 4:10 PM
>> To: [email protected]
>> Subject: Re: Camel under OSGi without Spring et al.
>>
>> Not familiar with OSGi Declarative Services, so there will be some
>> guesswork on my part...
>>
>> Yes, I use OsgiCamelTracker to control the Camel-using bundles.  But
>> it also tracks whether the CamelContext-singleton-providing service
>> (ContextUtil) is up.  That service in turn depends on an instance of
>> org.apache.camel.spi.TypeConverterLoader service.
>>
>> camel-core has a BundleActivator.  That activator starts a
>> BundleTracker that checks every bundle that launches (including
>> itself) to see if it contains components that need to be loaded.  It
>> registers the components as services first, then it registers
>> TypeConverterLoader.
>>
>> From the example you gave, it looks like you need to create another
>> class that binds to TypeConverterLoader, generates and starts a
>> CamelContext, and then registers itself as a service; then your
>> CamelStarter class would bind to that service along with the
>> ComponentResolver(s), and fetch the CamelContext from that service.
>>
>> Can you bind to multiple services via your XML, such that your class
>> won't activate until all the other services are found?
>>
>> Don
>>
>> On Tue, Jun 21, 2011 at 3:21 PM, Michael Furtak <[email protected]> wrote:
>>> Hi Don,
>>>
>>> I reviewed your sample code. Thanks very much for sharing that with me. If 
>>> I understand the intent and explanation correctly, you are using your 
>>> OsgiCamelTracker to delay the start-up of your Camel-using code until you 
>>> can be sure that the requisite ComponentResolver services have become 
>>> available.
>>>
>>> In my current project we use OSGi Declarative Services, so I have set up an 
>>> OSGi component (yay, overloaded terms!) that requests a service reference 
>>> for a ComponentResolver that can provide the Camel 'file' component. This 
>>> should have the same effect of delaying the activation of my CamelStarter 
>>> class until that service can be bound. Here's the DS xml:
>>>
>>> <?xml version="1.0" encoding="UTF-8"?>
>>> <scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0"; 
>>> name="com.cra.camelsandbox.CamelStarter">
>>>   <implementation class="com.cra.camelsandbox.CamelStarter"/>
>>>   <reference bind="bindComponentResolver" cardinality="1..1" 
>>> interface="org.apache.camel.spi.ComponentResolver" name="ComponentResolver" 
>>> policy="dynamic" target="(component=file)" 
>>> unbind="unbindComponentResolver"/>
>>> </scr:component>
>>>
>>>
>>> And the Java class itself:
>>>
>>> public class CamelStarter
>>> {
>>>  private static final transient Logger LOG = 
>>> LoggerFactory.getLogger(CamelStarter.class);
>>>
>>>  protected void activate(ComponentContext context) throws Exception
>>>  {
>>>    LOG.trace("activating");
>>>    CamelContext camelContext = new 
>>> OsgiDefaultCamelContext(context.getBundleContext());
>>>    // camelContext.start();
>>>  }
>>>
>>>  protected void deactivate(ComponentContext context)
>>>  {
>>>    LOG.trace("deactivating");
>>>  }
>>>
>>>  protected void bindComponentResolver(ComponentResolver cr)
>>>  {
>>>    LOG.trace("Binding ComponentResolver");
>>>    // Ignored, since the ComponentResolver is not directly used
>>>  }
>>>
>>>  protected void unbindComponentResolver(ComponentResolver cr)
>>>  {
>>>    LOG.trace("Unbinding ComponentResolver");
>>>    // Ignored, since the ComponentResolver is not directly used
>>>  }
>>> }
>>>
>>> With the third line of the activate method commented out, everything seems 
>>> to go as planned:
>>>
>>> [21 Jun 2011 15:08:19]  TRACE [Component Resolve Thread (Bundle 12)] 
>>> CamelStarter - Binding ComponentResolver
>>> [21 Jun 2011 15:08:19]  TRACE [Component Resolve Thread (Bundle 12)] 
>>> CamelStarter - activating
>>>
>>>
>>> But if I uncomment it, I get this:
>>>
>>> java.lang.reflect.InvocationTargetException
>>>        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>        at 
>>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>>>        at 
>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>>>        at java.lang.reflect.Method.invoke(Method.java:597)
>>>        at 
>>> org.eclipse.equinox.internal.ds.model.ServiceComponent.activate(ServiceComponent.java:210)
>>>        at 
>>> org.eclipse.equinox.internal.ds.model.ServiceComponentProp.activate(ServiceComponentProp.java:139)
>>>        at 
>>> org.eclipse.equinox.internal.ds.model.ServiceComponentProp.build(ServiceComponentProp.java:339)
>>>        at 
>>> org.eclipse.equinox.internal.ds.InstanceProcess.buildComponent(InstanceProcess.java:588)
>>>        at 
>>> org.eclipse.equinox.internal.ds.InstanceProcess.buildComponents(InstanceProcess.java:196)
>>>        at 
>>> org.eclipse.equinox.internal.ds.Resolver.buildNewlySatisfied(Resolver.java:441)
>>>        at 
>>> org.eclipse.equinox.internal.ds.Resolver.enableComponents(Resolver.java:213)
>>>        at 
>>> org.eclipse.equinox.internal.ds.SCRManager.performWork(SCRManager.java:800)
>>>        at 
>>> org.eclipse.equinox.internal.ds.SCRManager$QueuedJob.dispatch(SCRManager.java:767)
>>>        at org.eclipse.equinox.internal.ds.WorkThread.run(WorkThread.java:89)
>>>        at 
>>> org.eclipse.equinox.internal.util.impl.tpt.threadpool.Executor.run(Executor.java:70)
>>> Caused by: org.apache.camel.RuntimeCamelException: Error staring 
>>> OSGiTypeConverter due: Failed to load type converters because of: Cannot 
>>> find any type converter classes from the following packages: 
>>> [org.apache.camel.component.file, org.apache.camel.component.bean, 
>>> org.apache.camel.converter]
>>>        at 
>>> org.apache.camel.core.osgi.OsgiTypeConverter.createRegistry(OsgiTypeConverter.java:206)
>>>        at 
>>> org.apache.camel.core.osgi.OsgiTypeConverter.getDelegate(OsgiTypeConverter.java:164)
>>>        at 
>>> org.apache.camel.core.osgi.OsgiTypeConverter.addingService(OsgiTypeConverter.java:69)
>>>        at 
>>> org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:896)
>>>        at 
>>> org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:261)
>>>        at 
>>> org.osgi.util.tracker.AbstractTracked.trackInitial(AbstractTracked.java:184)
>>>        at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:339)
>>>        at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:273)
>>>        at 
>>> org.apache.camel.core.osgi.OsgiTypeConverter.doStart(OsgiTypeConverter.java:102)
>>>        at org.apache.camel.impl.ServiceSupport.start(ServiceSupport.java:67)
>>>        at org.apache.camel.impl.ServiceSupport.start(ServiceSupport.java:54)
>>>        at 
>>> org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:60)
>>>        at 
>>> org.apache.camel.impl.DefaultCamelContext.startServices(DefaultCamelContext.java:1613)
>>>        at 
>>> org.apache.camel.impl.DefaultCamelContext.addService(DefaultCamelContext.java:899)
>>>        at 
>>> org.apache.camel.impl.DefaultCamelContext.getTypeConverter(DefaultCamelContext.java:984)
>>>        at 
>>> org.apache.camel.impl.DefaultCamelContext.getTypeConverterRegistry(DefaultCamelContext.java:1001)
>>>        at 
>>> org.apache.camel.impl.DefaultCamelContext.forceLazyInitialization(DefaultCamelContext.java:1940)
>>>        at 
>>> org.apache.camel.impl.DefaultCamelContext.doStartCamel(DefaultCamelContext.java:1423)
>>>        at 
>>> org.apache.camel.impl.DefaultCamelContext.doStart(DefaultCamelContext.java:1336)
>>>        at org.apache.camel.impl.ServiceSupport.start(ServiceSupport.java:67)
>>>        at org.apache.camel.impl.ServiceSupport.start(ServiceSupport.java:54)
>>>        at 
>>> org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:1314)
>>>        at com.cra.camelsandbox.CamelStarter.activate(CamelStarter.java:18)
>>>        ... 15 more
>>> Caused by: org.apache.camel.TypeConverterLoaderException: Failed to load 
>>> type converters because of: Cannot find any type converter classes from the 
>>> following packages: [org.apache.camel.component.file, 
>>> org.apache.camel.component.bean, org.apache.camel.converter]
>>>        at 
>>> org.apache.camel.impl.converter.AnnotationTypeConverterLoader.load(AnnotationTypeConverterLoader.java:79)
>>>        at 
>>> org.apache.camel.impl.converter.BaseTypeConverterRegistry.loadTypeConverters(BaseTypeConverterRegistry.java:395)
>>>        at 
>>> org.apache.camel.impl.converter.DefaultTypeConverter.doStart(DefaultTypeConverter.java:41)
>>>        at org.apache.camel.impl.ServiceSupport.start(ServiceSupport.java:67)
>>>        at org.apache.camel.impl.ServiceSupport.start(ServiceSupport.java:54)
>>>        at 
>>> org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:60)
>>>        at 
>>> org.apache.camel.core.osgi.OsgiTypeConverter.createRegistry(OsgiTypeConverter.java:202)
>>>        ... 37 more
>>> Root exception:
>>> org.apache.camel.RuntimeCamelException: Error staring OSGiTypeConverter 
>>> due: Failed to load type converters because of: Cannot find any type 
>>> converter classes from the following packages: 
>>> [org.apache.camel.component.file, org.apache.camel.component.bean, 
>>> org.apache.camel.converter]
>>>        at 
>>> org.apache.camel.core.osgi.OsgiTypeConverter.createRegistry(OsgiTypeConverter.java:206)
>>>        at 
>>> org.apache.camel.core.osgi.OsgiTypeConverter.getDelegate(OsgiTypeConverter.java:164)
>>>        at 
>>> org.apache.camel.core.osgi.OsgiTypeConverter.addingService(OsgiTypeConverter.java:69)
>>>        at 
>>> org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:896)
>>>        at 
>>> org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:261)
>>>        at 
>>> org.osgi.util.tracker.AbstractTracked.trackInitial(AbstractTracked.java:184)
>>>        at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:339)
>>>        at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:273)
>>>        at 
>>> org.apache.camel.core.osgi.OsgiTypeConverter.doStart(OsgiTypeConverter.java:102)
>>>        at org.apache.camel.impl.ServiceSupport.start(ServiceSupport.java:67)
>>>        at org.apache.camel.impl.ServiceSupport.start(ServiceSupport.java:54)
>>>        at 
>>> org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:60)
>>>        at 
>>> org.apache.camel.impl.DefaultCamelContext.startServices(DefaultCamelContext.java:1613)
>>>        at 
>>> org.apache.camel.impl.DefaultCamelContext.addService(DefaultCamelContext.java:899)
>>>        at 
>>> org.apache.camel.impl.DefaultCamelContext.getTypeConverter(DefaultCamelContext.java:984)
>>>        at 
>>> org.apache.camel.impl.DefaultCamelContext.getTypeConverterRegistry(DefaultCamelContext.java:1001)
>>>        at 
>>> org.apache.camel.impl.DefaultCamelContext.forceLazyInitialization(DefaultCamelContext.java:1940)
>>>        at 
>>> org.apache.camel.impl.DefaultCamelContext.doStartCamel(DefaultCamelContext.java:1423)
>>>        at 
>>> org.apache.camel.impl.DefaultCamelContext.doStart(DefaultCamelContext.java:1336)
>>>        at org.apache.camel.impl.ServiceSupport.start(ServiceSupport.java:67)
>>>        at org.apache.camel.impl.ServiceSupport.start(ServiceSupport.java:54)
>>>        at 
>>> org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:1314)
>>>        at com.cra.camelsandbox.CamelStarter.activate(CamelStarter.java:18)
>>>        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>        at 
>>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>>>        at 
>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>>>        at java.lang.reflect.Method.invoke(Method.java:597)
>>>        at 
>>> org.eclipse.equinox.internal.ds.model.ServiceComponent.activate(ServiceComponent.java:210)
>>>        at 
>>> org.eclipse.equinox.internal.ds.model.ServiceComponentProp.activate(ServiceComponentProp.java:139)
>>>        at 
>>> org.eclipse.equinox.internal.ds.model.ServiceComponentProp.build(ServiceComponentProp.java:339)
>>>        at 
>>> org.eclipse.equinox.internal.ds.InstanceProcess.buildComponent(InstanceProcess.java:588)
>>>        at 
>>> org.eclipse.equinox.internal.ds.InstanceProcess.buildComponents(InstanceProcess.java:196)
>>>        at 
>>> org.eclipse.equinox.internal.ds.Resolver.buildNewlySatisfied(Resolver.java:441)
>>>        at 
>>> org.eclipse.equinox.internal.ds.Resolver.enableComponents(Resolver.java:213)
>>>        at 
>>> org.eclipse.equinox.internal.ds.SCRManager.performWork(SCRManager.java:800)
>>>        at 
>>> org.eclipse.equinox.internal.ds.SCRManager$QueuedJob.dispatch(SCRManager.java:767)
>>>        at org.eclipse.equinox.internal.ds.WorkThread.run(WorkThread.java:89)
>>>        at 
>>> org.eclipse.equinox.internal.util.impl.tpt.threadpool.Executor.run(Executor.java:70)
>>> Caused by: org.apache.camel.TypeConverterLoaderException: Failed to load 
>>> type converters because of: Cannot find any type converter classes from the 
>>> following packages: [org.apache.camel.component.file, 
>>> org.apache.camel.component.bean, org.apache.camel.converter]
>>>        at 
>>> org.apache.camel.impl.converter.AnnotationTypeConverterLoader.load(AnnotationTypeConverterLoader.java:79)
>>>        at 
>>> org.apache.camel.impl.converter.BaseTypeConverterRegistry.loadTypeConverters(BaseTypeConverterRegistry.java:395)
>>>        at 
>>> org.apache.camel.impl.converter.DefaultTypeConverter.doStart(DefaultTypeConverter.java:41)
>>>        at org.apache.camel.impl.ServiceSupport.start(ServiceSupport.java:67)
>>>        at org.apache.camel.impl.ServiceSupport.start(ServiceSupport.java:54)
>>>        at 
>>> org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:60)
>>>        at 
>>> org.apache.camel.core.osgi.OsgiTypeConverter.createRegistry(OsgiTypeConverter.java:202)
>>>        ... 37 more
>>>
>>> Slightly off topic, your advice about needing to share the CamelContext 
>>> object as a singleton (wrt. SEDA, etc.) was received loud and clear. What 
>>> you see here is me just trying to keep my test cases simple for now.
>>>
>>>
>>> So that's where I am stuck at the moment. I'm sorry not to be working more 
>>> directly from your sample code, but please correct me if its service 
>>> management strategy/intent is different from my understanding. Does my 
>>> current problem make sense? What am I missing?
>>>
>>>
>>> Thanks,
>>> -Mike
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> THIS MESSAGE IS INTENDED FOR THE USE OF THE PERSON TO WHOM IT IS ADDRESSED. 
>>> IT MAY CONTAIN INFORMATION THAT IS PRIVILEGED, CONFIDENTIAL AND EXEMPT FROM 
>>> DISCLOSURE UNDER APPLICABLE LAW. If you are not the intended recipient, 
>>> your use of this message for any purpose is strictly prohibited. If you 
>>> have received this communication in error, please delete the message and 
>>> notify the sender so that we may correct our records.
>>>
>>> -----Original Message-----
>>>
>>>
>>>
>>> From: Donald Whytock [mailto:[email protected]]
>>> Sent: Monday, June 20, 2011 4:45 PM
>>> To: [email protected]
>>> Subject: Re: Camel under OSGi without Spring et al.
>>>
>>> OsgiCamelTracker.java (attached) is a work in progress.  There's a
>>> reference to ContextUtil; that's the service class that supplies the
>>> CamelContext singleton.
>>>
>>> Use it by subclassing it and implementing methods start() and stop().
>>> Call setBundleContext(bundleContext) first, then startTracking().
>>>
>>> OsgiCamelTracker.startTracking() accepts no parameters, a single
>>> String, or a Collection<String>.  The strings are the names of
>>> components that you need.  It'll track instances of ComponentResolver,
>>> maintaining a list of what components are available and what
>>> components are still needed.  When all the components you need are
>>> available, it'll call start(); when any of the components cease to be
>>> available, it'll call stop().
>>>
>>> If you don't supply component names, it'll react to camel-core itself
>>> becoming active, which is all you need for core components like mock,
>>> bean and file.
>>>
>>> Use routeId(<name>) in your route definitions.  Use
>>> camelcontext.startRoute(<name>) from the OsgiCamelTracker.start(); use
>>> camelcontext.stopRoute(<name>) from the OsgiCamelTracker.stop().
>>>
>>> Be advised, you'll need to use a singleton CamelContext if you're
>>> using SEDA queues, because SEDA queues are local to a CamelContext
>>> instance.  A route that consumes from a SEDA queue from one
>>> CamelContext instance won't see anything produced to a SEDA queue from
>>> a different CamelContext instance.
>>>
>>> For OsgiDefaultCamelContext...
>>>
>>>> On Mon, Jun 20, 2011 at 3:31 PM, Michael Furtak <[email protected]> wrote:
>>>>> I did come across mention of this in my troubleshooting exploration. It 
>>>>> seems to be part of a bundle called camel-core-osgi, is that right? I 
>>>>> don't think I have it in my 2.7.2 distribution. Is it something I need to 
>>>>> bundle myself? I also saw mention of it being private to the Spring 
>>>>> bundle, which is what prompted my discussion about not wanting to bring 
>>>>> in Spring.
>>>
>>> org.apache.camel.core.osgi is in camel-blueprint.jar.  I split it out
>>> into its own .jar so as to not worry about the Blueprint dependencies.
>>>  You'll need to modify the manifest, or make your own.
>>>
>>> Don
>>>
>>>
>>
>>
>
>

Reply via email to