Revue de Presse Xebia

Revue de Presse Xebia
La revue de presse de l’actualité Java/JEE hebdomadaire proposée par Xebia.

Actualité éditeurs / SSII

Le coin de la technique

Actualité éditeurs / SSII

La VM d’Oracle JRockit devient gratuite

Henrik Ståhl, chef de projet du produit, l’a annoncé sur son blog: JRockit devient gratuite. Cette JVM, alternative payante à celle de Sun, fut longtemps propriété de BEA avant son rachat par Oracle. Il y a peu de temps, Oracle proposait encore commercialement ce produit, présenté par exemple dans ce document commercial.
JRockit est donc maintenant gratuit, mais on peut noter les point suivant:

  • gratuit et non pas libre.
  • les fonctions Temps Réel (permettant de limiter la durée des pauses dues au GC ), VirtualEdition (faisant tourner nativement JRockit dans une machine virtuelle, sans OS hôte) et l’outil JRockit Mission Control (console de management, monitoring et profiling) restent payants.
  • comme le rappelle Emmanuel Lecharny sur le Google Group des Cast Codeurs, les conditions d’utilisation sont floues concernant l’utilisation sur des serveur ou la redistribution.

En fait, ce passage au gratuit permettra sans doutes à Oracle d’augmenter le nombre d’utilisateurs de JRockit et de fluidifier les ajouts de fonctionnalités de ce dernier dans OpenJDK. Il se dit depuis longtemps qu’Oracle désire disposer à terme d’une unique base de JVM unifiant le meilleur des mondes des VM Sun et JRockit. Les coûts de maintenance seront diminués alors que le le marché des personnes susceptibles de payer pour les outils ou services additionnels s’élargira.

Concrètement, que cela change t’il ? Nous pouvons tester JRockit. Bien. Dans certains cas d’utilisation vous noterez une différence par rapport à votre JVM habituelle. Mais avant de vous précipiter, êtes vous sûr d’avoir commencé par analyser les problèmes venant de votre propre code ? Il y a fort à parier que vous résolverez plus en l’étudiant qu’en changeant de JVM ;-)

Terracotta racheté par Software AG

Ari Zilka, son fondateur et CTO, annonce que Terracotta vient d’être racheté par Software AG, un gros du logiciel allemand. Pour mémoire Terracotta avait à l’origine sa propre solution (décrite en détails chez InfoQ) de clustering, puis avait racheté EhCache et enfin Quartz avant de sortir Big Memory.

L’annonce est assez convenue: tout le monde doit y trouver son compte, que ce soit la communauté Open Source, les clients actuels et futurs ainsi que toute l’industrie Java. Bref, tout va bien dans le meilleur des mondes. Comme nous l’annoncions à l’époque du rachat d’EhCache, Terracotta souhaitait se faire racheter. Il aura fallu attendre près de 2 ans, mais Terracotta dispose maintenant d’un nouvel atout pour faire connaître ses solutions et vendre ses services tout en les intégrant avec les produits de Software AG. En effet, les solutions Paas et de Cloud de Softawre AG doivent s’appuyer sur les outils de Terracotta.

Il sera intéressant de voir maintenant le positionnement exact de ce nouveau couple concernant les offres Paas par rapport à VMWare d’une part et à l’offre de SAP concernant le BI à la demande d’autre part. James Governor nous résume assez bien la situation dans cet article.

Le coin de la technique

JUnitParams, un framework pour paramétrer vos méthodes de test

Je suis pratiquement sûr que tous, vous avez déjà écrit une classe de test comme celle-ci :

public class MyFibonnacciTest {

  @Resource
  private Fibonnacci fibonnacci;

  @Test
  public void should_return_2_when_inputs_are_1_and_1() {
    // Given:
    int i = 1;
    int j = 1;

    // When:
    int k = fibonnacci.computeNext(i, j);

    // Then:
    assertThat(k, equalTo(2));
  }

  @Test
  public void should_return_3_when_inputs_are_1_and_2() {
    // Given:
    int i = 1;
    int j = 2;

    // When:
    int k = fibonnacci.computeNext(i, j);

    // Then:
    assertThat(k, equalTo(3));
  }

  // ...
}

C’est très pratique pour la lisibilité: à la lecture des noms de méthodes, vous savez ce qui est testé. Par contre, il est clair que chaque méthode varie très peu. C’est là que vous sortez le logiciel JUnitParams de votre boite à outils.

