<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Pierre Schambacher.com &#187; java</title>
	<atom:link href="http://www.pierreschambacher.com/blog/tag/java/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.pierreschambacher.com</link>
	<description>Ingénieur en Informatique pour Intellicore</description>
	<lastBuildDate>Fri, 28 May 2010 06:45:08 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Java c&#8217;est nul !</title>
		<link>http://www.pierreschambacher.com/blog/java-cest-nul/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=java-cest-nul</link>
		<comments>http://www.pierreschambacher.com/blog/java-cest-nul/#comments</comments>
		<pubDate>Sun, 28 Feb 2010 18:02:02 +0000</pubDate>
		<dc:creator>Pierre Schambacher</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Informatique générale]]></category>
		<category><![CDATA[coup de gueule]]></category>
		<category><![CDATA[fail]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://www.pierreschambacher.com/?p=312</guid>
		<description><![CDATA[Aujourd&#8217;hui c&#8217;est coup de gueule ! Je sors de ma longue torpeur pour gueuler un coup, JAVA C&#8217;EST NUL ! http://cestnul.fr/Java

Etant donné que je ne suis pas homme à gueuler sans preuve, voici la démonstration de ce que j&#8217;avance.

Je vous laisse le temps de lire ce petit bout de code et deviner le résultat logique [...]]]></description>
			<content:encoded><![CDATA[<p>Aujourd&#8217;hui c&#8217;est coup de gueule ! Je sors de ma longue torpeur pour gueuler un coup, JAVA C&#8217;EST NUL ! <a href="http://cestnul.fr/Java">http://cestnul.fr/Java</a></p>
<p><span id="more-312"></span></p>
<p>Etant donné que je ne suis pas homme à gueuler sans preuve, voici la démonstration de ce que j&#8217;avance.</p>
<p style="text-align: center;"><img class="aligncenter" src="http://www.pierreschambacher.com/wp-content/uploads/2010/02/javaFail-300x280.png" alt="Java Fail" /></p>
<p>Je vous laisse le temps de lire ce petit bout de code et deviner le résultat logique d&#8217;une exécution&#8230;<br />
Si vous pensez comme moi, vous vous attendez à ce résultat:</p>
<blockquote>
<div id="_mcePaste">Object: java.lang.String</div>
<div id="_mcePaste">Integer</div>
<div id="_mcePaste">Float</div>
</blockquote>
<p>Réfléchissons deux minutes.</p>
<p>Nous avons une liste qui contient différents objets, une chaîne de caractère, un entier et un nombre décimal. Notre classe Main présente une méthode polymorphique prenant en paramètre un Object, un Integer ou un Float.<br />
Pour le premier objet la méthode la plus approchante est la méthode avec le paramètre Object.<br />
Pour les deux autres la méthode avec le paramètre de type exact va être appelé du fait que la liaison en java est dynamique et décidée à l&#8217;exécution. Le fameux &laquo;&nbsp;VIRTUAL&nbsp;&raquo; des programmeurs C++.</p>
<p>Voyons le résultat de l&#8217;exécution (JVM 1.6 sur MacOS 10.6 dit &laquo;&nbsp;Snow Leopard&nbsp;&raquo;):</p>
<blockquote><p>Object: java.lang.String<br />
Object: java.lang.Integer<br />
Object: java.lang.Float</p></blockquote>
<p>Mais ????!!!! Voilà un résultat qui ferait lacher à nos amis anglo-saxons un virulent &laquo;&nbsp;WTF ?!&nbsp;&raquo;. Que c&#8217;est-il passé ?</p>
<p>Et bien c&#8217;est extrêmement facile. Nous nous trouvons devant un manique échec de Java et ses méthodes liées à l&#8217;exécution&#8230; Le compilateur voit que l&#8217;ArrayList contient des instances de Object, il voit une méthode prenant en paramètre un Object, il fait la liaison à la compilation. Dans le langage courant on dirait simplement: JAVA FAIL !</p>
<p>Si vous ne me croyez pas, vous pouvez simplement télécharger le fichier de test <a title="Démonstration du Java Fail" href="http://www.pierreschambacher.com/wp-content/uploads/2010/02/Main-exemple-1.txt" target="_blank">ici</a> (en renommant le fichier Main.java évidemment). Pour le principe j&#8217;ai changé Object en Number (superclasse de Integer, Float, Double, &#8230;) et le résultat est bien sûr le même, comme vous le constaterez <a title="Démonstration du Java Fail" href="http://www.pierreschambacher.com/wp-content/uploads/2010/02/Main-exemple-2.txt" target="_blank">là</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pierreschambacher.com/blog/java-cest-nul/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Expérience d&#8217;un ingénieur sur WebObjects</title>
		<link>http://www.pierreschambacher.com/blog/experience-dun-ingenieur-sur-webobjects/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=experience-dun-ingenieur-sur-webobjects</link>
		<comments>http://www.pierreschambacher.com/blog/experience-dun-ingenieur-sur-webobjects/#comments</comments>
		<pubDate>Wed, 16 Sep 2009 16:04:21 +0000</pubDate>
		<dc:creator>Pierre Schambacher</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[cv]]></category>
		<category><![CDATA[ingénieur]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[webobjects]]></category>

		<guid isPermaLink="false">http://www.pierreschambacher.com/?p=141</guid>
		<description><![CDATA[Utilisant WebObjects depuis maintenant 6 mois dans le cadre de mon stage ingénieur sur Sophia (voir mon CV), j&#8217;aimerais revenir sur cette expérience et donner mon avis sur cette technologie assez peu connue. Pour ceux qui ne connaitraient que de nom ce framework, en voici une petite description.
WebObjects est un framework initialement développé en Objective [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Utilisant WebObjects depuis maintenant 6 mois dans le cadre de mon stage ingénieur sur Sophia (voir mon <a title="CV ingénieur WebObjects Sophia" href="http://www.pierreschambacher.com/cv" target="_self">CV</a>), j&#8217;aimerais revenir sur cette expérience et donner mon avis sur cette technologie assez peu connue. Pour ceux qui ne connaitraient que de nom ce framework, en voici une petite description.</p>
<p style="text-align: justify;">WebObjects est un framework initialement développé en Objective C par la société NeXT de Steve Jobs qui sera ensuite rachetée par Apple. Il est constitué d&#8217;une couche basse d&#8217;abstraction de la base de donnée appelée EOModel, d&#8217;une architecture de gestion de cache et de persistance et d&#8217;un moteur de template. WebObjects passera progressivement d&#8217;Objective C à Java vers l&#8217;an 2000. Bien que différents par de nombreux points, il est comparable aux technologies J2EE.</p>
<p style="text-align: justify;">Je tiens à signaler que mes commentaires sont faits sur la version 5.3 de WebObjects et je ne sais pas si certaines choses n&#8217;ont pas été corrigées en version 5.4.</p>
<p style="text-align: justify;"><span id="more-141"></span></p>
<h2 style="text-align: justify;">Coût de formation et cadre de développement</h2>
<p style="text-align: justify;">Soyons assez clair, le coup d&#8217;entrée de WebObjects est assez élevé. Le framework a été pensé pour réaliser des projets d&#8217;entreprise et vous ne pourrez pas sortir une page de démonstration en moins d&#8217;une heure comme le proposent des plateformes de développement comme Google App Engine. En revanche, une fois formé à l&#8217;architecture logiciel vous disposerez d&#8217;un cadre de programmation assez stricte dans la forme, mais souple dans les possibilités. Comprenez que vous pourrez faire à peu près n&#8217;importe quoi, mais pas n&#8217;importe comment. À mon sens, c&#8217;est un avantage puisque vous êtes à peu près certain que les personnes utilisant WebObjects vont travailler relativement proprement, contrairement à d&#8217;autres technologies où il est possible de faire tout et n&#8217;importe quoi, surtout n&#8217;importe quoi.</p>
<h2 style="text-align: justify;">Tenue de charge et modularité</h2>
<p style="text-align: justify;">WebObjects est designé pour être capable de gérer de grandes charges, aussi les données sont toujours chargées progressivement au moment où elles sont réellement nécessaires. Au niveau du fonctionnement lui-même, le framework est construit autour de dictionnaires de données. Par exemple pour les attributs d&#8217;un objet, les getters vont simplement chercher la valeur dans un dictionnaire à partir du nom de l&#8217;attribut. C&#8217;est de ce mécanisme que vient toute la souplesse de WebObjects puisqu&#8217;il est possible de faire évoluer dynamiquement le modèle pendant l&#8217;exécution. Même si les occasions d&#8217;utiliser une telle possibilité sont assez rares, elles sont quasiment impossible à réaliser autrement.</p>
<h2 style="text-align: justify;">Mélange d&#8217;API</h2>
<p style="text-align: justify;">Comme je l&#8217;ai dis dans mon introduction, WebObjects reposait initialement sur le langage Objective C, mais a été migré vers le langage Java depuis plusieurs années maintenant. Cependant les choix qui ont été faits me laissent quelque peu sceptiques. En effet afin que les personnes ayant travaillé avec l&#8217;Objective C ne perdent pas leurs connaissances acquises, les classes de  base de NeXT ont été portées en Java. Un ingénieur d&#8217;expérience sur l&#8217;API Java sera donc un peu perdu face aux NSArray, NSMutableArray et autres NSDictionnary. Pire encore, ces classes implémentent des interfaces de l&#8217;API Java, mais n&#8217;implémentent pas les méthodes qu&#8217;elles apportent, se contentant de propager une exception ! Assez perturbant donc et pouvant se révéler source de surprises.</p>
<p style="text-align: justify;"><strong>[MISE A JOUR]</strong><br />
On me signale que le problème des exceptions sur les méthodes ont été corrigé en version 5.4 sauf dans les cas où il y avait une raison. Je m&#8217;explique, en WebObjects il éxiste deux types de tableaux, les NSArray en lecture seul et les NSMutableArray en lecture écriture. Bien évidemment la méthode ADD n&#8217;a aucun sens dans un NSArray qui ne supporte que des GET. En revanche la méthode ADD ne NSMutableArray ne demande plus d&#8217;utiliser à la place la méthode addObject.<br />
Il reste toutefois que quelqu&#8217;un ayant utilisé un certain temps les classes de la JRE de base, ArrayList et autres, aura besoin d&#8217;un petit temps d&#8217;adaptation.</p>
<h2 style="text-align: justify;">Trouver des personnes</h2>
<p style="text-align: justify;">Abordons finalement un point assez critique: les ressources. Il sera difficile à la plupart des personnes ayant des années d&#8217;expérience sur des plateformes J2EE de se former à WebObjects en raison des différences conceptuelles et à l&#8217;API s&#8217;écartant de celle de Java. Le coup de formation est assez élevé et l&#8217;intégration à des processus d&#8217;entreprises comme Maven, bien qu&#8217;existant, peut s&#8217;avérer coûteuse en temps.<br />
En comparaison d&#8217;autres framework, WebObjects souffre d&#8217;une très faible documentation. Le site d&#8217;Apple propose une documentation technique, mais très peu d&#8217;autres sites proposent des exemples ou des explications différentes de la version officielle. On se retrouve donc facilement le bec dans l&#8217;eau devant un problème dont la solution n&#8217;est pas documentée sur le site d&#8217;Apple. Une solution existe: la mailing list qui est fréquentée par des experts de la technologie, mais on ne peut évidemment pas abuser et questionner ces personnes en permanence.<br />
Il est très profitable d&#8217;avoir au sein de son entreprise une personne expérimentée en WebObjects donc, cependant il s&#8217;agit d&#8217;une ressource rare. Lors d&#8217;un recensement récent, 800 développeurs ont été dénombrés dans le Monde, dont 40 en France. Autant dire qu&#8217;il est difficile de se procurer un &laquo;&nbsp;expert&nbsp;&raquo; dans le domaine, sachant que connaissant la technologie, je ne me considère pas du tout comme un expert, mais un simple utilisateur.</p>
<p style="text-align: justify;">
<p style="text-align: justify;">En conclusion, voici un petit récapitulatif de ce billet en avantages/inconvénients.</p>
<h2 style="text-align: justify;">Avantages</h2>
<ul>
<li>Framework avec architecture</li>
<li>Développement propre</li>
<li>Flexible</li>
<li>Pensé pour tenir la charge</li>
</ul>
<h2>Inconvénients</h2>
<ul>
<li>Peu de ressources et très peu d&#8217;experts</li>
<li>Mélange d&#8217;API Java/Objective C</li>
<li>Manque de documentation tierce</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.pierreschambacher.com/blog/experience-dun-ingenieur-sur-webobjects/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
