lundi 21 décembre 2015

Comment installer Maven sur Ubuntu

Dans ce tutoriel, nous allons voir comment installer Apache Maven 3 sur Ubuntu 12.

1. Chercher le paquet de Maven

Dans un terminal, lancez apt-cache search maven, pour obtenir tout le paquet de Maven disponible.

$ apt-cache search maven 
 ... 
libmaven-war-plugin-java-doc - Documentation for Maven WAR Plugin
libmaven2-core-java - Core libraries for Maven2
libmaven2-core-java-doc - API documentation for Maven2
libsurefire-java - Surefire test framework for Java
maven-debian-helper - Helper tools for building Debian packages with Maven
maven2 - Java software project management and comprehension tool
maven3 - Java software project management and comprehension tool

2. Installez-le

Lancez la commande apt-cache install maven, pour installer la dernière version d'Apache Maven.

$ apt-get install maven 


Il prend quelques minutes pour télécharger les paquets, merci de patienter.

3. Vérification

Pour vérifier votre installation lancez  la commande mvn -version.

$ mvn -version 
Apache Maven 3.0.4
Maven home: /usr/share/maven
Java version: 1.6.0_27, vendor: Sun Microsystems Inc.
Java home: /usr/lib/jvm/java-6-openjdk-i386/jre
Default locale: fr_FR, platform encoding: UTF-8
OS name: "linux", version: "3.2.0-56-generic-pae", arch: "i386", family: "unix"

Si ce message s'affiche, alors Apache Maven est installé avec succès.

jeudi 14 novembre 2013

Dépôt local de Maven

Le dépôt local de Maven est un dossier local utilisé pour stocker toutes les dépendances de votre projet. (jars, plugins et autres fichiers qui sont téléchargés par Maven). Tout simplement, quand vous créez  un projet Maven, tous les fichiers de dépendance seront stockées dans votre dépôt local de Maven.

Par défaut, le dépôt local de Maven fait référence à un dossier nommé .m2  :

    1. Unix/Mac OS X – ~/.m2

    2. Windows – C:\Documents and Settings\{your-username}\.m2


1. Mise à jour du référentiel local de Maven
  
Normalement, On peut changer le dossier du référentiel local par défaut .m2 à un autre nom plus significatif, par exemple, depot-maven.

Trouvez {M2_HOME}\conf\setting.xml, mettre à jour localRepository à nouveau dossier.



2. Enregistrez-le

Et voilà, votre nouveau dépôt local de Maven est maintenant changé pour /home/rachid/depot-maven.

Le contenue de votre dépôt sera quelque chose comme ça :



jeudi 7 novembre 2013

Envoi des e-mails via SMTP Gmail

Je vous présente ici deux exemples pour vous montrer comment utiliser l'API JavaMail pour envoyer un mail via le serveur SMTP Gmail, en utilisant à la fois une connexion TLS et SSL.

Alors pour exécuter ces exemples, vous devez obtenir deux bibliothèques suivantes «mail.jar» et «activation.jar». Avec maven vous devez ajouter la dépendance ci-dessous à votre projet maven.

<dependency> 
     <groupId>javax.mail</groupId> 
     <artifactId>mail</artifactId> 
     <version>1.4</version> 
</dependency> 

Les instructions de configuration standard de google:

Outgoing Mail (SMTP) Server - requires TLS or SSL:
smtp.gmail.com
Use Authentication: Yes
Port for TLS/STARTTLS: 587
Port for SSL: 465

Et pour plus de détails : https://support.google.com/mail/answer/13287?hl=en

1. SMTP GMail via TLS

Envoyer un e-mail via le serveur SMTP de Gmail en utilisant la connexion TLS.

package com.saou.demo;

import java.util.Properties;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class EnvoiMailTLS {
 
  public static void main(String[] args) {
 
  final String username = "username@gmail.com";
  final String password = "password";
 
  Properties props = new Properties();
  props.put("mail.smtp.auth", "true");
  props.put("mail.smtp.starttls.enable", "true");
  props.put("mail.smtp.host", "smtp.gmail.com");
  props.put("mail.smtp.port", "587");
 
  Session session = Session.getInstance(props,
    new javax.mail.Authenticator() {
      protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(username, password);
      }
  });
  
  try {
 
    Message message = new MimeMessage(session);
    message.setFrom(new InternetAddress("de-email@gmail.com"));
    message.setRecipients(Message.RecipientType.TO       
                     InternetAddress.parse("a-email@gmail.com"));
    message.setSubject("Objet Test");
    message.setText("E-mail de test pour l'exemple de l'API JavaMail. "
      + "<br/><br/>Cordialement, <br/>Rachid SAOU");
 
    Transport.send(message);
 
    System.out.println("Terminé");
 
  } catch (MessagingException e) {
    throw new RuntimeException(e);
  }
  }
}

