Je suis nouveau à OSGi et j'ai rencontré plusieurs exemples de services OSGi.Comment utiliser OSGi getServiceReference() right
Par exemple:
import org.osgi.framework.*;
import org.osgi.service.log.*;
public class MyActivator implements BundleActivator {
public void start(BundleContext context) throws Exception {
ServiceReference logRef =
context.getServiceReference(LogService.class.getName());
}
}
Ma question est, pourquoi utilisez-vous
getServiceReference(LogService.class.getName())
au lieu de
getServiceReference("LogService")
Si vous utilisez LogService.class.getName() vous devez importer l'interface. Cela signifie également que vous devez importer le package org.osgi.services.log dans votre MANIFEST.MF.
N'est-ce pas complètement contre-productif si vous voulez réduire les dépendances pour pousser l'accouplement? Autant que je sache, un avantage des services est que le consommateur de services n'a pas besoin de connaître l'éditeur de service. Mais si vous devez importer une interface spécifique, vous devez clairement savoir qui la fournit. En utilisant seulement une chaîne comme "LogService" vous ne devriez pas savoir que l'interface est fournie par org.osgi.services.log.LogService.
Qu'est-ce qui me manque ici?
La recommandation quand OSGi est de ne PAS programmer contre OSGi (je sais - c'est un peu zen Utilisez des plans/Spring DM, des services déclaratifs, iPOJO ou Guice/Peaberry – SteveD