AlcionTech

Aller au contenu | Aller au menu | Aller à la recherche

Tag - Frameworks-Composants

Fil des billets - Fil des commentaires

jeudi 19 février 2009

Paradigme MDA : sortie de Lyria Leonardi 4.2

Je me permet de copier ici (avec quelques modifications) le contenu d'un post de mon blog personnel... qui lui-même reprenait un billet du blog java de developpez.com signalant la sortie de la nouvelle version de l'outil Leonardi.

Les principales nouveautés de ce produit étant décrites dans le billet que je site, je ne les recopierai pas. En revanche, je ferai une (très) rapide présentation de l'outil (un résumé des informations que l'on peut trouver sur le site de Lyria), ainsi que du paradigme MDA auquel il se rattache.

Lire la suite...

lundi 1 décembre 2008

Javascript bouscule le modèle MVC

Vu sur Advogato : Javascript bouscule le modèle MVC.

''When HTML first came out, browsers could have been called "Application Thin Clients", if the buzzword had been in use at the time. The introduction of javascript made it possible to execute code on the client, and this turned browsers into something much more than just a "display" mechanism.

Before Javascript, Web application development was simple: everything was done server-side. The concept of MVC - Model View Controller - was easy: the HTML was generated, and that was the view. With Javascript being a full-blown programming language, the lines are being blurred between which code is responsible for the View, the Controller and even the Model. The resultant split of responsibility across client and server in wildly diverse programming languages is driving many developers to alternative technologies such as Flash, and causing headaches for those Web developers who remain.''

mercredi 16 juillet 2008

Revue de presse estivale du monde java