Port for SSL: 465

2. SMTP GMail via SSL

Envoyer un e-mail via le serveur SMTP de Gmail en utilisant la connexion SSL.

package com.saou.demo;

import java.util.Properties;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class EnvoiMailSSL {
 
  public static void main(String[] args) {
 
  final String username = "username@gmail.com";
  final String password = "password";
 
  Properties props = new Properties();     
  props.put("mail.smtp.host", "smtp.gmail.com");   
  props.put("mail.smtp.socketFactory.port", "465");
  props.put("mail.smtp.socketFactory.class",
                  "javax.net.ssl.SSLSocketFactory");   
  props.put("mail.smtp.auth", "true"); 
  props.put("mail.smtp.port", "465");
 
  Session session = Session.getInstance(props,
    new javax.mail.Authenticator() {
      protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(username, password);
      }
  });
  
  try {
 
    Message message = new MimeMessage(session);
    message.setFrom(new InternetAddress("de-email@gmail.com"));
    message.setRecipients(Message.RecipientType.TO      
                    InternetAddress.parse("a-email@gmail.com"));
    message.setSubject("Objet Test");
    message.setText("E-mail de test pour l'exemple de l'API JavaMail. "
      + "<br/><br/>Cordialement, <br/>Rachid SAOU");
 
    Transport.send(message);
 
    System.out.println("Terminé");
 
  } catch (MessagingException e) {
    throw new RuntimeException(e);
  }
  }
}


 


jeudi 27 septembre 2012

Services Web avec Apache CXF et Spring 3


Aujourd’hui je vous présente un exemple d’une application web qui publie un Service Web simple à l'aide d’Apache CXF et Spring sur un serveur léger (Tomcat) pour un test rapide.
Pour commencer ce test on a besoin des outils suivant : 

  1. Maven 3
  2. Spring 3.1.1
  3. Apache CXF 2.6.0
  4. Tomcat 7


Voici l’architecture du projet : 




Étape 1 : création du service web 

AfficherHoraireService (Interface)
Afin de travailler avec les services Web, il faut utiliser des interfaces pour nos services ...

AfficherHoraireServiceImpl (Implémentation)
Le paramètre endpointInterface doit pointer vers l'interface que nous mettons en œuvre pour le service Web…

Étape 2 : intégration Spring / CXF 
 
Parmis les avantages du framework CXF est sa bonne intégration avec le framework Spring et que le code généré est beaucoup, beaucoup plus petit qu’avec les autres...
service-definition-beans.xml
‹?xml version="1.0" encoding="UTF-8"?› 
‹beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://www.springframework.org/schema/beans"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.1.xsd"/

    ‹bean id="afficherHoraireService"
          class="com.saou.demo.services.AfficherHoraireServiceImpl" /
  
/beans
Ici, nous définissons un bean service normal (afficherHoraireService).

webservice-definition-beans.xml
‹?xml version="1.0" encoding="UTF-8"?› 
‹beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:jaxws="http://cxf.apache.org/jaxws"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
  http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
  http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"/

    ‹import resource="classpath:service-definition-beans.xml" /

    ‹jaxws:endpoint id="afficherHoraireWebService"
          implementor="#afficherHoraireService"
          address="/AfficherHoraire" /
  
/beans
Vous voudrez peut-être séparés les fichiers xml de définition des beans, plutôt il est important de les séparer par fonctionnalité (par exemple : les beans service, les beans webservice, les beans test...). En fait le bean afficherHoraireService défini dans le service-definition-beans.xml peut être déplacé ici au lieu d'importer cette ressource. Avec #afficherHoraireService nous faisons référence à un bean avec id="afficherHoraireService"...

Ajoutez au fichier web.xml les éléments permettant de charger le conteneur spring.
!DOCTYPE web-app PUBLIC
  "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
  "http://java.sun.com/dtd/web-app_2_3.dtd" 

