Devrait-on faire un client lourd en Java ?
Propositions autour du positionnement de Sun Microsystems sur Swing

Le , par hugo123, Rédacteur
Devrait-on faire un client lourd en Java ?

Il y a peu j'ai écrit un petit billet sur mon blog sur ce sujet. Je le partage avec vous en intégralité pour avoir une discussion avec des membres de développez.com.

Ayant bossé en Java je me suis heurté à Swing comme on peut se heurter à un mur. Ouch, quand on vient du Web on déguste fort avec Java et son API pour client lourd. Pour autant, la techno est elle valable ou non, et que vaut-elle par rapport à J2EE ?

Swing avant 2007

Avant 2007 Sun a clairement focalisé son attention sur J2EE ce qui leur a permis de gagner en popularité. Le nombre de frameworks existant et la richesse des librairies proposées lui ont permis de s'assoir durablement comme "langage pour faire du Web".

Seulement voilà, à côté de ça J2SE, la partie réservée aux postes de travail, a par contre était délaissé. Pourquoi ? Selon James Gosling, la faute au conflit qui opposait alors Sun et Windows sur le déploiement de la JVM Windows sur les postes par défaut. Sun n'aurait pas souhaité s'investir dans J2SE tant que Windows proposerait sa JVM.

De l'avis du créateur de Java : "Aujourd'hui, Java sur le poste client n'est pas à la hauteur" et ce constat est facile à confirmer :
  • aucun framework Swing de réelle envergure : pas d'équivalent à JSF, Struts, Wicket, Tapestry etc... si on compare a J2EE
  • peu de librairies de composants : Swingx reste experimental.
  • un système de look and feel trop complexe, pour preuve le peu de boites capable de créer le leur en comparaison avec le nombre capable de créer des CSS


La difficulté de Swing, notamment la maitrise de la gestion événementielle et de l'EDT n'en font pas une partie de plaisir et au final ce n'est pas étonnant de trouver essentiellement des librairies payantes (Jide par exemple qui est très bon) alors qu'on peut en trouver gratuitement à foison en J2EE.

Swing depuis 2007

Mais voila, depuis 2007 Sun semble vouloir revenir sur J2SE :
- James Gosling, créateur de Java met en avant JavaFx
- Swingx tente d'apporter du neuf avec objectif d'être intégré en Java 1.5
- Aerith déjà présenté en 2006 devient open source , et oui, effectivement c'est une IHM qui déchire pas mal. Un jnlp existe sur leur site, il faut tester avec le login romainguy.
- Romain Guy qui s'était fait connaitre sur Aerith publie avec Chett Haase un très bon bouquin : Filthy rich clients

Soyons honnête toutefois, le bouquin filthyrichclients s'il démontre qu'on peut faire du très bon travail avec Swing met aussi en évidence que ça ne s'adresse pas à tout le monde. Certaines notions comme le double buffering, les problématiques d'accélération matérielle, les notions de Composite ou de transformation d'images sont très techniques et mettent en oeuvre des notions mathématiques qui ne s'adressent pas à monsieur tout le monde. Qui n'a pas galéré des heures sur des problèmes de glitch graphique, de pixels gris etc... ?

Et aujourd'hui ?

Et aujourd'hui 2009, cela me parait toujours moins rose.

  • JavaFx peine à décoller et son API n'est pas toujours pas stable (compatibilité 1.1 et 1.2 qui laisse à désirer). A côté de ça, ses concurrents directs comme Flex sont en plein boom avec notamment un sdk qui vient de sortir sur Eclipse
  • aucun framework n'a émergé pour cacher la complexité des concepts nés dans Aerith (* voir plus bas pour nuancer cette affirmation)
  • Swingx est tellement peu mis à jour qu'il continue toujours à cibler Java 1.5, version en fin de support depuis cette année...

Pourquoi ce manque d'investissement de Sun depuis 2 ans ? Le rachat d'Oracle n'y serait pas étranger ou bien est-ce simplement que 2 ans reste un délai très court ? Nous verrons bien.

