Hello Guillaume, What you are describing is what I want to be included in camel, preferably in camel-osgi. In my case I'm making it possible to get the possibility to wait until required bundles are started. This is of course a temporary workaround until the Camel team improves Camel's OSGI support.
I do not need a sleep. I wait until both the camel-core and the camel-osgi bundle is started - then I'm home free. What the camel-osgi bundle does is register a tracker that inspects installed bundles and then registers any components and type converters. On startup it first inspects the already installed bundles. If camel-core is already installed then I only have to wait for the camel-osgi bundle to start. But since camel-core might be installed after camel-osgi, I have to wait for both bundles to be started before I can be sure that my components are registered. Although I agree with you about the preferable solution (it is in fact identical to what I suggested the Camel team should do in my previous post), it's too much work for my workaround. What you are suggesting is a replacement of the camel-osgi bundle so that a service with service properties will be used instead. I second that but that's a bit too much work for me right now. By the way, I also think that the way components should be found in bundles should be through properties in the manifest header - it's closer to the OSGI way. /Bengt 2010/5/4 Guillaume Nodet <[email protected]>: > Sorry to not have been clear enough. What I had in mind was that the > extender would listen for bundle containing camel components. > For each component found into a bundle, the extender would register an OSGI > service with a property identifying the name of the component. The object > itself would not be really important, as we would not really use it, but > only the fact it has been registered. > > Note that the extender must only look into started bundles. > > public void onArrival(Bundle bundle, String extensionValue) throws > InterruptedException { > Enumeration e = > bundle.getEntryPaths("META-INF/services/org/apache/camel/component"); > if (e != null) { > while (e.hasMoreElements()) { > String path = (String)e.nextElement(); > // register a service for the component > } > } > } > > Then, on your iPojo bean that creates the route, i would add a dependency on > those registered services. > > If you still need a sleep, that means there is still a problem somewhere. > > On Tue, May 4, 2010 at 20:55, Bengt Rodehav <[email protected]> wrote: > >> Guillaume, >> >> I've now tried the approach using the extender pattern. I did it using >> iPOJO. Here is the sample code: >> >> @Component(public_factory = false, propagation = true) >> @Extender(extension = "Bundle-SymbolicName", onArrival = "onArrival", >> onDeparture = "onDeparture") >> public class CamelExtenderService { >> private BundleContext mBundleContext; >> private ServiceRegistration mCamelRegistration; >> private Long mCamelCoreBundleId; >> private Long mCamelOsgiBundleId; >> private static final String CAMEL_CORE_NAME = >> "org.apache.camel.camel-core"; >> private static final String CAMEL_OSGI_NAME = >> "org.apache.camel.camel-osgi"; >> >> public CamelExtenderService(BundleContext theBundleContext) { >> mBundleContext = theBundleContext; >> } >> >> public void onArrival(Bundle theBundle, String extensionValue) >> throws InterruptedException { >> if (CAMEL_CORE_NAME.equals(extensionValue)) { >> System.out.println(extensionValue + " arrived"); >> mCamelCoreBundleId = theBundle.getBundleId(); >> } else if (CAMEL_OSGI_NAME.equals(extensionValue)) { >> System.out.println(extensionValue + " arrived"); >> mCamelOsgiBundleId = theBundle.getBundleId(); >> } >> if (mCamelCoreBundleId != null && mCamelOsgiBundleId != null) { >> mCamelRegistration = >> mBundleContext.registerService(ICamelService.class.getName(), new >> ICamelService() { >> }, null); >> } >> } >> >> public void onDeparture(Bundle theBundle) { >> if (theBundle.getBundleId() == mCamelCoreBundleId) { >> System.out.println("camel-core departed"); >> mCamelCoreBundleId = null; >> } else if (theBundle.getBundleId() == mCamelOsgiBundleId) { >> System.out.println("camel-osgi departed"); >> mCamelOsgiBundleId = null; >> } >> if ((mCamelCoreBundleId == null) || (mCamelOsgiBundleId == null)) { >> if (mCamelRegistration != null) { >> mCamelRegistration.unregister(); >> mCamelRegistration = null; >> } >> } >> } >> } >> >> Note that iPOJO requires that one specifies a manifest header that >> will trigger iPOJO's extender support. I used "Bundle-SymbolicName" >> that always exist so that I will detect my specific bundles >> (camel-core and camel-osgi). >> >> Not the best designed code - I know but it seems to work. I started >> off by waiting for the camel-core bundle to be started. It didn't help >> unless a added a 1 s sleep (like in the spring case). Then I looked at >> the camel source code and realised that it's the camel-osgi bundle >> that needs to be started. But, in case camel-osgi is started before >> camel-core I need to know that both of these bundles are started. The >> above works without any sleeps. >> >> The services containing my routes then wait for the ICamelService >> service to become available. >> >> Are we getting close now or have I still misunderstood this? >> >> I suspect that the Spring version (the first tricked you advised me >> of) would work as well if I add a dependency to some class in >> camel-osgi. However, I think the extender is a bit more elegant. >> >> Now what shall we recommend the Camel team do do? >> >> I feel that the best solution is for camel-osgi to publish a service >> that can be depended on. Maybe it's not feasible to publish a separate >> service for each component discovered. I guess service properties >> could be used in some way since it's possible to add requirements to >> service properties when waiting for a service. Perhaps adding a >> service property (dynamically if that is possible) for every component >> discovered is a possibility. >> >> camel-osgi also registers type converters. I guess there are cases >> where it is necessary to wait for them as well. Not sure how to >> publish them though. >> >> I think that a better way for camel-osgi to discover components and >> type converters would be to use a manifest header for this purpose. >> Bundles containing stuff interesting for camel-osgi could add a >> manifest header to indicate this (e g "Camel-Component"). camel-osgi >> would then act as an extender and publish services accordingly (the >> way I have to do right now). >> >> What do you think? >> >> /Bengt >> >> 2010/5/3 Bengt Rodehav <[email protected]>: >> > It's apparent that I need to enhance my knowledge of OSGI. I will take >> > a look at the extender pattern and see if it is a possible solution. >> > When reading about the Require-Bundle header I can't really see how it >> > would solve my problem. It does not guaranteee anything regarding the >> > start/stop status of bundle - it's only about resolving. I guess you >> > mean that if I use the DefaultCamelContext then I don't have to wait >> > for the bundle to be activated. Doesn't seem right in an OSGI >> > environment but I'm not really sure what the concrete disadvantages >> > are. Why is it better to use the OSGI enabled camel context then the >> > default context? (I guess I should post that question om Came's >> > mailing list). >> > >> > I'll take a look at extenders and see if I can make any sens out of them. >> > >> > Thanks, >> > >> > /Bengt >> > >> > 2010/5/3 Guillaume Nodet <[email protected]>: >> >> THe problem is that the OSGi enabled camel context and the standard one >> have >> >> a different component discovery. >> >> The first one will only discover components from the current spring >> >> application (if any) and from started bundles. >> >> The second one will discover those in the classpath. >> >> Given the first one does not uses OSGi services, you can't express the >> fact >> >> that the bundle need to be started (there's really no way to do that in >> OSGi >> >> other than using services). >> >> >> >> So, as a work around, I think there are two possibilities: >> >> * use the osgi resolver, but ensure the bundles are started. THis can >> be >> >> done by writing an extender that would publish services when the bundles >> >> containing components are started. Then your bundles containing the >> routes >> >> could wait on those services to be registered. >> >> * use the standard one and include the components in your bundles >> >> classloader. This can be done by adding the Require-Bundle header on >> each >> >> of the camel components. >> >> >> >> The first way actually sounds better as this could be a first step >> toward a >> >> refactored version of the camel osgi support. The second one is easier >> to >> >> try for your as it would not require any coding at all... >> >> >> >> On Sun, May 2, 2010 at 21:13, Bengt Rodehav <[email protected]> wrote: >> >> >> >>> Hello Guillaume! >> >>> >> >>> Interesting point - not sure what I think yet. I create the camel >> >>> context the following way: >> >>> >> >>> CamelContextFactory camelContextFactory; >> >>> camelContextFactory = new CamelContextFactory(); >> >>> camelContextFactory.setBundleContext(theBundleContext); >> >>> CamelContext camelContext; >> >>> camelContext = mCamelContextFactory.createContext(); >> >>> >> >>> No, I'm not using Spring but I'm pretty sure I use camel's OSGI >> >>> support. I'm not just creating a DefaultCamelContext. >> >>> >> >>> I think that by doing "the trick", I make sure that the bundles are >> >>> resolved and started before my service is started. However, it may >> >>> still take a little while before the registration is done and Spring >> >>> does not seem to wait for that. The delay between starting the >> >>> camel-core bundle and until all components are registered is what I >> >>> thought I had to wait for. >> >>> >> >>> I know that without "the trick", just sleeping for a second does not >> >>> work at all. I've tried that. However, I wasn't aware about the >> >>> Require-Bundle header that you mention. Maybe it achieves the same >> >>> thing. Does it make sure that the required bundle is started or is it >> >>> just resolved? >> >>> >> >>> Without having checked, I imagine that camel-osgi has an activator >> >>> that registers a tracker that inspects all loaded bundles for camel >> >>> components to be registered - including the components in camel-core. >> >>> This means that there can be a little delay from the time that >> >>> camel-core is started until camel-osgi has registered these >> >>> components. I thought I was taking care of that delay. >> >>> >> >>> What do you think? >> >>> >> >>> /Bengt >> >>> >> >>> >> >>> 2010/5/2 Guillaume Nodet <[email protected]>: >> >>> > I fear your trick does not really work. I think all it does is force >> >>> your >> >>> > iPojo application to sleep for 1 second before starting, which is >> enough >> >>> to >> >>> > make sure the required camel components are registerd. However you >> >>> still >> >>> > need this delay. What I was proposing would have work (I think) if >> you >> >>> > were using spring to create the camel context. >> >>> > >> >>> > If you don't use spring, I suppose you don't use camel-spring-osgi >> either >> >>> > and you just use camel-core. In such a case the problem is much >> >>> simpler, >> >>> > as adding a Require-Bundle header on the needed components would make >> >>> sure >> >>> > the components are available. You just need to use the standard >> >>> > CamelContext and not the OSGi one. >> >>> > >> >>> > On Sat, May 1, 2010 at 23:27, Bengt Rodehav <[email protected]> >> wrote: >> >>> > >> >>> >> I've now tried your suggested workaround and I think I've got it to >> >>> >> work. Since I create my routes in Java DSL in components >> instantiated >> >>> >> by iPOJO (not Spring), it wasn't all that straight forward. >> >>> >> >> >>> >> I needed to publish an OSGI service from Spring that my iPOJO >> services >> >>> >> could depend on (using @Requires). >> >>> >> >> >>> >> This is my spring file: >> >>> >> >> >>> >> ... >> >>> >> >> >>> >> <bean id="fileComponent" >> >>> >> class="org.apache.camel.component.file.FileComponent"/> >> >>> >> >> >>> >> <bean id="camelServiceBean" >> >>> >> class="se.digia.connect.core.service.impl.CamelService"> >> >>> >> <property name="fileComponent" ref="fileComponent" /> >> >>> >> </bean> >> >>> >> >> >>> >> <spring-osgi:service ref="camelServiceBean" >> >>> >> interface="se.digia.connect.core.service.ICamelService"/> >> >>> >> ... >> >>> >> >> >>> >> I instantiate a bean that has a FileComponent injected. I can then >> >>> >> inject other Camel components should I need to require them as well. >> I >> >>> >> then publish this bean as an OSGI service using Spring. I define a >> >>> >> "tag interface" that my services can depend on. >> >>> >> >> >>> >> This is the CamelService class: >> >>> >> >> >>> >> public class CamelService implements ICamelService { >> >>> >> public CamelService() throws InterruptedException { >> >>> >> Thread.sleep(1000); >> >>> >> } >> >>> >> public void setFileComponent(FileComponent theFileComponent) { >> >>> >> } >> >>> >> } >> >>> >> >> >>> >> I define a setter for the file component but I'm not really >> interested >> >>> >> in saving its value. Note that I defined a constructor in which I >> >>> >> sleep for a second. If I don't do this, then it won't work. 100 ms >> is >> >>> >> too short, but 1 s seems to work. This is a bit scary since it means >> >>> >> that not all components are registered at this point but shortly >> >>> >> thereafter. Right now I'll make this delay configurable. Maybe you >> >>> >> can comment on this. >> >>> >> >> >>> >> In my dependent iPOJO services I then put: >> >>> >> >> >>> >> �...@requires >> >>> >> private ICamelService mCamelService; >> >>> >> >> >>> >> I guess this could serve as a template workaround for making sure >> that >> >>> >> Camel is properly initialised before it's being used in an OSGI >> >>> >> environment. The trick (that you suggested) then is to use Spring to >> >>> >> let us know when the camel component is registered. We then publish >> an >> >>> >> OSGI service that other services can depend on. >> >>> >> >> >>> >> /Bengt >> >>> >> >> >>> >> >> >>> >> 2010/5/1 Bengt Rodehav <[email protected]>: >> >>> >> > Thanks for your reply Guillaume (on a saturday morning!), >> >>> >> > >> >>> >> > I define my routes using Java DSL but I guess I could still add a >> >>> >> > dependency via Spring like you suggest just to get the ordering to >> >>> >> > work. >> >>> >> > >> >>> >> > I'll try and let you know. >> >>> >> > >> >>> >> > As an aside, are you considering the possiblity for adding >> startlevels >> >>> >> > for the features? I know that ordering should ideally be handled >> using >> >>> >> > OSGI service dependencies but there will always be a need to make >> >>> >> > software that is not properly OSGI'fied to work as well. You >> mentioned >> >>> >> > in a previous post that there are some plans to enhance Karaf >> >>> >> > features. Do you have any information regarding what you are >> >>> >> > considering - and in what time frame? >> >>> >> > >> >>> >> > Thanks again, >> >>> >> > >> >>> >> > /Bengt >> >>> >> > >> >>> >> > 2010/5/1 Guillaume Nodet <[email protected]>: >> >>> >> >> I may have a work around. You should try to define the >> components >> >>> you >> >>> >> need >> >>> >> >> from inside your xml definition: >> >>> >> >> >> >>> >> >> <bean id="file" >> >>> class="org.apache.camel.component.file.FileComponent" >> >>> >> /> >> >>> >> >> >> >>> >> >> The resolver will first look up in the spring registry, then the >> osgi >> >>> >> >> registry, then using the osgi custom discovery mechanism which >> >>> requires >> >>> >> >> bundles to be started. >> >>> >> >> I'm thinking it should work. >> >>> >> >> >> >>> >> >> On Fri, Apr 30, 2010 at 21:53, Bengt Rodehav <[email protected]> >> >>> wrote: >> >>> >> >> >> >>> >> >>> Hi again Guillaume, >> >>> >> >>> >> >>> >> >>> Sorry to bother you again Guillaume. Although I agree with you >> that >> >>> >> >>> Camel should use OSGI services to handle the dependency/ordering >> >>> >> >>> problem, I still need to get this to work. >> >>> >> >>> >> >>> >> >>> Right now I can't seem to figure out how to make sure the >> required >> >>> >> >>> Camel components are available. Trying to add all the required >> >>> bundles >> >>> >> >>> to startup.properties seems like a hopeless task since Camel >> will >> >>> >> >>> bring in almost everything. I need both camel-core and >> >>> >> >>> camel-spring-osgi; which will bring in the following: >> >>> >> >>> >> >>> >> >>> <feature name='camel-core' version='2.2.0'> >> >>> >> >>> <feature version="2.5.6.SEC01">spring</feature> >> >>> >> >>> >> >>> >> >>> >> >>> >> >> >>> >> <bundle>mvn:org.apache.servicemix.specs/org.apache.servicemix.specs.activation-api-1.1/1.4.0</bundle> >> >>> >> >>> >> >>> >> >>> >> >>> >> >> >>> >> <bundle>mvn:org.apache.servicemix.specs/org.apache.servicemix.specs.jaxb-api-2.1/1.4.0</bundle> >> >>> >> >>> >> >>> >> >>> >> >>> >> >> >>> >> <bundle>mvn:org.apache.servicemix.specs/org.apache.servicemix.specs.stax-api-1.0/1.4.0</bundle> >> >>> >> >>> >> >>> >> >>> >> >>> >> >> >>> >> <bundle>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.jaxb-impl/2.1.12_1</bundle> >> >>> >> >>> >> >>> <bundle>mvn:org.fusesource.commonman/commons-management/1.0</bundle> >> >>> >> >>> <bundle>mvn:org.apache.camel/camel-core/2.2.0</bundle> >> >>> >> >>> </feature> >> >>> >> >>> <feature name='camel-spring-osgi' version='2.2.0'> >> >>> >> >>> >> >>> >> >>> >> >>> >> >> >>> >> <bundle>mvn:org.apache.geronimo.specs/geronimo-jta_1.1_spec/1.1.1</bundle> >> >>> >> >>> <feature version='2.5.6.SEC01'>spring</feature> >> >>> >> >>> <feature version='1.2.0'>spring-dm</feature> >> >>> >> >>> >> <bundle>mvn:org.springframework/spring-tx/2.5.6.SEC01</bundle> >> >>> >> >>> <feature version='2.2.0'>camel-core</feature> >> >>> >> >>> <bundle>mvn:org.apache.camel/camel-spring-osgi/2.2.0</bundle> >> >>> >> >>> </feature> >> >>> >> >>> >> >>> >> >>> I'm hoping there is a workaround (other than moving all my >> bundles >> >>> >> >>> from the feature file to startup.properties). There must be >> others >> >>> who >> >>> >> >>> use the combination of Camel and Karaf and that need a clean way >> to >> >>> >> >>> install and start the application. Do you have any advice? >> >>> >> >>> >> >>> >> >>> Thanks, >> >>> >> >>> >> >>> >> >>> /Bengt >> >>> >> >>> >> >>> >> >>> >> >>> >> >>> 2010/4/28 Bengt Rodehav <[email protected]>: >> >>> >> >>> > Guillaume, >> >>> >> >>> > >> >>> >> >>> > I've been trying to modify startup.properties to make sure >> >>> camel-core >> >>> >> >>> > is started by the time the feature containing my route is >> started. >> >>> >> >>> > Can't get it to work though. There are a lot of dependencies. >> >>> Seems >> >>> >> >>> > like camel-core is dependent on a number of servicemix bundles >> as >> >>> >> well >> >>> >> >>> > as the spring feature. I think by the end of this I'll have to >> >>> remove >> >>> >> >>> > almost everything from my features file and put the individual >> >>> >> bundles >> >>> >> >>> > in startup.properties. >> >>> >> >>> > >> >>> >> >>> > While waiting for support for specifying startup levels for >> >>> features >> >>> >> >>> > (or something similar), is there another workaround I can use? >> >>> >> >>> > >> >>> >> >>> > /Bengt >> >>> >> >>> > >> >>> >> >>> > 2010/4/28 Bengt Rodehav <[email protected]>: >> >>> >> >>> >> Just sent a mail to [email protected] regarding this. >> >>> >> >>> >> >> >>> >> >>> >> /Bengt >> >>> >> >>> >> >> >>> >> >>> >> 2010/4/28 Bengt Rodehav <[email protected]>: >> >>> >> >>> >>> Thanks Guillaume, >> >>> >> >>> >>> >> >>> >> >>> >>> Yes, I agree, it would be much better if Camel published >> >>> services >> >>> >> that >> >>> >> >>> >>> my services could depend on. I'll bring that up on the >> camel-dev >> >>> >> list >> >>> >> >>> >>> as you said. >> >>> >> >>> >>> >> >>> >> >>> >>> Do you have any details regarding enhancement plans for >> Karaf >> >>> >> features? >> >>> >> >>> >>> >> >>> >> >>> >>> /Bengt >> >>> >> >>> >>> >> >>> >> >>> >>> 2010/4/28 Guillaume Nodet <[email protected]>: >> >>> >> >>> >>>> Yes, there are plans to enhance, but I don't think this is >> the >> >>> >> problem >> >>> >> >>> here. >> >>> >> >>> >>>> This is a service dependency problem and those should >> either be >> >>> >> >>> captured by >> >>> >> >>> >>>> camel >> >>> >> >>> >>>> or by your bundle itself. Actually, I think camel should >> be >> >>> >> enhanced, >> >>> >> >>> >>>> because it waits >> >>> >> >>> >>>> for bundles containing components to be started without >> using >> >>> >> >>> services, and >> >>> >> >>> >>>> that's wrong. >> >>> >> >>> >>>> The way to go would be to have a bundle tracker registering >> a >> >>> >> service >> >>> >> >>> for >> >>> >> >>> >>>> the component, >> >>> >> >>> >>>> even if it's a simple factory and not the real component. >> That >> >>> >> would >> >>> >> >>> allow >> >>> >> >>> >>>> to have the >> >>> >> >>> >>>> spring-dm / blueprint application to add a reference to the >> >>> >> component >> >>> >> >>> >>>> somehow. >> >>> >> >>> >>>> Or have the camel context wait for the component to become >> >>> >> available >> >>> >> >>> with a >> >>> >> >>> >>>> timeout >> >>> >> >>> >>>> to cope with such ordering problems. Not sure exactly >> what >> >>> the >> >>> >> best >> >>> >> >>> way >> >>> >> >>> >>>> is, but there is >> >>> >> >>> >>>> definitely something to improve, as the current behavior is >> >>> bad. >> >>> >> >>> >>>> You should bring that on the camel-dev/user list imho. >> >>> >> >>> >>>> >> >>> >> >>> >>>> On Wed, Apr 28, 2010 at 11:43, Bengt Rodehav < >> >>> [email protected]> >> >>> >> >>> wrote: >> >>> >> >>> >>>> >> >>> >> >>> >>>>> Thanks for your reply Guillaume, >> >>> >> >>> >>>>> >> >>> >> >>> >>>>> I've now added a few bundles in the startup.properties >> (url >> >>> >> handlers) >> >>> >> >>> >>>>> and I get this to work. I used the startlevel 40. Is that >> OK >> >>> or >> >>> >> is >> >>> >> >>> >>>>> there a best practice for this? >> >>> >> >>> >>>>> >> >>> >> >>> >>>>> However, I then move on to my bundles containing camel >> routes. >> >>> >> They >> >>> >> >>> >>>>> fail to install becuase the "file:" component is not >> >>> registered >> >>> >> yet. >> >>> >> >>> >>>>> It seems like this is cascading. I guess, to get this to >> work >> >>> I >> >>> >> must >> >>> >> >>> >>>>> then stop using the "camel-core" feature in my >> >>> >> >>> >>>>> org.apache.felix.karaf.features.cfg and put all (or some) >> of >> >>> >> those >> >>> >> >>> >>>>> bundles in the startup.properties as well. I don't like >> the >> >>> >> direction >> >>> >> >>> >>>>> I'm heading with this... >> >>> >> >>> >>>>> >> >>> >> >>> >>>>> Karaf features is a very good way to install/deploy >> >>> applications >> >>> >> >>> based >> >>> >> >>> >>>>> on Karaf/Felix. However, there doesn't seem to be a good >> way >> >>> to >> >>> >> >>> >>>>> achieve an automated, clean, install that way since there >> will >> >>> >> >>> >>>>> (almost) always be certain startup dependency ordering >> >>> >> requirements. >> >>> >> >>> >>>>> >> >>> >> >>> >>>>> Are there any plans to enhance Karaf features? It would be >> >>> >> extremely >> >>> >> >>> >>>>> useful to be able to specify the startlevel for a specific >> >>> >> feature. I >> >>> >> >>> >>>>> think that would completely solve the type of problems I'm >> >>> >> >>> >>>>> experiencing. >> >>> >> >>> >>>>> >> >>> >> >>> >>>>> What do you think? >> >>> >> >>> >>>>> >> >>> >> >>> >>>>> /Bengt >> >>> >> >>> >>>>> >> >>> >> >>> >>>>> >> >>> >> >>> >>>>> >> >>> >> >>> >>>>> >> >>> >> >>> >>>>> >> >>> >> >>> >>>>> >> >>> >> >>> >>>>> 2010/4/28 Guillaume Nodet <[email protected]>: >> >>> >> >>> >>>>> > Right, using url handlers could lead to such problems if >> the >> >>> >> url >> >>> >> >>> handlers >> >>> >> >>> >>>>> > are not registered yet. I guess a possible solution >> would >> >>> be >> >>> >> to >> >>> >> >>> change >> >>> >> >>> >>>>> the >> >>> >> >>> >>>>> > karaf configuration so that url handlers are installed >> and >> >>> >> started >> >>> >> >>> very >> >>> >> >>> >>>>> > early. >> >>> >> >>> >>>>> > This can be done by modifying the etc/startup.properties >> or >> >>> >> >>> modifying the >> >>> >> >>> >>>>> > start level of the bundles for your url handlers once >> they >> >>> >> >>> installed. >> >>> >> >>> >>>>> > >> >>> >> >>> >>>>> > On Wed, Apr 28, 2010 at 09:46, Bengt Rodehav < >> >>> >> [email protected]> >> >>> >> >>> wrote: >> >>> >> >>> >>>>> > >> >>> >> >>> >>>>> >> I have a problem with the startup ordering in Karaf. My >> >>> >> explicit >> >>> >> >>> >>>>> >> problem is that I use iPOJO's Online Manipulator which >> >>> gives >> >>> >> me >> >>> >> >>> the >> >>> >> >>> >>>>> >> possibility to deploy iPOJO components using the >> "ipojo:" >> >>> >> >>> protocol. >> >>> >> >>> >>>>> >> However, it seems impossible to get an automatic >> >>> installation >> >>> >> to >> >>> >> >>> work >> >>> >> >>> >>>>> >> using Karaf features this way. >> >>> >> >>> >>>>> >> >> >>> >> >>> >>>>> >> I need to have the iPOJO Online Manipulator started >> (not >> >>> just >> >>> >> >>> >>>>> >> resolved) before I even try to resolve my iPOJO >> components >> >>> >> since I >> >>> >> >>> >>>>> >> refer to them using the "ipojo:" protocol. How can I >> solve >> >>> >> this? I >> >>> >> >>> was >> >>> >> >>> >>>>> >> hoping that it was possible to specify a startlevel for >> a >> >>> >> specific >> >>> >> >>> >>>>> >> feature (in the org.apache.felix.karaf.features.cfg) so >> >>> that >> >>> >> it is >> >>> >> >>> >>>>> >> guaranteed to start after other required features. >> >>> >> >>> >>>>> >> >> >>> >> >>> >>>>> >> I have the same problem when deploying a war. In that >> case >> >>> I >> >>> >> must >> >>> >> >>> be >> >>> >> >>> >>>>> >> sure that the "pax-url-war" feature is started first. >> >>> >> >>> >>>>> >> >> >>> >> >>> >>>>> >> This must be a common problem and I'm hoping there is a >> >>> >> standard >> >>> >> >>> >>>>> >> recommended way to handle this. >> >>> >> >>> >>>>> >> >> >>> >> >>> >>>>> >> I'm using Karaf 1.4.0 and iPOJO 1.4.0. >> >>> >> >>> >>>>> >> >> >>> >> >>> >>>>> >> /Bengt >> >>> >> >>> >>>>> >> >> >>> >> >>> >>>>> >> >> >>> >> >>> >> >>> --------------------------------------------------------------------- >> >>> >> >>> >>>>> >> To unsubscribe, e-mail: >> [email protected] >> >>> >> >>> >>>>> >> For additional commands, e-mail: >> >>> [email protected] >> >>> >> >>> >>>>> >> >> >>> >> >>> >>>>> >> >> >>> >> >>> >>>>> > >> >>> >> >>> >>>>> > >> >>> >> >>> >>>>> > -- >> >>> >> >>> >>>>> > Cheers, >> >>> >> >>> >>>>> > Guillaume Nodet >> >>> >> >>> >>>>> > ------------------------ >> >>> >> >>> >>>>> > Blog: http://gnodet.blogspot.com/ >> >>> >> >>> >>>>> > ------------------------ >> >>> >> >>> >>>>> > Open Source SOA >> >>> >> >>> >>>>> > http://fusesource.com >> >>> >> >>> >>>>> > >> >>> >> >>> >>>>> >> >>> >> >>> >>>>> >> >>> >> >> --------------------------------------------------------------------- >> >>> >> >>> >>>>> To unsubscribe, e-mail: >> [email protected] >> >>> >> >>> >>>>> For additional commands, e-mail: >> [email protected] >> >>> >> >>> >>>>> >> >>> >> >>> >>>>> >> >>> >> >>> >>>> >> >>> >> >>> >>>> >> >>> >> >>> >>>> -- >> >>> >> >>> >>>> Cheers, >> >>> >> >>> >>>> Guillaume Nodet >> >>> >> >>> >>>> ------------------------ >> >>> >> >>> >>>> Blog: http://gnodet.blogspot.com/ >> >>> >> >>> >>>> ------------------------ >> >>> >> >>> >>>> Open Source SOA >> >>> >> >>> >>>> http://fusesource.com >> >>> >> >>> >>>> >> >>> >> >>> >>> >> >>> >> >>> >> >> >>> >> >>> > >> >>> >> >>> >> >>> >> >>> >> >>> --------------------------------------------------------------------- >> >>> >> >>> To unsubscribe, e-mail: [email protected] >> >>> >> >>> For additional commands, e-mail: [email protected] >> >>> >> >>> >> >>> >> >>> >> >>> >> >> >> >>> >> >> >> >>> >> >> -- >> >>> >> >> Cheers, >> >>> >> >> Guillaume Nodet >> >>> >> >> ------------------------ >> >>> >> >> Blog: http://gnodet.blogspot.com/ >> >>> >> >> ------------------------ >> >>> >> >> Open Source SOA >> >>> >> >> http://fusesource.com >> >>> >> >> >> >>> >> > >> >>> >> >> >>> >> >> --------------------------------------------------------------------- >> >>> >> To unsubscribe, e-mail: [email protected] >> >>> >> For additional commands, e-mail: [email protected] >> >>> >> >> >>> >> >> >>> > >> >>> > >> >>> > -- >> >>> > Cheers, >> >>> > Guillaume Nodet >> >>> > ------------------------ >> >>> > Blog: http://gnodet.blogspot.com/ >> >>> > ------------------------ >> >>> > Open Source SOA >> >>> > http://fusesource.com >> >>> > >> >>> >> >>> --------------------------------------------------------------------- >> >>> To unsubscribe, e-mail: [email protected] >> >>> For additional commands, e-mail: [email protected] >> >>> >> >>> >> >> >> >> >> >> -- >> >> Cheers, >> >> Guillaume Nodet >> >> ------------------------ >> >> Blog: http://gnodet.blogspot.com/ >> >> ------------------------ >> >> Open Source SOA >> >> http://fusesource.com >> >> >> > >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [email protected] >> For additional commands, e-mail: [email protected] >> >> > > > -- > Cheers, > Guillaume Nodet > ------------------------ > Blog: http://gnodet.blogspot.com/ > ------------------------ > Open Source SOA > http://fusesource.com > --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]

