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