Mais personnellement j'ai tendance à être sceptique d'autant que la grande force de J2SE qui était la richesse de ses widgets et la réactivité de son interface est désormais sévèrement concurrencé par les interfaces Web. GWT ou JSF avec IceFaces apportent désormais la même richesse aux webapps et pour un cout nettement moindre.

En conclusion, je ne dénigre pas Swing et je pense que sa chance de survie va reposer comme beaucoup d'autres technologies sur la capacité à la communauté à proposer des outils, des composants, des best practices afin de cacher la complexité du langage. Mais à l'heure actuelle, si on me donne le choix, je partirais pour ma part sur du J2EE classique.

(*) En fait, il existe bien une librairie assez avancé qui permet de masquer la complexité. J'ai d'ailleurs un second billet sur ce sujet qui parle de substance et laf-widget : http://hakanai.free.fr/index.php/the...ubstance-swing

Source : Le post sur mon blog


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse

Avatar de joseph_p joseph_p - Membre expérimenté https://www.developpez.com
le 11/11/2009 à 13:56
Une autre question m'est venue à l'esprit à propos : j'ai souvent entendu/lu des plaintes à propos de l'EDT et de cette façon de gérer les traitements gourmands en ressources. Comment font les autres framework client lourd pour gérer la chose ?
Avatar de hugo123 hugo123 - Rédacteur https://www.developpez.com
le 11/11/2009 à 20:16
- différences gui .Net/Java : .Net est très proche de D3D, là où java c'est nettement moins clair.

Pourquoi pas clair ? Java étant multiplateforme il n'utilise D3d que sur windows.
Pour activer l'accélération direct3d sur windows tu peux même utiliser un paramétrage particulier :
-Dsun.java2d.d3d=true

- à propos des layout : matisse ne résout il pas le souci joliment ?

j'utilise eclipse donc je ne m'étendrais pas trop la dessus, ne connaissant pas bien. Mais a ce que j'ai vu matisse ne sait pas gérer tout les layout (exemple formlayout de jgoodies)

Concernant l'EDT, le concept n'est pas critiqué en soi, on retrouve le même dans Qt il me semble d'ailleurs. C'est juste que, mal connu ou parfois mal exploité on trouve souvent de belles erreurs d'utilisation qui ont forgé une bonne réputation de lourdeur a Swing. Il faut bien manipuler le threading dans Swing, chose pas si maitrisé que ca par bcp de développeurs.

(android aucune idée, je ne connais pas le sujet.)
Avatar de bouye bouye - Rédacteur/Modérateur https://www.developpez.com
le 12/11/2009 à 1:56
Sun ainsi que les publications des divers grandes maisons d'edition (O'Reilly, Addisson-Weisleym, etc. y compris les propres livres edites par Sun meme) sont principalement responsables de ce fait. Pendant longtemps, aucun de leur didacticiel, code ou livre ne se penchait ni n'insistait sur cela ni n'en expliquait l'importance crutiale et souvent la regle de l'EDT n'y etait meme pas respectee.

A partir de 2004~2005 dans les JavaOne, il a ete mentionne et annonce lors des JavaOne que des regles de bonnes conduites ainsi que la creation et l'adoption d'un Swing application framework et les guidelines qui allaient avec devaient etre rapidement mises en place pour eviter tout ce qui est de nos jours considere comme de la mauvaise programmation en Swing.

La plupart des livres recents edites par Sun semblent en tenir desormais compte, les demos fournies avec le JDK et les didacticiels semblent avoir ete corriges depuis (plus ou moins en silence) et en fouillant bien on peut meme trouver une ebauche de regles de bonnes conduites a suivre dans la doc disponible chez Sun. Si on en est arrive a ce point c'est surtout grace au martellage qu'on bien voulu faire Scott, Romain ou d'autres a l'epoque via leurs blogs ou leurs presentations lors de confs et dont nous nous sommes fait echo ici ou ailleurs. Mais globalement c'est quelques chose qu'ils nous faut regulierement remettre sur le tapis car je pense que pas mal de formateurs ou d'enseignants en lycee ou en fac ne se sont toujours pas mis au gout du jour.