En juin et en juillet, de nombreux projets liés à java ont bien évolué. Voilà un petit résumé de ces évolutions (outre la sortie de la nouvelle version d'Eclipse Ganymède à laquelle un billet complet a été dédié):

Par ailleurs, Sun a publié un compte-rendu des différentes présentations techniques qui y ont été faites lors de JavaOne session 2008.

jeudi 14 février 2008

Nos reporters aux Microsoft Techdays, Day 1

MS TechdaysUn brillant essai de Laurent Liger et Olivier Coanet.

Où il sera question de toute l'actualité .NET, de Domain Driven Design, d'Entity Framework, de Linq, de lambda expressions, de F#...

Microsoft TechDays - Day 1

Session Plénière

/Olivier/ La session plénière c'est le grand show d'ouverture, avec les caméras de partout, les effets de scène et les personnalités. C'est aussi le moment pour faire le point sur les nouveaux outils Microsoft et les sessions de la journée. Le truc à ne pas rater et en même temps totalement inutile. On y apprend en gros que : - les technos mise en avant cette année sont Visual Studio 2008, SQL Server 2008 et Windows Server 2008, - les nouveaux projets des entreprises sont majoritairement réaliser en .NET : 39% contre 35% pour le Java (je ne cautionne absolument pas ces chiffres ^^), - les besoins en compétence .NET sont toujours important, d'ailleurs il y avait 600 offres d'emplois sur le salon. /Laurent/ Mine de rien, on était plus de 5400 personnes le premier jour dans la salle, on a eu droit à une petite vidéo enregistrée la semaine précédente par le futur retraité le plus riche du monde, monsieur Gates, qui regrettait de ne pas pouvoir être présent pour cet évènement qui est le plus grand d'Europe de ce genre et vient juste derrière la PDC (Professional Developers Conference) des États Unis.

Domain Driven Design

/Laurent/ Le concept du DDD (à ne pas confondre avec l'outil linux) date du début des années 2000, au moment ou les modèles d'architecture en couche d'applications n'était pas encore répendus, Eric Evans se posait déjà la question de savoir si cela n'allait pas poser de nouveaux problèmes et si le découpage proposé était vraiment la meilleure solution. Cette conférence nous a donc présenté le DDD qui est un découpage différent de celui adopté majoritairement maintenant. Actuellement la couche domaine a en effet tendance à être dépouillée au maximum pour ne plus être qu'une structure de donnée, épurée (trop) de comportement métier, ce dernier étant uniquement relégué au niveau de la couche services. La proposition du DDD est de recentrer le développement sur la couche domaine, de lui rendre l'intelligence qu'elle a perdue : c'est elle qui doit faire appel aux services et non l'inverse. Dans le paradigme DDD, les clients ne manipulent donc presque que des objets de la couche métier, alors que dans la quasi-totalité des développements effectués à l'heure actuelle, les clients utilisent des services pour agir sur les données.

Mais... c'est un tableau qui me fait peur : si la couche métier est au centre, il faut la modifier constamment pour l'adapter aux nouveau comportements que l'on souhaite ajouter. Dans le cas d'un développement .Net, il faudrait redéployer l'assembly associée à cette couche partout pour assurer la compatibilité des anciennes applications. Il s'agit d'ailleurs d'un faux problème à la base : il suffit de s'assurer dans un découpage traditionnel que les objets métiers conservent les règles métier qui sont les leurs. Si un objet à besoin de manipuler des données, rien n'empêche d'identifier les différentes opérations à effectuer, de créer une interface offrant ces opérations, et enfin d'injecter un service plus tard implémentant cette interface. Bref tout est déjà possible avec un découpage normal d'une application. Il faut juste faire attention à ne pas tomber dans un modèle "anémique".

Vous l'aurez compris, je n'adhère pas avec la vision pessimiste qu'avait l'auteur du DDD. Pour les curieux, un lien vers le livre fondateur de ce concept : http://www.amazon.com/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215/ref=pd_bbs_sr_1?ie=UTF8&s=books&qid=1202846134&sr=8-1

/Olivier/ La session était intéressante, ce qui n'est pas étonnant étant donné que l'auteur n'est autre que Sami Jaber, un des fondateurs de DotNetGuru (http://www.dotnetguru.org/). J'ajouterai aux remarques de Laurent que Sami a soulevé des problématiques intéressantes auxquelles je vous invite à réflechir : "faut-il mettre en places des architectures dans lequelles les développeurs n'ont pas de question à se poser et où chaque problématique a déjà été pensée ?" (avec les questions sous-jacentes : "est-ce souhaitable du point de vue du développeur ?" et "est-ce vraiment réalisable ?"). Sami a également mis en avant que les nouveaux outils liés à la couche de présentation (qu'ils soient côté Web avec Silverlight et les composants AJAX ou côté client lourd avec WPF) n'améliorent pas la productivité des développements et qu'il y a encore des progrès à faire dans ce domaine.

Entity Framework et Linq

/Olivier/ Voilà une session qui ne m'a pas du tout convaincu sur le mappeur objet-relationnel à la sauce Microsoft, j'ai nommé Entity Framework ou EF. Dans sa version actuelle il est limité, intrusif et ne fonctionne vraiment que dans le mode où les objets métiers sont générés à partir de la base. Et attention, quand je dis générés c'est avec plein des classes de bases et d'attributes bizarres. Enfin je ne m'inquiète pas pour son succès, nous sommes dans l'univers Microsoft : tout le monde va utiliser le mappeur de Microsoft. Le reste n'existe même pas :) /Laurent/ Oui c'est ça le pire quand on fait du .Net, on a l'impression que les gens de Microsoft ne tirent pas les leçons de l'expérience du monde Java (pour les frameworks qui gravitent au tour en tout cas, le langage c'est autre chose ;)) : c'est un peu comme repasser d'EJB 3.0 à EJB 1.0, on se demande quand même s'ils sont au courant de projets comme NHibernate pour ne citer que lui. Heureusement, les intervenants de la session eux on fait un tout d'horizon des frameworks de persistance existants sur le marché pour nous présenter un petit benchmark (trop petit, dommage). On constate donc que la majorité des outils d'ORM sur le marché ont une vitesse équivalente, même si ce n'est pas le cas de leurs fonctionnalités. Malheureusement les intervenants n'ont pas comparé les fonctionnalités et ni les limitations de ces frameworks de persistance. Car ce qui est généralement le critère le plus important lors de l'adoption d'un mappeur O/R c'est sa capacité à supporter l'applicatif existant (code et base de données) et rarement ses performances.

Linq anvancé

/Olivier/ La killer feature du Framework .NET est vraiment Linq. Le problème c'est que dans la pratique (et en tout cas dans un futur proche) la seule version qui me semble utilisable est Linq to Objects. Pour ceux qui ne connaissent pas Linq, c'est un ensemble de méthodes similaires à du SQL accessibles directement à l'intérieur du langage. Le tout est de disposer d'une interface IQueryable<T> et ensuite vous pouvez effectuer des requêtes dessus du style :

int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };

var numberGroups =
    from n in numbers
    group n by n % 5 into g
    select new { Remainder = g.Key, Numbers = g };

foreach (var g in numberGroups) {
    Console.WriteLine("Numbers with a remainder of {0} when divided by 5:", g.Remainder);
    foreach (var n in g.Numbers) {
        Console.WriteLine(n);
    }
}

Evidement il existe de nombreuses implémentations de IQueryable<T> qui fonctionnent différement : Linq to Objects qui effectue les requêtes sur des collections en mémoires, Linq to SQL qui génère des requêtes SQL pour récupérer une représentation objet des tables, Linq to Entity qui permet de requêter les objets dans Entity Framework et bien d'autres encore... Dans la pratique, Linq to SQL n'est intéressant que pour des petits projets utilisant une base MS SQL Server, car le provider Linq to Oracle n'existe pas, Linq to Entity n'est utile que pour les utilisateurs de EF. C'est dommage car certaines fonctionnalité de Linq sont très intéressantes : par exemple si une méthode de service retourne un IQueryable<T> on peut très facilement ajouter en AOP des conditions dans la requête (pour filtrer en fonction du périmètre utilisateur par exemple). Vivement Linq to NHibernate pour que je puisse mettre tout ça en pratique !

/Laurent/ En parlant de filtre, Olivier me fait penser à une autre partie intéressante de la présentation : Les lambda-expressions. Derrière ce nom barbare se cache un concept venu des langages fonctionnels : on peut enfin utiliser les fonctions comme des objets de premier ordre du langage C#. Un lambda expression représente une fonction, mais elle peut être : - soit compilée en IL (c'est une sorte de delegate anonyme encore plus facile à écrire que ce que permettait C# 2.0) - soit sous la forme d'un arbre d'expressions

Mais voyons plutôt ça avec un exemple ayant un rapport avec Linq to SQL (ça tombe bien ;) ) :

-façon delegate :

IEnumerable result = personnes.Where(
                                    delegate(Personne p)
                                    {
                                        return p.Age ==  30 && p.Prenom == "foo"
                                    }
                                );

- façon Lambda :

IEnumerable result = personnes.Where(p => p.Age == 30 && p.Prenom == "foo");

Ces deux appels produisent le même résultat : ils renvoient toutes les personnes dont l'âge est égal à 30 ans et le prénom est "foo", mais il y a une grosse différence dans la façon dont le résultat va être récupéré : dans le cas du delegate, le code est compilé, c'est une fonction comme une autre qu'on a passé à la clause Where et la seule façon d'appliquer le filtre est de récupérer toutes les personnes que contient la base, et d'appliquer le test à toutes les instances ainsi récupérées en mémoire. C'est évidemment très couteux et c'est une très mauvaise solution. Au contraire, dans l'autre cas, la clause where va traiter la lambda sous la forme d'un arbre d'expressions qui va être traité et analysé par le moteur Linq to SQL et transformé en un vrai filtre SQL, dans ce cas le filtre s'effectue au niveau de la base et le résultat est récupéré en un temps minimal !

Le choix de récupérer une lambda dans une forme plutôt qu'une autre se fait suivant la variable qui va la contenir :

Func<Personne, bool> lambdaFun = p => p.Age == 30 && p.Prenom == "foo";

Ce bout de code va permettre de récupérer la lambda compilée, elle sera l'équivalent d'un delegate.

Par contre si l'on écrit :

Expression<Func<Personne, bool>> lambdaTree = p => p.Age == 30 && p.Prenom == "foo";

Le compilateur va la récupérer sous sa forme d'arbre d'expression qui pourra être analysé, retravaillé plus tard, etc.. C'est ce que fait la clause Where de Linq to SQL ci-dessus : elle prend en argument la lambda comme un arbre qu'elle pourra analyser.

L'exemple exposé par Mitsu Furuta, responsable de cette session, était le suivant : essayer d'accéder à une propriété d'un objet dont on ne connaît pas le nom à la compilation. Le premier cas qui vient à l'esprit est d'utiliser la réflexion pour y arriver : - on récupère le type de l'objet, puis les information de la propriété à laquelle on veut accéder, et enfin on utilise ces informations pour récupérer la valeur de la propriété sur l'instance de l'objet, soit :

public object GetValue(Personne object, string propertyName)
{
    return typeof(Personne).GetProperty(propertyName).GetValue(object, null);
}

Le problème de cette méthode, c'est que la réflexion, est très coûteuse, et si on est dans une boucle, ça devient problématique.

La solution proposée grâce aux lambda est la suivante : on construit un arbre d'expression lambda qui utilise cette méthode, et on va ensuite parcourir cet arbre pour remplacer la réflexion par un appel de méthode standard. Il ne reste plus ensuite qu'à compiler l'arbre d'expressions lambda pour obtenir une fonction aussi rapide qu'un appel direct à la propriété.

J'ai trouvé cet exemple moins bon que s'il avait parlé de celui de Linq to SQL que j'ai présenté plus haut (eh oui, il n'était pas dans la présentation) car il est discutable : il y a d'autres façon moins "tordues" d'arriver à des performances semblables, et ce sans avoir eu à attendre le C# 3.0 ou 3.5. Il suffit de penser "Génération de code à la volée" pour trouver. Je vous laisse regarder cet article http://jaychapman.blogspot.com/2007/11/nhibernate-access-performance.html sur lequel je suis tombé il n'y a pas longtemps et qui résumera mieux que moi tout ça.

F# et la parallélisation

/Laurent/ Comme l'indique le sujet, cette session n'était pas une introduction au F#, mais traitait spécifiquement des problématiques de programmation parallèle et des améliorations apportés au langage F# pour faciliter la programmation asynchrone et concurrente. En gros, sans notion préalable de la syntaxe et des concepts particuliers aux langages fonctionnels de la famille ML (http://fr.wikipedia.org/wiki/ML_(langage)), c'était la sieste assurée ;)

Le constat des concepteurs du F# : programmer à l'aide de threads est fastidieux, trop difficile (en tout cas plus que ça ne devrait l'être) et pas assez souple. Pourtant, il faut bien faire des programmes multi-threads si l'on veut pouvoir faire des appels asynchrones, ou concurrents. La solution habituelle est d'appeler une fonction qui s'exécutera sur une autre thread en lui passant en argument des fonctions de rappel (callbacks) pour indiquer la suite de l'exécution en cas de succès, ou en cas d'échec de l'opération que l'on veut exécuter. C'est lourd ! On casse le rythme habituel de programmation en devant prendre en compte tous les problèmes pouvant se passer pendant l'exécution sur un thread séparé à la main : en effet, si une erreur se produit, il devient difficile de la faire remonter jusqu'à l'appelant.

Pour palier à ces inconvénients, le F# propose des constructions syntaxiques simples : - pour effectuer un appel asynchrone bloquant : il suffit d'utiliser un opérateur d'affectation spécial, et le membre droit de l'affectation s'effectuera de façon asynchrone, et le résultat sera récupéré à la fin de l'exécution. Tout est transparent pour le programmeur : si une exception est levée au cours de l'appel, elle est remontée automatiquement dans le thread principal ! Un bonheur :)

- pour lancer des opérations en parallèle : on encadre les blocs de code par la construction "async { }", et on appelle /// Async.Run(Async.Parallelfoo, bar)) /// l'exécution de "foo" et "bar" se fera en parallèle et un join() s'effectue à la fin des threads pour continuer sur le fil d'exécution du thread appelant.

Ouf ! Là j'ai déjà du perdre tout le monde ^^. Pour une explication avec du vrai code (à la fois plus clair et plus compliqué), vous pouvez regarder le blog de Don Syme, un des intervenants de cette séance : http://blogs.msdn.com/dsyme/archive/2007/10/11/introducing-f-asynchronous-workflows.aspx

mercredi 5 décembre 2007

Slides de l'open bar GWT (Google Web Toolkit)

Disponibles au téléchargement ci-dessous (lien "une annexe").
dilbertFlashJS.gif

lundi 19 novembre 2007

OpenBar Alciontech le 29 novembre : le client riche en Java, c'est facile avec GWT et JavaFX

ajax.jpgCe mois-ci, une conférence pleine de bonnes nouvelles : on peut développer des écrans portables et sexy en Java, sans avoir besoin de connaître Javascript !

En introduction, un coup de projecteur sur JavaFX, sur le thème de "comment faire du flash, en java".

En plat principal, GWT, un framework qui a le potentiel de changer la donne. Il permet de réaliser des applications Ajax portables, en Java. Ses caractéristiques principales sont :

  • il est open-source ;
  • il n'impose pas d'apprendre javascript pour faire de l'ajax,
  • il absorbe les nuances de navigateurs,
  • il gère automatiquement des concepts de haut niveau comme la sérialisation, les appels RPC, et la traduction de code java->javascript pour exécution des traitements locaux au navigateur, ce qui est une petite prouesse.

Après 6 mois sur le terrain, il commence à être adopté par certains de nos clients.

Thierry a travaillé quelques semaines sur GWT. Il vous en expliquera les concepts, les principes de développement et vous fera une démo couvrant le design d'écrans, le remoting et l'exécution de code au sein du navigateur.


Que vient faire ici ce barbu frisé ? C'est Ajax le Grand, héros de la guerre de Troie... ;-)

lundi 12 novembre 2007

Brèves développement Java/J2EE

i-can-lift-40-pounds.jpgAujourd'hui je peux :

jeudi 4 octobre 2007

Java : outils

Ce matin, Florent m'a confié trois secrets d'un air de conspirateur :

  • Non, OSCache (d'Open Symphony) n'est pas un cache transactionnel distribué ; par contre, TerraCotta est extraordinairement prometteur ;
  • JXInsight est l'outil d'analyse de code java en fonctionnement (threads, mémoire, temps d'exécution) qui surpasse tous les autres en ce qu'il permet de débusquer rapidement les anomalies de fonctionnement ;
  • SonarJ,, outil de rétro-ingénierie du code et de l'architecture d'une application, par exemple dans un contexte d'audit.

Merci Florent !

lundi 16 juillet 2007

De l'importance de Spring

Les idées derrière Spring (tissage et découplage) pourraient bien être ce qui est arrivé de plus important à J2EE ces 5 dernières années, et servir de boussole pour la suite.
Qu'en pensez-vous ?

jeudi 12 juillet 2007

Ruby on Rails : slides, démo et liens

rails-small.pngMerci à Aurélien Drouet pour son intervention convaincante :

Lire la suite...

mardi 10 juillet 2007

Microsoft rendra-t-il .NET portable "Everywhere" ?

300px-DotNet3.0.png.NET ne se déploie bien que sur Windows. Ceci n'est pas une insulte aux développeurs de Mono qui essayent de développer les moyens de faire tourner .NET sous linux, c'est un constat issu du terrain. Au moins pour la partie serveur.
Pour ce qui est de l'environnement client (celle qui permet d'exécuter une IHM, à l'instar d'une JVM sur poste utilisateur permettant d'exécuter une application swt ou Swing), il y a un intérêt évident à rendre la technologie présente sur tous les systèmes d'exploitation. Ce mouvement ne se fait pas sans ratés :

vendredi 29 juin 2007

OpenBar AlcionTech le 11 juillet : Développement rapide avec RubyOnRails

rails-podcast.pngPour ce dernier rendez-vous avant l'été, nous mettons un coup de projecteur sur une nouvelle technologie dont beaucoup ont entendu parler mais que peu ont eu l'occasion d'utiliser.

Ruby On Rails est une plate-forme open-source dont la promesse est de permettre le développement rapide d'applications relativement simples, en interface web, sur une base de données.

Basée sur un langage de script objet apparu dans les années 90 - Ruby - RoR permet, grâce à la simplicité de sa configuration, le recours à de nombreux implicites, d'éviter les répétitions et de simplifier les développements. Les zélotes parlent développement 10 fois plus rapides (qu'en J2EE ou .NET), et de "framework hautement productif".

Aurélien Drouet, qui a pu développer plusieurs applications pour un leader de la distribution, nous fera bénéficier de son retour d'expérience par une présentation générale accompagnée d'une démo, et nous aidera à y voir clair dans l'énorme éco-système Ruby On Rails en cours de développement. Enfin, il nous dira pour quelles applications utiliser Ruby On Rails... et celles pour lesquels c'est inadapté.

Le 11 juillet à 18h30 au siège.

vendredi 1 juin 2007

Conférence technique animée par Jaxio

Le commencement de tout projet, nouvelles technologies ou autre, nécessite la mise en place d'un socle technique sur lequel va reposer l'ensemble de la logique métier de l'application future. L'expérience montre que bon nombre de développeurs, ont recours à une sorte de boite à outils qu'ils ont dû mettre en en place petit à petit au fil des projets et qui se compose de frameworks, classes utilitaires, bonnes pratiques etc.

Jaxio propsoe une solution élégante basée sur un générateur d'application reposant sur le modèle de la base de données pour générer le squelette de l'application. En quelques minutes, le temps du lancement du générateur, une application packagée est prête à être déployée sur, en théorie, n'importe quel serveur J2EE.

L'application résultatnte est plus qu'un socle technique: elle propose la majeur partie des widgets qu'on trouve dans une IHM classique: tri, pagination, changement de look and feel en quelques clicks

Lire la suite...

mardi 27 mars 2007

OpenBar AlcionTech : meta-frameworks, Jaxio, le 26 avril

>> Jeudi 26 avril 2007 à 18h30 au siège

Qu'est-ce qu'un méta-framework ?

Les frameworks sont à présent un état de fait ; plus un projet ne démarre sans l'adoption de briques techniques telles que Struts, Spring, Log4J, Hibernate..., qui enrichissent, chacune dans sa spécialité, le paradigme J2EE. keel.gif Un méta-framework est une "suite" de frameworks techniques assemblés afin de couvrir l'ensemble des besoins de réalisation d'une application. Par exemple, certains réfléchissent, au sein d'AlcionGroup, à la possibilité de pré-assembler un socle applicatif basé sur Spring et Hibernate, prêt à partir sur nos projets. Différentes initiatives vont dans le même sens (JAD, Keel, Roma, Jaxio, MD4J, Seam, RIFE, AppFuse, Tapestry...) dans le double objectif d'améliorer la productivité du développement, et de réduire les dépendances entre composants afin de faciliter l'évolution du logiciel produit (rester agile !). Il y aura, à moyen terme, une norme defacto, sorte de "pile standard", incluant - ou non - les outils de développement rapide que l'intégration verticale suggère.

Quelques ressources : http://www.theserverside.com/tt/articles/article.tss?l=Keel http://romaframework.xwiki.com/xwiki/bin/view/Main/

La présentation du soir : Développement rapide d'applications J2EE avec Spring, Hibernate, et Jaxio

Jaxio est un outil de génération rapide d'applications J2EE à partir d'un modèle métier, développé par une jeune société française. Sur le constat d'une lassitude du développeur à réaliser certaines tâches répétitives liées aux patterns mis en oeuvre, Jaxio a automatisé la production de code pour les parties persistance, métier, et présentation, dans un cadre technologique tout à fait au niveau de l'état de l'art, et de plus totalement personnalisable. Les applications sont nombreuses : maquettage, RAD, développement itératif... Cette présentation sera assurée par Florent Ramière et Nicolas Romanetti, fondateurs de Jaxio. Et, pour tout vous dire... le retour des Alcionniens les intéresse.

mercredi 7 mars 2007

Oracle libère TopLink!

Oracle a annoncé hier lors de la conférence EclipseCon que Toplink sera cédé à l’Open Source sous l’égide du Projet Eclipse.
Tout sauf des spécificités liées à Oracle AS est concerné (même les fonctionnalités encore en cours de developpement)

Lire la suite...

mardi 16 janvier 2007

Les labs à suivre

fiole Une petite compilation des labs à suivre lors d'une veille technologique. N'hésitez pas à compléter la liste :)

Usenet ou le retour de l'ancêtre

UsenetUsenet, c'est l'ancêtre des forums web et c'est pas inutile de connaitre parce que cela regorge de groupes (et de fils de discussion) susceptibles d'intéresser les ingénieurs informaticiens que nous sommes. Avant c'était un peu technique pour entrer dans l'arène mais grâce à google (et oui encore lui!), plus d'excuse: tout se fait via le navigateur. Toute petite sélection de groupes à noter:


Pour info, Usenet est souvent la matière première des chercheurs en social cyberspaces (voir le projet Microsoft).

vendredi 22 décembre 2006

Dans le radar : la réponse de Java à RubyOnRails ?

RomaFramework est une initiative à évaluer. Qui a des retours ?
http://www.romaframework.org/

Roma Meta Framework is a Open Source initiative to make Java application development easy. The approach is totally DDD, let's think to the domain of your application and Roma will makes the rest: persistence (database), presentation (HTML + Ajax), logging, user management, sessions, etc.

The Roma project is composed of two parts:

* Wizards to generate code automatically * Runtime libraries that works as a glue code to integrate you application with the best Java technologies and products (Spring, JDO 2.0, Echo2, Log4J, etc.)

StrutsTestCase

Louis Lefevre a rédigé pour nous un petit how-to pour vous permettre de connecter JUnit et Struts, sur le thème : "Comment tester votre application Struts sans passer des journées à répéter les mêmes clics dans vos pages web ?".

Expliquons-nous :

  • L'utilisation de framework de tests unitaires est essentielle à la constitution d'un code robuste. Il aide, d'une part à placer votre code en situation difficile, d'autre part, il en améliore la lisibilité ! Et surtout il fait gagner du temps.
  • Concernant une application basée sur une I.H.M (une application Web par exemple), les tests fonctionnels impliquent de se mettre à la place de l’utilisateur et de cliquer, de saisir des données dans un formulaire, puis de re-cliquer,… pour tester une fonctionnalité, pour une séquence de choix, dans un contexte, et … pour une version du code !!! Autant dire que le respect rigoureux de la phase de tests pourrait faire exploser les plannings les plus laxistes !

La note se télécharge ci-dessous sur le lien "une annexe".

mercredi 6 décembre 2006

A la recherche du portail ultime

expeditor.jpgLe portail ultime ? Capable de fournir à chaque employé les applications dont il a besoin, sur son bureau. En prenant en compte la gestion des droits, et un déploiement totalement managé, particulièrement adapté aux grandes flottes.

C'est en tout cas l'a vision d'IBM qui vient de lancer, via sa filiale Lotus, le framework "Expeditor" pour assembler tout type d'IHM, a priori dans un contexte Windows, et reposant sur Eclipse et Websphere.

La concurrence ? Est clairement visé Microsoft, dont la nouvelle technologie Avalon/XAML, devenant dans l'ère Vista la couche de présentation de .NET, pourrait prétendre à l'ubiquité, sinon à l'universalité.

Une fonction originale de ce remplaçant de Websphere Everyplace : la capacité d'assembler des portlets (JSR169) qui tournent directement sur le poste client et fonctionnent donc en déconnecté... à condition de disposer de 512Mo de RAM. Et bien sûr, ça tourne également sur Linux.

mardi 5 décembre 2006

Nouvelle solution de clustering Java en Open Source

Terracotta vient de mettre en Open-Source sa solution DSO (distributed shared objects)

Lire la suite...

Slides de la présentation Spring MVC du 28 Nov 2006

Bonjour, Pour ceux qui n'ont pas pu assister à la présentation Spring/MVC vous pouvez acceder au slides en suivant le lien ci-dessous

Slides Présentation Spring MVC

Bonne lecture Mahfoud

lundi 4 décembre 2006

Concevoir des services Web facilement en Java : XFire, la solution ?

Les services Web sont utilisés depuis plusieurs années, mais ils présentent toujours des inconvénients majeurs. Il ne sera pas question ici de limitation d’ordre fonctionnel, mais plutôt de difficultés de mise en œuvre. Tout d’abord, dans le monde Java, sont proposés de nombreux – et même de trop nombreux – environnements d’exécution pour services Web, ce qui ne facilite pas toujours le choix de l’architecte logiciel. Citons, parmi les plus connus, Axis du projet Apache, JWSDP de Sun, WebLogic de BEA, WebSphere d’IBM, etc. XFire est un projet Open ayant pour objectif d'offrir une implémentation SOAP en Java aussi performante que simple d’utilisation. Le framework XFire est disponible à l’adresse http://xfire.codehaus.org.

jeudi 23 novembre 2006

Java et le temps réel

Java est enfin devenu compatible avec les applications temps réel. Le principe du garbage collector empêchait en effet une exécution prédictible, capable de garantir des temps de réponse sous un délai imparti. Aujourd'hui, l'implémentation de référence permet de gérer des lantences quantifiées de l'ordre de 20 microsecondes.
http://java.sun.com/javase/technologies/realtime.jsp

Première étape : la concrétisation de la JSR001, the "Real Time Specification for Java", qui définit des modifications profondes : une API et des ajouts à la JVM. En résumé :

  • Deux nouveaux types de threads, dont un ne pouvant pas être interrompu par le garbage collector, et assurant un respect absolu des priorités (ce que l'implémentation standard ne garantissait pas) sur 28 niveaux
  • Deux nouveaux espaces mémoire, ne faisant pas l'objet de garbage collection : l"immortal memory", jamais désallouée (prudence !), et la scoped memory (détruite à la sortie du scope). Des fonctions de l'API permettent l'allocation dans ces espaces.
  • Deux mécanismes spécifiques aux applications temps réel : la prise en compte d'événements asynchrones ("happenings") et d'un chronométrage à la nanoseconde,
  • L'accès direct à la mémoire physique permettant de coder des drivers en java plutôt qu'en C/C++ appelé par JNI. Ici aussi, prudence !


Deuxième étape : la disponibilité de machines virtuelles implémentant cette nouvelle norme. C'est chose faite, nous en avons au moins deux :

  • L'implémentation Sun (Java Real Time System ou JavaRTS), sous forme d'add-on au JDK 1.4.1, fonctionnant uniquement sur Solaris/Sparc pour l'instant (la promesse d'autres plates-formes a été faite, avec la limitation que JavaRTS repose entièrement sur les qualités temps-réel de l'OS sous-jacent, Solaris en l'occurrence)
  • L'implémentation de TimeSys, qui est lead sur la maintenance de la spécification et auteur de l'implémentation de référence : http://www.timesys.com/java/


Le modèle retenu permet de créer des systèmes complexes nécessitant de la logique temps-réel (réponse en temps imparti) combinée avec de larges portions de code n'ayant pas les mêmes exigences, codées en java "standard". A noter également des implémentations de corba tirant parti de ces nouvelles propriétés.

Telechargement : Mastering Enterprise JavaBeans 3.0

Le livre n'est malheureusement pas imprimable car son auteur l'a protégé. Cliquer ci-dessous sur "une annexe"

mardi 21 novembre 2006

Gestion de la memoire en Java avec NetBeans 5.x

l'article est accessible sur l'URL http://schmitt.developpez.com/tutoriel/java/memoire/

lundi 13 novembre 2006

Java disponible sous licence open-source : les détails

R La rumeur qui courait depuis plusieurs semaines a été confirmée aujourd'hui par une annonce de Sun.
Il faut se rappeler que Java-en-tant-que-standard a connu un début d'existence difficile : la tentative de prise de contrôle de Java par Microsoft - qui livrait avec Windows une variante propriétaire jusqu'à ce qu'un tribunal l'en empêche à la fin des années 90 - a pu être repoussée grâce à la propriété de Sun sur Java.
Depuis plusieurs années, la communauté open-source demandait que Java devienne libre notamment afin de pouvoir l'inclure plus facilement dans les distributions Linux. L'opportunité était là : le standard semblait solidement établi et, plus rare, Sun avait choisi dès le départ un modèle gratuit.

C'est aujourd'hui chose faite : Sun met à diposition ses propres implémentations du langage, sous licence GPL.

En quoi consiste exactement cette ouverture ? Quelques réponses :

  • l'annonce concerne les plates-formes J2ME, J2SE, et J2EE (qui était déjà sous licence open-source, mais plus restrictive) ;
  • le code de javac (le compilateur) et de java (la machine virtuelle de runtime) deviennent ouverts ;
  • la spécification de l'API ne devient pas libre : elle reste soumise au JCP (java community process), ce qui est probablement la meilleure assurance contre la dispersion ;
  • le statut du code source de l'API n'est pas cité explicitement ; puisqu'il a toujours été téléchargeable, on peut supposer qu'il va être libéré ; cependant Sun prévoit un gros travail de toilettage afin de vérifier que ce code ne contient rien qui soit la propriété d'un tiers et ne prévoit de stabiliser la version libre qu'à la fin du premier semestre 2007.
  • les premières version open-sourcées seront les builds précoces de la version 7, puis ensuite viendra la version 6 stable.


Concrètement quels sont les changements pour nous, développeurs ?

  • En première analyse : aucun ; rien de fondamental ne va changer. Ni les fonctions du langage, ni son attractivité.
  • Le suivi de l'écosystème deviendra plus complexe, et il faudra plus que jamais se méfier des extensions propriétaires.
  • L'auto-formation et la correction de certains défauts seront facilités par la transparence des couches basses.
  • Et surtout : la possibilité de contribuer au progrès de l'un des langages les plus populaires de l'histoire !

Enfin, que nous réserve l'avenir ?

  • La possibilité d'un renforcement de Java comme plate-forme standard, face à .NET qui restera probablement propriétaire en dépit des efforts de Mono ;
  • Les clients qui le souhaitent peuvent continuer à faire l'acquisition de la version payante de java, qui fournit certaines garanties, ainsi que du support.
  • Une confirmation du positionnement atypique de Sun, qui devient le plus gros contributeur privé de l'open-source (après avoir dejà fourni open office et open solaris).

vendredi 10 novembre 2006

Rencontre avec Logiconsult

Logiconsult est une petite société de conseil spécialisée dans le décisionnel depuis 1989.
Datawarehouse.gifLe décisionnel, qu'est-ce exactement ? C'est l'art d'agréger les données du ou des systèmes d'information de l'entreprise, afin de fournir des outils de pilotage (pouvoir corréler par exemple les ventes dans une région avec les délais de fabrication dans telle usine et élaborer un plan d'action correctif). Les mots clés sont : datawarehouse (centralisation et historisation des données des différents SI), analyse muti-dimensionnelle (axes et indicateurs), et l'ordre SQL "group by"...
Alciongroup dispose de compétences dans ce domaine, qui concerne des projets assez différents des projets de développement et d'intégration. Aujourd'hui, nous voulons développer cet axe afin de compléter notre offre. Logiconsult nous a présenté deux axes de développement :

  • un logiciel d'aide à la conception de système décisionnel, permettant de tracer les champs tout au long du parcours des données et leur transformation ; réalisé en technologies Ajax, il est modifiable pour s'adapterà la logique du projet si nécessaire et sert, si on le souhaite, de base pour générer des schémas ou des scripts.
  • des briques logicielles Java/Ajax pour l'implémentation de tableaux de bord ; en particulier une interessante fonction de tableau croisé dynamique réalise tous les calculs sur le poste client, au cours de la navigation de l'utilisateur dans les données, après une unique requête sur la base de données qui se voit considérablement déchargée.

L'élaboration du partenariat est en cours.

A rapprocher d'un fil de discussion sur la possible relocalisation des données (et donc des traitements) dans les systèmes distribués à la faveur des évolutions des prix du stockage et de la bande passante sur une longue période, à partir de l'exemple du nouveau datacenter de Google à Portland, Oregon :

When we look at our current situation, we see that we have data 'here' and data 'there'. When we want to have more data, we need to go 'there' to bring the data 'here' for viewing. In the most extreme (and common) case, the data is only temporarily copied from 'there' to 'here' and once we are done with the data it is deleted from 'here'.

jeudi 12 octobre 2006

Slides des présentations à l'open bar : Spring et Scrum

Scrum par Stéphane Boisson

Spring par Thierry Roussel

mercredi 21 juin 2006

Développer en AJAX avec Google

AJAX (Asynchronous javascript and XML) désigne un ensemble de technologies permettant la réalisation d'interfaces utilisateurs utilisables dans un simple navigateur, mais au rendu bien plus dynamique que le HTML. De plus en plus utilisé sur le web grand public (maps.google.com...), AJAX s'étend aujourd'hui aux applications intra/extranet, en mal d'ergonomie. Dès 2002/2003, Alcion a mené un grand forfait pour la réalisation d'une plate-forme de téléconférence couplée téléphone/web, qui reposait sur les principes AJAX.
desktopclone.jpg Depuis quelques semaines, le développement AJAX est entré dans l'age adulte grâce à la décision de Google de distribuer gratuitement le framework utilisé en interne le Google Web Toolkit (GWT). Une des qualités majeures de cette solution est qu'elle est J2EE et épargne l'essentiel du développement HTML/Javascript au réalisateur de l'application. Cela tombe bien, c'était le plus délicat et sujet aux bugs et aux incompatibilités entre navigateurs.
L'assemblage des widgets graphiques est déclaratif et n'est pas sans rappeler Swing, jusqu'aux mécanismes de listeners pour la gestion événementielle :

public class Hello implements EntryPoint {
  public void onModuleLoad() {
    Button b = new Button("Click me", new ClickListener() {
      public void onClick(Widget sender) {
        Window.alert("Hello, AJAX");
      }
    });
    RootPanel.get().add(b);
  }
}


http://code.google.com/webtoolkit/