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.