Teaching‎ > ‎

TP Middleware M1, 2008-2009

Ressources du TP

Ressources Tierces

Questionnaire


Merci de bien vouloir remplir ce questionnaire afin de nous aider à préparer les cours des années suivantes : https://spreadsheets.google.com/viewform?key=pBjp1farfPNBZ6iOsWVbCGA.

Connexion et utilisation d'Eclipse dans les salles de TP (2001...)

Suite aux nombreux problèmes de type 'ClassNotFound', nous avons trouvé avec quelques-uns de vos camarades une solution qui je l'espère marchera pour tout le monde. Le problème viendrait du fait que la commande setenv PATH /usr/java/default/bin est incomplète.
  • Connectez-vous sur sciapp :
    • ssh -X sciapp
  • Si vous n'êtes pas par défaut sur le shell tcsh, tapez tcsh (dans le doute, tapez le).
  • Tapez setenv . Seule, cette commande doit vous donner une liste de variables ainsi que leurs valeurs. Rechercher la ligne commençant par PATH. Recopiez sa valeur, et utilisez là dans la commande suivante :
    • setenv PATH valeurdevotrepath:/usr/java/default/bin/
  • Ce qui donne comme commande entière quelque chose de similaire à :
    • setenv PATH /usr/java/default/bin:/usr/lib/qt-3.3/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/java/default/bin
  • Vous pouvez ensuite démarrer Eclipse :
    • /opt/eclipse/eclipse
Une solution plus radicale consiste a télécharger ce script une fois connecté sur sciapp, qui se charge d'exécuter tcsh, de mettre un tas de variables a une valeur normalement correcte, puis de lancer Eclipse.
  • Mettez ce script sur votre bureau.
  • Connectez vous sur sciapp
  • Tapez sh ~/Desktop/setenvir.sh

Administration locale de glassfish

  • Connectez-vous avec ssh sur sciapp.
  • mkdir $HOME/mesdomaines
  • Utilisez pour la suite la commande asadmin qui se trouve dans le dossier /opt/javaee5/glassfish/bin/
  • Chacun de vous doit avoir un VotrePortDeBase différent, je vous les attribuerais. Vous pouvez ensuite accéder à l'interface de gestion à l'adresse http://172.17.160.20:<VotrePortDeBase+48>/
  • Créer votre propre domaine :
    • asadmin create-domain --portbase VotrePortDeBase --domaindir $HOME/mesdomaines tp1
  • Démarrer votre domaine :
    • asadmin start-domain --domaindir $HOME/mesdomaines tp1
  • Arrêter votre domaine :
    • asadmin stop-domain --domaindir $HOME/mesdomaines tp1

Création d'une DataSource

  • Dans les Connection Pools (Resources->JDBC), créez une nouvelle DataSource, du nom de votre choix (oraclePool par exemple), en choisissant Oracle comme 'vendor'.
  • Cochez ensuite la case 'Allow Non Component Callers', afin que votre programme Java ait le droit d'accéder à cette ressource.
  • Dans les propriétés de connections, mettez le login et le mot de passe de votre connexion Oracle, ainsi que qu'une ligne 'url' contenant l'adresse de connexion à la base (jdbc:oracle:thin:@sciapp2:1521:ORCL).
  • Enregistrer, et tester en choisissant 'Ping' dans l'interface de gestion de votre Pool.
  • Si une erreur survient de type 'class not found...', ajoutez dans 'Application Server->JVM Settings->Path Settings->Classpath Suffix' la valeur '/opt/javaee5/glassfish/lib/ojdbc6.jar', puis arrêtez et redémarrer votre domaine.
  • Enfin, créez une JDBC Ressource, que vous nomerez par exemple 'jdbc/tp1', utilisant cette Connection Pool.

