Compétence Java J2EE
Transcription
Compétence Java J2EE
Compétence (niveau moyen) – Java J2EE - 2014 « Mars-Mai 2014 . Jean Guy Morvan Réf : JAVA J2EE Version 1 Reproduction interdite sans autorisation préalable Page 1 sur 23 Jean Guy Morvan Merci de penser à la planète avant d’imprimer Sommaire CONTEXTE DE LA REMISE A NIVEAU JAVA J2EE EN AUTOFORMATION .................................... 3 1. 2. 3. UTILISATION DE ECLIPSE KEPLER POUR JAVA J2EE ............................................................ 4 1.1 DESCRIPTION FONCTIONNEL DE L'APPLICATION 'BANQUE' .......................................................... 4 1.2 TEST CONNEXION JAVA J2EE ET RESULTAT ............................................................................... 5 1.3 INTEGRATION AVEC GROOVY POUR ECLIPSE KEPLER .................................................................. 5 1.4 CREATION DE LA CLASSE JAVA PRINCIPALE JGMLOADCSVFILEANO .............................................. 6 1.5 CREATION DE LA PROCEDURE DE CHARGEMENT .......................................................................... 9 1.6 1.7 CREATION DE LA PROCEDURE DE CONTROLE DE CHARGEMENT ................................................... 10 CREATION DE LA PROCEDURE DE CREATION DE FICHIER ANOMALIE ............................................. 11 1.8 1.9 CREATION DE LA METHODE DE CLASSE DBCONNECT ................................................................. 12 RESULTATS ............................................................................................................................ 13 ECLIPSE INDIGO POUR UTILISATION DE STRUT 2 ............................................................... 15 2.1 PREALABLE - INSTALLATION DU SERVEUR TOMCAT .................................................................. 15 2.2 2.3 CREATION D'IHM JSP ............................................................................................................. 17 CREATION D'UNE JSP SIMPLE .................................................................................................. 18 ANNEXE....................................................................................................................................... 20 Jean Guy Morvan Réf : JAVA J2EE Version 1 Reproduction interdite sans autorisation préalable Page 2 sur 23 Jean Guy Morvan Merci de penser à la planète avant d’imprimer CONTEXTE DE LA REMISE A NIVEAU JAVA J2EE EN AUTOFORMATION Ce document a pour but de créer un flux JDBC à partir d'un fichier csv vers une base Oracle 11g. Parmi les fondamentaux testés, il convient de valider une connexion J2EE via l'IDE Eclipse dans un premier temps, puis de savoir créer une instance de classe de connexion afin d'éviter la surcharge de code dans les fonctions. La version de la base de donnée JDBC est celle de Database Oracle 11g. Parmi les manipulations, il convient donc de tester : - La connexion à Oracle 11g - La création de classe externalisée pour optimisation de code, méthode d'instance (instance de classe) - la création de procédures et fonctions Java avec passage de paramètres - la manipulation de table Oracle à travers des requêtes encapsulées - la convivialité d'utilisation de Eclipse Kepler (et Indigo) avec les propositions de résolution d'erreurs soulignées en rouge dans le code Les autres études possibles en Java J2EE peuvent concerner les frameworks Spring ou Hibernate, autre que Struts donc, ainsi qu'un outil de gestion d'application comme Maven. Préalable : Installation du drivers jdbc\lib\ojdbc6.jar dans le classpath Jean Guy Morvan Réf : JAVA J2EE Version 1 Reproduction interdite sans autorisation préalable Page 3 sur 23 Jean Guy Morvan Merci de penser à la planète avant d’imprimer 1. UTILISATION DE ECLIPSE KEPLER POUR JAVA J2EE Le cas fonctionnel analysé sera celui d'un échantillon fictif du mini-base BANQUE, bancaire donc Personne/caisse gestionnaire. 1.1 DESCRIPTION FONCTIONNEL DE L'APPLICATION 'BANQUE' Liste des tables : PMIN : L'échantillon fictif des personnes physiques et morales d'une banque avec le numéro de caisse gestionnaire, l'identifiant de la personne et ses coordonnées. STRC : L'échantillon fictif des caisses de la banque en cardinalité stricte sur la contrainte de caisse vis à vis de PMIN Jean Guy Morvan Réf : JAVA J2EE Version 1 Reproduction interdite sans autorisation préalable Page 4 sur 23 Jean Guy Morvan Merci de penser à la planète avant d’imprimer Echantillon (C:\\Users\\morvan\\Desktop\\Documents\\divers\\travaux rapides\\x2pse931_test3.csv): 1.2 TEST CONNEXION JAVA J2EE ET RESULTAT URL de connexion : Oracle JDBC utilisant un SID: jdbc:oracle:thin:@<host>:<port>:<SID> 23 enregistrements testés de la table STRC (caisse gestionnaire de banque) via le driver ojdbc6.jar 1.3 INTEGRATION AVEC GROOVY POUR ECLIPSE KEPLER via le driver ojdbc6.jar intégré dans le classpath du Groovy Project Jean Guy Morvan Réf : JAVA J2EE Version 1 Reproduction interdite sans autorisation préalable Page 5 sur 23 Jean Guy Morvan Merci de penser à la planète avant d’imprimer code du Groovy Script (4 champs dans la table STRC de Oracle) : import groovy.sql.Sql; def file1 = new File(/C:\Users\morvan\Desktop\Documents\divers\travaux rapides\x2pse931_ccm104022.csv/); def reader = new FileReader(file1); def sql = Sql.newInstance("jdbc:oracle:thin:@localhost:1521:GFIDB", "SYSTEM", "Annemarie26", "oracle.jdbc.driver.OracleDriver") reader.each { line -> fields = line.split(';') sql.executeInsert("insert into STRC values(${fields[0]},${fields[1]},${fields[2]},${fields[3]})") } 1.4 CREATION DE LA CLASSE JAVA PRINCIPALE JGMLOADCSVFILEANO Principe : Création d'une instance de classe de connexion par le new DBase() Algorithme de lecture d'un fichier csv Appel d'une fonction ctl_loader de contrôle d'existence d'un numéro de caisse Appel d'une procédure de chargement des tuples dans la table Oracle Jean Guy Morvan Réf : JAVA J2EE Version 1 Reproduction interdite sans autorisation préalable Page 6 sur 23 Jean Guy Morvan Merci de penser à la planète avant d’imprimer Codage : import import import import import import import import import import java.sql.Connection; java.sql.DatabaseMetaData; java.sql.DriverManager; java.sql.PreparedStatement; java.sql.ResultSet; java.sql.ResultSetMetaData; java.sql.SQLException; java.sql.Statement; java.util.Properties; java.io.*; public class jgmloadcsvfileano { //* ajout de la declaration throws public static void main(String[] args) throws SQLException { String csvFile = "C:\\Users\\morvan\\Desktop\\Documents\\divers\\travaux rapides\\x2pse931_test3.csv"; BufferedReader br = null; String line = ""; String csvSplitBy = ";"; Statement stmt = null; String query ="select count(*) from PMIN"; ResultSet rs = null; /* String url = "jdbc:oracle:thin:@localhost:1521:GFIDB"; String username ="SYSTEM"; String password = "Annemarie26"; */ DBase db = new DBase(); Connection conn = db.DBconnect(); try { br = new BufferedReader(new FileReader(csvFile)); while ((line = br.readLine()) != null) { // use comma as separator String[] data = line.split(csvSplitBy); int ressql = 0; if (data.length == 6) { ressql = ctl_loader(data); System.out.println("Code1 : " + ressql); if (ressql == 0) { db_loader(data); } // System.out.println("Done0"); } // } } /* Connection conn = DriverManager.getConnection(url, username, password); */ stmt = conn.prepareStatement(query); Jean Guy Morvan Réf : JAVA J2EE Version 1 Reproduction interdite sans autorisation préalable Page 7 sur 23 Jean Guy Morvan Merci de penser à la planète avant d’imprimer //Resultset returned by query rs = stmt.executeQuery(query); while(rs.next()){ int count = rs.getInt(1); System.out.println("count of stock : " + count); } stmt.close(); } catch (Exception e) { e.printStackTrace(); } finally { if (br != null) { try { br.close(); } catch (IOException e) { e.printStackTrace(); } } } System.out.println("Main OK"); } ....etc PRINCIPE : Une méthode est une fonction qui va s'appliquer sur quelque chose. Le quelque chose, c'est soit un objet (on parle alors d'instance de classe), soit une classe. Si la méthode est une méthode d'instance, c'est qu'elle va s'appliquer sur un objet existant. Si la méthode est une méthode de classe, elle s'appliquera à une classe. ici : DBase db = new DBase(); Connection conn = db.DBconnect(); Jean Guy Morvan Réf : JAVA J2EE Version 1 Reproduction interdite sans autorisation préalable Page 8 sur 23 Jean Guy Morvan Merci de penser à la planète avant d’imprimer 1.5 CREATION DE LA PROCEDURE DE CHARGEMENT Principe : Création d'une instance de classe de connexion par le new DBase() Appel des méthodes prepareStatement et executeQuery d'exécution de requêtes SQL en LMD Codage : public static void db_loader(String[] da) throws SQLException { /* String url = "jdbc:oracle:thin:@localhost:1521:GFIDB"; String username ="SYSTEM"; String password = "Annemarie26"; Connection conn = DriverManager.getConnection(url, username, password); conn.setAutoCommit(false); */ DBase db = new DBase(); Connection conn = db.DBconnect(); PreparedStatement preStatement2 = conn .prepareStatement("insert into PMIN (NO_PSE, STRC_STR_PRIV, CD_SI, TYPE_PSE, STR_PRIV, NOM_USU) values (?, ?, ?, ?, ?, ?)"); for (int i = 0; i < da.length; i++) { preStatement2.setString(i + 1, da[i]); } preStatement2.executeQuery(); preStatement2.close(); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("db_loader OK"); } Jean Guy Morvan Réf : JAVA J2EE Version 1 Reproduction interdite sans autorisation préalable Page 9 sur 23 Jean Guy Morvan Merci de penser à la planète avant d’imprimer 1.6 CREATION DE LA PROCEDURE DE CONTROLE DE CHARGEMENT Principe : Création d'une instance de classe de connexion par le new DBase() Appel des méthodes prepareStatement et executeQuery d'exécution de requêtes SQL en LMD Appel d'une fonction de gestion des anomalies generateCsvFileano Codage : public static int ctl_loader(String[] da) throws SQLException { int res_sql = 0; try { // création d'une instance de classe visible de connexion Database DBase db = new DBase(); Connection conn = db.DBconnect(); PreparedStatement preStatement3 = conn.prepareStatement("select str_priv from STRC where str_priv = ?"); // .prepareStatement("select str_priv into "+ noccm + " from STRC where str_priv = ?"); /* preStatement3.setString(3, da[3]); test erreur volontaire */ preStatement3.setString(1, da[4]); System.out.println("str_priv : " + da[4]); preStatement3.executeQuery(); preStatement3.close(); } catch (SQLException ex) { System.out.println("Code: " + ex.getErrorCode()); res_sql = ex.getErrorCode(); generateCsvFileano("C:\\Users\\morvan\\Desktop\\Documents\\divers\\travaux rapides\\x2pse931_anojgm.csv", da[4]); } System.out.println("ctl_loader OK"); return res_sql; } .....etc Jean Guy Morvan Réf : JAVA J2EE Version 1 Reproduction interdite sans autorisation préalable Page 10 sur 23 Jean Guy Morvan Merci de penser à la planète avant d’imprimer 1.7 CREATION DE LA PROCEDURE DE CREATION DE FICHIER ANOMALIE Principe : Ecriture dans un fichier anomalie en csv Codage : private static void generateCsvFileano(String filename, String da) { DatabaseMetaData dbMetaData = null; String columnNameQuote = ""; try { File file = new File(filename); if ( !file.exists() ) { System.out.println("fichier anomalies cree"); file.createNewFile(); } /* BufferedWriter writer = new BufferedWriter(new FileWriter(filename));*/ FileWriter fw = new FileWriter(filename); BufferedWriter writer = new BufferedWriter( fw ); writer.write("N° CCM en ANO"); writer.newLine(); System.out.println("da : " + da); writer.write(da); writer.newLine(); writer.flush(); writer.close(); fw.close(); } catch (Exception e) { System.err.println("Unable to connect to database: " + e); } System.out.println("generateCsvFileano OK"); } //* fin de la classe jgmloadcsvfileano.... } Jean Guy Morvan Réf : JAVA J2EE Version 1 Reproduction interdite sans autorisation préalable Page 11 sur 23 Jean Guy Morvan Merci de penser à la planète avant d’imprimer 1.8 CREATION DE LA METHODE DE CLASSE DBCONNECT Principe : Création d'une connexion par le driver thin et la méthode getConnection Utilisation du type Connection pour la fonction DBconnect Codage : class DBase { public DBase() { } // ajout type Connection et non void et suppression de Public pour la visibilité static Connection DBconnect() throws SQLException { String url = "jdbc:oracle:thin:@localhost:1521:GFIDB"; String username ="SYSTEM"; String password = "Annemarie26"; Connection conn = null; // ajout variable try { conn = DriverManager.getConnection(url, username, password); } catch (Exception e) { System.err.println("Unable to connect to database: " + e); } System.out.println("DBconnect OK"); return conn; // ajout return } } //* FIN Jean Guy Morvan Réf : JAVA J2EE Version 1 Reproduction interdite sans autorisation préalable Page 12 sur 23 Jean Guy Morvan Merci de penser à la planète avant d’imprimer 1.9 RESULTATS tests sans erreurs : tests avec erreurs sur le numéro de caisse dans le fichier d'entrée csv : Jean Guy Morvan Réf : JAVA J2EE Version 1 Reproduction interdite sans autorisation préalable Page 13 sur 23 Jean Guy Morvan Merci de penser à la planète avant d’imprimer Jean Guy Morvan Réf : JAVA J2EE Version 1 Reproduction interdite sans autorisation préalable Page 14 sur 23 Jean Guy Morvan Merci de penser à la planète avant d’imprimer 2. ECLIPSE INDIGO POUR UTILISATION DE STRUT 2 Il convient d'installer Eclipse Indigo et non plus Eclipse Kepler car ce dernier ne contient pas de générateur d'application Web Dynamique, seuls les projets Web Static existe sous Kepler. Kepler : 2.1 Indigo : PREALABLE - INSTALLATION DU SERVEUR TOMCAT Configuration : installation de Apache Tomcat 7 pour une utilisation du JRE 1.7, dans Program Files, cf. http://tomcat.apache.org/download-70.cgi Paramêtrage dans Eclipse Indigo Dans l'explorateur, sélectionner New, Server, Tomcat v7.0 Récupérer le répertoire tomcat 7.0, puis faire next Jean Guy Morvan Réf : JAVA J2EE Version 1 Reproduction interdite sans autorisation préalable Page 15 sur 23 Jean Guy Morvan Merci de penser à la planète avant d’imprimer Modifier les 2 ports, 8080 et 8005, s'ils sont déjà pris par un autre serveur Tomcat (exemple Tomcat 5.5 pour Business Object Edge 3.0), prendre 8000 et 8010 à la place : Rappel : http://en.wikipedia.org/wiki/Java_EE_version_history http://localhost:8080/ pour un test http://wpetrus.developpez.com/java/tomcat/windows/ Jean Guy Morvan Réf : JAVA J2EE Version 1 Reproduction interdite sans autorisation préalable Page 16 sur 23 Jean Guy Morvan Merci de penser à la planète avant d’imprimer 2.2 CREATION D'IHM JSP Struts 2 est un framework de développement. Il comprend un ensemble de bibliothèques qui facilitent le développement des interfaces web, tels que les JSP, JavaServlet Pages par exemple. Struts2 est un framework orienté action architecturé en xml. Ses Actions permettent d’accéder aux différents Services tel le « Model » et déterminent ce que la Vue doit afficher après leur traitement (traitement des actions par struts.xml). Les actions struts 2 implémentent des objets java appelés Beans pour chaque donnée envoyée via les formulaires. Struts repose sur un modéle de conception dis MVC 2 (Modèle Vue Contrôleur). Ce framework fournit un certain nombre de services tels le débogage, les validateurs de formulaire, la gestion de la navigation ou encore la gestion de l’internationalisation. Ici, nous allons traité une JSP simple en HTML Jean Guy Morvan Réf : JAVA J2EE Version 1 Reproduction interdite sans autorisation préalable Page 17 sur 23 Jean Guy Morvan Merci de penser à la planète avant d’imprimer 2.3 CREATION D'UNE JSP SIMPLE Affichage de l'identifiant, caisse, code SI, Type Personne et nom Prénom de la table PMIN jgmorastruts.jsp Première exécution en erreur HTTP 500 : Jean Guy Morvan Réf : JAVA J2EE Version 1 Reproduction interdite sans autorisation préalable Page 18 sur 23 Jean Guy Morvan Merci de penser à la planète avant d’imprimer Résolution : Aller dans le Run Configurations et ajouter le driver Oracle Ojdbc6.jar avec le bouton 'Add External jar' Résultats : avec ajout d'une balise HTML de paragraphe pour le Titre du rapport : <p align="center"><font color="#000000" size="4"><i>Liste des banque</i></font></p> Jean Guy Morvan Réf : JAVA J2EE Version 1 Personnes de la Reproduction interdite sans autorisation préalable Page 19 sur 23 Jean Guy Morvan Merci de penser à la planète avant d’imprimer 3. ANNEXE http://fr.wikipedia.org/wiki/M%C3%A9thode_%28informatique%29 http://gaetan.dussaux.free.fr/cours/java/9.htm Java natif : http://stackoverflow.com/questions/22158208/read-csv-file-distinct-record-and-write-it-tooracle-using-java-ora-00001-u Groovy : http://stackoverflow.com/questions/4085444/import-csv-file-to-oracle-db mysql (créer une instance de connexion) : http://www.java-tips.org/other-api-tips/jdbc/import-data-from-txt-or-csv-files-into-mysqldatabase-t-3.html Autres sites : http://thierry-leriche-dessirier.developpez.com/tutoriels/java/csv-avec-java/#L6 http://thinktibits.blogspot.fr/2012/12/Insert-CSV-Data-Oracle-Table-Java-JDBC-Example.html https://community.oracle.com/message/8608027 http://www.java2s.com/Code/Java/Database-SQLJDBC/GetErrorCodeSQLStateMessage.htm http://publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp?topic=/com.ibm.db2.udb.doc/ad /tjvpsxqu.htm http://www.tutorialspoint.com/jdbc/preparestatement-object-example.htm Struts 2 : http://tahe.developpez.com/java/struts2/ http://www.eyrolles.com/Informatique...-9782746050549 http://www.eyrolles.com/Informatique...-9782746065598 Jean Guy Morvan Réf : JAVA J2EE Version 1 Reproduction interdite sans autorisation préalable Page 20 sur 23 Jean Guy Morvan Merci de penser à la planète avant d’imprimer parser un csv : http://www.fobec.com/CMS/java/sources/parser-fichier-csv-avec-stringtokenizer_980.html http://www.touilleur-express.fr/2008/12/23/exemple-mule-lire-un-fichier-csv-et-ecrire-versune-base-de-donnees/ http://howtodoinjava.com/2013/05/27/parse-csv-files-in-java/ sortie csv: http://stackoverflow.com/questions/20563025/dump-oracle-table-to-csv-date-converting sas http://www.sas.com/offices/europe/france/academic/licence-gratuite-SAS-domicile.html http://groovy.codehaus.org/Eclipse+Plugin http://groovy.codehaus.org/Install+Groovy-Eclipse+Plugin http://groovy.codehaus.org/Tutorial+6+-+Groovy+SQL installation de groovy : Groovy permet de charger des données csv avec analyse champs par champs Pour Eclipse Kepler, l'url GRECLIPSE est sur http://groovy.codehaus.org/Eclipse+Plugin : Jean Guy Morvan Réf : JAVA J2EE Version 1 Reproduction interdite sans autorisation préalable Page 21 sur 23 Jean Guy Morvan Merci de penser à la planète avant d’imprimer http://groovy.codehaus.org/Tutorial+6+-+Groovy+SQL Jean Guy Morvan Réf : JAVA J2EE Version 1 Reproduction interdite sans autorisation préalable Page 22 sur 23 Jean Guy Morvan Merci de penser à la planète avant d’imprimer exemple de programme simple de connexion et de select Oracle : Jean Guy Morvan Réf : JAVA J2EE Version 1 Reproduction interdite sans autorisation préalable Page 23 sur 23