Cote application framework, ben, c'est toujours dans les choux et les guidelines eux aussi sont portes disparus puisqu'ils devaient en decouler.
Avatar de joseph_p joseph_p - Membre expérimenté https://www.developpez.com
le 12/11/2009 à 9:12
Citation Envoyé par hugo123  Voir le message
Pourquoi pas clair ? Java étant multiplateforme il n'utilise D3d que sur windows.
Pour activer l'accélération direct3d sur windows tu peux même utiliser un paramétrage particulier :
-Dsun.java2d.d3d=true

Je voulais surtout dire que Java était moins approprié pour faire de la 3D, pas que swing ne bénéficiait pas de D3D.

Citation Envoyé par hugo123  Voir le message
j'utilise eclipse donc je ne m'étendrais pas trop la dessus, ne connaissant pas bien. Mais a ce que j'ai vu matisse ne sait pas gérer tout les layout (exemple formlayout de jgoodies)

il y a myEclipse pour cela éventuellement, sachant que d'après ce que j'avais compris matisse venait surtout avec son propre layout qui aidait bien à la conception graphique de gui (drag and drop).

concernant l'EDT et la nécessité de gestion multithreadé, est ce aussi le cas pour du winforms/WPF ? Ou sous les gui mac ?
Avatar de sinok sinok - Modérateur https://www.developpez.com
le 12/11/2009 à 9:26
Citation Envoyé par ZedroS  Voir le message
il y a myEclipse pour cela éventuellement, sachant que d'après ce que j'avais compris matisse venait surtout avec son propre layout qui aidait bien à la conception graphique de gui (drag and drop).

A l'occasion tu as un topic qui débat de la question pas très loin: http://www.developpez.net/forums/d26...lder-utiliser/

Citation Envoyé par ZedroS  Voir le message
concernant l'EDT et la nécessité de gestion multithreadé, est ce aussi le cas pour du winforms/WPF ? Ou sous les gui mac ?

En fait tous les toolkits font face au même problème de synchronisation du thread de l'interface graphique: http://shemnon.com/speling/2007/02/g...ing-a-met.html, http://stackoverflow.com/questions/2...k-thread-works.
Avatar de pseudocode pseudocode - Rédacteur https://www.developpez.com
le 12/11/2009 à 12:20
Citation Envoyé par eclesia  Voir le message
Je serais surpris de voir quelque chose en interface .net qui ne soit pas realisable en swing.

C'est pas tant que ce n'est pas réalisable, c'est que c'est plus difficile.

