Pour l’installation d’OSCAR, suivez les instructions (en français) données par Humberto Cervantes: http://www-adele.imag.fr/~cervante/osgitutorial/tutorial1.htm
Vous pouvez aussi vous reportez à la documentation d'OSCAR : http://oscar-osgi.sourceforge.net/install.html
Une fois que OSCAR est installé, lancez OSCAR avec le script run.bat (run.sh sur Unix).
Vous allez pouvoir tester quelques commandes depuis la console locale de la passerelle.
Voici le résultat de la commande help
:
run Welcome to Oscar. ================= Enter profile name: hello1 -> help bundlelevel <bundle-id> [<level>] - get or set bundle start level. cd <base-URL> - change or display base URL. exports - list exported packages. help - display shell service commands. info <id> [<svc-iface>] - display bundle or service properties. install <URL> [<URL> ...] - install bundle(s). obr -help - Oscar bundle repository. ps [-l] - list installed bundles. refresh - refresh packages. services [all] - list registered services. shutdown - shutdown Oscar. start <id> [<id> <URL> ...] - start bundle(s). startlevel [<level>] - get or set framework start level. stop <id> [<id> ...] - stop bundle(s). uninstall <id> [<id> ...] - uninstall bundle(s). update <id> [<URL>] - update bundle. version - display version of Oscar. -> |
package org.ungoverned.oscar.service.shell; public interface Command { public String getName(); public String getUsage(); public String getShortDescription(); public void execute(String line, PrintStream out, PrintStream err); } |
-> obr -s Service Binder -> start http://www-adele.imag.fr/~donsez/dev/osgi/runcmd/runcmd.jar -> services ... [Bundle 1, Service 0] org.ungoverned.oscar.service.shell.ShellService [Bundle 1, Service 2] org.ungoverned.oscar.service.shell.CdCommand [Bundle 5, Service 0] org.ungoverned.oscar.service.shell.Command ... -> run -help ... -> run -s -e -p http://www-adele.imag.fr/~donsez/dev/osgi/script/testruncmd.txt ... |
OSCAR dispose d'une console graphique pour lister les bundles installés et les administrer
-> install file:bundle\tablelayout.jar -> start file:bundle\shellgui.jar -> start file:bundle\shellcomponent.jar -> |
Généralement, une passerelle OSGi se trouve enfouie dans un equipement dépourvu de clavier et d'écran (comme par exemple, une station météo, une voiture, une centrale de surveillance dans votre maison secondaire, ...)
Il est donc nécessaire de pouvoir opérer celle-çi à distance. Pour cela, il est possible d'installer des consoles distantes d'accès comme Telnet ou Http.
Pour la console Telnet, vous devez au préalable configurer le fichier lib/bundle.properties d'OSCAR pour autoriser les accès par telnet en y ajoutant la ligne:
osgi.shell.telnet=on
-> obr -s Telnet Service Starting Telnet Service... [13/avr./2004:06:57:18 CEST] Listening to Port 6623 with a connectivity queue size of 5. -> ps START LEVEL 1 ID State Level Name [ 0] [Active ] [ 0] System Bundle [ 1] [Active ] [ 1] Shell Service [ 2] [Active ] [ 1] Shell TUI [ 3] [Active ] [ 1] Oscar Bundle Repository [ 4] [Active ] [ 1] telnetd -> [13/avr./2004:06:57:38 CEST] connection #1 made. [13/avr./2004:06:58:22 CEST] connection #1 made. -> |
Welcome to the SoftSell OSGI Telnet Server Available Services: OSCAR Enter Choice> entrez OSCAR -> ps ... |
Une autre manière d'administrer la passerelle à distance est d'utiliser un navigateur Web. Lancez la commande suivante:
-> obr -s Http Admin Starting dependency Servlet... Starting dependency HTTP Service... 17:59:23.865 EVENT Starting Jetty/4.2.x 17:59:23.985 EVENT Started SocketListener on 0.0.0.0:80 17:59:23.995 EVENT Started org.mortbay.http.HttpServer@1bca5f1 Starting HTTP Admin... 17:59:25.487 EVENT Started ServletHttpContext[/] 17:59:25.517 EVENT Started HttpContext[/admin/resource] -> ps -> |
package fr.imag.adele.bundle.hello; /** *@version 1.0 */ public interface HelloService { public String sayHello(String name); } |
-> install http://www-adele.imag.fr/~donsez/dev/osgi/hellorequester10/hellorequester10.jar ... -> install http://www-adele.imag.fr/~donsez/dev/osgi/helloservice10/helloservice10.jar -> install http://www-adele.imag.fr/~donsez/dev/osgi/helloservice10/helloservice10en.jar -> |
Les bundles OSGi indiquent la version des packages qu'ils exportent ou qu'ils importent.
Les manipulations suivantes montrent les problèmes qui peuvent subvenir.
Nous allons installé et démarré les bundles dans des versions de specifications plus recentes (1.1).
La version 1.1 de la spécification comporte une interface supplémentaire qui permet de changer la langue d'affichage du service HelloService.
package fr.imag.adele.bundle.hello; /** *@version 1.1 */ public interface LocaleService { public String getLanguage(); public void setLanguage(String language); } |
-> exports -> install http://www-adele.imag.fr/~donsez/dev/osgi/hellorequester11/hellorequester11.jar -> install http://www-adele.imag.fr/~donsez/dev/osgi/helloservice11/helloservice11.jar -> ps ... -> exports ... -> |
run Welcome to Oscar. ================= Enter profile name: hello1 -> ps ... -> exports ... -> services ... -> |
L'installation, la mise à jour ou désinstallation de bundles, le démarrage ou l'arrêt de services provoquent des événements qui sont notifiés aux bundles qui ont positionné des listeners sur ceux-çi.
Le bundle http://www-adele.imag.fr/~donsez/dev/osgi/event/event.jar imprime la trace des événements qui sont notifiés.
Installez le puis recommencer l'installation de l'application Hello World.
Nous allons compléter l'application Hello World d'une commande hello accessible depuis le shell d'OSCAR
Cette commande requière les services HelloService fournis par d'autres bundles et fournit un service org.ungoverned.oscar.service.shell.Command
Exercice: Développez le bundle HelloCommand qui fournit cette commande en repartant des sources de HelloRequester et à partir des sources de RunCommand
Installez ce bundle et testez le.
Nous allons compléter l'application Hello World d'une servlet HelloServlet activé et enregistré auprès du HttpService par le bundle http://www-adele.imag.fr/~donsez/dev/osgi/helloservlet/helloservlet.jar
Pour cela, lancez les commandes suivantes:
-> obr -s Http Service Starting dependency Servlet... Starting HTTP Service... 17:59:23.865 EVENT Starting Jetty/4.2.x 17:59:23.985 EVENT Started SocketListener on 0.0.0.0:80 17:59:23.995 EVENT Started org.mortbay.http.HttpServer@1bca5f1 -> ps ... -> start http://www-adele.imag.fr/~donsez/dev/osgi/helloservlet/helloservlet.jar ... -> |
ServiceBinder permet de faciliter le développement de bundles OSGi en décrivant les services fournis et requis plutôt qu'en en programmant explicitement l'enregistrement et le courtage.
Exercice: Réécrivez les 2 bundles de HelloCommand et HelloServlet avec ServiceBinder
Testez les en lançant les commandes suivantes:
run Welcome to Oscar. ================= Enter profile name: sb -> obr -s Service Binder -> rem start http://www-adele.imag.fr/~cervante/servicebinder/jar/servicebinder1.1.jar -> ps ... -> start file:z:\osgi\mybundles\helloservletsb.jar -> start file:z:\osgi\mybundles\hellocmdsb.jar -> start http://www-adele.imag.fr/~donsez/dev/osgi/helloservicesb/helloservicesb.jar ... -> start http://www-adele.imag.fr/~cervante/servicebinder/jar/architectureviewer1.1.jar |
Le service CronService fournit par le bundle
http://www-adele.imag.fr/~desertot/dev/osgi/cronservice/cronservice.jar permet de déclencher de façon périodique un objet implémentant l'interface TimerObject.
L'usage de ce service est documentée http://www-adele.imag.fr/~desertot/dev/osgi/cronservice/
L'exemple lancé par les commandes suivantes "cron" 2 TimerObjects (1 toutes les 10 sec., l'autre toutes les 20 sec.)
run Welcome to Oscar. ================= Enter profile name: cron -> obr -s Service Binder Starting Service Binder... -> start http://www-adele.imag.fr/~desertot/dev/osgi/cronservice/cronservice.jar ------------------ Cron Service activated ------------------ -> services ... [Bundle 5, Service 0] fr.imag.cronservice.CronService ... -> start http://www-adele.imag.fr/~desertot/dev/osgi/cronservice/crontest.jar Case number one. time = Tue Apr 13 18:37:48 CEST 2004 Case number two. time = Tue Apr 13 18:37:58 CEST 2004 Case number one. time = Tue Apr 13 18:37:58 CEST 2004 Case number one. time = Tue Apr 13 18:38:08 CEST 2004 Case number two. time = Tue Apr 13 18:38:18 CEST 2004 Case number one. time = Tue Apr 13 18:38:18 CEST 2004 ... |
A rediger
Le WireAdmin est un service qui permet de construire des applications à base de capteurs.
Les applications sont construites en reliant des services Producer avec des services Consumer par des objets appelés Wire.
Le script de commande suivant donne un exemple d'utilisation:
run Welcome to Oscar. ================= Enter profile name: wa -> obr -s Service Binder ... -> http://www-adele.imag.fr/~donsez/dev/osgi/runcmd/runcmd.jar -> run -e -p http://www-adele.imag.fr/~donsez/dev/osgi/script/wa.remote.txt ... -> start http://www-adele.imag.fr/~cervante/servicebinder/jar/architectureviewer1.1.jar -> |
Pour le développement de vos bundles, vous utiliserez le projet ANT http://www-adele.imag.fr/~donsez/dev/osgi/__BUNDLE_NAME__/__BUNDLE_NAME__-src.zip
Il vous suffit :
Ecrire une commande Shell mail
permettant d'envoyer un mail depuis la console
Développez un bundle IOServlet qui permette entre autre d'envoyer des mails ou des sms en passant par le service IOCOnnector Vous reparti de smsservlet, ecrire une Servlet permettant d'ecrire dans un outputstream Tester le avec mailio mail depuis une page Web
Ecrire un consumer conserve un historique des mesures poussées par des producers sur les Wires puis les envoie par mail périodiquement à un utilisateur
A rédiger
Developpez un bundle qui envoie par mail une image capturée depuis la WebCam connectée à la passerelle. Vous vous baserez sur l'exemple WireAdmin.
A partir de DateProducer, ecrire un producer qui remonte les informations sur le système en exploitant les données des fichier du répertoire /proc.
/proc est un système de fichiers très spécial puisqu'il contient des informations (lecture/écriture)
A partir de ConsumerServlet et StringConsumer, afficher l'historique des valeurs capturées sur des producers (Measurement, Usage, ...)
Pour cela, il est nécessaire de "poller" régulièrement les Producers (comme le fait StringConsumer) et d'historiser les valeurs "pollées".
Le nombre de valeurs à conserver dans l'historique est paramétrable.
Le fréquence du polling est paramétrable.
Pour l'affichage, vous utiliserez le grapheur JavaScript suivant: http://www-adele.imag.fr/~donsez/cours/exemplescourstechnoweb/js_graphimg/.
Ajoutez un composant graphique à la console graphique qui permet d'effectuer les opérations équivalentes à la commande obr
Ecrire une commande Shell cron
permettant de déclencher de façon périodique n'importe quel service désigné par un filtre
Les informations concernant le fonctionnement du Shell sont disponibles sur http://oscar-osgi.sourceforge.net/shell.html
A rédiger
A rédiger
A rédiger
A rédiger
A rédiger
A rédiger