<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link rel="hub" href="http://tumblr.superfeedr.com/" xmlns:atom="http://www.w3.org/2005/Atom"/><description>dooApp technical blog about JavaFX</description><title>dooApp</title><generator>Tumblr (3.0; @dooapp)</generator><link>http://blog.dooapp.com/</link><item><title>FXML + FXForm2 = Developing forms has never been so easy!We just...</title><description>&lt;img src="http://24.media.tumblr.com/98dd4fbdc3080276f6aede0026acfccf/tumblr_mlrnhd0Kcn1sp703do1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;h2&gt;FXML + FXForm2 = Developing forms has never been so easy!&lt;/h2&gt;We just released a major version of &lt;a href="http://www.fxform2.com"&gt;FXForm2&lt;/a&gt; (0.2.0) that includes &lt;b&gt;FXML support&lt;/b&gt;.&lt;div&gt;&lt;br/&gt;&lt;/div&gt;&lt;div&gt;&lt;br/&gt;&lt;div&gt; This new version introduces the brand new &lt;b&gt;FXMLSkin&lt;/b&gt;:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;write your model bean&lt;/li&gt;&lt;li&gt;design your form in FXML&lt;/li&gt; &lt;li&gt;FXForm2 do the rest!&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;b&gt;How does it work?&lt;/b&gt; The FXMLSkin lookups all required nodes in the FXML file using their id and bind them automatically to the model bean. This skin offers a new flexible way to create complex forms without the pain of writing all the controllers logic. See &lt;a href="https://github.com/dooApp/FXForm2/wiki/Style-your-form-with-css" target="_blank"&gt;wiki&lt;/a&gt; to know how to construct node ids.&lt;/div&gt; &lt;p&gt;&lt;/p&gt;&lt;div&gt;&lt;b&gt;How do I use it? &lt;/b&gt;form.setSkin(new FXMLSkin(form, my_file.fxml));&lt;/div&gt; &lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;What about the original skins? &lt;/b&gt;Don’t worry, the original Default and Inline skins are still here and will still build the whole form for you! They are still very useful if you don’t need to customize your form too much and allow you to get quickly a functional form.&lt;/div&gt; &lt;p&gt;&lt;/p&gt;&lt;div&gt;Feel free to give us feedback about this new feature!&lt;/div&gt;&lt;div&gt;&lt;i&gt;Note: This release implied some architectural refactorings in FXForm2 and the form API has been slightly modified. If you have developed custom skins or custom node factories for a previous FXForm2 version, you will need to migrate them. An article will be published soon to help you do this very easily.&lt;/i&gt;&lt;/div&gt;</description><link>http://blog.dooapp.com/post/48778141639</link><guid>http://blog.dooapp.com/post/48778141639</guid><pubDate>Thu, 11 Oct 2012 15:37:43 +0200</pubDate><category>JustMigrated</category></item><item><title>Logarithmic scale strikes back in JavaFX 2.0JavaFX provides an...</title><description>&lt;img src="http://24.media.tumblr.com/ea938ae6929b76c5a063b6dfba740664/tumblr_mlrnhhpfnQ1sp703do1_500.png"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;h2&gt;Logarithmic scale strikes back in JavaFX 2.0&lt;/h2&gt;&lt;div&gt;JavaFX provides an impressive chart API that allows to draw a wide range of charts. Unfortunately the only available scale for XY charts is a linear implementation.&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.dooapp.com/javafx-chart-api-and-logarithmic-scale-tag-ja"&gt;As we did it two years ago for javafx 1&lt;/a&gt;, we defined the logarithmic axis for javafx 2.&lt;/div&gt;

&lt;div&gt;We received some requests of developpers who need to use a logarithmic axis but thay are confronted to the understanding of how axis works in javafx 2 and the impossibility to extend the NumberAxis, since it’s final in the API. So the only way to have a logarithmic axis is to extend directly the ValueAxis abstract class. Below, we’ll see how to implement all required methods to make it works. At the end you’ll be able to have this kind of chart :&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;/div&gt;

&lt;div&gt;So let’s create our LogarithmicAxis class that extends ValueAxis&lt;Number&gt; and define two properties that will represent the log lower and upper bounds of our axis. &lt;/div&gt;
&lt;div&gt;&lt;script src="https://gist.github.com/3218247.js"&gt;&lt;/script&gt; &lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;Then we bind our properties with the default bounds of the value axis. But before, we should verify the given range according to the mathematic logarithmic interval definition.&lt;/div&gt;
&lt;div&gt;&lt;script src="https://gist.github.com/3225604.js"&gt;&lt;/script&gt;&lt;/div&gt;

&lt;div&gt;Now we have to implement all abstract methods of the ValueAxis class.&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;The first one, calculateMinorTickMarks is used to get the list of minor tick marks position that you want to display on the axis. You could find my definition below. It’s based on the number of minor tick and the logarithmic formula.&lt;/div&gt;
&lt;div&gt;&lt;script src="https://gist.github.com/3226464.js"&gt;&lt;/script&gt;&lt;/div&gt;

&lt;div&gt;Then, the calculateTickValues method is used to calculate a list of all the data values for each tick mark in range, represented by the second parameter. The formula is the same than previously but here we want to display one tick each power of 10.&lt;/div&gt;
&lt;div&gt;&lt;script src="https://gist.github.com/3226509.js"&gt;&lt;/script&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;The getRange provides the current range of the axis. A basic implementation is to return an array of the lowerBound and upperBound properties defined into the ValueAxis class.&lt;/div&gt;
&lt;div&gt;&lt;script src="https://gist.github.com/3218403.js"&gt;&lt;/script&gt;&lt;/div&gt;

&lt;div&gt;The getTickMarkLabel is only used to convert the number value to a string that will be displayed under the tickMark. Here I choose to use a number formatter.&lt;/div&gt;
&lt;div&gt;&lt;script src="https://gist.github.com/3218380.js"&gt;&lt;/script&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;The method setRange is used to update the range when data are added into the chart. There is two possibilities, the axis is animated or not. The simplest case is to set the lower and upper bound properties directly with the new values.&lt;/div&gt;
&lt;div&gt;&lt;script src="https://gist.github.com/3226620.js"&gt;&lt;/script&gt;&lt;/div&gt;

&lt;div&gt;In order to have an animated axis, we should declare two timelines that will set progressively the range and use them if the animate parameter is true.&lt;/div&gt;
&lt;div&gt;&lt;script src="https://gist.github.com/3226631.js"&gt;&lt;/script&gt; &lt;/div&gt;
&lt;div&gt;&lt;script src="https://gist.github.com/3226543.js"&gt;&lt;/script&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;We are almost done but we forgot to override 3 important methods that are used to perform auto-ranging and the matching between data and the axis (and the reverse).&lt;/div&gt;
&lt;div&gt;&lt;script src="https://gist.github.com/3226659.js"&gt;&lt;/script&gt;&lt;/div&gt;

