GUICE : un framework de DI pour Java

Je pense que la Dependency Injection est une valeur fondamentale à l’écriture d’un programme, et je l’utilise tous les jours.
Je suis un adorateur (voir expert) de Spring/Spring.Net, et j’affectionne l’écriture de la structure du programme en XML.

Mais cette technique est très largement contestée :

  • nécessite un éditeur XML “intelligent” (ce qui est le cas grâce à SpringIDE) pour la complétion de la structure mais aussi des types.
  • interprétation au Runtime, et donc erreurs potentielles découvertes qu’au dernier moment.
  • verbeux
  • mauvaises performance (lecture du XML…)

Ça a aussi ses avantages, c’est pour ça que je reste adorateur de Spring, mais ce n’est pas le sujet…

J’ai déjà souvent eu ce débat avec Romain dans le monde .Net (voir http://ninject.org).
Je connais très mal les alternatives à Spring dans le monde Java, mais je connais celle de Google : Guice.

Voici un tuto/introduction très convaincante.

Pour ceux qui ne connaissent pas Ninject ou Guice, voici un peu le principe :
Au lieu de rédiger un XML, on utilise massivement les annotations (attributs en .Net) pour spécifier les injections. Ceci est aussi possible en Spring (technique dite Autowire) mais l’utilisation du XML reste nécessaire pour personnaliser plus finement les dépendances entre instances.
Dans le cas de Guice, au lieu de rédiger un XML, on créer une classe Module qui réalise le mapping entre une interface et la classe concrète à instancier/injecter.
On peut spécifier bien plus de chose que cela, mais je vous laisse lire l’article pour découvrir par vous même.

Pour ceux qui veulent suivre le débat “Spring vs Guice” ou “XML vs Code”, voici le point de vue de la documentation officielle de Guice.

Publié dans Développement. Mots-clefs : , , , . 1 commentaire »

Encore un nouveau langage : FAN

En lisant un article d’introduction du langage FAN je trouve intéressant que ce dernier soit compatible .NET et Java.
En ce moment, .Net se voit enrichir de nombreux langages, aussi bien statiques (F# par exemple) que dynamiques (Iron Python). Les langages “standards” étant C#, VB.Net et C++/CLI.
Quand on développe sur la JVM, le langage “standard” reste Java. Mais cela ne veut pas dire qu’on a pas le choix : Scala, Jython, Groovy

aa496123net_logoen-usmsdn10java_logo = FAN ?

Lisez la suite de cette entrée »

Publié dans Développement. Mots-clefs : , . 1 commentaire »

Appeler du Java depuis .Net

Deux mondes s’affrontent: Java et .Net. Chacun choisi son camp, ou choisi les deux… moi j’ai la double nationalité :) Mais quand les deux mondes doivent alors communiquer? Je fais l’interprète. Voila le topo:
J’ai une application .Net qui a besoin de manipuler des classes Java, et pour se faire je passe par C++/CLI: comment avoir un pied dans du .Net et un autre dans du natif C++.
Lisez la suite de cette entrée »

Publié dans Développement. Mots-clefs : , , , , . 4 Commentaires »

A la conquête du Web 3.0

J’ai eu une discutions intéressante ce midi au sujet du buzz en ce moment: Adobe open-source Flash! Je vois ça comme un premier pas vers la conquête du Web 3.0. Une guerre déjà entamé entre Adobe, Microsoft et le monde libre.
Lisez la suite de cette entrée »

Publié dans Développement. Mots-clefs : , , , , , , . 6 Commentaires »

Java-Gnome

Comme vous le savez, l'environnement Gnome sous linux utilise les composants graphiques de GTK, qui est à la fois portable mais qui de plus possède de nombreux "binding" dans de nombreux langages. Java n'est pas en reste, et en plus de GTK, Gnome-Java propose les "bindings" vers Glade, GConf, Cairo, etc…

Bref, tout pour faire une application qui s'intégre bien dans Gnome, le tout réalisé dans l'élégant langage qu'est le Java , et tout en pouvant bénefficier du très puissant IDE Eclipse. Et puis le fin du fin, c'est de générer un exécutable natif sous linux à l'aide d'un script ANT qui compile avec GCJ (de toutes façon, vous avez déjà vu Gnome sous Windows???).

Alors, après une petite soiré de dev, j'ai réalisé un petit carnet d'adresse en Java compilé en natif :

Carnet d'adresse

Vous pouvez télécharger les sources ici et les binaires ici

Bien évidement, la question se pose pas mal dans la communauté : les futures applications Gnome… en C++, Java ou Mono ?

Publié dans Développement. Mots-clefs : , , . Laisser un commentaire »

Java for gaming :)

Et oui, Java n’est pas incompatible avec les jeux !

Personnellement, je ne reproche pas grand chose à Java (surtout depuis la v5), sauf la conso en mémoire… Bref, Java c’est aussi des outils comme Eclipse (vivement la 3.1) [http://www.eclipse.org/] et des Frameworks comme jME [http://www.mojomonkeycoding.com].

Non non, jME ce n’est pas “Java for Mobile Edition” mais ici “jMonkey Engine”.

jME est donc un Framework Java pour faire des jeux (game engine) qui repose sur une API de Java qui s’interface avec OpenGL : LWJGL pour “Lightweight Java Game Library”.

“Lightweight” car cette API a pour ambition de s’intégrer dans les systèmes embarqués (les portables ^^).

La combinaison des deux permet tout de même des résultats très appréciables :

[exemple de chargement de fichier 3DS avec animations]

J’ai commencé à faire un petit jeu… mais je passe du coq à l’âne… il me faudrait plus de temps.

Publié dans Développement. Mots-clefs : , , . Laisser un commentaire »

Geeks

Bon, pour les Geeks comme moi, j’ai découvert un truc sympa aujourd’hui : Mono+ikvm

Explication : .Net (de Microsoft) s’impose comme un standard dans le développement d’applications “fenêtrées”, mais bon voila : un standard oui, mais sur Windows avec le Framework .Net de Microsoft…

C’est là qu’intervient Mono (http://www.mono-project.com/about/index.html).

Mono est un “altérnative” à .Net (voir sur le site pour une explication plus détaillée) cad que grâce à Mono, on peut compiler et exécuter des applications .Net. Résultat, .Net n’est plus une exclusivité Microsoft mais s’étend aux plateformes Linux Mac et autres…

Ikvm : kesako ? (http://www.ikvm.net/)

Qui ne connais pas Java ? Et bien ikvm c’est comme le JDK de Sun… compatible .Net !

En effet, ikvm regroupe une machine virtuelle faite en .Net, l’implémentation des classes Java en .Net ainsi que des outils permettant la compatibilité .Net/Java.

En gros, tu fais une appli Java, que tu compiles avec ikvm qui te donne un joli petit exe .Net :) . Ou même un petit composant Java qui s’intègre dans une appli .Net.

Et là on me répond, et l’avantage de Java alors ? Qu’en est-il du « code once, run anywhere » ? Bingo, la je réponds Mono !

Voila comment faire de Java un langage utilisable pour des applis natives avec un code portable.

Et là on me pose la question : « Et J# ou C# de Microsoft ? »… ok, à part profiter des outils existant pour Java (Eclipse, etc…) je ne vois pas d’autres intérêts. Mais ça demande à être étudié, non ^^ ?

Merci à Will Senn (http://www.codeproject.com/cpnet/hellomono.asp)

Pour les plus Geeks d’entre vous : Eclipse tournant à l’aide d’IKVM à l’aide de Mono sur Cygwin+Xfree sur Windows2000… rien que ça ! (voir sur le site de Mono)