On Tue, Jun 28, 2011 at 4:29 PM, Donald Whytock <[email protected]> wrote:
> Sorry, forgot about that.  I'd written a dummy class to replace the
> Spring dependency in camel-mail, since, out of the twenty-some methods
> in the Spring class, camel-mail uses maybe two.
>

Yeah camel-mail only uses spring for *sending* emails.

I would like to remove that dependency, but frankly the Java Mail API
is cumbersome to work with. And I heard about troubles with sending
mails to outlook, notes, web mails etc looks different. So you may
have to do some hacks to get it working among those. And I guess the
spring guys most likely have done that already.



> There should maybe be a JIRA to make this a soft dependency like JMX's
> dependency  appears to be.
>
> On Tue, Jun 28, 2011 at 9:37 AM, Michael Furtak <[email protected]> wrote:
>> I looked into continuing my testing with camel-mail, but stopped short 
>> because it also has a dependency on Spring (JavaMailSender).
>>
>> However, I did test with camel-xmpp to great success. Besides bringing in 
>> the correct libraries, the only code change was to ensure that my starter 
>> also bound a ComponentResolver (component=xmpp) before activating.
>>
>>
>> One other Spring dependency worth noting is that JMX management seems to 
>> depend on it. From my log:
>>
>> [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).
>>
>>
>> Thanks to everyone who helped me work this out. I'm feeling a bit more 
>> confident that I can use Camel in my project now.
>>
>> Best,
>> -Mike Furtak
>>
>>
>>
>>
>>
>>
>>
>> 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 4:42 PM
>> To: [email protected]
>> Subject: Re: Camel under OSGi without Spring et al.
>>
>> 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
>>>>>
>>>>>
>>>>
>>>>
>>>
>>>
>>
>>
>



-- 
Claus Ibsen
-----------------
FuseSource
Email: [email protected]
Web: http://fusesource.com
Twitter: davsclaus, fusenews
Blog: http://davsclaus.blogspot.com/
Author of Camel in Action: http://www.manning.com/ibsen/

Reply via email to