Dans les nouvelles moutures de .Net, il y a une nette séparation entre le coté "graphique" (format xaml, outils "expression", ...) et le coté code (format c#, visual studio, ... ). La glue entre ces 2 cotés est assurée par le framework (chargement, binding, evenements, ...).

Ce découpage colle assez bien avec la répartition des compétences "modernes" d'une équipe de dev : archi, codeurs, graphistes/ergonomes, ...

Le framework Swing nécessite d'avoir une compétence dans tous ces domaines si on veut faire une IHM équivalente.
Avatar de yoyo88 yoyo88 - Membre expérimenté https://www.developpez.com
le 12/11/2009 à 15:29
pour repondre a la question : Devrait-on faire un client lourd en Java ? et à la problématique de swing
le problème et que pour développer une client lourd 100% portable on n'a pas trop le choix. sauf si la portabilité n'es pas une obligation auquel cas java entre en concurrence avec d'autre langage tous aussi bon. (.Net ou encore notre bon vieux c/c++)
bref la portabilité a un prix.

Sinon si on élève la portabilité, faire un client lourd en java plutôt que dans un autre langages, c'est plutôt une question de projet, de compétence et de gout.
Avatar de bobuse bobuse - Membre actif https://www.developpez.com
le 12/11/2009 à 17:19
C'est clair que Swing est à la traîne d'un point de vue technologique, mais je suis toujours étonné quand je vois certaines applications faites en Swing. Par exemple, j'utilise depuis peu JOSM, et c'est quand même bien foutu.
Sinon, c'est clair qu'il manque un framework qui fasse consensus pour faciliter le développement Swing et ajouter quelques standards.

Ceci dit, je développe sur la plateform Netbeans (RCP), et là pas mal de manque sont comblés, tant d'un point de vue technologique (Lookup, PluginManager, TopComponent, Nodes, …) que conceptuel (DCI).

Par contre, quand tu parles de Look and Feel, c'est très loin de mes préoccupations. On a des LnF pour Win, Mac et GTK (Qt via un bind avec GTK), c'est tout ce dont on devrait avoir besoin. J'ai horreur des applications qui m'impose un nouveau style ! Mais bon, c'est un autre débat …
Avatar de blackhock blackhock - Membre du Club https://www.developpez.com
le 12/11/2009 à 21:09
Bonsoir a tous,
Personnellement j'ai beaucoup travaillé avec Swing, au départ je trouvais ca un peu compliqué mais petit à petit j’ai découvert la puissance de cette API, et franchement une fois maîtrisée on se régale.
Personnellement je préfère le développement des clients lourds que le développement web, et je pense que Java (et SUN) peut mieux faire dans ce domaine (à l’image de C#).
Bonne soirée à tous.
Avatar de DjGonk DjGonk - Membre régulier https://www.developpez.com
le 13/11/2009 à 16:59
Salut,

Je bosse depuis plus de trois ans avec Swing et je n'en suis pas dessus. Bien entendu je suis passé par le développement Web en premier (avec les débuts des Jsp et ensuite autre Jsf).

C'est vrai qu'au premier abort c'est la séparation MVC n'est pas subtilement proposée par Swing. Mais avec de l'habitude on comprend et on trouve les moyens de faire cette séparation (avec des API ou pas).

Je pense que par rapport au produit de chez Mr Microsoft et de certains autres, ce dont souffre Swing c'est de n'avoir à proposé un système de binding inclus avec le JDK. Bien sur il possible de passer par des API (JGoodies) qui permettent ce binding, mais Sun devrait pour moi ce focaliser sur le binding qui est est un élément essentiel dans le développement de client lourd.

Concernant les LAF c'est clair que c'est pas facile mais bon comme toutes technologies il faut apprendre...
Avatar de nicolofontana12 nicolofontana12 - Inscrit https://www.developpez.com
le 21/11/2009 à 13:46
Expert en Systeme embarqué, je crois qu'il ne faut pas accuser Sun de son manque d'interet à J2SE!
Java dès le depart n'avait pas été conçu pour les applications lourd. Il à ete concu à l'origine comme un langage orienté web et embarquée.

Ce retour de Java pour renforcer sa position sur le web et embarqué est vu par les specialisté comme un retour à l'objectif initial.

Que l'on se dise cette verité, Java n'etait pas prevu pour les deskops mais plutot pour le web.

Il faut aussi signaler que le monde desktop est entrain d'etre oublié pour laisser place au web et embarqué.

Il ne faut pas aussi oublier que Sun meme à tendance à oublier Java ME. Depuis longtemps il n'ya pas d'evolution, JavaFx n'evolue pas aussi comme on le voit chez les autres!

Ce manque d'interet peut etre expliqué par le rachat de Sun par oracle, je dirai non! Certe il pourrai avoir un probleme diurne au sein de Sun meme qui l'empeche à evoluer.

L'avenir nous dira la verité
Offres d'emploi IT
Architecte systèmes études & scientifiques H/F
Safran - Ile de France - Vélizy-Villacoublay (78140)
Architecte électronique de puissance expérimenté H/F
Safran - Ile de France - Villaroche - Réau
Expert décisionnel business intelligence H/F
Safran - Ile de France - Évry (91090)

Voir plus d'offres Voir la carte des offres IT
Contacter le responsable de la rubrique Accueil