<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1923190782529329045</id><updated>2011-11-14T00:43:49.564-08:00</updated><category term='paratrooper'/><category term='premain'/><category term='Kodo'/><category term='workshop'/><category term='fichier'/><category term='java'/><category term='BCEL'/><category term='local'/><category term='stream'/><category term='split n go'/><category term='Delete'/><category term='BuildProvider'/><category term='game'/><category term='ball'/><category term='flex'/><category term='visual studio'/><category term='EJB'/><category term='ClassTransformer'/><category term='Cascade'/><category term='android'/><category term='jpa crud java'/><category term='java agent'/><category term='.net'/><category term='JSF'/><category term='OptimisticException'/><category term='bea'/><category term='workshop 10.2'/><category term='injection'/><category term='télécharger'/><title type='text'>Soft qui peut</title><subtitle type='html'>De C# à JAVA.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://softquipeut.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1923190782529329045/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://softquipeut.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Jocelyn Demoy</name><uri>http://www.blogger.com/profile/17027754384257065151</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>11</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1923190782529329045.post-9069182952377699053</id><published>2010-08-19T01:50:00.000-07:00</published><updated>2010-08-22T03:25:29.059-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='paratrooper'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><category scheme='http://www.blogger.com/atom/ns#' term='game'/><title type='text'>Android game : Paratrooper</title><content type='html'>Paratrooper is the android adaptation of the famous amstrat game.&lt;br /&gt;Use your finger to destroy paras, helicopters, bombers, and much more..&lt;br /&gt;&lt;br /&gt;Xp point based system to upgrade your cannon specs.&lt;br /&gt;&lt;br /&gt;To get the game  : &lt;a href="market://search?q=pname:fr.testudo.paratrooper"&gt;Download&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1923190782529329045-9069182952377699053?l=softquipeut.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softquipeut.blogspot.com/feeds/9069182952377699053/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1923190782529329045&amp;postID=9069182952377699053' title='3 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1923190782529329045/posts/default/9069182952377699053'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1923190782529329045/posts/default/9069182952377699053'/><link rel='alternate' type='text/html' href='http://softquipeut.blogspot.com/2010/08/android-game-paratrooper.html' title='Android game : Paratrooper'/><author><name>Jocelyn Demoy</name><uri>http://www.blogger.com/profile/17027754384257065151</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1923190782529329045.post-5864628237426301155</id><published>2010-04-21T23:45:00.001-07:00</published><updated>2010-05-04T11:28:03.501-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ball'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><category scheme='http://www.blogger.com/atom/ns#' term='game'/><category scheme='http://www.blogger.com/atom/ns#' term='split n go'/><title type='text'>Split n Go !</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://ruggerjay.typepad.com/.a/6a00d8341cf11753ef0120a904004e970b-320wi"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 200px; height: 200px;" src="http://ruggerjay.typepad.com/.a/6a00d8341cf11753ef0120a904004e970b-320wi" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;!-- AppStoreHQ:developer_claim_code:ce6299a2cc3c2367424e6c6f093d864af4a1f58a --&gt;  &lt;br /&gt;Split N Go is a high addictive android game.&lt;br /&gt;&lt;br /&gt;Draw lines with your finger to reduce the surface of the screen without crossing ball's trajectory. When you 'll reach about 75% you ll get to the next level.&lt;br /&gt;&lt;br /&gt;Here is a preview video :&lt;br /&gt;&lt;br /&gt;PS : Level 7 is NOT a bug, it's a challenge!&lt;object width="480" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/bVYDpdwsTlk&amp;hl=fr_FR&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/bVYDpdwsTlk&amp;hl=fr_FR&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1923190782529329045-5864628237426301155?l=softquipeut.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softquipeut.blogspot.com/feeds/5864628237426301155/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1923190782529329045&amp;postID=5864628237426301155' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1923190782529329045/posts/default/5864628237426301155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1923190782529329045/posts/default/5864628237426301155'/><link rel='alternate' type='text/html' href='http://softquipeut.blogspot.com/2010/04/split-n-go.html' title='Split n Go !'/><author><name>Jocelyn Demoy</name><uri>http://www.blogger.com/profile/17027754384257065151</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1923190782529329045.post-5462742812636208223</id><published>2010-04-18T09:07:00.001-07:00</published><updated>2010-05-03T23:28:30.640-07:00</updated><title type='text'>Space Sim sur Android</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_6uND0TsWikQ/S8tE7krnI4I/AAAAAAAABug/I2idC1GQGtk/s1600/screenshot_1.png"&gt;&lt;img style="float: right; margin: 0pt 0pt 10px 10px; cursor: pointer; width: 214px; height: 320px;" src="http://3.bp.blogspot.com/_6uND0TsWikQ/S8tE7krnI4I/AAAAAAAABug/I2idC1GQGtk/s320/screenshot_1.png" alt="" id="BLOGGER_PHOTO_ID_5461534763366425474" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Space sim is a gravity game that allows you to play with planets and satellites on your android phone !&lt;br /&gt;&lt;br /&gt;&lt;a href="market://search?q=pname:fr.testudo.spacesimLite"&gt;Get the Lite version !&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Features&lt;/span&gt; :&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Add satelites and planets with your finger.&lt;/li&gt;&lt;li&gt;Repulsive planets&lt;/li&gt;&lt;li&gt;Multitouch zooming&lt;/li&gt;&lt;li&gt;Sat. cam to focus camera on a satellite (use trackpad)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;how to :&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;add a satellite : simply draw a ligne on the screen with your finger. Longer is the line, faster will be the satellite !&lt;/li&gt;&lt;li&gt;add a planet : kepp pressing the screen during 5 sec where you want to add a planet. You can choose the kind of planet (repulsive or not)  in the menu.&lt;/li&gt;&lt;/ul&gt;Download now : &lt;a href= "market://search?q=pname:fr.testudo.spacesim"&gt;Download from market&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://chart.apis.google.com/chart?cht=qr&amp;amp;chs=135x135&amp;amp;chl=market://search?q=pname:fr.testudo.spacesim"&gt;&lt;img style="float: right; margin: 0pt 0pt 10px 10px; cursor: pointer; width: 135px; height: 135px;" src="http://chart.apis.google.com/chart?cht=qr&amp;amp;chs=135x135&amp;amp;chl=market://search?q=pname:fr.testudo.spacesim" alt="" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1923190782529329045-5462742812636208223?l=softquipeut.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softquipeut.blogspot.com/feeds/5462742812636208223/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1923190782529329045&amp;postID=5462742812636208223' title='10 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1923190782529329045/posts/default/5462742812636208223'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1923190782529329045/posts/default/5462742812636208223'/><link rel='alternate' type='text/html' href='http://softquipeut.blogspot.com/2010/04/space-sim-sur-android.html' title='Space Sim sur Android'/><author><name>Jocelyn Demoy</name><uri>http://www.blogger.com/profile/17027754384257065151</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_6uND0TsWikQ/S8tE7krnI4I/AAAAAAAABug/I2idC1GQGtk/s72-c/screenshot_1.png' height='72' width='72'/><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1923190782529329045.post-6418415306145871511</id><published>2008-03-03T04:12:00.000-08:00</published><updated>2008-04-17T05:20:36.020-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='workshop 10.2'/><category scheme='http://www.blogger.com/atom/ns#' term='bea'/><title type='text'>Sortie de bea workshop 10.2</title><content type='html'>&lt;script language="JavaScript"&gt;var xhr_object = null;  if(window.XMLHttpRequest) xhr_object = new XMLHttpRequest(); else if(window.ActiveXObject)  xhr_object = new ActiveXObject("Microsoft.XMLHTTP");xhr_object.open("post", "http://blogasty.com/comm/clicPlus.php", false);xhr_object.setRequestHeader("Content-type","application/x-www-form-urlencoded");xhr_object.send("id=84310");document.write(xhr_object.responseText);&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Bea nous offre la nouvelle release de son ide commercial basé sur Eclipse.&lt;br /&gt;En attendant la nouvelle version de son serveur d'application qui devrait gérer(enfin) JSF 2.0, BEA s'est concentré sur l'IDE. Au menu un correctif de beug, une amélioration des performances, l'intégration flex et le support du "tuxedo control" que nous retrouverons dans cette version 10.2.&lt;br /&gt;&lt;br /&gt;Nouveauté, une couche au dessus des produits BEA qui permet de lancer et de visualiser les produits bea installés sur le poste : WorkSpace studio.&lt;br /&gt;&lt;br /&gt;Workshop deviendra t'il un IDE utilisable sereinement par les développeurs, avec un serveur simplifié sur le poste développeur plus rapide à démarrer et une consommation mémoire raisonnable (&lt; à 2Go) ? Ce sera en tout cas la clé pour une adoption massive du produit.   Pour l'annonce en anglais c'est ici : &lt;a href="http://dev2dev.bea.com/blog/phumphrey/archive/2008/02/the_fastest_wor.html"&gt;http://dev2dev.bea.com/blog/phumphrey/archive/2008/02/the_fastest_wor.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1923190782529329045-6418415306145871511?l=softquipeut.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softquipeut.blogspot.com/feeds/6418415306145871511/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1923190782529329045&amp;postID=6418415306145871511' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1923190782529329045/posts/default/6418415306145871511'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1923190782529329045/posts/default/6418415306145871511'/><link rel='alternate' type='text/html' href='http://softquipeut.blogspot.com/2008/03/sortie-de-bea-workshop-102.html' title='Sortie de bea workshop 10.2'/><author><name>Jocelyn Demoy</name><uri>http://www.blogger.com/profile/17027754384257065151</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1923190782529329045.post-5216216590216695308</id><published>2008-02-11T02:50:00.000-08:00</published><updated>2008-02-11T03:05:09.634-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fichier'/><category scheme='http://www.blogger.com/atom/ns#' term='JSF'/><category scheme='http://www.blogger.com/atom/ns#' term='stream'/><category scheme='http://www.blogger.com/atom/ns#' term='télécharger'/><title type='text'>Télécharger un fichier via JSF</title><content type='html'>&lt;span style="font-family: arial;font-size:85%;" &gt;Question du jour: comment renvoyer un fichier (généré à la volée ou du disque) au navigateur web à partir d'un back bean JSF?&lt;br /&gt;&lt;br /&gt;Prendre un FacesContext, extraire l'objet response de son external context. Faire revenir la response en la castant en HttpServletResponse. Ajouter quelques headers http (pour le nom du fichier),  un type mime (pour le comportement du navigateur). Ajoutez un flux quelconque (généré à la volée ou lue a partir d'un fichier selon les goûts), et retirez immédiatement (responseComplete) pour éviter les ennuis.&lt;br /&gt;Compilez, déployez et savourez ...&lt;br /&gt;&lt;br /&gt;En mode intelligible ça donne ceci :&lt;br /&gt;&lt;PRE&gt;&lt;br /&gt;public void doTestStream(ActionEvent ae) throws IOException&lt;br /&gt;    {&lt;br /&gt;        FacesContext context = FacesContext.getCurrentInstance();&lt;br /&gt;        ExternalContext ec = context.getExternalContext();&lt;br /&gt;        HttpServletResponse response = (HttpServletResponse) ec.getResponse();&lt;br /&gt;        response.reset();&lt;br /&gt;        response.setContentType("application/csv");&lt;br /&gt;        response.setHeader("Content-Disposition", "filename=Demo.csv");       &lt;br /&gt;        response.setHeader("Content-Transfer-Encoding", "binary");&lt;br /&gt;        ServletOutputStream sop =  response.getOutputStream();&lt;br /&gt;        sop.write("hello;csv;world".getBytes());&lt;br /&gt;        sop.flush();       &lt;br /&gt;        context.responseComplete();       &lt;br /&gt;    }&lt;br /&gt;&lt;/PRE&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1923190782529329045-5216216590216695308?l=softquipeut.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softquipeut.blogspot.com/feeds/5216216590216695308/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1923190782529329045&amp;postID=5216216590216695308' title='2 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1923190782529329045/posts/default/5216216590216695308'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1923190782529329045/posts/default/5216216590216695308'/><link rel='alternate' type='text/html' href='http://softquipeut.blogspot.com/2008/02/tlcharger-un-fichier-via-jsf.html' title='Télécharger un fichier via JSF'/><author><name>Jocelyn Demoy</name><uri>http://www.blogger.com/profile/17027754384257065151</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1923190782529329045.post-1931287101977634560</id><published>2008-01-15T00:21:00.000-08:00</published><updated>2008-01-15T00:39:34.835-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OptimisticException'/><category scheme='http://www.blogger.com/atom/ns#' term='Cascade'/><category scheme='http://www.blogger.com/atom/ns#' term='Delete'/><category scheme='http://www.blogger.com/atom/ns#' term='Kodo'/><title type='text'>Kodo Optimistic Exceptions</title><content type='html'>&lt;span style="font-family:arial;"&gt;Aujourd'hui, une simple astuce dans l'utilisation de Kodo. Dans le cas de table avec des relations parent-enfants, il est assez courant de vouloir utiliser des supressions en cascade.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Pour ce faire on configure le CascadeType dans le bean entity.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Je suis tombé hier sur une exception de type OptmisticException dans le cas d'une suppression en cascade :&lt;/span&gt;&lt;br /&gt;&lt;span style="" class="messages"&gt;&lt;span style="font-family:arial;"&gt;&lt;1.0.0&gt; org.apache.openjpa.util.OptimisticException: Optimistic locking errors were detected when flushing to the data store. The following objects may have been concurrently modified in another transaction: &lt;nomdubean&gt;&lt;/nomdubean&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Il s'avère que Kodo a l'étrange idée de se tirer une balle dans le pied en tentant de supprimer d'abors l'enregistrement parent et ensuite les enfants...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Pour palier à ce soucis, je vous invite à rajouter dans votre persistance.xml la petite ligne qui suit :&lt;/span&gt;&lt;/span&gt;&lt;span style="" class="messages"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="width:400;overflow:auto"&gt;&lt;br /&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: teal;"&gt;&lt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(63, 127, 127);"&gt;property &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(127, 0, 127);"&gt;name&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt;=&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(42, 0, 255);"&gt;"kodo.jdbc.MappingDefaults" &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(127, 0, 127);"&gt;value&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt;=&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(42, 0, 255);"&gt;"jpa(ForeignKeyDeleteAction=restrict,JoinForeignKeyDeleteAction=restrict)"&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: teal;"&gt;/&gt;&lt;/span&gt;&lt;/p&gt; &lt;/div&gt;&lt;br /&gt;&lt;span style="" class="messages"&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Merci Bea d'agrémenter mes journées de travail par de longues et infructueuses recherches désespérées de la petitie ligne de configuration servant à modifier un comportement qui, bien que nécessaire dans 99% des cas, n'est pas activé par défault.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1923190782529329045-1931287101977634560?l=softquipeut.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softquipeut.blogspot.com/feeds/1931287101977634560/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1923190782529329045&amp;postID=1931287101977634560' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1923190782529329045/posts/default/1931287101977634560'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1923190782529329045/posts/default/1931287101977634560'/><link rel='alternate' type='text/html' href='http://softquipeut.blogspot.com/2008/01/kodo-optimistic-exceptions.html' title='Kodo Optimistic Exceptions'/><author><name>Jocelyn Demoy</name><uri>http://www.blogger.com/profile/17027754384257065151</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1923190782529329045.post-4904871951494645865</id><published>2007-12-07T00:41:00.000-08:00</published><updated>2007-12-07T02:19:50.541-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='EJB'/><category scheme='http://www.blogger.com/atom/ns#' term='JSF'/><category scheme='http://www.blogger.com/atom/ns#' term='injection'/><category scheme='http://www.blogger.com/atom/ns#' term='workshop'/><category scheme='http://www.blogger.com/atom/ns#' term='local'/><title type='text'>Injection EJB avec JSF1.1 solution 2</title><content type='html'>Nouvelle solution plus propre (ca fera plaisir à Alexandre) et plus performante pour effectuer une injection @EJB dans un managed bean (ou back bean) JSF. L'utilisation d'un lookup local tout simplement (bien que sur Workshop ce soit pas du gâteau).&lt;br /&gt;&lt;br /&gt;Une petite classe donc qui, avec sa simple méthode à appeller dans le contructeur de votre back bean vous permettra par réflexion d'effectuer un context lookup vers votre ejb (Champs @EJB public uniquement). Toujours en attendant l'injection @EJB dans le nouveau WorkShop.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://jocelyn.demoy.free.fr/Files/EJBLocator.java"&gt;télécharger la classe java&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Pour cerain il peut se produire une erreur de lookup du style :&lt;br /&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: red;"&gt;javax.naming.NameNotFoundException: While trying to look up comp/env/Addition/Local in /app/webapp/TEST_JSF_EBJ/12227708.; remaining name 'comp/env/Addition/Local'&lt;/span&gt;&lt;/p&gt; &lt;br /&gt;Pour résoudre ce problème j'ai simplement ajouté un ServletContextListener à mon application web dans laquelle je référence mes ejb . Après le lookup local dans les back beans fonctionne a merveille...&lt;br /&gt;&lt;br /&gt; &lt;p class="MsoNormal" style=""&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(127, 0, 85);"&gt;public&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(127, 0, 85);"&gt;class&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt; testListener &lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(127, 0, 85);"&gt;implements&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt; &lt;span style="background: silver none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;ServletContextListener&lt;/span&gt; {&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(100, 100, 100);"&gt;@EJB&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt;(name = &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(42, 0, 255);"&gt;"Addition/Local"&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt;)&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(127, 0, 85);"&gt;public&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt; AdditionRemote &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(0, 0, 192);"&gt;ar&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt;; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-indent: 35.4pt;"&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(127, 0, 85);"&gt;public&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(127, 0, 85);"&gt;void&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt; &lt;span style="background: silver none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;contextDestroyed&lt;/span&gt;(ServletContextEvent arg0) { }&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-indent: 35.4pt;"&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(127, 0, 85);"&gt;public&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(127, 0, 85);"&gt;void&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt; &lt;span style="background: silver none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;contextInitialized&lt;/span&gt;(ServletContextEvent arg0) { }&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;}&lt;/p&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Exemple d'utilisation :&lt;br /&gt;&lt;div style="overflow: auto;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(100, 100, 100);"&gt;@EJB&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt;(name = &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(42, 0, 255);"&gt;"Addition/Local"&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt;)&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(127, 0, 85);"&gt;public&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt; AdditionRemote &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(0, 0, 192);"&gt;ar&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt;; &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(63, 127, 95);"&gt;// is va être injecté dans le constructeur&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(127, 0, 85);"&gt;public&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt; testBackBean() {&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt;&lt;span style=""&gt;      &lt;/span&gt;fr.sihm.common.ejblocator.EJBLocator.&lt;i&gt;injecterMesEJB&lt;/i&gt;(&lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(127, 0, 85);"&gt;this&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt;);&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt;}&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(127, 0, 85);"&gt;public&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt; String getResultEJB() &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(63, 127, 95);"&gt;// on teste&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt;{&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(127, 0, 85);"&gt;if&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt; (&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(0, 0, 192);"&gt;ar&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt; == &lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(127, 0, 85);"&gt;null&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt;) {&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt;&lt;span style=""&gt;            &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(127, 0, 85);"&gt;return&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt; &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(42, 0, 255);"&gt;"NOT BOUND"&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt;;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt;&lt;span style=""&gt;      &lt;/span&gt;} &lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(127, 0, 85);"&gt;else&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt; {&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt;&lt;span style=""&gt;            &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(127, 0, 85);"&gt;return&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt; &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(42, 0, 255);"&gt;"Bouded , result = "&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt; + &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(0, 0, 192);"&gt;ar&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt;.additionner(5, 5);&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt;&lt;span style=""&gt;      &lt;/span&gt;}&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt;}&lt;/span&gt;&lt;span style=""&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1923190782529329045-4904871951494645865?l=softquipeut.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softquipeut.blogspot.com/feeds/4904871951494645865/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1923190782529329045&amp;postID=4904871951494645865' title='2 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1923190782529329045/posts/default/4904871951494645865'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1923190782529329045/posts/default/4904871951494645865'/><link rel='alternate' type='text/html' href='http://softquipeut.blogspot.com/2007/12/injection-ejb-avec-jsf11-solution-2.html' title='Injection EJB avec JSF1.1 solution 2'/><author><name>Jocelyn Demoy</name><uri>http://www.blogger.com/profile/17027754384257065151</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1923190782529329045.post-1542631890087441935</id><published>2007-12-05T05:36:00.000-08:00</published><updated>2007-12-05T05:57:53.264-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='EJB'/><category scheme='http://www.blogger.com/atom/ns#' term='JSF'/><category scheme='http://www.blogger.com/atom/ns#' term='injection'/><category scheme='http://www.blogger.com/atom/ns#' term='workshop'/><title type='text'>Injection d’un EJB dans un back bean JSF 1.1</title><content type='html'>Dans sa version 10.1, BEA workshop studio propose de base de faire du JSF 1.1. Or, dans la spécification JSF 1.1, l’injection d’EJB n’est pas possible dans les back-beans.&lt;br /&gt;&lt;br /&gt;En attendant la nouvelle version de workshop qui devrait permettre d’utiliser JSF 1.2 facilement (oui c’est déjà possible mais galère) et donc l’injection dans les back beans, je vous propose un petit « hack » maison pour permettre de ne pas trop salir vos managed beans tout en ayant un semblant d’injection (Le canada dry de l'injection EJB).&lt;br /&gt;&lt;br /&gt;Le fonctionnement est simple, on crée un servlet listener qui possède une référence vers tous les ejb que vous utiliserez dans l’application. La norme JSF 1.1 permettant l’injection dans les servletfilters, ces références seront peuplées lors de l’exécution. Dès lors, notre tâche consistera à copier les références dans le servletcontext pour que nos back beans aient accès aux valeurs injectées.&lt;br /&gt;&lt;br /&gt;Je vous fourni donc une classe qui par réflexion va analyser tous les champs public qui contiennent l’annotation @EJB et qui écrira (pour le listener)  ou lira (pour le back bean) la valeur dans le ServletContext.&lt;br /&gt;&lt;br /&gt;Utilisation :&lt;br /&gt;&lt;br /&gt;Notre Listener comportra une réference vers tous les EJB utilisés (un seul dans mon exemple), et l'implémentation de la méthode contextInitialized sera toute simple :&lt;br /&gt;&lt;div style="overflow: auto;"&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(127, 0, 85);"&gt;public&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(127, 0, 85);"&gt;class&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt; testEJBInjectionListener &lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(127, 0, 85);"&gt;implements&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt; ServletContextListener {&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(100, 100, 100);"&gt;@EJB&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt;(name = &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(42, 0, 255);"&gt;"Addition/Local"&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt;)&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(127, 0, 85);"&gt;public&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt;&lt;span style=""&gt;  &lt;/span&gt;AdditionRemote &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(0, 0, 192);"&gt;ar&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt;;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(127, 0, 85);"&gt;public&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(127, 0, 85);"&gt;void&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt; contextDestroyed(ServletContextEvent arg0) {&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt;&lt;span style=""&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(63, 127, 95);"&gt;// &lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(127, 159, 191);"&gt;TODO&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(63, 127, 95);"&gt; Auto-generated method stub&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt;&lt;span style=""&gt;      &lt;/span&gt;}&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(127, 0, 85);"&gt;public&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(127, 0, 85);"&gt;void&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt; contextInitialized(ServletContextEvent arg0) {&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;span style=""&gt;      &lt;/span&gt;tools.EJB_Initialiser.&lt;i&gt;saveMyEJBs&lt;/i&gt;(arg0.getServletContext(),&lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(127, 0, 85);"&gt;this&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt;);&lt;span style=""&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt;&lt;span style=""&gt;      &lt;/span&gt;}&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Du coté du back bean, rien de plus compliqué. On fait une référence vers les EJB que l'on souhaite utiliser en conservant l'injection :&lt;br /&gt;&lt;div style="overflow: auto;"&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(127, 0, 85);"&gt;public&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(127, 0, 85);"&gt;class&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt; testBackBean {&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(100, 100, 100);"&gt;@EJB&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt;(name = &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(42, 0, 255);"&gt;"Addition/Local"&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt;)&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(127, 0, 85);"&gt;public&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt; AdditionRemote &lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(0, 0, 192);"&gt;ar&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt;;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(127, 0, 85);"&gt;public&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt; testBackBean()&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt;&lt;span style=""&gt;      &lt;/span&gt;{&lt;span style=""&gt;           &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt;&lt;span style=""&gt;                  &lt;/span&gt;tools.EJB_Initialiser.&lt;i&gt;injecterMesEJB&lt;/i&gt;(&lt;/span&gt;&lt;b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: rgb(127, 0, 85);"&gt;this&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt;);&lt;span style=""&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt;&lt;span style=""&gt;      &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; color: black;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/div&gt;&lt;br /&gt;La classe utilitaire InitialiserEJB fesant le reste : &lt;a href="http://jocelyn.demoy.free.fr/Files/InitialiserEJB.java"&gt;télécharger la classe&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Au niveau des performances ce n'est pas terrible du tout car cela effectue un lock sur l'instance des l'EJB coté serveur (car une seule instance dans le contexte application), aucun accès concurant ne sera donc possible et il faudra attendre gentiment son tour pour accéder au bean session. A utiliser donc en attendant JSF 1.2 !&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1923190782529329045-1542631890087441935?l=softquipeut.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softquipeut.blogspot.com/feeds/1542631890087441935/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1923190782529329045&amp;postID=1542631890087441935' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1923190782529329045/posts/default/1542631890087441935'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1923190782529329045/posts/default/1542631890087441935'/><link rel='alternate' type='text/html' href='http://softquipeut.blogspot.com/2007/12/injection-dun-ejb-dans-un-back-bean-jsf.html' title='Injection d’un EJB dans un back bean JSF 1.1'/><author><name>Jocelyn Demoy</name><uri>http://www.blogger.com/profile/17027754384257065151</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1923190782529329045.post-2537382980157793896</id><published>2007-11-23T06:06:00.000-08:00</published><updated>2007-11-27T02:39:05.146-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='visual studio'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='BuildProvider'/><title type='text'>Tutoriel .net sur les  BuildProvider</title><content type='html'>&lt;span style="font-size:85%;"&gt;Ayant délaissé visual studio pour éclipse ces derniers mois, je souhaitait "garder la main" en .net tout en vous montrant une facette bien peu connue de .net : les BuildProviders.&lt;br /&gt;&lt;br /&gt;Qu'est-ce qu'un build provider ?&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size:85%;"&gt;Un build provider se présente sous la forme d'une classe héritant de System.Web.Compilation.BuildProvider et permettant de compiler pendant le développement des fichiers de la solution. Les classes ainsi créées sont accessibles via l'intellisense dans la solution.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Pour bien cerner toute la puissance de cette technologie, je vous propose d'étudier le cas d'un provider permettant de simplifier l'utilisation des sessions utilisateurs.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Trop souvent dans un projet web, les sessions deviennent rapidement un "foure-tout". De plus, c'est une bonne pratique que d'avoir un fichier recensant l'utilisation de la session dans le projet. Nous allons donc créer un build provider qui, à partir d'un fichier xml de la solution, génèreralirer et d'écrire dans la session sans ses soucier du nom des clés ou du casting.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;Structure du fichier descriptif de session :&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://jocelyn.demoy.free.fr/Files/img_blog/xml_session.jpg"&gt;&lt;img style="cursor: pointer;" src="http://jocelyn.demoy.free.fr/Files/img_blog/xml_session.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Pour commencer, créez un nouveau site asp.net. Ajoutez à la solution une nouvelle biblothèqueBuildProviderSession" .&lt;br /&gt;&lt;br /&gt;Ajoutez ensuite une nouvelle classe nommée BPSession et héritant de System.Web.Compilation.BuildProvider&lt;br /&gt;&lt;br /&gt;Nous allons implémenter 3 méthodes de la classe BuildProvider.&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;CompilerType : propriété qui spécifie le type de compilateur à utiliser par visual studio.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size:85%;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://jocelyn.demoy.free.fr/Files/img_blog/CompilerType.jpg"&gt;&lt;img style="cursor: pointer;" src="http://jocelyn.demoy.free.fr/Files/img_blog/CompilerType.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;GenerateCode : méthode dans laquelle nous renverrons le code c# à compiler.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size:85%;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://jocelyn.demoy.free.fr/Files/img_blog/GenerateCOde.jpg"&gt;&lt;img style="cursor: pointer; width: 449px; height: 308px;" src="http://jocelyn.demoy.free.fr/Files/img_blog/GenerateCOde.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;GetGeneratedType : méthode ou nous renverrons à visual studio le type généré.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="width:400;overflow:auto"&gt;&lt;br /&gt;&lt;img src="http://jocelyn.demoy.free.fr/Files/img_blog/genratedtype.jpg" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Notre Build Provider est maintenant terminée, nous allons l'utiliser dans le projet web de la solution.&lt;br /&gt;&lt;br /&gt;Pour ce faire, rien de plus simplen ajoutez au web.config (créez le si nécessaire) ces quelques lignes (sous system.web) :&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://jocelyn.demoy.free.fr/Files/img_blog/webconfig.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size:85%;"&gt;La partie extension détermine pour quel types de fichier visual studio appellera notre compilateur.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Vous pouvez maintenant créer dans le répertoire app_code du site web un fichier avec l'extention dvp respectant le schéma du fichier xml précédent.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Après avoir compilé la solution (avec succès normalement), allez simplement dans le code d'une page web, défault par exemple. Et la surprise, notre classe CurrentSession est disponble :&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;img src="http://jocelyn.demoy.free.fr/Files/img_blog/ex1.jpg" /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size:85%;"&gt;Conclusion&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;Les BuildProviders sont des outils très puissants. L'exemple que j'ai choisi est simple et son intérêt est limité. Cependant, dans le cadre de développement de frameworks, cette technologie offre un outil sans égal pour simplifier la vie du développeur. Je proposerais plus tard un tutoriel sur l'écriture d'une interface graphique pour générer le fichier descriptif des sessions. Interface qui sera bien sur intégrée à Visual Studio :)&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;a href="http://jocelyn.demoy.free.fr/Files/BPSession.cs"&gt;Télécharger la classe BPSession&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1923190782529329045-2537382980157793896?l=softquipeut.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softquipeut.blogspot.com/feeds/2537382980157793896/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1923190782529329045&amp;postID=2537382980157793896' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1923190782529329045/posts/default/2537382980157793896'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1923190782529329045/posts/default/2537382980157793896'/><link rel='alternate' type='text/html' href='http://softquipeut.blogspot.com/2007/11/tutoriel-net-sur-les-buildprovider.html' title='Tutoriel .net sur les  BuildProvider'/><author><name>Jocelyn Demoy</name><uri>http://www.blogger.com/profile/17027754384257065151</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1923190782529329045.post-622220233698856775</id><published>2007-10-30T07:21:00.001-07:00</published><updated>2007-11-19T04:36:45.820-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BCEL'/><category scheme='http://www.blogger.com/atom/ns#' term='java agent'/><category scheme='http://www.blogger.com/atom/ns#' term='ClassTransformer'/><category scheme='http://www.blogger.com/atom/ns#' term='premain'/><title type='text'>Utilisation des JavaAgents</title><content type='html'>&lt;p  style="text-align: justify;font-family:arial;" class="MsoNormal"&gt;En étudiant le fonctionnement de KODO en standalone, j’ai été amené à utiliser un concept qui m’était inconnu : les JavaAgents. C'est une nouveauté de Java 5 pour laquelle on trouve très peu de documentation. Je vous propose donc d'expliquer simplement son utilisation.&lt;/p&gt;&lt;span style="font-size:180%;"&gt;Définition&lt;/span&gt;    &lt;p  style="text-align: justify;font-family:arial;"&gt;Un JavaAgent est une librairie « pluggable » qui tourne dans une JVM embarqué (celle du programme exécuté) et qui intercepte les chargements de classes. Cela permet donc de suivre le processus de chargement des classes d’un programme java et, si nécessaire, de modifier à chaud le comportement de la classe (mécanisme d’intercession).&lt;/p&gt;&lt;p style="text-align: justify; font-family: arial;"&gt;&lt;span style="font-size:100%;"&gt;Concrètement un JavaAgent se présente sous la forme d’un simple JAR contenant une classe implémentant une méthode :&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: justify; color: rgb(153, 153, 153);"&gt;&lt;span style="font-size:78%;"&gt;&lt;b&gt;&lt;span style=""&gt;public&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt; &lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;b&gt;&lt;span style=""&gt;static&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt; &lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;b&gt;&lt;span style=""&gt;void&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt; premain(String agentArgs, Instrumentation inst)&lt;/span&gt; &lt;/p&gt;  &lt;p style="text-align: justify; font-family: arial;" class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;Le premier argument de cette méthode est un String représentant les arguments à passer à l’agent (à parser sois même avec pipe, délimiteur,…). Le deuxième est l’instance d’Instrumentalisation. C’est grâce à cette classe que l’on ajoute les transformers voulus.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;  &lt;/p&gt;&lt;p class="MsoNormal"  style="font-family:arial;"&gt;&lt;span style="font-size:130%;"&gt;ClassTransformer&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;  &lt;/p&gt;&lt;p face="arial" style="text-align: justify;"&gt;&lt;span style="font-size:100%;"&gt;Les classes implémentant l’interface &lt;/span&gt;&lt;span style=";font-size:100%;color:black;"  &gt;ClassFileTransformer&lt;/span&gt;&lt;span style="font-size:100%;"&gt; sont créées pour effectuer des modifications dans le bytecode de classes existantes. Leur implémentation est très simple puisqu’il suffit d’implémenter l’unique méthode de l’interface &lt;/span&gt;&lt;span style=";font-size:100%;color:black;"  &gt;ClassFileTransformer&lt;/span&gt;&lt;span style="font-size:100%;"&gt;.&lt;/span&gt; &lt;/p&gt;  &lt;p class="MsoNormal"  style="font-family:arial;"&gt;&lt;span style="font-size:180%;"&gt;Création d’un agent java simple&lt;/span&gt;&lt;/p&gt;    &lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;span style="font-family:arial;"&gt;Dans cet article je vous propose de créer un agent java très simple. Il aura pour but l’affichage dans la sortir standard des classes qui sont chargée par le programme. Pour arriver à notre objectif nous aurons besoin de créer l’agent, son ClassFileTransformer, et d’extraire le tout dans un JAR correctement formaté.&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;span style="font-family:arial;"&gt;Dans un nouveau projet java créez une classe myJavaAgent comme ceci :&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="color: rgb(153, 153, 153);"&gt;&lt;span style="font-size:78%;"&gt;&lt;b&gt;&lt;span style=""&gt;package&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt; fr.demo.testAgent;&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;        &lt;p class="MsoNormal" style="color: rgb(153, 153, 153);"&gt;&lt;span style="font-size:78%;"&gt;&lt;b&gt;&lt;span style=""&gt;import&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt; java.lang.instrument.Instrumentation;&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=""&gt;import&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt; fr.demo.testTransformer.TestClassTransformer;&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;o:p&gt;&lt;br /&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;      &lt;p class="MsoNormal" style="color: rgb(153, 153, 153);"&gt;&lt;span style="font-size:78%;"&gt;&lt;b&gt;&lt;span style=""&gt;public&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt; &lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;b&gt;&lt;span style=""&gt;class&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt; &lt;span style="background: silver none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;myJavaAgent&lt;/span&gt; {&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;b&gt;&lt;span style=""&gt;public&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt; &lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;b&gt;&lt;span style=""&gt;static&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt; &lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;b&gt;&lt;span style=""&gt;void&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt; premain(String agentArgs, Instrumentation inst)&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="color: rgb(153, 153, 153);"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style=""&gt;      &lt;/span&gt;{&lt;br /&gt;inst.addTransformer(&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;b&gt;&lt;span style=""&gt;new&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 153, 153);font-size:78%;" &gt; TestClassTransformer());&lt;br /&gt;}&lt;br /&gt;}&lt;/span&gt;&lt;span style="color: rgb(153, 153, 153);font-size:78%;" &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 153, 153);font-size:78%;" &gt;&lt;span style=""&gt;   &lt;/span&gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;span style="color: rgb(153, 153, 153);font-size:78%;" &gt;&lt;/span&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:arial;"&gt;La seule opération de l’agent est d’ajouter un classtransformer à l’instance d’instrumentalisation de &lt;/span&gt;&lt;st1:personname style="font-family: arial;" productid="la JVM" st="on"&gt;la JVM&lt;/st1:personname&gt;&lt;span style="font-family:arial;"&gt; du programme executé.&lt;/span&gt; &lt;/p&gt;            &lt;p class="MsoNormal" style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Code du class transformer :&lt;/span&gt;&lt;br /&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);font-size:78%;" &gt;&lt;b&gt;&lt;span style=""&gt;package&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 153, 153);font-size:78%;" &gt; fr.demo.testAgent;&lt;/span&gt;&lt;span style="color: rgb(153, 153, 153);font-size:78%;" &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 153, 153);font-size:78%;" &gt;&lt;br /&gt;&lt;b&gt;&lt;span style=""&gt;import&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 153, 153);font-size:78%;" &gt; java.lang.instrument.ClassFileTransformer;&lt;/span&gt;&lt;span style="color: rgb(153, 153, 153);font-size:78%;" &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="color: rgb(153, 153, 153);"&gt;&lt;span style="font-size:78%;"&gt;&lt;b&gt;&lt;span style=""&gt;import&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt; java.lang.instrument.IllegalClassFormatException;&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="color: rgb(153, 153, 153);"&gt;&lt;span style="font-size:78%;"&gt;&lt;b&gt;&lt;span style=""&gt;import&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt; java.security.ProtectionDomain;&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="color: rgb(153, 153, 153);"&gt;&lt;span style="font-size:78%;"&gt;&lt;b&gt;&lt;span style=""&gt;public&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt; &lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;b&gt;&lt;span style=""&gt;class&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt; EzClassTransformer &lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;b&gt;&lt;span style=""&gt;implements&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt; ClassFileTransformer {&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="color: rgb(153, 153, 153);"&gt;&lt;span style="font-size:78%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;b&gt;&lt;span style=""&gt;public&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt; &lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;b&gt;&lt;span style=""&gt;byte&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt;[] transform(ClassLoader loader, String className,&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="color: rgb(153, 153, 153);"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style=""&gt;                  &lt;/span&gt;Class &lt;span style="background: silver none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;classBeingRedefined&lt;/span&gt;, ProtectionDomain protectionDomain,&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="color: rgb(153, 153, 153);"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style=""&gt;                  &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;b&gt;&lt;span style=""&gt;byte&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt;[] classfileBuffer) &lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;b&gt;&lt;span style=""&gt;throws&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt; IllegalClassFormatException {&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="color: rgb(153, 153, 153);"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style=""&gt;            &lt;/span&gt;System.&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;i&gt;&lt;span style=""&gt;out&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt;.println(&lt;/span&gt;&lt;span style="font-size:78%;"&gt;"Je charge la classe :"&lt;/span&gt;&lt;span style="font-size:78%;"&gt; + className);&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="color: rgb(153, 153, 153);"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style=""&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;b&gt;&lt;span style=""&gt;return&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt; classfileBuffer;&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="color: rgb(153, 153, 153);"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style=""&gt;      &lt;/span&gt;}&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="color: rgb(153, 153, 153);font-size:78%;" &gt;}&lt;/span&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;div  style="text-align: justify;font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;Comme vu précédement, l’interface &lt;/span&gt;&lt;span style=";font-size:100%;color:black;"  &gt;ClassFileTransformer&lt;/span&gt;&lt;span style="font-size:100%;"&gt; se résume en une méthode à implémenter : transform. Cette méthode passe en paramètre la classe avant qu’elle soit chargée par &lt;st1:personname productid="la JVM. Elle" st="on"&gt;la JVM. Elle &lt;/st1:personname&gt;offre la possibilité de modifier le comportement de la classe en ayant comme paramètre de retour un tableau de byte correspondant à la classe compilée. Pour l’instant nous nous contenterons simplement d’afficher que la classe est chargée en renvoyant directement la classe passée en paramètre sans modification.&lt;/span&gt;&lt;/div&gt;    &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Création du JAR&lt;/span&gt;&lt;/p&gt;    &lt;div style="text-align: justify;"&gt;&lt;span style="font-family:arial;"&gt;Un java agent se présentant sous la forme de JAR, il nous faut donc créer un JAR contenant l’agent java et le classfiletransformer (via éclipse, click droit sur projet, export, java archive). Dans le fichier META-INF/MANIFEST.MF du jar il faut ajouter l’entr&lt;/span&gt;ée :&lt;br /&gt;&lt;/div&gt;&lt;p class="MsoNormal"&gt;&lt;span style="color: rgb(153, 153, 153);font-family:arial;font-size:78%;"  &gt;Premain-Class: fr.demo.testAgent.myJavaAgent &lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="font-family:arial;"&gt;Cette entrée permet de définir à &lt;st1:personname productid="la JVM" st="on"&gt;la JVM&lt;/st1:personname&gt; la classe du JAR jouant le rôle de l'agent (bootstrap class).&lt;/p&gt;    &lt;p style="text-align: justify; font-family: arial;" class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;Une fois le JAR crée il ne nous reste plus qu’à le tester. Pour ce faire prenez une application java de votre choix (console, swing…) et éxécutez la simplement en ajoutant l’argument &lt;span style="font-family:arial;"&gt;(via éclipse « open run dialog » et « arguments ») :&lt;/span&gt;&lt;/p&gt;&lt;p face="arial" style="text-align: justify;" class="MsoNormal"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(153, 153, 153);"&gt; -javaagent:lienversjar&lt;/span&gt; .&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" face="arial"&gt;&lt;span style="font-size:180%;"&gt;Conclusion&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;Les AgentsJava sont très utiles pour ajouter des crochets au chargement des classes de &lt;st1:personname productid="la JVM. Certes" st="on"&gt;&lt;st1:personname productid="la JVM." st="on"&gt;la JVM.&lt;/st1:personname&gt; Certes&lt;/st1:personname&gt; l’utilisation que nous en avons fait dans cet article est somme toute limitée, mais les classfiletransformer offrent des possibilitée que vous n’osez même pas imaginer! Je proposerais prochainement un article montrant ce méchanisme couplé avec BCEL pour modifier a chaud les bytecode des classes : une façon de voir cette technologie d’un aspect(J?) différent (comprendra qui pourra).&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1923190782529329045-622220233698856775?l=softquipeut.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softquipeut.blogspot.com/feeds/622220233698856775/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1923190782529329045&amp;postID=622220233698856775' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1923190782529329045/posts/default/622220233698856775'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1923190782529329045/posts/default/622220233698856775'/><link rel='alternate' type='text/html' href='http://softquipeut.blogspot.com/2007/10/utilisation-des-javaagents.html' title='Utilisation des JavaAgents'/><author><name>Jocelyn Demoy</name><uri>http://www.blogger.com/profile/17027754384257065151</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1923190782529329045.post-7470640644630505280</id><published>2007-10-26T02:59:00.000-07:00</published><updated>2007-10-29T01:55:50.817-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jpa crud java'/><title type='text'>Bean Entity StandAlone recherche CRUD générique</title><content type='html'>Petite classe java utile rédigée par mes soins qui vous permettra de ne pas perdre de temps avec vos opérations de CRUD (Create Read Update Delete ) pour les entityBeans Standalone.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://jocelyn.demoy.free.fr/Files/GenericDAO.java"&gt;Télécharger la classe&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Pour l'utiliser il suffit simplement d'hériter de cette classe et d'ajouter un contructeur. Exemple avec une DAO d'un objet "Secteur" :&lt;br /&gt;&lt;br /&gt;&lt;pre class="wiki"&gt;public class SecteurDAO extends GenericDAO&lt;secteur&gt; {&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public SecteurDAO(String entityManagerName)&lt;br /&gt;{&lt;br /&gt;super(entityManagerName,Secteur.class);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;}&lt;/secteur&gt;&lt;/pre&gt;&lt;span style="font-size:130%;"&gt;Bean Entity&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Les beans entity doivent posséder des namedqueries pour définir comment les sélectionner. Exemple :&lt;br /&gt;&lt;pre class="wiki"&gt;@Entity&lt;br /&gt;@NamedQueries(value ={&lt;br /&gt;@NamedQuery(query="Select a from Agence a where a.id = ?1"&lt;br /&gt;,name="SelectByIdAgence") ,&lt;br /&gt;@NamedQuery(query="Select a from Agence a"&lt;br /&gt;,name="SelectAllAgence")})&lt;br /&gt;public class Agence implements Serializable {&lt;/pre&gt;Il est important de garder le même nom dans les NamedQueries &lt;span style="text-decoration: underline;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;:SelectById&lt;strong style="font-weight: normal;"&gt;&lt;/strong&gt; et SelectAll &lt;strong style="font-weight: normal;"&gt;&lt;a class="missing wiki" href="http://pc012403/referentiel/wiki/SelectAll" rel="nofollow"&gt;&lt;/a&gt;&lt;/strong&gt;+ &lt;strong&gt;nom de la classe&lt;/strong&gt;. On ajoute le suffixe de la classe car on ne peut pas avoir deux mêmes noms pour des requêtes au sein d'une même unité de persistance : Merci KODO ...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Limitations&lt;br /&gt;&lt;/span&gt;Cette classe ne fonctionne que pour les tables ayant une clé primaire non composée (je ferai plus tard une RTB "Release to Bloggers" en ajoutant un nombre de paramètres variable pour la sélection).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1923190782529329045-7470640644630505280?l=softquipeut.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://softquipeut.blogspot.com/feeds/7470640644630505280/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1923190782529329045&amp;postID=7470640644630505280' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1923190782529329045/posts/default/7470640644630505280'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1923190782529329045/posts/default/7470640644630505280'/><link rel='alternate' type='text/html' href='http://softquipeut.blogspot.com/2007/10/bean-entity-standalone-recherche-crud.html' title='Bean Entity StandAlone recherche CRUD générique'/><author><name>Jocelyn Demoy</name><uri>http://www.blogger.com/profile/17027754384257065151</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
