2015-11-24 2 views
-1

J'essaie de créer un objet de carte en utilisant osgi @reference ie) en enregistrant la classe ci-dessous comme une fabrique avec dépendance en tant qu'objets Hashmap. Mon intention est de créer un objet en utilisant l'usine qui devrait créer un hashmap. Quand j'essaie de l'enregistrer comme état d'usine est insatisfait. Est-il possible de créer un objet de carte par l'approche ci-dessous? Si non, quelqu'un peut-il me dire ce que je fais de mal? ou pourquoi nous ne devrions pas faire cela? Parce que Map est une interface.Création d'un objet de carte similaire aux objets définis par l'utilisateur dans OSGI

@Component(name = "ExampleComponentFactoryServiceProvider1", factory = "example.factory.provider1") 
@Service 
public class ExampleComponentFactoryServiceProvider1 implements ExampleFactoryService { 

    @Reference(name = "MapObject", bind = "createMap", unbind = "disolveMapObject", referenceInterface = Map.class) 
    private Map<String, String> testMap = null; 

    @Activate 
    public void activate(Map<String, String> props) { 
     System.out.println("Activated 1 !!!!!"); 
    } 

    public void createMap(Map<String, String> aMap) { 
     this.testMap = aMap; 
     System.out.println("Map created !! " + testMap); 
    } 

    public void disolveMapObject(Map<String, String> aMap) { 
     this.testMap = null; 
    } 

    @Override 
    public void start() { 
     System.out.println("Started 1 !!!!"); 
    } 

    @Override 
    public void stop() { 
     System.out.println("Stopped 1 !!!!"); 
    } 
} 

Répondre

1

Je ne pense pas que cela fonctionne. @Reference est utilisé pour lier les services OSGi. Donc, cela ne fonctionnerait que si quelqu'un a publié un service de type Map.

D'où le contenu de la carte devrait-il provenir?

+0

l'ai eu! merci Chirstian. pour référence, quelque chose doit être exposé comme un service même s'il s'agit d'objets java internes (map, list, set). – Shriram

+0

Oui .. même si je serais prudent avec une carte en tant que service car il est trop générique. Les chances sont élevées que vous pourriez obtenir le mauvais. Donc encore une fois la question. D'où proviendrait le contenu de votre carte? –

+0

Ma tentative consiste à créer directement un objet Java au lieu de s'enregistrer en tant que service. Parce que mon hypothèse est que les objets par défaut n'ont pas besoin de l'enregistrer en tant que service car tout fonctionne sur un VM. Mais d'après votre explication j'ai compris que tout devrait être exposé comme un service pour le récupérer par référence. – Shriram