S
Schwede
hi all,
i have a little problem here finding out how to use registered
services in OSGi.
what i am doing is the followig:
- register/provide services with
context.registerService(... , ... , null);
in each of the "service providing" Activator classes (means: the
bundles)
- set up a "managing" bundle with a ServiceListener in the Activator
class
m_context.addServiceListener(this);
that (un)registers provided services on-the-fly.
now i have implemented my serviceChanged method like below
public void serviceChanged(ServiceEvent event)
{
try
{
String[] objectClass = (String[])
event.getServiceReference().getProperty("objectClass");
if (event.getType() == ServiceEvent.REGISTERED)
{
System.out.println("Service " + objectClass[0] + " registered.");
}
else if (event.getType() == ServiceEvent.UNREGISTERING)
{
System.out.println("Service " + objectClass[0] + "
unregistered.");
}
else if (event.getType() == ServiceEvent.MODIFIED)
{
System.out.println("Ex1: Service of type " + objectClass[0] + "
modified.");
}
}
catch(RuntimeException re)
{
System.out.println("RuntimeException :: " + re.getMessage());
System.out.println(re.getStackTrace());
}
}
here is a rather nice tutorial (even though i do not use felix/
knopflerfish - i am using Eclipse/Equinox) that shows an example on
how to get use of a registered service from another bundle:
http://www.knopflerfish.org/osgi_service_tutorial.html#best
now my question is: how do i dynamically "use" my services? right now
it seems to me that on the one hand i can (un)register services on-the-
fly but on the other i always have to make sure that the service i
want to use is currently registered. this sounds like i have to use a
hell of a lot if-clauses or switch-case... at least if i am following
that tutorial from above.
for example I have a bundle providing a xml validation service and a
xml parsing service. another bundle is just for logging purpose and so
on...
how would you implement a project like this? is it even useful to have
a "managing bundle" or should i add a ServiceListener to each of my
providing bundles to share funcionality under each other?
thank you so much in advance! i hope you can help me out with this.
regards,
christian ruehl
i have a little problem here finding out how to use registered
services in OSGi.
what i am doing is the followig:
- register/provide services with
context.registerService(... , ... , null);
in each of the "service providing" Activator classes (means: the
bundles)
- set up a "managing" bundle with a ServiceListener in the Activator
class
m_context.addServiceListener(this);
that (un)registers provided services on-the-fly.
now i have implemented my serviceChanged method like below
public void serviceChanged(ServiceEvent event)
{
try
{
String[] objectClass = (String[])
event.getServiceReference().getProperty("objectClass");
if (event.getType() == ServiceEvent.REGISTERED)
{
System.out.println("Service " + objectClass[0] + " registered.");
}
else if (event.getType() == ServiceEvent.UNREGISTERING)
{
System.out.println("Service " + objectClass[0] + "
unregistered.");
}
else if (event.getType() == ServiceEvent.MODIFIED)
{
System.out.println("Ex1: Service of type " + objectClass[0] + "
modified.");
}
}
catch(RuntimeException re)
{
System.out.println("RuntimeException :: " + re.getMessage());
System.out.println(re.getStackTrace());
}
}
here is a rather nice tutorial (even though i do not use felix/
knopflerfish - i am using Eclipse/Equinox) that shows an example on
how to get use of a registered service from another bundle:
http://www.knopflerfish.org/osgi_service_tutorial.html#best
now my question is: how do i dynamically "use" my services? right now
it seems to me that on the one hand i can (un)register services on-the-
fly but on the other i always have to make sure that the service i
want to use is currently registered. this sounds like i have to use a
hell of a lot if-clauses or switch-case... at least if i am following
that tutorial from above.
for example I have a bundle providing a xml validation service and a
xml parsing service. another bundle is just for logging purpose and so
on...
how would you implement a project like this? is it even useful to have
a "managing bundle" or should i add a ServiceListener to each of my
providing bundles to share funcionality under each other?
thank you so much in advance! i hope you can help me out with this.
regards,
christian ruehl