Il vous permet de n’écrire qu’une seule fois la méthode et d’y ajouter, en annotation, vos jeux de données de trois manières différentes:

  • simplement en listant les jeux de données. C’est pratique lorsque les données sont simples et qu’il n’y a pas trop de cas:
public class MyFibonnacciTest {

  @Resource
  private Fibonnacci fibonnacci;

  @Test
  @Parameters({"1, 1, 2",
               "1, 2, 3",
               "2, 3, 5"})
  public void should_compute_next_fibonnacci_number(int i, int j, int k) {
    assertThat(fibonnacci.computeNext(i, j), equalTo(k));
  }

}
  • sous forme de méthode si vos jeux de données sont amenés à être réutilisés:
public class MyFibonnacciTest {

  @Resource
  private Fibonnacci fibonnacci;

  @Test
  @Parameters(method = "getParametersForFibonnacciComputer")
  public void should_compute_next_fibonnacci_number(int i, int j, int k) {
    assertThat(fibonnacci.computeNext(i, j), equalTo(k));
  }

  private Object[] getParametersForFibonnacciComputer() {
    return $( $(1, 1, 2),
              $(1, 2, 3),
              $(2, 3, 5)
            );
  }

}
  • en créant un provider:
 public class FibonnacciProvider {

  public static Object[] provideFirstThreeFibonnacciNumbers() {
     return $( $(1, 1, 2),
               $(1, 2, 3),
               $(2, 3, 5)
             );
  }

  public static Object[] provideFirstFiveFibonnacciNumbers() {
     return $( $(1, 1, 2),
               $(1, 2, 3),
               $(2, 3, 5),
               $(3, 5, 8),
               $(5, 8, 13)
             );
  }
 }

public class MyFibonnacciTest {

  @Resource
  private Fibonnacci fibonnacci;

  @Test
  @Parameters(source = FibonnacciProvider.class)
  public void should_compute_next_fibonnacci_number(int i, int j, int k) {
    assertThat(fibonnacci.computeNext(i, j), equalTo(k));
  }

}

La version 0.2.0 est sortie le 16 mai dernier. Vous pouvez l’obtenir à l’adresse suivante : http://code.google.com/p/junitparams/.

Billets sur le même thème :

6 Responses

  • Pour ceux qui comme moi se poseraient la question sur le dollar:

    CITATION
    The $(…) method is defined in JUnitParamsRunner class and is a shortcut for creating an array of Objects from method params. I use it for readability. It’s definition looks like this:

    public static Object[] $(Object… params) { return params; }
    FIN DE CITATION

    C’est rigolo, ça fait plus penser à du javascript du coup. En effet si on fait un tour du coté de chez oracle : http://download.oracle.com/javase/tutorial/java/nutsandbolts/variables.html on apprend que: « Additionally, the dollar sign character, by convention, is never used at all. »

    Merci pour cette revue de presse.

  • Il serait peut-être intéressant de préviser que JRockit Mission Control peut être utilisé gratuitement en dev (mais pas en prod).

  • Concernant JUnit Param, il faut savoir que c’est quelque chose plus ou moins proposé par JUnit depuis un moment déjà dans ses packages experimental.

    Quelques liens qui expliquent la chose pas forcément très bien documentées sur le site de JUnit : http://blog.schauderhaft.de/2010/01/31/new-feature-of-junit-theories/ et http://blog.schauderhaft.de/2010/02/07/junit-theories/.

    L’essentiel tient dans ces points :
    * @RunWith(Theories.class),
    * méthodes annotées par @Theory,
    * paramètres fournis par @DataPoint ou @ParametersSuppliedBy (ParameterSupplier).

  • Et que c’est également supporté par le runner Parameterized.

    http://junit.sourceforge.net/javadoc/org/junit/runners/Parameterized.html

    Utiliser un runner apporte certes des contraintes puisqu’il est ‘difficile’ de composer des runners. Mais pour les cas simples, cela fonctionne très bien.

  • JRockit a (a ma connaissance) un avantage conséquent : l’absence de PermGenSpace dans sa gestion de la mémoire. Ca en fait un outil de choix pour des services d’hébergement ou de la relance à chaud d’applis embarquant des hibernate, cglib et que sais-je qui créent des classes en pagaille à la volée.

  • Merci à tous pour ces précisions utiles

    François (Xebia)

Laisser un commentaire