TAGL/TP

Travaux pratiques de l'UE TAGL.

Git
Créer un dépôt Git local (bare) mkdir tagl cd tagl mkdir testgit cd testgit git init --bare cd .. git clone testgit testgit-work cd testgit-work echo hello > readme.rst git add readme.rst git commit git push origin master

En parallèle : Installer dans votre Eclipse le plugin ReST Editor depuis le Marketplace Eclipse

GitHub & Travis-CI
Créer compte individuel sur GitHub https://github.com

Forker le projet TAGL cron4j depuis https://github.com/donsez/tagl

Ajouter un collaborateur (ie votre binome) au projet forké

Activer le Email hook depuis les paramètres (settings) du dépôt.

Activer le Travis-CI ''hook' depuis https://travis-ci.org/ (sign in avec le compte GitHub)

Commit/Push .travis.yml pour Ant:

language: java

jdk: - oraclejdk7 - openjdk6 - openjdk7

script: - pushd cron4j-original && ant rel && popd

Maven
Changer et installer Maven 3.

mvn -version

Créer cron4j-mvn (layout + pom.xml) en réorganisant les sources de cron4j-original. Pour cela, vous utiliserez préalablement un archetype Maven simple ou quickstart. (la version de cron4j est la 2.5.5).

Modifier .travis.yml pour mvn -DskipTests=true clean install (Commit/Push)

Tests Unitaires avec JUnit 4
Survoller le tutoriel Unit Testing with JUnit

Ajouter le test unitaire suivant au layout du projet

package it.sauronsoftware;

import it.sauronsoftware.cron4j.SchedulingPattern; import it.sauronsoftware.cron4j.InvalidPatternException;

import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue;

import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test;

public class SchedulingPatternTest {

@BeforeClass public static void testSetup { }

@AfterClass public static void testCleanup { // Teardown for data used by the unit tests }

@Test(expected = InvalidPatternException.class) public void testExceptionIsThrown { SchedulingPattern sp = new SchedulingPattern("0 5 * *"); }

@Test public void testPattern { String pattern; pattern="0 5 * * *|8 10 * * *|22 17 * * *"; assertTrue(pattern + "is correct", SchedulingPattern.validate(pattern)); pattern="0 5 * *"; assertTrue(pattern + "is correct", SchedulingPattern.validate(pattern)); } }

Rechercher la dépendance JUnit 4 dans |ga|1|JUnit Maven Central

Ajouter la dépendance JUnit 4 au pom.xml

Lancer le build mvn test

Modifier .travis.yml pour mvn clean test (Commit/Push)

Regarder votre mail box.

Naviguer sur http://travis-ci.org pour vérifier les builds effectués.

Créer des tests unitaires du i.s.c.CronParser

Git (suite)

 * 1) Forker le projet cron4j-mvn d'un autre binome (ie l'origine)
 * 2) Ajouter une bannière de licence dans le pom.xml
 * 3) Lancer mvn clean install (bonne pratique)
 * 4) Commiter
 * 5) Faire un Push request vers l'origine

Contrôle Continu
Ajoutez au pom.xml le plugin Covertura pour la couverture de code.

Répondez aux questions : ''Mais qu'est ce que la couverture de code ? En quoi c'est utile ?''

Ajoutez au pom.xml les plugins pour la gestion du site et des rapports (Javadoc, tests unitaires, tags list (FIXME, TODO, ...), ...): http://maven.apache.org/plugins/maven-site-plugin/ et d'autres.

Pour la prochaine séance, regardez les exemples d'utilisation de cron4j dans cron4j-original/examples

Clone SVN -> Git
Source: http://www.yterium.net/Migrer-un-projet-SVN-vers-GIT

Archetype webapp
L'archetype webapp (http://maven.apache.org/archetype/maven-archetype-bundles/maven-archetype-webapp/) permet de créer le squelette d'une webapp. Créez un simple webapp monsite en version 0.1.0. (add/commit/push). Vous pourrez tester cette webapp en ajoutant au pom.xml le plugin maven Jetty.

Naviguez sur http://localhost:9999/monsite

Scrum tools
Ces 3 services peuvent être couplé à votre dépôt GitHub pour votre gestion de projet agile avec Scrum :
 * http://www.acunote.com/
 * http://backlogtool.com/
 * http://www.scrumdo.com/

L'activation se fait via Settings > Webhooks & Services > Configure services.

Séance 2
AOP & AspectJ

Ajouter le plugin Maven pour AspectJ au pom.xml

Ajouter un aspect de trace à l'invocation des méthodes run de l'interface java.lang.Runnable (uniquement pour les objets schedulés).

Contrôle continu
Compléter l'aspect de trace avec le positionnement du java.lang.ThreadLocal pour passer 1) l'identifiant du job et 2) le compteur des appels de la méthode de l'objet.

Séance 3
@WIP

Injection de dépendances avec Guice

Séance 4
Tutorial OSGi avec Apache Felix

Séance 5
Faire un projet PDE pour un bundle cron4j.gogo (indépendant de cron4j.bundle)

Utilisation de https://eclipse.org/tycho/