&lt;div&gt;Well it’s done! I hope that this article will help you to define your own logarithmic axis and don’t hesitate to give me your feedback on this implementation.&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;Full code is available here :&lt;/div&gt;
&lt;div&gt;&lt;script src="https://gist.github.com/3227204.js"&gt;&lt;/script&gt;&lt;/div&gt;
&lt;div&gt;&lt;script src="https://gist.github.com/3227300.js"&gt;&lt;/script&gt;&lt;/div&gt;</description><link>http://blog.dooapp.com/post/48778144926</link><guid>http://blog.dooapp.com/post/48778144926</guid><pubDate>Wed, 01 Aug 2012 15:55:00 +0200</pubDate><category>JustMigrated</category></item><item><title>JavaFX 2.0, Forms and Bean Validation: FXForm2 is...</title><description>&lt;img src="http://24.media.tumblr.com/f7651dfbb066685410fe2f75d0093f8b/tumblr_mlrnhlQhsn1sp703do1_400.png"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;h2&gt;JavaFX 2.0, Forms and Bean Validation: FXForm2 is here!&lt;/h2&gt;&lt;p&gt;…and we are back on our technical blog!&lt;/p&gt;We started &lt;a href="http://blog.dooapp.com/dude-where-is-my-form"&gt;last year &lt;/a&gt;a project called &lt;a href="https://bitbucket.org/dooapp/fxform/wiki/Home"&gt;FXForm&lt;/a&gt; providing automatic form generation in JavaFX 1.3. We have been using this library intensively in some of our applications. &lt;a href="http://javafx.com/"&gt;JavaFX 2.0&lt;/a&gt; is now a public beta. It did not took too much time until we decided to migrate FXForm to this exciting new version of the JavaFX technology.&lt;p&gt;&lt;/p&gt; Actually, it was not really relevant to convert the old code to JavaFX 2.0 code. Most FXForm code was about binding and this part of the API has be heavily modified in JavaFX 2.0 to fit the constraints of the Java langage. So we decided to write it again from scratch — and you know what? This was quicker than expected to achieve! The new JavaFX 2.0 API is intuitive and clear. By the way, some features of the Java ecosystem where much more easier to integrate such as the &lt;a href="http://www.jcp.org/en/jsr/detail?id=303"&gt;JSR 303 Bean Validation&lt;/a&gt; support. So we are proud to announce &lt;a href="http://dooapp.github.com/FXForm2/"&gt;FXForm2&lt;/a&gt;. Check our &lt;a href="https://github.com/dooApp/FXForm2/wiki/Get-started"&gt;Get Started&lt;/a&gt; page to create your first form! Many features and default controls are still coming, but any help is welcome! Feel free to &lt;a href="http://www.dooapp.com/fr/contacts/new"&gt;contact us&lt;/a&gt;.
&lt;p&gt;&lt;a href="http://dooapp.github.com/FXForm2/"&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://blog.dooapp.com/post/48778147888</link><guid>http://blog.dooapp.com/post/48778147888</guid><pubDate>Thu, 30 Jun 2011 17:55:00 +0200</pubDate><category>JustMigrated</category></item><item><title>Netbeans JavaFX Composer: Designing a CustomNode</title><description>The JavaFX composer is a powerful tool to design interfaces but at first it&amp;#8217;s not really obvious how to split a complex interface into several pieces and how to handle custom nodes. In this article I&amp;#8217;ll present the approach that turned out to be the most efficient from my own experience after some months of work with this composer.&lt;div&gt;&lt;ul&gt;&lt;li&gt;Create a new desktop design file called Main.fx that contains the common design parts of your application.&lt;/li&gt;&lt;/ul&gt;&lt;img src="http://files.justmigrate.com/host-for-tumblr/dooapp/netbeans-javafx-composer-designing-a-customno-2.jpg"/&gt;&lt;br/&gt;&lt;/div&gt;&lt;div&gt; &lt;ul&gt;&lt;li&gt;Now let&amp;#8217;s say we have the following model object and its manager:&lt;/li&gt;&lt;/ul&gt;&lt;script src="https://gist.github.com/512630.js"&gt;&lt;/script&gt;&lt;/div&gt;&lt;div&gt;&lt;script src="https://gist.github.com/512632.js"&gt;&lt;/script&gt;&lt;/div&gt; &lt;div&gt;&lt;ul&gt;&lt;li&gt;Next step is to design the node responsible for rendering a Doo instance in the interface. Select New File &amp;gt; JavaFX Fragment Design File to create a DooNode.fx design file. This will create a design fragment that you can edit visually with the JavaFX composer. Let&amp;#8217;s switch to the &amp;#8220;Source&amp;#8221; view and add a field to this class that will contain the Doo instance edited/rendered in our node.&lt;/li&gt; &lt;/ul&gt;&lt;script src="https://gist.github.com/512636.js"&gt;&lt;/script&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;We can now design this node and bind it to the rendered object.&lt;/li&gt;&lt;/ul&gt;&lt;img src="http://files.justmigrate.com/host-for-tumblr/dooapp/netbeans-javafx-composer-designing-a-customno-0.jpg"/&gt;&lt;br/&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Now the question is how to use this design file in the main interface? The composer generates a method called getDesignRootNodes() that gives you access to the parent nodes of the design file. Using this method to handle this node is not really handy since it&amp;#8217;s not defined in any interface and it won&amp;#8217;t be easy to switch from a renderer to another one. JavaFX define the concept of custom node through the CustomNode class. Why not using this class as parent class for our design file? Switch back to the source view and let DooNode extends CustomNode. Now just define the postinit method and insert the root nodes into the children of the custom node. Your class should look like this now:&lt;/li&gt; &lt;/ul&gt;&lt;script src="https://gist.github.com/512651.js"&gt;&lt;/script&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Our DesignNode class is now a classical CustomNode and can be manipulated in a transparent way in the main design file. Let&amp;#8217;s insert a flow layout into the Main design class and bind it&amp;#8217;s content to a sequence of DooNode associated to the doo&amp;#8217;s defined in the manager:&lt;/li&gt; &lt;/ul&gt;&lt;script src="https://gist.github.com/512655.js"&gt;&lt;/script&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;div&gt;And that&amp;#8217;s it! If you run the application you should see something like this:&lt;/div&gt;&lt;div&gt;&lt;img src="http://files.justmigrate.com/host-for-tumblr/dooapp/netbeans-javafx-composer-designing-a-customno-1.jpg"/&gt;&lt;br/&gt;&lt;/div&gt;&lt;div&gt;This approach provides a handy way to split the interface into several small pieces in a transparent way and to take advantage of the composer features.&lt;/div&gt;&lt;div&gt;&lt;i&gt;Note: the Netbeans project is available in the CustomNodeDesign file attached to this post&lt;/i&gt;&lt;/div&gt; &lt;br/&gt;&amp;#8212; &lt;br/&gt;This message has been scanned for viruses and &lt;br/&gt;dangerous content by &lt;a href="http://www.mailscanner.info/"&gt;&lt;b&gt;MailScanner&lt;/b&gt;&lt;/a&gt;, and is &lt;br/&gt;believed to be clean. &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;[[posterous-content:OUzg5o25dARB5rAGhXvz]]&lt;/p&gt;</description><link>http://blog.dooapp.com/post/48778148486</link><guid>http://blog.dooapp.com/post/48778148486</guid><pubDate>Sat, 07 Aug 2010 15:59:45 +0200</pubDate><category>JustMigrated</category></item><item><title>Dude, Where is my form?</title><description>&lt;p&gt;Building UI forms for editing model objects is a repetitive task. That&amp;#8217;s why we have started a small project called &lt;a href="http://bitbucket.org/dooapp/fxform"&gt;FXForm&lt;/a&gt; to provide automatic form generation for JavaFX objects. The goal of this library is to easily create customizable forms for any JavaFX object.&lt;/p&gt;

&lt;div&gt;A small example might be more talkative. Let&amp;#8217;s imagine you have the following model class:&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;script src="https://gist.github.com/478151.js"&gt;&lt;/script&gt;&lt;/div&gt;

&lt;div&gt;and you need a form to edit an instance of this class. FXForm allows you to generate this form with a few lines of code:&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;script src="https://gist.github.com/478153.js"&gt;&lt;/script&gt;&lt;/div&gt;

&lt;div&gt;and you will get something like this:&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;img src="http://files.justmigrate.com/host-for-tumblr/dooapp/dude-where-is-my-form-0.jpg"/&gt;&lt;/div&gt;

