dimanche 18 octobre 2015

MAVEN en 5 minutes

Pré-requis

Être à l'aise dans la manipulation et l'installation de logiciel dans le système de votre choix. Dans cet article nous utilisons UBUNTU

Installation

Installer MAVEN sur votre système. Par exemple pour UBUNTU "sudo apt-get install  maven". Maven utilise Java (java doit donc être installé aussi)

Si vous souhaiter utiliser la dernière version de maven, et c'est ce que nous vous conseillons, choisissez l'installation "manuelle¨

Télécharger la dernière version ici
Décompresser l'archive dans /opt par exemple
Ajouter le répertoire bin de maven au PATH du système.

Dans notre environnement nous avons ajouté "export PATH=$PATH:/opt/apache-maven-3.3.3/bin/" a la fin du fichier .bashrc

Ouvrir un nouveau terminal et Verifier l'installation 
mvn --version
Apache Maven 3.3.3 (7994120775791599e205a5524ec3e0dfe41d4a06; 2015-04-22T14:57:37+03:00)
Maven home: /opt/apache-maven-3.3.3
Java version: 1.7.0_79, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-7-openjdk-amd64/jre
Default locale: fr_FR, platform encoding: UTF-8
OS name: "linux", version: "3.19.0-30-generic", arch: "amd64", family: "unix"

Création du premier projet

Voici la commande magique

mvn archetype:generate -DgroupId=net.cofares.app -DartifactId=tuto-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

La première fois, la commande prendra un certain temps, maven va récupérer pour vous, automatiquement, tous les composants (artifact) nécéssaire pour le projet. Ces artifact par la suite serons dans votre dépôt (cache) local. Bien sûe vous avez besoin d'une connection internet lors de l'exécution de cette commande la première fois.

Après un certain nombre de "download" et de configuration automatique. Le projet est prêt. Verifions:

Trace sans les DONLOAD
mvn archetype:generate -DgroupId=net.cofares.tuto -DartifactId=appNo1 -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
[INFO] Scanning for projects...
[INFO]                                                                        
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] >>> maven-archetype-plugin:2.4:generate (default-cli) > generate-sources @ standalone-pom >>>
[INFO]
[INFO] <<< maven-archetype-plugin:2.4:generate (default-cli) < generate-sources @ standalone-pom <<<
[INFO]
[INFO] --- maven-archetype-plugin:2.4:generate (default-cli) @ standalone-pom ---
[INFO] Generating project in Batch mode
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-quickstart:1.0
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: groupId, Value: net.cofares.tuto
[INFO] Parameter: packageName, Value: net.cofares.tuto
[INFO] Parameter: package, Value: net.cofares.tuto
[INFO] Parameter: artifactId, Value: appNo1
[INFO] Parameter: basedir, Value: /home/pascalfares
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] project created from Old (1.x) Archetype in dir: /home/pascalfares/appNo1
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 9.397 s
[INFO] Finished at: 2015-10-18T10:31:03+03:00
[INFO] Final Memory: 17M/158M
[INFO] ------------------------------------------------------------------------

et voici ce qui a été créé

cd appNo1/
pascalfares@Sleekbook:~/appNo1$ ls
pom.xml  src
pascalfares@Sleekbook:~/appNo1$ ls -R
.:
pom.xml  src
./src:
main  test
./src/main:
java
./src/main/java:
net
./src/main/java/net:
cofares
./src/main/java/net/cofares:
tuto
./src/main/java/net/cofares/tuto:
App.java
./src/test:
java
./src/test/java:
net
./src/test/java/net:
cofares
./src/test/java/net/cofares:
tuto
./src/test/java/net/cofares/tuto:
AppTest.java

Le répertoire  /src/main/java contient le code source du projet, le répertoire src/test/java contient la source de test, et le fichier pom.xml est le "Project Object Model", ou POM du projet.

Le POM 

Le pom est le fichier essentiel d'un projet MAVEN voici le fichier pom de notre projet
more pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/
2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/
maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>net.cofares.tuto</groupId>
  <artifactId>appNo1</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>appNo1</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

Qu'avons nous fait? 

Vous avez exécuté le but (objectf) archetype:generate, et passé différents paramètres à cet objectif. Le préfixe archetype est le 'plugin' qui contient l'objectif. Si vous êtes familier avec Ant, vous pouvez concevoir cela comme similaire à une tâche. Ce but a créé un projet simple basée sur un archétype. Qu'il suffise de considérer pour l'instant qu'un 'plugin' est une collection de buts avec un but commun général.