‹web-app
   ‹context-param
       ‹param-namecontextConfigLocation‹/param-name  
       ‹param-valueWEB-INF/webservice-definition-beans.xml‹/param-value  
   ‹/context-param 
    
   ‹listener
       ‹listener-class  
           org.springframework.web.context.ContextLoaderListener
       ‹/display-name  
   ‹/listener 

   ‹servlet
       ‹servlet-nameCXFServlet‹/servlet-name  
       ‹display-nameCXF Servlet‹/display-name
       servlet-class  
           org.apache.cxf.transport.servlet.CXFServlet
       ‹/servlet-class 
       ‹load-on-startup1‹/load-on-startup  
   ‹/servlet 

   ‹servlet-mapping
       ‹servlet-nameCXFServlet‹/servlet-name  
       ‹url-pattern/*‹/url-pattern  
   ‹/servlet-mapping 

‹web-app
C'est ici que nous configurons CXFServlet pour analyser tous notre demande sur les service Web.

Étape 3 : build maven

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"/
    ‹modelVersion4.0.0‹/modelVersion
    ‹groupIdcom.saou.demo‹/groupId
    ‹artifactIdspring-cxf-demo‹/artifactId
    ‹packagingwar‹/packaging
    ‹version1.0-SNAPSHOT‹/version
    ‹namespring-cxf-demo Maven Webapp‹/name
    ‹urlhttp://maven.apache.org‹/url

    ‹dependencies       ‹!-- Spring dependencies --
       ‹dependency
          ‹groupIdorg.springframework‹/groupId  
          ‹artifactIdspring-web‹/artifactId 
          ‹version3.1.1.RELEASE‹/version  
          ‹scopecompile‹/scope  
       ‹/dependency 
       ‹dependency
          ‹groupIdorg.springframework‹/groupId  
          ‹artifactIdspring-context‹/artifactId 
          ‹version3.1.1.RELEASE‹/version  
          ‹scopecompile‹/scope  
       ‹/dependency 

       ‹!-- Apache CXF for webservices --
       ‹dependency
          ‹groupIdorg.apache.cxf‹/groupId  
          ‹artifactIdcxf-api‹/artifactId 
          ‹version2.6.0‹/version  
          ‹scopecompile‹/scope  
       ‹/dependency 
       ‹dependency
          ‹groupIdorg.apache.cxf‹/groupId  
          ‹artifactIdcxf-rt-frontend-jaxws‹/artifactId 
          ‹version2.6.0‹/version  
          ‹scopecompile‹/scope  
       ‹/dependency 
       ‹dependency
          ‹groupIdorg.apache.cxf‹/groupId  
          ‹artifactIdcxf-rt-transports-http‹/artifactId 
          ‹version2.6.0‹/version  
          ‹scopecompile‹/scope  
       ‹/dependency 

       ‹!-- For testing purposes --
       ‹dependency
          ‹groupIdorg.springframework‹/groupId  
          ‹artifactIdspring-test‹/artifactId 
          ‹version3.1.1.RELEASE‹/version  
          ‹scopetest‹/scope  
       ‹/dependency 
       ‹dependency
          ‹groupIdjunit‹/groupId  
          ‹artifactIdjunit‹/artifactId 
          ‹version4.8.2‹/version  
          ‹scopetest‹/scope  
       ‹/dependency 
    ‹dependencies

    ‹build
       ‹finalNamejunit‹/finalName 
       ‹plugins
       ‹!-- use JDK 1.6 --
          ‹plugin
              ‹groupIdorg.apache.maven.plugins‹/groupId  
              ‹artifactIdmaven-compiler-plugin‹/artifactId 
              ‹version2.3.2‹/version  
              ‹configuration 
                  ‹source1.6‹/source  
                  ‹target1.6‹/target 
                  ‹encodingUTF-8‹/encoding  
              ‹/configuration
          ‹/plugin
       plugins
    ‹/build
/project

Maintenant il suffit de lancer la commande suivante :  mvn clean package
Après quelques secondes durant lesquels maven rapatrie en local les dépendences du projet, vous obtenez le résultat suivant :


Étape 4 : déploiement de l'application

Lancez tomcat et déposez la livraison (spring-cxf-demo.war) dans le répertoire webapps de tomcat.
Aller sur le navigateur, et tapez à l’adresse suivant : http://127.0.0.1:8080/spring-cxf-demo/

Voila CXF nous informe qu’un service web a été publié et est disponible

Étape 5 : Appel aux web services

client-definition-beans.xml
‹?xml version="1.0" encoding="UTF-8"?› 
‹beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:jaxws="http://cxf.apache.org/jaxws"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
  http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
  http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"/

    ‹import resource="classpath:service-definition-beans.xml" /

    ‹jaxws:endpoint id="afficherHoraireWebService"
          serviceClass="com.saou.demo.services.AfficherHoraireService"
          address="/AfficherHoraire" /
  
/beans

Ici, nous créons le client webservice CXF que nous allons invoquer lors de notre test sur la classe ClientServicesWeb.

ClientServicesWeb (Test)
Lancer la commande suivante :  
mvn exec:java -Dexec.mainClass=com.saou.demo.client.ClientServicesWeb
Et voila, l'appel aux web services en mode console :


Conclusionde :
Il me faudra des raisons très convaincantes pour utiliser un autre framework car
  • Le code généré est beaucoup, beaucoup plus petit avec CXF qu’avec les autres.
  • Le code à écrire pour utiliser le framework est beaucoup plus simple et joli avec CXF.
  • CXF est plus long à s’initialiser, mais va plus vite après.