Hi JB,

I agree, I'm not comfortable using start order.

My feature initializes a JMX connection to 'karaf-root' on local host; it was 
working fine with start level 35, but random errors if JMX is not initialized, 
so start levels are definitely not predictable.
If I depend on JMX to be available before my service starts, what should the 
"Requires" annotation reflect in my service to ensure that? A quick look at the 
list of "jmx" bundles in my container, I see blueprint jmx core/api, aries jmx 
core/api, which one should I depend on? My apologies, I'm very new to OSGI, and 
it's been frustrating to stabilize even a simple service.

@RequireCapability( 
  ns="???", 
        filter="(??)", 
        effective="active"
)
public class MyHealthService { ...}


Feature.xml
==============
<features name="Broker-Monitor-1.0.0" 
xmlns="http://karaf.apache.org/xmlns/features/v1.0.0";>     
                <feature  name="messaging-monitors-health"  version="1.0.0"  
start-level="35">
                                
<bundle>mvn:messaging/monitors-health/1.0.0</bundle>
                </feature>         
</features>

Exception
==================================
        org.osgi.service.blueprint.container.ComponentDefinitionException: 
Unable to initialize bean healthCheckService

          at 
org.apache.aries.blueprint.container.BeanRecipe.runBeanProcInit(BeanRecipe.java:714)[org.apache.aries.blueprint:org.apache.aries.blueprint.core:1.4.2]
          at 
org.apache.aries.blueprint.container.BeanRecipe.internalCreate2(BeanRecipe.java:824)[org.apache.aries.blueprint:org.apache.aries.blueprint.core:1.4.2]
          at 
org.apache.aries.blueprint.container.BeanRecipe.internalCreate(BeanRecipe.java:787)[org.apache.aries.blueprint:org.apache.aries.blueprint.core:1.4.2]
          at 
org.apache.aries.blueprint.di.AbstractRecipe$1.call(AbstractRecipe.java:79)[org.apache.aries.blueprint:org.apache.aries.blueprint.core:1.4.2]
          at java.util.concurrent.FutureTask.run(FutureTask.java:266)[:1.8.0_45]
          at 
org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:88)[org.apache.aries.blueprint:org.apache.aries.blueprint.core:1.4.2]
          at 
org.apache.aries.blueprint.container.BlueprintRepository.createInstances(BlueprintRepository.java:245)[org.apache.aries.blueprint:org.apache.aries.blueprint.core:1.4.2]
          at 
org.apache.aries.blueprint.container.BlueprintRepository.createAll(BlueprintRepository.java:183)[org.apache.aries.blueprint:org.apache.aries.blueprint.core:1.4.2]
          at 
org.apache.aries.blueprint.container.BlueprintContainerImpl.instantiateEagerComponents(BlueprintContainerImpl.java:682)[org.apache.aries.blueprint:org.apache.aries.blueprint.core:1.4.2]
          at 
org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun(BlueprintContainerImpl.java:377)[org.apache.aries.blueprint:org.apache.aries.blueprint.core:1.4.2]
          at 
org.apache.aries.blueprint.container.BlueprintContainerImpl.run(BlueprintContainerImpl.java:269)[org.apache.aries.blueprint:org.apache.aries.blueprint.core:1.4.2]
          at 
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)[:1.8.0_45]
          at java.util.concurrent.FutureTask.run(FutureTask.java:266)[:1.8.0_45]
          at 
org.apache.aries.blueprint.container.ExecutorServiceWrapper.run(ExecutorServiceWrapper.java:106)[org.apache.aries.blueprint:org.apache.aries.blueprint.core:1.4.2]
          at 
org.apache.aries.blueprint.utils.threading.impl.DiscardableRunnable.run(DiscardableRunnable.java:48)[org.apache.aries.blueprint:org.apache.aries.blueprint.core:1.4.2]
          at 
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)[:1.8.0_45]
          at java.util.concurrent.FutureTask.run(FutureTask.java:266)[:1.8.0_45]
          at 
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)[:1.8.0_45]
          at 
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)[:1.8.0_45]
          at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)[:1.8.0_45]
          at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)[:1.8.0_45]
          at java.lang.Thread.run(Thread.java:745)[:1.8.0_45]

        Caused by: java.io.IOException: Failed to retrieve RMIServer stub: 
