dispone di un'applicazione OSGi che esegue Equinox. Mi piacerebbe vedere i servizi forniti dall'applicazione. Come posso fare questo?c'è un modo per visualizzare i servizi registrati in un'applicazione OSGi?
risposta
Dipende se si intende in modo interattivo, utilizzando una shell OSGi, o programmaticamente dalla propria applicazione.
interattivo
È possibile utilizzare il Equinox console. Vedi "servizi". Per visualizzare solo i servizi distribuiti, è necessario utilizzare un filtro LDAP. Ecco un esempio:
(objectClass=my.package.name.*)
vedere anche la risposta di @Neil Bartlett che potrebbe essere più facile come si può solo limitare da id fascio (supponendo che tu lo sai, ma che è facile da trovare).
Programatically
utilizzare l'approccio ServiceTracker. Neil also wrote all about this, quindi assicuratevi di dargli i tuoi upvotes troppo :)
Dal tipo di shell gogo:
inspect cap service
che mostrerà tutti i servizi registrati da tutti i pacchetti. Se si desidera visualizzare i servizi per un pacchetto specifico quindi digitare:
inspect cap service <id>
Dove <id>
è l'ID fascio numerica del bundle che ti interessa
Di gran lunga, e voglio dire di gran lunga, il migliore. modo per vedi i tuoi servizi e migliaia di dettagli in più utilizza Apache Felix Webconsole e quindi installa XRay. Si potrebbe voler leggere il mio first e second blog su questo pacchetto.
Se stai cercando di avviare solo un particolare servizio che è già registrata, ma non avviato e vorrebbe iniziare in modo dinamico, si potrebbe ottenere il bundle con:
Bundle bundle = Platform.getBundle("com.example.com.class");
// Quindi avviare il fascio
bundle.start();
// controllo per i servizi fa riferimento
ServiceReference<IExampleService> serviceReference = b.getBundleContext().getServiceReference(IExampleService.class);
Secondo [documenti API] [1] è possibile chiamare il metodo getContext().getAllServiceReferences(clazz, filter)
per ottenere un elenco di tutti i servizi registrati nella classe specificata e che corrispondono all'espressione di filtro specificata. Passando a null
su entrambi i parametri otterrà tutti i servizi.
sembra mostrare i servizi di eclissi in esecuzione. Mi piacerebbe vedere i servizi dalla mia applicazione osgi che ho distribuito. C'è un modo per fare questo? – user840930
Anche in questo caso, è necessario utilizzare un filtro per ridurli. Inoltre, in alcune console (non sono sicuro della console Equinox) puoi filtrare per bundle di origine ... Neil è un esempio di questo secondo esempio di codice. –