Construisons maintenant le résultat (générer l'executable)

mvn package

Cette fois ci nous exécutons une phase de packaging, qui va produire le logiciel au format de packaging correspondant au archetype de notre projet.

Une phase est une étape dans le cycle de vie de la construction, qui est une séquence ordonnée de phases. Lorsqu'une phase est donnée, Maven exécute toutes les étapes dans l'ordre jusqu'à et y compris celle définie.

Le logiciel est prêt essayons le :

java -cp target/appNo1-1.0-SNAPSHOT.jar net.cofares.tuto.App
Hello LJUG!





MAVEN en quelques mots

Qu'est-ce que Maven ? 

Maven est essentiellement un outil de gestion et de compréhension de projet.  Maven offre des fonctionnalités de : construction , compilation ; documentation ; rapport ; gestion des dépendances ; gestion des sources ; mise à jour de projet ; déploiement.

Qu'est-ce que le POM ? 

Le POM (Project Object Model) est une façon de décrire, de manière déclarative, un projet au sens de Maven. Cette description est contenue dans le fichier pom.xml présent dans le repertoire de base du projet. Le fichier pom.xml contient donc tous les éléments permettant de gérer le cycle de vie du projet. project : c'est la balise racine de tous les fichiers pom.xml.

  • modelVersion : cette balise indique la version de POM utilisée. Bien que cette version ne change pas fréquemment, elle est obligatoire afin de garantir la stabilité d'utilisation. 
  • groupId : cette balise permet d'identifier un groupe qui a créé le projet. Cette clé permet d'organiser et de retrouver plus facilement et rapidement le projet. 
  • artifactId : cette balise indique un nom unique utilisé pour nommer les artifacts à construire. packaging : type de packaging du projet ( ex. : JAR, WAR, EAR, etc.). 
  • version : version de l'artifact généré par le projet. 
  • name : nom du projet. 
  • url : adresse du site du projet. 
  • description : description du projet. 
  • dependencies : balise permettant de gérer les dépendances.

Qu'est-ce qu'un archetype ? 

Un archetype est un template de projet. Le fait d'utiliser des archetypes pour initialiser un projet permet de gagner du temps et de respecter une certaine convention. 

Qu'est-ce qu'une dépendance ? 

Une dépendance est une référence vers un artefact spécifique contenu dans un repository (dépôt). Cet artefact est nécessaire pour une ou plusieurs phases du cycle de vie du projet.  L'exemple le plus simple est une dépendance sur une bibliothèque jar qui permet d'en utiliser le contenu dans le projet.

Qu'est-ce qu'un artefact ? 

Dans Maven, un artefact est un élément spécifique issu de la construction du logiciel.  Dans Java, les artefacts les plus communs sont des JARs, mais ce peut être aussi un fichier WAR, un EAR, un ZIP, etc.

Qu'est-ce que le groupId/artifactId ?

Le groupId est l'identifiant du groupe, à l'origine du projet. GroupId suit les mêmes règles de nommage que les packages  Java (exemple : fr.masociete.monprojet), et on choisit généralement comme groupId le nom du top package du projet.  L'artifactId est l'identifiant du projet au sein de ce groupe.  L'artifactId est utilisé par défaut pour construire le nom de l'artefact final (exemple : pour un artifactId=monprojet, le nom du fichier jar généré sera monprojet-version.jar).

Qu'est-ce qu'un SNAPSHOT ? 

Par convention, une version en cours de développement d'un projet voit son numéro de version suivi d'un -SNAPSHOT.  Ainsi un projet en version 2.0-SNAPSHOT signifie que cette version est une pré-version de la version 2.0, en cours de développement.  Ce concept de SNAPSHOT est particulièrement important pour Maven. En effet, dans la gestion des dépendances, Maven va chercher à mettre à jour les versions SNAPSHOT régulièrement pour prendre en compte les derniers développements.  Utiliser une version SNAPSHOT permet de bénéficier des dernières fonctionnalités d'un projet, mais en contrepartie, cette version peut être (et est) appelée à être modifiée de façon importante, sans aucun préavis. 

Qu'est-ce que le repository local, distant ? 

Un repository local est un répertoire sur le poste du développeur permettant de stocker, suivant la même arborescence, tous les artefacts téléchargés depuis le(s) repository distant(s)

samedi 17 octobre 2015

JDBC Tutorial: SQL Insert, Select, Update, and Delete Examples

The full article: http://www.codejava.net/java-se/jdbc/jdbc-tutorial-sql-insert-select-update-and-delete-examples

The principal JDBC interfaces and classes

Let’s take an overview look at the JDBC’s main interfaces and classes with which we usually work. They are all available under the java.sql package:
    • DriverManager: this class is used to register driver for a specific database type (e.g. MySQL in this tutorial) and to establish a database connection with the server via its getConnection() method.
    • Connection: this interface represents an established database connection (session) from which we can create statements to execute queries and retrieve results, get metadata about the database, close connection, etc.
    • Statement and PreparedStatement: these interfaces are used to execute static SQL query and parameterized SQL query, respectively. Statement is the super interface of the PreparedStatement interface. Their commonly used methods are:
      • boolean execute(String sql): executes a general SQL statement. It returns true if the query returns aResultSetfalse if the query returns an update count or returns nothing. This method can be used with aStatement only.
      • int executeUpdate(String sql): executes an INSERT, UPDATE or DELETE statement and returns an update account indicating number of rows affected (e.g. 1 row inserted, or 2 rows updated, or 0 rows affected).
      • ResultSet executeQuery(String sql): executes a SELECT statement and returns a ResultSet object which contains results returned by the query.
A prepared statement is one that contains placeholders (in form question marks ?) for dynamic values will be set at runtime. For example:
SELECT * from Users WHERE user_id=?
Here the value of user_id is parameterized by a question mark and will be set by one of the setXXX() methods from the PreparedStatement interface, e.g. setInt(int index, int value).
    • ResultSet: contains table data returned by a SELECT query. Use this object to iterate over rows in the result set using next() method, and get value of a column in the current row using getXXX() methods (e.g. getString(),getInt()getFloat() and so on). The column value can be retrieved either by index number (1-based) or by column name.
    • SQLException: this checked exception is declared to be thrown by all the above methods, so we have to catch this exception explicitly when calling the above classes’ methods.  

4. Connecting to the database

Supposing the MySQL database server is listening on the default port 3306 at localhost. The following code snippet connects to the database name SampleDB by the user root and password secret:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
String dbURL = "jdbc:mysql://localhost:3306/sampledb";
String username = "root";
String password = "secret";
 
try {
 
    Connection conn = DriverManager.getConnection(dbURL, username, password);
 
    if (conn != null) {
        System.out.println("Connected");
    }
catch (SQLException ex) {
    ex.printStackTrace();
}
Once the connection was established, we have a Connection object which can be used to create statements in order to execute SQL queries. In the above code, we have to close the connection explicitly after finish working with the database:

vendredi 16 octobre 2015

How to disable the shared cache?

EclipseLink/FAQ/How to disable the shared cache?

By default EclipseLink enables a shared object cache to cache objects read from the database to avoid repeated database access. If the database is changed directly through JDBC, or by another application or server, the objects in the shared cache will be stale.
EclipseLink offers several mechanism to deal with stale data including:
  • Refreshing
  • Invalidation
  • Optimistic locking
  • Cache coordination
The shared cache can also be disabled. This can be done using the EclipseLink persistence unit property:
<property name="eclipselink.cache.shared.default" value="false"/>Or the JPA 2.0 persistence unit element:
<shared-cache-mode>NONE</shared-cache-mode>
Or can be selectively enabled/disabled using the @Cache annotation:
@Entity@Cache(isolation=ISOLATED)public class Employee { ...
}Or the JPA 2.0 @Cacheable annotation:
@Entity@Cacheable(false)public class Employee { ...
}Do not disable the cache by setting the CacheType to None, this can cause object identity issues.
See also, Caching Example and the Caching section of the EclipseLink JPA User Guide for more information on caching.

La communauté des auditeurs SMB214 2015-2016

Group google : https://groups.google.com/a/cnamliban.org/forum/#!forum/smb214-2016
GitHub : https://github.com/ISSAE/smb214-2016


La page de la communautés : http://reseaux-systemes.cofares.net/

Présentiel Mardi / Jeudi de 17h45 à 21h