javax.naming.NameNotFoundException: karaf-root

          at 
javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:369)[:1.8.0_45]
          at 
javax.management.remote.JMXConnectorFactory.connect(JMXConnectorFactory.java:270)[:1.8.0_45]
          at 
messaging.monitors.health.HealthcheckService.connectJmx(HealthcheckService.java:127)
          at 
messaging.monitors.health.HealthcheckService.init(HealthcheckService.java:67)
          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native 
Method)[:1.8.0_45]
          at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)[:1.8.0_45]
          at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)[:1.8.0_45]
          at java.lang.reflect.Method.invoke(Method.java:497)[:1.8.0_45]
          at 
org.apache.aries.blueprint.utils.ReflectionUtils.invoke(ReflectionUtils.java:297)[org.apache.aries.blueprint:org.apache.aries.blueprint.core:1.4.2]
          at 
org.apache.aries.blueprint.container.BeanRecipe.invoke(BeanRecipe.java:958)[org.apache.aries.blueprint:org.apache.aries.blueprint.core:1.4.2]
          at 
org.apache.aries.blueprint.container.BeanRecipe.runBeanProcInit(BeanRecipe.java:712)[org.apache.aries.blueprint:org.apache.aries.blueprint.core:1.4.2]

        ... 21 more

        Caused by: javax.naming.NameNotFoundException: karaf-root

          at 
com.sun.jndi.rmi.registry.RegistryContext.lookup(RegistryContext.java:120)[:1.8.0_45]
          at 
com.sun.jndi.toolkit.url.GenericURLContext.lookup(GenericURLContext.java:205)[:1.8.0_45]
          at 
javax.naming.InitialContext.lookup(InitialContext.java:417)[:1.8.0_45]
          at 
javax.management.remote.rmi.RMIConnector.findRMIServerJNDI(RMIConnector.java:1957)[:1.8.0_45]
          at 
javax.management.remote.rmi.RMIConnector.findRMIServer(RMIConnector.java:1924)[:1.8.0_45]
          at 
javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:287)[:1.8.0_45


-----Original Message-----
From: Jean-Baptiste Onofré [mailto:[email protected]] 
Sent: Sunday, November 08, 2015 1:55 PM
To: [email protected]
Subject: Re: Feature start level and strict load order [ EXTERNAL ]

Hi Raffi,

start-level works but it's not the preferred way. Instead you can use 
requirements/capabilities and transitive features (a feature depending to 
another one, thanks to that you can specify the order).

Regards
JB

On 11/08/2015 07:31 PM, Basmajian, Raffi wrote:
> I created an OSGI bundle as a feature with start-level="35" to ensure 
> it loads before another system bundle, but I read somewhere that start 
> levels are not guaranteed to load bundles in order.
>
> If that's the case, what's the point of configuring levels at all?....
> and is there an alternative?
>
> Raffi
>
> This e-mail transmission may contain information that is proprietary, 
> privileged and/or confidential and is intended exclusively for the
> person(s) to whom it is addressed. Any use, copying, retention or 
> disclosure by any person other than the intended recipient or the 
> intended recipient's designees is strictly prohibited. If you are not 
> the intended recipient or their designee, please notify the sender 
> immediately by return e-mail and delete all copies. OppenheimerFunds 
> may, at its sole discretion, monitor, review, retain and/or disclose 
> the content of all email communications.

--
Jean-Baptiste Onofré
[email protected]
http://blog.nanthrax.net
Talend - http://www.talend.com

This e-mail transmission may contain information that is proprietary, 
privileged and/or confidential and is intended exclusively for the person(s) to 
whom it is addressed. Any use, copying, retention or disclosure by any person 
other than the intended recipient or the intended recipient's designees is 
strictly prohibited. If you are not the intended recipient or their designee, 
please notify the sender immediately by return e-mail and delete all copies. 
OppenheimerFunds may, at its sole discretion, monitor, review, retain and/or 
disclose the content of all email communications.

Reply via email to