&lt;div&gt;Checkout the &lt;a href="http://bitbucket.org/dooapp/fxform/wiki/Usage"&gt;Usage&lt;/a&gt; page of the project wiki for more information!&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;img src="http://files.justmigrate.com/host-for-tumblr/dooapp/dude-where-is-my-form-1.jpg"/&gt;&lt;/div&gt;</description><link>http://blog.dooapp.com/post/48778149068</link><guid>http://blog.dooapp.com/post/48778149068</guid><pubDate>Fri, 16 Jul 2010 11:04:00 +0200</pubDate><category>JustMigrated</category><category>bean</category><category>form</category><category>javafx</category></item><item><title>IoC in JavaFX</title><description>&lt;div&gt;
&lt;a href="http://stackoverflow.com/questions/3058/what-is-inversion-of-control"&gt;loC&lt;/a&gt; frameworks are very useful when you develop modular applications. I&amp;#8217;ve been working with &lt;a href="http://code.google.com/p/google-guice/"&gt;Guice&lt;/a&gt; and &lt;a href="http://tapestry.apache.org/tapestry5/tapestry-ioc/"&gt;Tapestry IoC&lt;/a&gt; (which is an independent module of the Tapestry project) in the past, but I had to abandon them when I switched to JavaFX since none of them seemed to be compatible with JavaFX.&lt;/div&gt;
&lt;div&gt;The main issue was about the use of annotations. They are both heavily depending on annotations to define the injection mechanisms - and JavaFX unfortunately does not allow us to use annotations&amp;#8230;&lt;/div&gt;
&lt;div&gt;However, the Tapestry framework provides another way to access services by requesting them directly to a registry without using annotations. (I didn&amp;#8217;t find something similar in Guice, but it doesn&amp;#8217;t mean that there is no way to get Guice working with JavaFX).&lt;/div&gt;
&lt;div&gt;To play with tapestry injection, the first thing you need is to define an interface describing your injected service, let&amp;#8217;s call it TestInterface:&lt;/div&gt;
&lt;div&gt;&lt;p&gt;&lt;a href="https://gist.github.com/420814"&gt;&lt;a href="https://gist.github.com/420814"&gt;https://gist.github.com/420814&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div&gt;(&lt;em&gt;actually it&amp;#8217;s an abstract class, since JavaFX does not use interfaces, but it doesn&amp;#8217;t matter&lt;/em&gt;)&lt;/div&gt;
&lt;div&gt;Next step is to define a concrete implementation of this interface that will be injected, for example TestInterfaceImpl:&lt;/div&gt;
&lt;div&gt;&lt;p&gt;&lt;a href="https://gist.github.com/420816"&gt;&lt;a href="https://gist.github.com/420816"&gt;https://gist.github.com/420816&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div&gt;The core concept of Taspestry IoC framework are the &lt;a href="http://tapestry.apache.org/tapestry5/tapestry-ioc/module.html"&gt;modules&lt;/a&gt;. Basically a module define some bindings between interfaces and their implementations. Let&amp;#8217;s define a pure JavaFX module binding our injected service:&lt;/div&gt;
&lt;div&gt;&lt;p&gt;&lt;a href="https://gist.github.com/420820"&gt;&lt;a href="https://gist.github.com/420820"&gt;https://gist.github.com/420820&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div&gt;(&lt;em&gt;Note that the concept of &amp;#8220;&lt;a href="http://tapestry.apache.org/tapestry5/tapestry-ioc/service.html"&gt;autobuilding&lt;/a&gt;&amp;#8221; will not be working, since it requires to define a &amp;#8220;bind&amp;#8221; method, which is a reserved keyword in JavaFX - not idea how to fix this for the moment&lt;/em&gt;)&lt;/div&gt;
&lt;div&gt;We can now set up a registry with the defined module:&lt;/div&gt;
&lt;div&gt;&lt;p&gt;&lt;a href="https://gist.github.com/420821"&gt;&lt;a href="https://gist.github.com/420821"&gt;https://gist.github.com/420821&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div&gt;Well, we are now ready to request the service corresponding to the TestInterface simply by asking it directly to the registry:&lt;/div&gt;
&lt;div&gt;&lt;p&gt;&lt;a href="https://gist.github.com/420822"&gt;&lt;a href="https://gist.github.com/420822"&gt;https://gist.github.com/420822&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div&gt;And you should get the instance of TestInterface you defined in the corresponding module!&lt;/div&gt;
&lt;div&gt;Finally, to get things a bit cleaner you can move all the registry stuff the a separate class:&lt;/div&gt;
&lt;div&gt;&lt;p&gt;&lt;a href="https://gist.github.com/420844"&gt;&lt;a href="https://gist.github.com/420844"&gt;https://gist.github.com/420844&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div&gt;This way, &lt;em&gt;IoC.registry&lt;/em&gt; will give you an access to your registry in your application. Just make a call at &lt;em&gt;IoC.init&lt;/em&gt;() before using it. This is not as &amp;#8220;beautiful&amp;#8221; as annotations, but still much better than no IoC. Let me know if you get a more elegant solution!&lt;/div&gt;

&lt;div&gt;
&lt;strong&gt;Note&lt;/strong&gt;: This article is not intended to be a tutorial for taspestry-ioc, you will find more documentation about it in this &lt;a href="http://wiki.apache.org/tapestry/Tapestry5HowToIocOnly"&gt;howto&lt;/a&gt; and on the official &lt;a href="http://tapestry.apache.org/tapestry5/tapestry-ioc/"&gt;website&lt;/a&gt;. Moreover, there might be other IoC frameworks that work with JavaFX, just let me know if you are successfully using another one!&lt;/div&gt;
&lt;div&gt;
&lt;strong&gt;Note 2&lt;/strong&gt;: Tapestry IoC is following a strict &amp;#8220;fail-fast&amp;#8221; policy and building the registry will fail if your module contains unrecognized methods. This is a bit problematic with JavaFX modules. Actually, all JavaFX classes implements the com.sun.javafx.runtime.FXObject interface. So a JavaFX class contains systematically a bunch of methods inherited from this interface, that tapestry does not recognize. This will lead to an error message like this when you try to register your JavaFX module into the registry: &amp;#8220;java.lang.RuntimeException: Module class injectiontest.services.TestModule contains unrecognized public methods: public boolean com.sun.javafx.runtime.FXBase.getAsBoolean$(int,int),[&amp;#8230;]&amp;#8221;. There is a corresponding &lt;a href="https://issues.apache.org/jira/browse/TAP5-1171"&gt;jira entry&lt;/a&gt;. You can get the patch from this ticket to solve this issue for the moment.&lt;/div&gt;</description><link>http://blog.dooapp.com/post/48778149814</link><guid>http://blog.dooapp.com/post/48778149814</guid><pubDate>Tue, 01 Jun 2010 14:02:00 +0200</pubDate><category>JustMigrated</category><category>ioc</category><category>javafx</category></item><item><title>JavaFX composer, dynamic layout and XScene</title><description>&lt;div style="font-family: arial, sans-serif; font-size: 13px; border-collapse: collapse;"&gt;As I mentioned in a &lt;a href="http://blog.dooapp.com/developing-a-business-application-with-javafx" target="_blank" style="color: rgb(42, 93, 176);"&gt;previous post&lt;/a&gt;, I was quite unsuccessful developing a resizable application with dynamic layout behavior using the beta release of the Netbeans composer. An Amy Fowler&amp;#8217;s post about &lt;a href="http://amyfowlersblog.wordpress.com/2010/05/26/javafx-1-3-growing-shrinking-and-filling/" target="_blank" style="color: rgb(42, 93, 176);"&gt;Growing, Shrinking and Filling&lt;/a&gt; reminded me that I should give another try - dynamic sizing behavior is a great thing.&lt;div&gt; Moreover, some interesting &lt;a href="http://wiki.netbeans.org/JavaFXComposerNewIn69FCS" target="_blank" style="color: rgb(42, 93, 176);"&gt;changes&lt;/a&gt; have been introduced in the RC1 version of Netbeans. Let&amp;#8217;s see how to do this:&lt;/div&gt; &lt;div&gt;&lt;ul&gt;&lt;li style="margin-left: 15px;"&gt;Create a new design file. By default the design file creates a &lt;a href="http://java.sun.com/javafx/1.3/docs/api/javafx.scene/javafx.scene.Scene.html" target="_blank" style="color: rgb(42, 93, 176);"&gt;javafx.scene.Scene&lt;/a&gt;. Unfortunately, this scene does not dynamically resize it&amp;#8217;s child nodes to it&amp;#8217;s current size.  This is exactly what the &lt;a href="http://jfxtras.googlecode.com/svn/site/javadoc/release-0.6/org.jfxtras.scene/org.jfxtras.scene.XScene.html" target="_blank" style="color: rgb(42, 93, 176);"&gt;org.jfxtras.scene.XScene&lt;/a&gt; does. However, in the beta version of Netbeans Composer it was not possible to replace the default Scene by the one provided by JFXtras. Netbeans RC1 has introduced a cool feature: the &lt;a href="http://wiki.netbeans.org/JavaFXComposerNewIn69FCS#Class_Name_Property" target="_blank" style="color: rgb(42, 93, 176);"&gt;Class Name Property&lt;/a&gt;. This allows to customize the class used in the generated code for a given component. This is a very interesting feature, bringing flexibility without overloading the composer&amp;#8217;s interface. This way you can customize any component handled by the composer (as long as it&amp;#8217;s using the same properties). In our case, just set &amp;#8220;org.jfxtras.scene.XScene&amp;#8221; as class scene for the scene component.&lt;/li&gt; &lt;li style="margin-left: 15px;"&gt;Next step is to add a layout manager to the scene. Let&amp;#8217;s use the &lt;a href="http://java.sun.com/javafx/1.3/docs/api/com.javafx.preview.layout/com.javafx.preview.layout.Grid.html" target="_blank" style="color: rgb(42, 93, 176);"&gt;Grid&lt;/a&gt; container, which is &lt;a href="http://wiki.netbeans.org/JavaFXComposerNewIn69FCS#Grid_Container" target="_blank" style="color: rgb(42, 93, 176);"&gt;now supported&lt;/a&gt; by the RC1 version of the Composer! You can then add components to the layout and manage the number of rows and columns of the Grid layout. Notice that a new property has been introduced in the layout properties of the components: &amp;#8220;Grid Hor. Span&amp;#8221;. This allows to control the spanning of a component over multiple columns. For example, in the attached screenshots, the bottom button is spanned over two columns. The left button switches it&amp;#8217;s Vertical Fill property, automatically adapting it&amp;#8217;s size to the new constraints.&lt;/li&gt; &lt;/ul&gt; &lt;/div&gt;&lt;div&gt;You can now start building your application with dynamic sizing and layout using the JavaFX Composer - a big step forward!&lt;/div&gt;&lt;/div&gt; &lt;p&gt;&lt;img src="http://files.justmigrate.com/host-for-tumblr/dooapp/javafx-composer-dynamic-layout-and-xscene-0.jpg"/&gt;&lt;img src="http://files.justmigrate.com/host-for-tumblr/dooapp/javafx-composer-dynamic-layout-and-xscene-1.jpg"/&gt;&lt;img src="http://files.justmigrate.com/host-for-tumblr/dooapp/javafx-composer-dynamic-layout-and-xscene-2.jpg"/&gt;&lt;/p&gt;</description><link>http://blog.dooapp.com/post/48778150446</link><guid>http://blog.dooapp.com/post/48778150446</guid><pubDate>Mon, 31 May 2010 15:30:53 +0200</pubDate><category>JustMigrated</category><category>composer</category><category>javafx</category><category>layout</category></item><item><title>Developing a business application with JavaFX Composer</title><description>&lt;p&gt;When we started developing our first business application, I&amp;#8217;ve hesitated a long time whether we should give a try to the &lt;a href="http://wiki.netbeans.org/JavaFXComposer"&gt;Netbeans JavaFX composer&lt;/a&gt;. I am not a big fan of such gui design tools, especially because you usually get stuck sooner or later as your application grows. But I decided to give a chance to this new tool and got really convinced by the &lt;a href="http://wiki.netbeans.org/JavaFXComposer#Tutorials_and_Guides"&gt;tutorials&lt;/a&gt;. So we started developing our application with this tool and we have now reached our first release. So let&amp;#8217;s have a review:&lt;/p&gt;
&lt;div&gt;
&lt;ul&gt;&lt;li&gt;The first main question is about resizable layout. You can edit all the required layout information using the composer, but for the moment it&amp;#8217;s clearly more oriented for static layouts. So we decided to develop a fixed-size application. I hope future releases of JavaFX and of the composer will facilitate the development of resizable applications (for example by providing a resizable scene like the JFxtras&amp;#8217; &lt;a href="http://jfxtras.googlecode.com/svn/site/javadoc/release-0.6/org.jfxtras.scene/org.jfxtras.scene.XScene.html"&gt;XScene&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;The composer is designed to work with a single design file, i.e., your whole interface code is stored in a single JavaFX class. We quickly reached a point were we got a &amp;#8220;&lt;a href="https://mix.oracle.com/questions/135007-code-too-large-in-design-class-developed-with-netbeans-composer"&gt;code too large&lt;/a&gt;&amp;#8221; error, due to the size of the class which is limited by the compiler. At this point I really thought I would stop using the composer, since I couldn&amp;#8217;t figure out how to split the design file without loosing the advantages of the composer. I have finally found an approach which proved to be quite handy using placeholders panels to integrate the nodes of separate design files. I&amp;#8217;ll post a separate blog article about this.&lt;/li&gt;
&lt;li&gt;Another big drawback of the Composer is that you can&amp;#8217;t work with custom nodes (for examples with &lt;a href="http://jfxtras.org/"&gt;JFXtras&lt;/a&gt; controls). It would be really interesting to be able to manipulate custom nodes with the composer. For the moment the solution is to use a placeholder and to insert your component manually. As long as you use mostly standard JavaFX components this is not too annoying, but it can be quickly annoying if you work with many custom nodes or controls.&lt;/li&gt;
&lt;li&gt;The state system is robust and provides a very nice way to manage the view according to the logic of the application. It&amp;#8217;s very easy and powerful to work with the states. The only point that was sometimes problematic is that you often edit some properties unintentionally in a specific state instead of in the master state. The &amp;#8220;set to master&amp;#8221; button is then really helpful.&lt;/li&gt;
&lt;li&gt;Some minor features are still buggy. For example the edition of the Tooltip of a node does not work for the moment, clicking on the add button just lead to some Netbeans errors. However, this can still be done manually.&lt;/li&gt;
&lt;li&gt;The auto-completion is unfortunately not provided when you edit the code of a binding through the property dialog, that would be handy.&lt;/li&gt;
&lt;li&gt;Refactoring does not work in the code managed by the composer. So if your gui is bound to a model object and that you refactor the name of this object, the managed code won&amp;#8217;t be updated and you will have to do it manually through the composer gui.&lt;/li&gt;
&lt;/ul&gt;
To conclude I must admit that I&amp;#8217;ve been really impressed by the Composer tool. It&amp;#8217;s stable and robust. The resulting JavaFX code is clear and remains clean even after hours playing with the composer. Some of the drawbacks and limitations I&amp;#8217;ve enumerated are clearly annoying, but finally the composer is very very promising. I wouldn&amp;#8217;t have bet one month ago that we would have developed a business application with this tool. Now it&amp;#8217;s done, and I&amp;#8217;m not sure I would be able to give up this composer so easily.&lt;/div&gt;</description><link>http://blog.dooapp.com/post/48778151038</link><guid>http://blog.dooapp.com/post/48778151038</guid><pubDate>Fri, 21 May 2010 14:34:00 +0200</pubDate><category>JustMigrated</category><category>composer</category><category>javafx</category><category>netbeans</category></item><item><title>JavaFX chart API and logarithmic scale 
JavaFX provides an...</title><description>&lt;img src="http://25.media.tumblr.com/617ffaf60b274562cdc1328df70132c9/tumblr_mlrnht4Sfm1sp703do1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;h2&gt;JavaFX chart API and logarithmic scale&lt;/h2&gt;&lt;div&gt; &lt;/div&gt;
&lt;p&gt;JavaFX provides an impressive chart API that allow to draw a wide range of charts. Unfortunately the only scale that is available for XY charts is a linear implementation.  Since the javadoc of the API is sometimes a bit rough it took me some times to get figure out how to get a logarithmic scale. After a discussion on &lt;a href="https://mix.oracle.com/questions/135325-custom-chart-axis-and-tickmark"&gt;mix.oracle.com&lt;/a&gt; it turned out that there where to approaches: &lt;/p&gt;
&lt;div&gt;
&lt;ul&gt;&lt;li&gt;the first one is to transform your data with the logarithmic function before injecting it into the chart and to adjust the formatting of the labels to “simulate” a logarithmic scale. Since I don’t really like the idea of manipulating the data to get the expected representation I prefer the second approach:&lt;/li&gt;
&lt;li&gt;the second one is to provide your own implementation of a logarithmic &lt;a href="http://java.sun.com/javafx/1.3/docs/api/javafx.scene.chart.part/javafx.scene.chart.part.Axis.html"&gt;Axis&lt;/a&gt;. Let’s see how to do this:&lt;/li&gt;
&lt;/ul&gt;
Extend the &lt;a href="http://java.sun.com/javafx/1.3/docs/api/javafx.scene.chart.part/javafx.scene.chart.part.ValueAxis.html"&gt;ValueAxis&lt;/a&gt; class. There are two methods to implement:&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Arial; font-size: 15px;"&gt;&lt;em class="modifiers"&gt;public&lt;/em&gt; &lt;strong&gt;getDisplayPosition&lt;/strong&gt;(&lt;em class="parameters"&gt;&lt;strong&gt;value&lt;/strong&gt;: &lt;a style="color: #098cec;"&gt;&lt;em&gt;java.lang.Object&lt;/em&gt;&lt;/a&gt;&lt;/em&gt;) : &lt;a style="color: #098cec;"&gt;&lt;em&gt;Number &lt;/em&gt;&lt;/a&gt;&lt;em&gt;&lt;a style="color: #098cec;"&gt;&lt;span style="color: #000000;"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/em&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-size: 15px;"&gt;&lt;a style="color: #098cec;"&gt;&lt;span style="color: #000000;"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-family: arial, helvetica, sans-serif;"&gt;will do the mapping between a data value and its visual position. For a log axis, the implementation will look like this:&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: arial, helvetica, sans-serif;"&gt;&lt;script src="https://gist.github.com/387818.js"&gt;&lt;/script&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="font-family: Arial; font-size: 15px;"&gt;&lt;em class="modifiers"&gt;protected abstract&lt;/em&gt; &lt;strong&gt;updateTickMarks&lt;/strong&gt;() : &lt;em&gt;Void  &lt;/em&gt;&lt;span style="font-size: small;"&gt;will define which tick marks should be displayed. The javadoc does not say much about this function. It looks like the main idea is to update the &lt;strong&gt;tickMarks &lt;/strong&gt;sequence of &lt;a href="http://java.sun.com/javafx/1.3/docs/api/javafx.scene.chart.part/javafx.scene.chart.part.Axis.TickMark.html"&gt;TickMark&lt;/a&gt;. The fields of TickMark are weirdly flagged as public-read package, so in oder to instantiate TickMark for our implementation we first need to define a class extending TickMark, let’s say CustomTickMark, and to put it in the package &lt;strong&gt;javafx.scene.chart.part &lt;/strong&gt;in order to be able to set the required fields. After that you just need to update the sequence of tick marks with the marks you want to see on your chart, which can look like this:&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;div&gt;&lt;script src="https://gist.github.com/387822.js"&gt;&lt;/script&gt;&lt;/div&gt;
&lt;div&gt;Well, you’re now ready to use this LogAxis with your chart. The following example demonstrate the use of this LogAxis as x-scale of a chart.&lt;/div&gt;
&lt;div&gt;&lt;script src="https://gist.github.com/387824.js"&gt;&lt;/script&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;</description><link>http://blog.dooapp.com/post/48778154725</link><guid>http://blog.dooapp.com/post/48778154725</guid><pubDate>Mon, 03 May 2010 08:46:00 +0200</pubDate><category>JustMigrated</category><category>chart</category><category>javafx</category></item><item><title>JFXtras available in Sonatype OSS Repository</title><description>&lt;p&gt;We have recently worked on a mavenization process of the &lt;a href="http://jfxtras.org/"&gt;JFXtras project&lt;/a&gt; to make it easily usable in a maven project. The project now has a pom and the current version (0.7-SNAPSHOT) is hosted at the &lt;a href="http://oss.sonatype.org/"&gt;Sonatype OSS repository&lt;/a&gt;.&lt;/p&gt;
&lt;div&gt;To use JFXtras in your maven project, make sure that your maven environment has access to the Sonatype repository and just add the following dependencies to your pom:&lt;/div&gt;

&lt;div&gt;EDIT: artifacts names have changed, they are now prepended with &amp;#8220;jfxtras-&amp;#8220;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;p&gt;&lt;a href="https://gist.github.com/372473"&gt;&lt;a href="https://gist.github.com/372473"&gt;https://gist.github.com/372473&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div&gt;
&lt;p&gt;&lt;a href="https://gist.github.com/372475"&gt;&lt;a href="https://gist.github.com/372475"&gt;https://gist.github.com/372475&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;&lt;br/&gt;Hope this helps using this great lib!&lt;/div&gt;</description><link>http://blog.dooapp.com/post/48778155393</link><guid>http://blog.dooapp.com/post/48778155393</guid><pubDate>Tue, 20 Apr 2010 16:27:00 +0200</pubDate><category>JustMigrated</category><category>javafx</category><category>jfxtras</category><category>maven</category></item><item><title>Draggable nodes in XTreeView I recently played around with...</title><description>&lt;img src="http://25.media.tumblr.com/fdfe0e2e13c6d84b00c6041a960b6b96/tumblr_mlrnhxr1xy1sp703do1_100.gif"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;h2&gt;Draggable nodes in XTreeView &lt;/h2&gt;I recently played around with &lt;a href="http://jfxtras.googlecode.com/svn/site/javadoc/release-0.6/org.jfxtras.scene.control/org.jfxtras.scene.control.XTreeView.html" target="_blank"&gt;XTreeView&lt;/a&gt; the tree component of &lt;a href="http://jfxtras.org/" target="_blank"&gt;JFXtras&lt;/a&gt;. It’s a nice component with a clean boundary between control and view so that was quiet easy to add a draggable behaviour to the nodes. By the way I’m really grateful to Rakesh Menon for his clear post about &lt;a href="http://blogs.sun.com/rakeshmenonp/entry/javafx_drag_and_drop" target="_blank"&gt;Drag and Drop in JavaFX&lt;/a&gt;.&lt;div&gt; The main idea is to wrap a renderer into a draggable wrapper that will encapsulate the created nodes into a &lt;a href="http://code.google.com/p/javafxdemos/source/browse/DragNDrop/src/dragndrop/dnd/SwingDragSource.fx" target="_blank"&gt;SwingDragSource&lt;/a&gt;.&lt;/div&gt; &lt;div&gt;&lt;script src="https://gist.github.com/365632.js"&gt;&lt;/script&gt;&lt;/div&gt;&lt;div&gt;Checkout the demo: &lt;/div&gt;&lt;div&gt;&lt;a href="https://joe.dooapp.com/demoDnDTreeView/DraggableTreeViewDemo.jnlp"&gt;&lt;/a&gt;&lt;/div&gt; &lt;div&gt;You will find the source and the eclipse project in the attached zip.&lt;/div&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;[[posterous-content:AEJvlcJRhkIFG0D5yfRT]]&lt;/p&gt;</description><link>http://blog.dooapp.com/post/48778157387</link><guid>http://blog.dooapp.com/post/48778157387</guid><pubDate>Wed, 14 Apr 2010 12:08:03 +0200</pubDate><category>JustMigrated</category><category>dnd</category><category>javafx</category><category>jfxtras</category></item><item><title>Just bind it</title><description>&lt;p&gt;The javafx &lt;a href="http://java.sun.com/javafx/1/tutorials/core/dataBinding/"&gt;binding concept&lt;/a&gt; is nice and powerful. But sometimes it might be a bit difficult to figure out how to use it.&lt;/p&gt;
&lt;div&gt;Let&amp;#8217;s assume you have the following bean&lt;/div&gt;
&lt;div&gt;&lt;p&gt;&lt;a href="https://gist.github.com/337407"&gt;&lt;a href="https://gist.github.com/337407"&gt;https://gist.github.com/337407&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div&gt;and you need a variable bound to the sum of x*y for a sequence of those beans. Actually this problem can be expressed more generally: how to bind a variable to the result of a function applied to a sequence of elements (i.e. have it updated each time the sequence is modified or a field of a bean is modified). In java you would required tons of &lt;a href="http://java.sun.com/j2se/1.4.2/docs/api/java/beans/PropertyChangeListener.html"&gt;PropertyChangeListener&lt;/a&gt; registered correctly. With javafx you can write it in a more concise way using the &lt;strong&gt;bind&lt;/strong&gt; keyword and &lt;strong&gt;bounded&lt;/strong&gt; functions. But the first time I wanted to write it, I had to fight a little bit with the syntax. So I wanted to share this small unit test demonstrating a way to achieve this:&lt;/div&gt;
&lt;div&gt;&lt;p&gt;&lt;a href="https://gist.github.com/337408"&gt;&lt;a href="https://gist.github.com/337408"&gt;https://gist.github.com/337408&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</description><link>http://blog.dooapp.com/post/48778158055</link><guid>http://blog.dooapp.com/post/48778158055</guid><pubDate>Fri, 19 Mar 2010 11:55:00 +0100</pubDate><category>JustMigrated</category><category>binding</category><category>javafx</category><category>unit test</category></item><item><title>MediaPlayer keeping quiet</title><description>&lt;div&gt;According to the javafx media &lt;a href="http://www.javafx.com/docs/tutorials/mediabrowser/"&gt;tutorial&lt;/a&gt;, playing a sound is simple. &lt;a href="http://www.javafx.com"&gt;JavaFX&lt;/a&gt; provides a &lt;a href="http://java.sun.com/javafx/1.2/docs/api/javafx.scene.media/javafx.scene.media.MediaPlayer.html"&gt;MediaPlayer&lt;/a&gt; to easily play any media source. You just need to define your &lt;a href="http://java.sun.com/javafx/1.2/docs/api/javafx.scene.media/javafx.scene.media.Media.html"&gt;Media&lt;/a&gt; by it&amp;#8217;s URI, so this should looks like:&lt;/div&gt; &lt;div&gt;&lt;p&gt;&lt;a href="https://gist.github.com/336526"&gt;&lt;a href="https://gist.github.com/336526"&gt;https://gist.github.com/336526&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;This seems very easy, but if you tries this, you might here nothing!&lt;/div&gt;&lt;div&gt;Then you are certainly in one of the two following cases:&lt;/div&gt; &lt;div&gt;&lt;ul&gt;&lt;li&gt;Your sound resource is packaged within your jar. This is not supported for the moment, see &lt;a href="http://javafx.com/faq/#5.3"&gt;javafx faq&lt;/a&gt;&lt;/li&gt;&lt;li&gt;You are trying to play a short sound sample. The first time I tried to play a 2s sound sample, my speakers kept desperately quiet. So what happened? A look at the &lt;a href="http://www.javafx.com/docs/articles/media/performance.jsp"&gt;Improve Media Performance&lt;/a&gt; tutorial put me on the way to the solution: according to this article, &amp;#8220;f&lt;span style="line-height: 17px;"&gt;or faster playback of a streaming media that is progressively downloaded,&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt; it helps to initialize the engine first by using the same media behind the scenes&lt;span style="font-family: arial, helvetica, sans-serif;"&gt;&amp;#8221;. So, when you call the play function of the MediaPlayer, that playback engines &amp;#8220;crunches&amp;#8221; the first seconds of the sound sample during it&amp;#8217;s initialization. For a long sound, you just almost don&amp;#8217;t notice it, but a short sound sample might totally vanish. Unfortunately the MediaPlayer does not provides an init method, and the only way you can do it for the moment is to set your player to mute, play your media once and then rewind and unmute. It&amp;#8217;s quiet ugly, but it&amp;#8217;s the &amp;#8220;official&amp;#8221; solution proposed in the previous article. If you have a better solution, I&amp;#8217;d be happy to hear it. Or just hope that javafx 1.3 will add an init method to the MediaPlayer.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt; &lt;/ul&gt;&lt;/div&gt;</description><link>http://blog.dooapp.com/post/48778158700</link><guid>http://blog.dooapp.com/post/48778158700</guid><pubDate>Thu, 18 Mar 2010 18:06:59 +0100</pubDate><category>JustMigrated</category><category>javafx</category><category>media</category><category>mediaplayer</category><category>sound</category></item><item><title>Unit testing your javafx application</title><description>In my &lt;a href="http://blog.dooapp.com/spice-up-your-javafx-project-with-maven"&gt;last post&lt;/a&gt; I described how to set up a maven-javafx project using the &lt;a href="http://wiki.jfrog.org/confluence/display/JP/JavaFX+Maven+Plugin"&gt;jfrog-javafx&lt;/a&gt; plugin. One essential point was still missing in the configuration: the execution of javafx unit tests. By default, the jfrog-javafx plugin is not configured to handle a test folder. So let&amp;#8217;s see how to do that:&lt;br/&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Create a src/test/javafx folder in your project&lt;/li&gt;&lt;li&gt;Put a unit test in this folder. Note that javafx does not support annotations, so the test must be written according to junit 3 rules. (however, you can use junit 4 in your dependencies, since it&amp;#8217;s backward compatible)&lt;/li&gt; &lt;/ul&gt;&lt;p&gt;&lt;a href="https://gist.github.com/332948"&gt;&lt;a href="https://gist.github.com/332948"&gt;https://gist.github.com/332948&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Update the configuration of the jfrog-javafx plugin to compile both the main and the test javafx folders. We define two executions for this plugin. The &lt;b&gt;main&lt;/b&gt; execution will process the javafx resources and compile the javafx code in src/main/javafx during the compile phase. The &lt;b&gt;test &lt;/b&gt;will compile the javafx code in src/test/javafx during the test-compile phase. &lt;i&gt;You might also notice that junit is declared as a dependency of the plugin to fix a classpath issue since the jfrog-javafx plugin does not include the dependencies with test scope during compilation&lt;/i&gt;&lt;/li&gt; &lt;/ul&gt;&lt;p&gt;&lt;a href="https://gist.github.com/332954"&gt;&lt;a href="https://gist.github.com/332954"&gt;https://gist.github.com/332954&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Now your javafx test should be executed during the test phase of the maven lifecycle like a regular java unit test. You can now let &lt;a href="https://hudson.dev.java.net/"&gt;hudson&lt;/a&gt; run your javafx unit tests at each build!&lt;/li&gt; &lt;/ul&gt;&lt;/div&gt;</description><link>http://blog.dooapp.com/post/48778159257</link><guid>http://blog.dooapp.com/post/48778159257</guid><pubDate>Mon, 15 Mar 2010 16:46:44 +0100</pubDate><category>JustMigrated</category><category>continuous integration</category><category>javafx</category><category>jfrog-javafx</category><category>junit</category><category>maven</category></item><item><title>Spice up your JavaFX project with maven</title><description>&lt;div class="p_embed p_file_embed"&gt;
&lt;a href="http://blog.dooapp.com/spice-up-your-javafx-project-with-maven"&gt;&lt;img alt="" src="http://posterous.com/images/filetypes/zip.png"/&gt;&lt;/a&gt;
&lt;div class="p_embed_description"&gt;
&lt;strong&gt;MavenFX.zip&lt;/strong&gt;
&lt;a href="http://getfile0.posterous.com/getfile/files.posterous.com/dooapp/r7k1nyBAuoRxj0hk2NwAx9W1qqmr7BoUfgjJd1tLvJ5RXjJo5zt0gY7mksWU/MavenFX.zip"&gt;Download this file&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="http://www.javafx.com"&gt;JavaFX&lt;/a&gt; is a promising technology for nice Rich Internet Applications (RIA). However this is a quiet recent product (it was introduced by Sun at JavaOne, May 2007) and still lacks at integration with continuous development environments like &lt;a href="https://hudson.dev.java.net/"&gt;hudson&lt;/a&gt;. &lt;a href="http://en.wikipedia.org/wiki/Continuous_integration"&gt;Continuous integration&lt;/a&gt; is great because it reduces the gap between the development process and the release phase. With continuous integration, the work made by the developers is continuously compiled and tested against unit tests. This helps detecting many problems very early and simplifies the whole development process.&lt;/p&gt;&lt;div&gt;Hudson is an integration server that works very nicely with &lt;a href="http://maven.apache.org/"&gt;maven&lt;/a&gt; projects. So the first step to integrate a JavaFX project into our continuous integration environment was to &amp;#8220;mavenize&amp;#8221; the project. &lt;a href="http://www.jfrog.org/"&gt;Jfrog&lt;/a&gt; has developed a &lt;a href="http://wiki.jfrog.org/confluence/display/JP/JavaFX+Maven+Plugin"&gt;javafx plugin&lt;/a&gt; for maven that integrates the compilation of the javafx sources into the maven lifecycle. Moreover it can generate a jnlp to launch the project. &lt;/div&gt; &lt;p&gt;&lt;/p&gt;&lt;div&gt;However, this plugin is by default configured to work with &lt;a href="http://www.jfrog.org/products.php"&gt;artifactory&lt;/a&gt;. For some reasons you might want to use it without artifactory, and that&amp;#8217;s possible. Just checkout the attached project to see how to configure it. Since artifactory takes care of some jnlp deployment issues, some additionnal plugins are required in this case: the &lt;a href="http://maven.apache.org/plugins/maven-dependency-plugin/copy-mojo.html"&gt;dependency-plugin&lt;/a&gt; will copy the dependencies at the codebase directory of the jnlp and the &lt;a href="http://maven.apache.org/plugins/maven-jar-plugin/sign-mojo.html"&gt;jar-signer&lt;/a&gt; plugin will sign these jars.&lt;/div&gt; &lt;div&gt;At this step your project is fully integrated in the maven world. The last step is to deploy automatically the jnlp and required jars on a server to test your project. This can be achieved with the wagon plugin and its ftp extension (see attached project for an example of configuration). Then hudson can automatically deploy your application after each build by calling the mvn:deploy target. Enjoy!&lt;/div&gt; &lt;p&gt;&lt;/p&gt;&lt;div&gt;Note: in the attached project, we use profiles (see profiles.xml) to configure the project dynamically whether this is intended to be run locally or deployed on a remote server. The &amp;#8220;dev&amp;#8221; profile allow you to run the project locally (using mvn clean package jfrog-javafx:excute) and the &amp;#8220;prod&amp;#8221; profile if for deployment (mvn -P-dev,prod deploy)&lt;/div&gt;</description><link>http://blog.dooapp.com/post/48778159858</link><guid>http://blog.dooapp.com/post/48778159858</guid><pubDate>Mon, 08 Mar 2010 16:38:52 +0100</pubDate><category>JustMigrated</category><category>continuous integration</category><category>hudson</category><category>javafx</category><category>maven</category></item><item><title>Unit testing pages with Tapestry and Gaedo</title><description>&lt;p&gt;Today we added our first page unit test using tapestry. Tapestry offer some nice mechanisms to easily test the rendered pages (see the &lt;a href="http://tapestry.apache.org/tapestry5/guide/unit-testing-pages.html"&gt;tutorial&lt;/a&gt;); however some steps can be a bit tricky (essentially if you want to use the &lt;a href="http://www.ohloh.net/p/gaedo"&gt;gaedo&lt;/a&gt; persistence layer in your tests) so I&amp;#8217;ll give a few hints here.&lt;/p&gt;
&lt;div&gt;Tapestry provides a &lt;a href="http://tapestry.apache.org/tapestry5/apidocs/org/apache/tapestry5/test/PageTester.html"&gt;PageTester&lt;/a&gt; object that takes care about injection registry loading and page rendering.&lt;/div&gt;
&lt;div&gt;The PageTester takes an app package name and app name as parameters in its constructor. Make sure you don&amp;#8217;t make a mistake in them, because you won&amp;#8217;t get any error even if the package or app module don&amp;#8217;t exist, so check it twice if your test is failing without evident reason.&lt;/div&gt;
&lt;div&gt;To use the gaedo module, load it by adding it to the PageTester constructor. Moreover some configuration is required to work with a local database environment. All those steps can be done in an extension of the PageTester:&lt;/div&gt;
&lt;div&gt;&lt;p&gt;&lt;a href="https://gist.github.com/295767"&gt;&lt;a href="https://gist.github.com/295767"&gt;https://gist.github.com/295767&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div&gt;You can now use the render method of the GaedoPageTester to get the Document corresponding to a page and check it&amp;#8217;s content!&lt;/div&gt;
&lt;div&gt;&lt;p&gt;&lt;a href="https://gist.github.com/295783"&gt;&lt;a href="https://gist.github.com/295783"&gt;https://gist.github.com/295783&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div&gt;Last point: in the tapestry documentation you&amp;#8217;ll see that you must use the invoke method of the PageTester with a ComponentInvocation instance to provide a context to a given page. But if you use this, you&amp;#8217;ll get a compilation error, since the invoke method doesn&amp;#8217;t seem to exist yet/anymore (?). As explained in &lt;a href="http://old.nabble.com/How-do-you-pass-a-context-to-PageTester--td25274401.html"&gt;this thread&lt;/a&gt;, you can use the url passed to the render method to set the context. In the second test you can see we pass &amp;#8220;John&amp;#8221; as context to the &amp;#8220;People&amp;#8221; page by requesting the &amp;#8220;People/John&amp;#8221;. Easy, isn&amp;#8217;t it? Happy testing with gaedo and tapestry!&lt;/div&gt;</description><link>http://blog.dooapp.com/post/48778160450</link><guid>http://blog.dooapp.com/post/48778160450</guid><pubDate>Fri, 05 Feb 2010 14:30:00 +0100</pubDate><category>JustMigrated</category></item><item><title>Gaedo on Ohloh</title><description>&lt;p&gt;The open source project Gaedo that we use as persistence layer for our project is now on Ohloh.com!&lt;/p&gt;
&lt;div&gt;Gaedo is a persistence library providing dynamic code generation for your queries with strong typing. It&amp;#8217;s quick and easy to use. And dynamic code generation is awesome. Let&amp;#8217;s assume you need to retrieve your Users using their login field, you just need to define the following interface:&lt;/div&gt;
&lt;div&gt;&lt;p&gt;&lt;a href="https://gist.github.com/293805"&gt;&lt;a href="https://gist.github.com/293805"&gt;https://gist.github.com/293805&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div&gt;and gaedo will do the rest for you, using the method and fields types and names! It couldn&amp;#8217;t be easier to use!&lt;/div&gt;</description><link>http://blog.dooapp.com/post/48778161013</link><guid>http://blog.dooapp.com/post/48778161013</guid><pubDate>Wed, 03 Feb 2010 18:29:00 +0100</pubDate><category>JustMigrated</category><category>ohloh</category><category>gaedo</category></item><item><title>Running Tapestry5 + Maven on Google App Engine</title><description>&lt;h3&gt;1) Checking out Tapestry&lt;/h3&gt;
&lt;p&gt;&lt;br/&gt; As explained on the tapestry website , you should use the maven-tapestry-archetype&lt;/p&gt;

&lt;p&gt;&lt;tt&gt;&lt;p&gt;&lt;a href="https://gist.github.com/291610"&gt;&lt;a href="https://gist.github.com/291610"&gt;https://gist.github.com/291610&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;&lt;/tt&gt;&lt;/p&gt;
&lt;p&gt;While I&amp;#8217;m writting this article, the lastest stable version of tapestry is 5.1.0.5, but there are an issue concerning tapestry/gae compatibility.&lt;/p&gt;However, this bug is corrected in tapestry 5.1.0.6. If you still want to run tapestry 5.1.0.5 on GAE, you should use this quick fix&amp;#160;: &lt;p&gt;&lt;/p&gt; Create a new class org.apache.tapestry5.internal.antlr.PropertyExpressionLexer and put this code on&amp;#160;:
&lt;div style="overflow: auto; height: 200px;"&gt;&lt;br/&gt;&lt;p&gt;&lt;a href="https://gist.github.com/291621"&gt;&lt;a href="https://gist.github.com/291621"&gt;https://gist.github.com/291621&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;

&lt;h3&gt;2) Configuring the project for GAE&lt;/h3&gt;
&lt;p&gt;&lt;br/&gt;Drop a file named &amp;#8220;appengine-web.xml&amp;#8221; in src/main/webapp/WEB-INF&lt;/p&gt;The file should looks like this&amp;#160;: &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="https://gist.github.com/291626"&gt;&lt;a href="https://gist.github.com/291626"&gt;https://gist.github.com/291626&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;If you want to know how to synchronize GAE and maven version you should read this excellent article writed by Antoine&amp;#160;: &lt;a href="http://blog.dooapp.com/synchronize-maven-and-gae-application-version"&gt;&lt;a href="http://blog.dooapp.com/synchronize-maven-and-gae-application-version"&gt;http://blog.dooapp.com/synchronize-maven-and-gae-application-version&lt;/a&gt;&lt;/a&gt;&lt;p&gt;&lt;/p&gt; Of course, you&amp;#8217;ll need to download the GAE SDK for java from here&amp;#160;: &lt;a href="http://code.google.com/intl/fr/appengine/downloads.html"&gt;&lt;a href="http://code.google.com/intl/fr/appengine/downloads.html"&gt;http://code.google.com/intl/fr/appengine/downloads.html&lt;/a&gt;&lt;/a&gt;
&lt;h3&gt;3) Running the tapestry project on gae&lt;/h3&gt;
&lt;p&gt;&lt;br/&gt; Before starting to code, I suggest you to try running the simple tapestry example on gae.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Go to your project&lt;/li&gt;
&lt;li&gt;mvn package&lt;/li&gt;
&lt;li&gt;go to GAEHOME/bin&lt;/li&gt;
&lt;li&gt;./appcfg.sh update YOURPROJECTHOME/target/YOURPROJECTNAME&lt;/li&gt;
&lt;li&gt;Enter your mail and password&lt;/li&gt;
&lt;li&gt;go to &lt;a href="http://YOURPROJECTNAME.appspot.com"&gt;&lt;a href="http://YOURPROJECTNAME.appspot.com"&gt;http://YOURPROJECTNAME.appspot.com&lt;/a&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;For now, there are some issues when you run the gae server on your localhost. So I suggest you to test everything you do online. &lt;/p&gt; 
&lt;h3&gt;4) What&amp;#8217;s Next&lt;/h3&gt;
&lt;p&gt;&lt;br/&gt; Now you can run tapestry on gae, if you want to upload your application with maven, I suggest you to have a look at this plugin&amp;#160;: &lt;a href="http://code.google.com/p/maven-gae-plugin/"&gt;&lt;a href="http://code.google.com/p/maven-gae-plugin/"&gt;http://code.google.com/p/maven-gae-plugin/&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;And of course configuring a continuous integration server can be very useful to automatically build and deploy your application: &lt;a href="http://hudson-ci.org/"&gt;&lt;a href="http://hudson-ci.org/"&gt;http://hudson-ci.org/&lt;/a&gt;&lt;/a&gt;
&lt;p&gt; &lt;/p&gt;</description><link>http://blog.dooapp.com/post/48778161611</link><guid>http://blog.dooapp.com/post/48778161611</guid><pubDate>Mon, 01 Feb 2010 13:15:00 +0100</pubDate><category>JustMigrated</category><category>google app engine</category><category>tapestry</category></item><item><title>Gaedo, tapestry and mutual injection: where Proxies solve the egg and 	chicken problem</title><description>I was thinking about how to integrate the &lt;a href="http://gaedo.origo.ethz.ch/"&gt;gaedo&lt;/a&gt; library with our tapestry project. Gaedo is a persistance library providing dynamic finders.&lt;div&gt;To use gaedo properly with tapestry my first guess was to define a module (in tapestry terms) providing the required &lt;span style="font-family: Monaco; font-size: 11px;"&gt;ServiceRepository &lt;span style="font-family: arial; font-size: small;"&gt;which is the main entry point for gaedo. The GaedoModule class defines that binding for this interface using a build() method:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div&gt;&lt;p&gt;&lt;a href="https://gist.github.com/289860"&gt;&lt;a href="https://gist.github.com/289860"&gt;https://gist.github.com/289860&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;With the right entry &lt;span style="font-family: Monaco; font-size: 11px;"&gt;com.dooapp.gaedo.tapestry.GaedoModule: com.dooapp.gaedo.tapestry.GaedoModule &lt;span style="font-family: arial; font-size: small;"&gt;in the Manifest.mf file, dropping the jar of the gaedo-tapestry module in our tapestry application classpath is enough to get our module automatically loaded.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div&gt;As you can see in the build method, we expect a &lt;span style="font-family: Monaco; font-size: 11px;"&gt;Collection&amp;lt;FinderCrudService&amp;gt; configuration&lt;span style="font-family: arial; font-size: small;"&gt; to configure the ServiceRepository properly. This parameter can be provided through the tapestry mechanism for service configuration. So in the &lt;span style="font-family: Monaco; font-size: 11px;"&gt;AppModule &lt;span style="font-family: arial; font-size: small;"&gt;of our tapesty application we just need to define a method call &lt;span style="font-family: Monaco; font-size: 11px;"&gt;contributeServiceRepository&lt;span style="font-family: arial; font-size: small;"&gt; to provide the required configuration to our &lt;span style="font-family: Monaco; font-size: 11px;"&gt;ServiceRepository&lt;span style="font-family: arial; font-size: small;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div&gt;&lt;p&gt;&lt;a href="https://gist.github.com/289864"&gt;&lt;a href="https://gist.github.com/289864"&gt;https://gist.github.com/289864&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;You might have noticed that we get the &lt;span style="font-family: Monaco; font-size: 11px;"&gt;ServiceRepository &lt;span style="font-family: arial; font-size: small;"&gt;injected in this method. Weird? Who will be instanciated first? The ServiceRepostiory that requires the collection of FinderCrudService to be fully configured or the FinderCurdService which needs itself the ServiceRepostory to be instanciated?&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div&gt;I was thinking some hours about how to solve this problem, trying to remove some dependencies when I stumbled upon the &lt;a href="http://tapestry.apache.org/tapestry5/tapestry-ioc/service.html"&gt;documentation&lt;/a&gt; about mutually dependent services injection with the tapestry IoC framework. And the conclusion is: it *just* works! I had nothing to do! This mutual injection just perfectly works out of box! Amazing! The big point is that the tapestry IoC framework is working with Proxies to instantiate objects, and that&amp;#8217;s the key of this egg and chicken mistery. Both service can be instantiated in any order, you don&amp;#8217;t need to care about it. It will work.&lt;/div&gt;</description><link>http://blog.dooapp.com/post/48778162221</link><guid>http://blog.dooapp.com/post/48778162221</guid><pubDate>Fri, 29 Jan 2010 17:40:34 +0100</pubDate><category>JustMigrated</category></item><item><title>Synchronize maven and gae application version</title><description>&lt;p&gt;&lt;span style="font-size: small;"&gt;We are currently developing a maven project deployed on google appengine.Maven manages a version property in its &lt;/span&gt;&lt;strong&gt;&lt;span style="font-size: small;"&gt;pom.xml&lt;span style="font-weight: normal;"&gt;&lt;span style="font-size: small;"&gt;:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;p&gt;&lt;a href="https://gist.github.com/282702"&gt;&lt;a href="https://gist.github.com/282702"&gt;https://gist.github.com/282702&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;span style="font-size: small;"&gt;When we release the pr&lt;/span&gt;oject with maven (&lt;em&gt;mvn release:prepare&lt;/em&gt; and &lt;em&gt;mvn release:perform&lt;/em&gt;), this version number gets automatically increased to the next development version, for example from 0.0.1-SNAPSHOT to 0.0.2-SNAPSHOT.&lt;/div&gt;
&lt;div&gt;The main problem is that google app engine uses another version descriptor in the &lt;strong&gt;appengine-web.xml&lt;/strong&gt; file that is independent from the first one:&lt;/div&gt;
&lt;div&gt;&lt;span style="font-family: Monaco, Helvetica, sans-serif; color: #009292; font-size: small;"&gt;&lt;span style="font-size: 11px;"&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif; color: #000000; font-size: small;"&gt;&lt;span style="font-size: 13px;"&gt;&lt;p&gt;&lt;a href="https://gist.github.com/282703"&gt;&lt;a href="https://gist.github.com/282703"&gt;https://gist.github.com/282703&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p style=""&gt;&lt;span style="font-family: arial, helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;It would be great to get those to versions number synchronized! Here is a solution how to get it working:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: arial, helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Define a tiny groovy script, let&amp;#8217;s say utils.groovy, that will define a property defining the gae version. The problem is that we can&amp;#8217;t use