Code pour la connexion au DataSource

  • Ajouter ces jars (liens recréé, en esperant que ça fonctionne) à votre projet. Faites bien attention à n'inclure que ces jars. D'autres parts, vérifier que vous avez bien ces imports dans votre programme :
  • import java.sql.Connection;
    import java.sql.Statement;
    import java.sql.ResultSet;
    import java.util.Properties;
    import javax.naming.Context;
    import javax.naming.InitialContext;
    import javax.sql.DataSource;
    import oracle.jdbc.pool.OracleDataSource;
  • En effet, certaines classes sont définies avec des noms apparaissant dans plusieurs bibliothèques. Ceci a pour effet de causer des erreurs, car ces classes ont rarement les mêmes fonctionnalités, et force de plus le chargement d'autres .jar, ce qui peut entraîner les problèmes de 'ClassDefNotFound' que vous connaissez.
  • Il faut encore indiqué à votre client où se trouve le serveur Glassfish, afin qu'il puisse effectuer le lookup JNDI. Pour ce faire, vous avez deux possibités :
  1. Ajouter les information de connexion directement dans votre code Java :
    • Properties props = new Properties();
      props.setProperty("java.naming.factory.initial","com.sun.enterprise.naming.SerialInitContextFactory");
      props.setProperty("java.naming.factory.url.pkgs","com.sun.enterprise.naming");
      props.setProperty("java.naming.factory.state","com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl");
      props.setProperty("org.omg.CORBA.ORBInitialHost", "AdresseServeurGlassfish");
      props.setProperty("org.omg.CORBA.ORBInitialPort", "VotrePortDeBase+37");
      Context ctx = new InitialContext(props);
      ds = (DataSource) ctx.lookup("jdbc/VotreDataSourceDansGlassFish");
      Connection conn = ds.getConnection();
    • Utiliser un fichier nommé jndi.properties, et placé à la racine de votre projet. Cette méthode est beaucoup plus flexible, et sera préférée. Dans ce cas, il n'est pas utile de passer des paramètres à la création du contexte. Le fichier est un fichier texte classique, contenant simplement les lignes suivantes :
    • java.naming.factory.initial=com.sun.enterprise.naming.SerialInitContextFactory
      java.naming.factory.url.pkgs=com.sun.enterprise.naming
      java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl
      org.omg.CORBA.ORBInitialHost=
      AdresseServeurGlassfish
      org.omg.CORBA.ORBInitialPort=VotrePortDeBase+37

    Un workspace qui fonctionne

    Télécharger ici

    Screencast

    Les screencasts suivants sont fait en flash. Pour les visionner, connecter vous sur sciapp en ssh tout en redirigeant l'affichage (ssh -X sciapp) puis lancez Firefox, puisque flash semble installé sur sciapp. Vous pourrez alors les visionner.

    Oracle Datalink

    Pour rappel, les datalinks permettent de créer des ponts entre des bases de données. En pratique, notre objectif est d'obtenir une base centrale, constituée de Datalink pointant vers les bases distantes. De cette manière, une application utilisant notre base de données aura une vue globale sur cette dernière, bien que les données réelles soient stockées sur des serveurs distants. La syntaxe de création d'un datalink est la suivante :
    CREATE PUBLIC DATABASE LINK hslink CONNECT TO
    "dbuser" IDENTIFIED BY "dbpassword" using 'fb_connection';

    Cette commande crée un datalink nommé hslink. Les noms d'utilisateurs (dbuser) et mots de passe (dbpassword) sont ceux de la base distante, et doivent être renseignés. 'fb_connection' est le nom de la base distance, à choisir parmis scivirt1 à scivirt6 selon les données nécessaires.

    Après la création d'un DalaLink, on peut vérifier son bon fonctionnement par une requête l'utilisant :

    select * from all_all_tables@hslink;


    ĉ
    TP1.doc
    (40k)
    Utilisateur inconnu,
    22 oct. 2008 à 06:46
    ċ
    jarsTP1M1.zip
    (19416k)
    Olivier Coupelon,
    17 déc. 2009 à 07:27
    ċ
    m1.tar.gz
    (6433k)
    Olivier Coupelon,
    10 nov. 2008 à 06:57
    ċ
    ojdbc14.jar
    (1185k)
    Utilisateur inconnu,
    22 oct. 2008 à 06:46
    ċ
    ojdbc5.jar
    (1836k)
    Utilisateur inconnu,
    22 oct. 2008 à 06:50
    ċ
    ojdbc6.jar
    (1931k)
    Utilisateur inconnu,
    22 oct. 2008 à 06:46
    ć
    Utilisateur inconnu,
    22 oct. 2008 à 06:46
    ċ
    scriptsOracle.zip
    (2k)
    Utilisateur inconnu,
    22 oct. 2008 à 06:46
    ċ
    setenvir.sh
    (1k)
    Olivier Coupelon,
    12 nov. 2008 à 07:16
    ċ
    squelette-Pgm1.txt
    (1k)
    Utilisateur inconnu,
    22 oct. 2008 à 06:46
    ċ
    tp2.pdf
    (397k)
    Olivier Coupelon,
    7 nov. 2008 à 05:47
    Ċ
    tp3.pdf
    (299k)
    Olivier Coupelon,
    24 nov. 2008 à 03:07
    Comments