UNO
Accueil
Pourquoi ce site ?
Actuellement en 3éme année dans l'école ingénieurs 2000, il m'a été demandé de réaliser un exposé sur une nouvelle technologie liée à l'informatique
Cet exposé se déroule en deux parties :
-
La première consiste en un exposé oral à l'ensemble de la promotion
-
La deuxième en la mise en place de ce site Web qui décrit le sujet.
L'école Ingénieurs 2000 est une école d'ingénieur par apprentissage en alternance (6 mois d'école/6 mois d'entreprise) durant 3 ans. Les cours de la filière Informatique et Réseaux sont dispensés au sein de l'Université de Marne la Vallée.
Le professeur en charge de suivre ces exposés de système est Dominique REVUZ. Il met donc à disposition de chacun toute cette base de connaissances sur le site des exposés IR.
Le Sujet traité
Lorsque vous entendez " UNO " vous pensez à un jeu de carte très connu ??
Alors je vous invite à parcourir ce site. Vous decouvrirez l'univers du developpement via la plateforme mise à disposition par OpenOffice.org
Le moyen le plus simple de programmer le logiciel, à un niveau plus avancé que celui d'une simple Macro utilisateur, est d'utiliser UNO. Il offre l'interopérabilité entre différents langages de programmation, différents modèles d'objets, différentes architectures et différents processus, de manière locale, en réseau ou par Internet.
Auteur
Exposé et Site réalisé par GUERRIN Guillaume.
Etudiant de 3ème année en Informatique et Réseaux.
Glossaire
Mot : Définition
Du Code de toto
Du texte de toto
C important bordel toto
Qu'est ce que UNO
UNO (Universal Network Object)
UNO (Universal Network Object) spécialement conçu et développé par Sun microsystems pour le produit OpenOffice.org permet :
- Le contrôle d’OpenOffice.org et de ses ressources depuis une application tierce, distante ou non
- L’insertion de nouvelles fonctionnalités intégrées à l’environnement OOo (et donc contrôlables elles aussi par une application tierce)
- Le développement de nouvelles interfaces utilisateurs à l’intérieur de OOo, ayant accès à l’ensemble des composants de l’environnement.
Cette API permet donc de piloter toutes les fonctionnalités d'OpenOffice.org à partir d'une application externe, qui peut être distante ou locale. Il est ainsi possible de générer ou modifier des documents bureautiques à partir des applications métiers (en mode batch ou interactif), de développer des applications graphiques proposant une valeur ajoutée à OpenOffice.org.
L'API permet également d'étendre les fonctionnalités d'OpenOffice.org en créant de nouveaux composants, directement intégrés dans l'interface graphique d'Openoffice.org.
Interopérabilité
Uno se distingue en effet par son interopérabilité. Il est capable de travailler sur :
- Différents langages de programmation
- Différents modèles d'objet
- Différentes architectures de machine
Réseau
Uno fonctionne aussi bien en local que sur un Réseau ou même internet. Ceci permet de créer des objets distants qui vont pouvoir interagir avec OpenOffice.org
Les Langages
Langages complétement supportés
Avec les langages ci dessous il est possible de créer des objets UNO. C'est à dire qu'à partir des fichiers idl, il y a la possibilité de générer des fichiers pour ces différents langages.
- C
- C++
- Java
- Python
Impossibilité de créer de nouveaux objets
Il existe en effet des langages avec lesquels, il n'est pas possible de créer de nouveaux objets. Il est tout de meme possible d'utiliser certains objets déja existants.
- OpenOffice.org Basic
- Object Linking Embedding (OLE) Automation
- Commun language Infrastructure (CLI)
Les Outils
idlc
- Compilateur UNOIDL.
cppumaker
- Outil qui génère du code C++ à partir des UNOIDL.
javamaker
- Outil qui génère du code JAVA à partir des UNOIDL.
Rdbmaker
- Outil qui construit des types avec uniquement l'ensemble spécifié des types et leurs dépendances.
pkgchk
- Outil de déploiement de packages.
regcomp
- Outil d'enregistrement des composants UNO.
regview
- Outil pour visualiser le contenu d'une clé de registre (Type de noeud).
uno
- Outil qui permet de lancer les composants UNO et d'avoir un environnement « RunTime ».
autodoc
- Outil qui génère une documentation de type Javadoc pour le C/C++ et les fichiers UNOIDL.
Les différences avec CORBA
Les STUB
UNO ne produit pas du code de stub.
Ceci avait été fait dans l'ancienne version UNO2. Mais le problème était que cela produisait un code de stub trop important (environ 12 mb, malgré le fait que l'api avait moins de types qu'actuellement!).
Avec UNO3 (la version en cours), les implémentations sont appelées génériquement, sans avoir à produire de code pour le stub, il suffit juste de fournir le "bridging code" qui connaît le compilateur spécifique qui a compilé l'exécution.
La différence des IDL
Les IDL UNO se différencient des IDL Corba par ces quelques points:
- Un héritage des structures et des exceptions
- Un "service" stéréotypé (une classe abstraite qui combine des interfaces et des propriétés)
- Il peut assigner des valeurs spécifiques aux valeurs d'énumération
- Aucun tableau stéréotypé (mais des séquences ads-hoc)
- Pas d'union stéréotypée
- Pas d'Héritages multiples d'interfaces
Schéma
Ce shéma fait un bref résumé de ce que l'on trouve au niveau de UNO mais que l'on ne trouve pas forcément dans Corba
Vous pouvez d'ailleurs le retrouver à l'adresse suivante:
http://udk.openoffice.org/common/man/comparison_uno_corba.html
Software Development Kit (SDK)
Environement
Le SDK est une adjonction à la suite de bureau d'OpenOffice.org. Il fournit les outils et la documentation nécessaires pour développer avec l'api d'OpenOffice.org et de créer ses propres extensions (composants Uno) pour OpenOffice.org.
Le SDK fournit un environement de développement, séparé de l'environnement de OpenOffice.org
Le point culminant du SDK est le guide utilistateur d'environ 900 pages. Ce guide complet fournit une description détaillée des concepts de l'api d'OpenOffice.org, le modèle composant UNO et comment employer l'api dans le contexte des différents domaines d'application. À l'issue de chaque chapitre, il y a au moins un exemple qui explique comment employer l'api spécifique.
Outils
Le SDK contient les Outils nécessaires au développement d'UNO, vous le trouverez à l'adresse suivante:
http://udk.openoffice.org/
Packages
Le SDK contient les bibliothèques de C, C++ et des packages JAVA. Il existe cependant des packages déjà installés lors de l'installation de OpenOffice
Lors de l'installation du SDK que vous pouvez d'ailleurs télécharger ici, de nombreux exemples dans les différents langages de programmation sont fournis et peuvent vous permettre de comprendre beaucoup plus facilement.
Le guide fourni est extrêmement complet et s'adresse tout de même à des personnes familiarisées avec l'environement d'OpenOffice.org.
La Connexion
Les Contextes de composants
Le contexte de composant d'Uno est l'objet racine pour toutes applications client. Il doit être passé à un composant pendant son instantiation et donc fournit fondamentalement un environnement pourles composants. Le contexte de composant fournit également le "Service Manager", qui permet de créer des composants. L'idée est, qu'une méthode de circuit fermé est fournie, elle amorce ainsi le contexte de composant d'une installation d'Uno.
Les « Services Managers »
Le com.sun.star.lang.ServiceManager est la factory principale dans chaque application d'Uno. Il permet d'instantier par leur nom les services, d'énumérer toutes les réalisations d'un certain service, et d'ajouter ou d'enlever des factory pour un certain service au moment de l'exécution. Le Service Manager est passé à chaque composant d'Uno pendant l'instantiation.
Schéma
Autres
BlaBla
Le Client
Connexion du client
Le code suivant est un exemple de code qui permet de se connecter au serveur, vous pouvez voir apparaitre le contexte de composant ainsi que le service Manager.
import com.sun.star.bridge.XUnoUrlResolver;
import com.sun.star.uno.UnoRuntime;
import com.sun.star.uno.XComponentContext;
import com.sun.star.lang.XMultiComponentFactory;
import com.sun.star.beans.XPropertySet;
public class FirstConnection extends java.lang.Object
{
private XComponentContext xRemoteContext = null;
private XMultiComponentFactory xRemoteServiceManager = null;
public static void main(String[] args)
{
FirstConnection firstConnection1 = new FirstConnection();
try {
firstConnection1.useConnection();}
catch (java.lang.Exception e){
e.printStackTrace();}
finally {
System.exit(0);}
}
protected void useConnection() throws java.lang.Exception
{
try {
xRemoteServiceManager = this.getRemoteServiceManager("uno:socket,host=localhost,port=8100;urp;StarOffice.ServiceManager");
String available = (null != xRemoteServiceManager ? "available" : "not available");
System.out.println("remote ServiceManager is " + available);
}
catch (com.sun.star.connection.NoConnectException e) {
System.err.println("No process listening on the resource");
e.printStackTrace();
throw e;
}
catch (com.sun.star.lang.DisposedException e) {
xRemoteContext = null;
throw e;
}
}
protected XMultiComponentFactory getRemoteServiceManager(String unoUrl) throws java.lang.Exception
{
if (xRemoteContext == null)
{
// PREMIERE ETAPE: Créer le contexte de composant local, Récupérer le service manager local et
// lui demander de creer un objet UnoUrlResolver avec une interface XUnoUrlResolver
XComponentContext xLocalContext =com.sun.star.comp.helper.Bootstrap.createInitialComponentContext(null);
XMultiComponentFactory xLocalServiceManager = xLocalContext.getServiceManager();
Object urlResolver = xLocalServiceManager.createInstanceWithContext("com.sun.star.bridge.UnoUrlResolver", xLocalContext );
// Demande une interface XunoUrlResolver depuis un objet urlResolver
XUnoUrlResolver xUnoUrlResolver = (XUnoUrlResolver) UnoRuntime.queryInterface(XUnoUrlResolver.class, urlResolver);
// DEUXIEME ETAPE: Utiliserl'interface xUrlResolver pour importer le ServiceManager distant
// Retrouver les propriétés du contexte par defaut et récupérer le service Manager.
Object initialObject = xUnoUrlResolver.resolve(unoUrl);
XPropertySet xPropertySet = (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class, initialObject);
Object context = xPropertySet.getPropertyValue("DefaultContext");
xRemoteContext = (XComponentContext)UnoRuntime.queryInterface(XComponentContext.class, context);
}
return xRemoteContext.getServiceManager();
}
}// fin de la classe
Demmarage du serveur
Lancement du serveur
Pour démarrer le serveur, il suffit de créer une socket sur un port désiré lors du lancement de OpenOffice, on peut également lui spécifier le protocole (urp), ainsi que le service à démarrer ( Service Manager).
soffice "-accept=socket,host=localhost,port=8100;urp;StarOffice.ServiceManager"
On démarre donc le serveur en locahost sur le port 8100
Les Liens utiles
Les sites de OpenOffice
Le site français : http://fr.openoffice.org
Le site officiel: http://www.openoffice.org
UNO Developpement Kit
Vous pourrez trouver toutes les informations necessaires sur le SDK à l'adresse suivante :
http://udk.openoffice.org/
Les Contacts
L'école
Le CFA Ingénieurs 2000:
Adresse: 5, rue Einstein-77420 Champs sur Marne
Tél : 01 60 95 81 00 -- Fax : 01 60 95 81 01 / 01 60 95 81 30
Dominique REVUZ:
dr@univ-mlv.fr
Personnel
Vous pouvez me contacter ici