the maven version directly since gae does not accept &amp;#8216;.&amp;#8217; and &amp;#8216;-SNAPSHOT&amp;#8217; in it&amp;#8217;s version. So this script will map the gae version to the maven version in that way:  X.Y.Z(-SNAPSHOT) -&amp;gt; X-Y-Z . Of course we will lose the SNAPSHOT information, but this is not really relevant in gae terms. Your application will be deployed at &lt;a href="http://X-Y-Z.latest.myproject-site.appspot.com"&gt;X-Y-Z.latest.myproject-site.appspot.com&lt;/a&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;span style="font-family: arial, helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco;"&gt;&lt;span style="color: #000000;"&gt;&lt;p&gt;&lt;a href="https://gist.github.com/282704"&gt;&lt;a href="https://gist.github.com/282704"&gt;https://gist.github.com/282704&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: arial, helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Attach the execution of the groovy script to the maven validate phase adding this to the pom.xml&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;span style="font-family: arial, helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color: #489191;"&gt;&lt;span style="color: #009292;"&gt;&lt;span style="color: #000000;"&gt;&lt;p&gt;&lt;a href="https://gist.github.com/282706"&gt;&lt;a href="https://gist.github.com/282706"&gt;https://gist.github.com/282706&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: arial, helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;This will define a maven property named &lt;strong&gt;gaeversion&lt;/strong&gt; that you can use in your appengine-web.xml file&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;span style="font-family: arial, helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color: #3b3df5;"&gt;&lt;span style="color: #009292;"&gt;&lt;span style="color: #000000;"&gt;&lt;p&gt;&lt;a href="https://gist.github.com/282707"&gt;&lt;a href="https://gist.github.com/282707"&gt;https://gist.github.com/282707&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
 
&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: arial, helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;And finally tell to maven to filter our appengine-web.xml resource!&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;span style="font-family: arial, helvetica, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color: #489191;"&gt;&lt;span style="color: #009292;"&gt;&lt;span style="color: #000000;"&gt;&lt;p&gt;&lt;a href="https://gist.github.com/282709"&gt;&lt;a href="https://gist.github.com/282709"&gt;https://gist.github.com/282709&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</description><link>http://blog.dooapp.com/post/48778163056</link><guid>http://blog.dooapp.com/post/48778163056</guid><pubDate>Thu, 21 Jan 2010 10:47:00 +0100</pubDate><category>JustMigrated</category><category>appengine</category><category>gae</category><category>maven</category><category>resource filtering</category><category>versioning</category></item></channel></rss>
