2012-08-07 9 views

risposta

10

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 :)

+0

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

+0

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. –

11

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

1

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.

0

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); 
0

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.