<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.infosupport.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Paul Bakker</title><link>http://blogs.infosupport.com/blogs/paul_bakker/default.aspx</link><description /><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP1 (Build: 31106.3070)</generator><item><title>Open source, free Community Edition of IntelliJ</title><link>http://blogs.infosupport.com/blogs/paul_bakker/archive/2009/10/15/open-source-free-community-edition-of-intellij.aspx</link><pubDate>Thu, 15 Oct 2009 21:10:00 GMT</pubDate><guid isPermaLink="false">56f6167b-0c51-4839-ab2d-34653eeb5c9c:29014</guid><dc:creator>Paulb</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.infosupport.com/blogs/paul_bakker/rsscomments.aspx?PostID=29014</wfw:commentRss><comments>http://blogs.infosupport.com/blogs/paul_bakker/archive/2009/10/15/open-source-free-community-edition-of-intellij.aspx#comments</comments><description>&lt;p&gt;Jetbrains has open sourced IntelliJ, my favorite IDE. Besides that, they introduced a free Community Edition. The Community Edition is a stripped down version of the full product. Most of the JavaSE (and other languages such as Groovy and Scala) are available, but all JEE stuff (even simple web projects) are not. Check out the &lt;a target="_blank" href="http://www.jetbrains.com/idea/nextversion/editions_comparison_matrix.html"&gt;comparison matrix&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;While I do like the introduction of the free edition because it will help spreading IntelliJ, I wonder how many people can actually use it when all enterprise functionality is removed. Eclipse has WTP for developing web projects. To my opinion it&amp;#39;s by far not as good as Intellij&amp;#39;s web/JEE functionality, it&amp;#39;s still free.&lt;/p&gt;
&lt;p&gt;For basic Java coding, I don&amp;#39;t really see the advantage of IntelliJ, both IDEs are good at it. The advantage is in the support for frameworks and JEE. I wish Java developers would stop making a big deal of having to pay for something, specially when it&amp;#39;s very reasonable priced.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The &lt;a target="_blank" href="http://www.jetbrains.com/idea/nextversion/index.html"&gt;list of features&lt;/a&gt; of the upcoming version 9 is very impressive by the way. A lot of the new JEE 6 technology is supported already and Grails support is getting more and more impressive.&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=29014" width="1" height="1"&gt;</description><category domain="http://blogs.infosupport.com/blogs/paul_bakker/archive/tags/Java/default.aspx">Java</category><category domain="http://blogs.infosupport.com/blogs/paul_bakker/archive/tags/Intellij/default.aspx">Intellij</category></item><item><title>Testing Grails REST services</title><link>http://blogs.infosupport.com/blogs/paul_bakker/archive/2009/08/20/testing-grails-rest-services.aspx</link><pubDate>Thu, 20 Aug 2009 15:06:00 GMT</pubDate><guid isPermaLink="false">56f6167b-0c51-4839-ab2d-34653eeb5c9c:16693</guid><dc:creator>Paulb</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.infosupport.com/blogs/paul_bakker/rsscomments.aspx?PostID=16693</wfw:commentRss><comments>http://blogs.infosupport.com/blogs/paul_bakker/archive/2009/08/20/testing-grails-rest-services.aspx#comments</comments><description>&lt;p&gt;Unit Testing in Grails is very easy. If you are not familiar with this, you should definitely check out the reference manual about it. Today however, I was writing some REST services that return XML. The controller does content negotiation and can, depending on the request, return HTML or XML. Of course I also wanted to write a test for it, but I couldn&amp;#39;t find how to do it in the documentation. It turns out to be very easy, but I wanted to share how I did it.&lt;/p&gt;
&lt;p&gt;First a simple version of a controller that supports content negotiation:&amp;nbsp;&lt;/p&gt;
&lt;pre style="font-family:Andale Mono, Lucida Console, Monaco, fixed, monospace;color:#000000;background-color:#eee;font-size:12px;border:1px dashed #999999;line-height:14px;padding:5px;overflow:auto;width:100%;"&gt;&lt;code&gt;def list = {
    def myContact = new Contact(firstname: &amp;#39;Paul&amp;#39;, lastname: &amp;#39;Bakker&amp;#39;)

    withFormat {
      html {
        [contact: myContact]      
      }

      xml {
        render(contentType: &amp;quot;application/xml&amp;quot;) {            
            contact {
              firstname(myContact.firstname)
              lastname(myContact.lastname)
            }
        }
      }
    }
  }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The withFormat block chooses, depending on the request, the response to build. If this controller is requested with a normal URL from a browser, HTML will be returned. If the Accept header is set, or if the URL is postfixed &amp;#39;.xml&amp;#39;, XML will be returned however. This is all documented well in the reference documentation, so you can read the details there. If the controller is requested for XML, the following XML will be returned:&lt;/p&gt;
&lt;pre style="font-family:Andale Mono, Lucida Console, Monaco, fixed, monospace;color:#000000;background-color:#eee;font-size:12px;border:1px dashed #999999;line-height:14px;padding:5px;overflow:auto;width:100%;"&gt;&lt;code&gt;&amp;lt;contact&amp;gt;
   &amp;lt;firstname&amp;gt;Paul&amp;lt;/firstname&amp;gt;
   &amp;lt;lastname&amp;gt;Bakker&amp;lt;/lastname&amp;gt;
&amp;lt;/contact&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Next I wanted to write a Unit Test for this controller. There are two special things about testing a controller that does content negotiation:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Request the correct content type&lt;/li&gt;
&lt;li&gt;Test if the response is generated correctly&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;For the first step you should first understand how the controller figures out what content type to return. When Grails processes a request, it will check both the Accept header and the URL extension (note that the Accept header is not enabled by default!). It will set a variable &lt;i&gt;request.format&lt;/i&gt; with the value that is defined in the mime.types configuration in Config.groovy for that request format. So concluding, you&amp;#39;ll need to set the &lt;i&gt;request.format &lt;/i&gt;variable in the test, which is very easy.&amp;nbsp;&lt;/p&gt;
&lt;pre style="font-family:Andale Mono, Lucida Console, Monaco, fixed, monospace;color:#000000;background-color:#eee;font-size:12px;border:1px dashed #999999;line-height:14px;padding:5px;overflow:auto;width:100%;"&gt;&lt;code&gt;controller.request.format = &amp;#39;xml&amp;#39;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Note that the &lt;i&gt;controller &lt;/i&gt;variable in the example is the implicitly created controller by the&amp;nbsp;&lt;i&gt;ControllerUnitTestCase.&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;Next you should invoke the controller and check the XML returned by the controller. This is what I couldn&amp;#39;t find in the documentation. After invocation you can access the response using:&lt;/p&gt;
&lt;pre style="font-family:Andale Mono, Lucida Console, Monaco, fixed, monospace;color:#000000;background-color:#eee;font-size:12px;border:1px dashed #999999;line-height:14px;padding:5px;overflow:auto;width:100%;"&gt;&lt;code&gt;controller.response.getContentAsString()
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This contains the XML as a String, which you can parse using XmlParser. Easy! The complete test is displayed below. Note that only the XML request is tested. You should add another test to test the HTML response.&lt;/p&gt;
&lt;pre style="font-family:Andale Mono, Lucida Console, Monaco, fixed, monospace;color:#000000;background-color:#eee;font-size:12px;border:1px dashed #999999;line-height:14px;padding:5px;overflow:auto;width:100%;"&gt;&lt;code&gt;void testListInXML() {
    controller.request.format = &amp;#39;xml&amp;#39;

    controller.list()

    def contact = new XmlParser().parseText(controller.response.getContentAsString())
    assert contact.firstname.text() == &amp;#39;Paul&amp;#39;
    assert contact.lastname.text() == &amp;#39;Bakker&amp;#39;

  }
&lt;/code&gt;&lt;/pre&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=16693" width="1" height="1"&gt;</description><category domain="http://blogs.infosupport.com/blogs/paul_bakker/archive/tags/Grails/default.aspx">Grails</category><category domain="http://blogs.infosupport.com/blogs/paul_bakker/archive/tags/Testing/default.aspx">Testing</category></item><item><title>JavaFX 1.2 example: Folder Visualizer</title><link>http://blogs.infosupport.com/blogs/paul_bakker/archive/2009/08/17/javafx-folder-visualizer.aspx</link><pubDate>Mon, 17 Aug 2009 14:22:00 GMT</pubDate><guid isPermaLink="false">56f6167b-0c51-4839-ab2d-34653eeb5c9c:16667</guid><dc:creator>Paulb</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.infosupport.com/blogs/paul_bakker/rsscomments.aspx?PostID=16667</wfw:commentRss><comments>http://blogs.infosupport.com/blogs/paul_bakker/archive/2009/08/17/javafx-folder-visualizer.aspx#comments</comments><description>&lt;p&gt;Last year I blogged about a small JavaFX project I implemented called Folder-Visualizer. The tool lets you find large files and directories to effectively clean your hard disk. The previous version of the tool was implemented with an early beta of JavaFX. I reimplemented it with JavaFX 1.2, now using standard components, charts and background tasks. I will show some of the code to give an idea what it takes to implement a real application with the current version of JavaFX.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.infosupport.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/paul_5F00_bakker/folder_2D00_visualizer.png"&gt;&lt;img border="0" src="http://blogs.infosupport.com/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/paul_5F00_bakker/folder_2D00_visualizer.png" style="border:1px solid black;" alt="" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Charts&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In a &lt;a href="http://blogs.infosupport.com/blogs/paul_bakker/archive/2009/07/10/javafx-charts.aspx"&gt;previous post&lt;/a&gt;&amp;nbsp;I blogged about the new charting components in JavaFX 1.2. They are easy to use. Common functionality such as rendering from a sequence of data and clicking on a part of the chart is all supported, and they look ok too. In the PieChart there is a very annoying rendering error however (the black line at the left top) which is always there. And while I think the charts look good, they are nowhere near the looks of the Flex charting components yet...&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Temporarily adding nodes&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Sometimes you want to add a node temporarily. For example, when this app is indexing, the chart is removed and a ProgressIndicator is displayed. As soon as the indexing process is finished, the ProgessIndicator is removed again and the new chart is added to the scene. The easiest way to remove a node is by using it&amp;#39;s id. You can give a node an id by setting the id property, which is a String. Next you can use the &amp;quot;lookup&amp;quot; function on Scene. This is very &amp;nbsp;much like the &amp;quot;getElementById&amp;quot; method in JavaScript, and you can use it the same way. So to remove the chart (id: &amp;quot;chart&amp;quot;) you can use the following code:&lt;/p&gt;
&lt;pre style="font-family:Andale Mono, Lucida Console, Monaco, fixed, monospace;color:#000000;background-color:#eee;font-size:12px;border:1px dashed #999999;line-height:14px;padding:5px;overflow:auto;width:100%;"&gt;&lt;code&gt;delete scene.lookup(&amp;quot;chart&amp;quot;)  from scene.content;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Also remember that the scene&amp;#39;s content is just a sequence. This means you can easily add nodes on the fly too, for example:&lt;/p&gt;
&lt;pre style="font-family:Andale Mono, Lucida Console, Monaco, fixed, monospace;color:#000000;background-color:#eee;font-size:12px;border:1px dashed #999999;line-height:14px;padding:5px;overflow:auto;width:100%;"&gt;&lt;code&gt;  insert ProgressIndicator {
             id: &amp;quot;progress&amp;quot;
             progress: -1;
             translateX: 300
             translateY: 400
             scaleX: 10
             scaleY: 10
           } into scene.content;    
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Binding to Java&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The actual scanning and indexing of directories is implemented in Groovy. The Groovy classes are simply packaged in a JAR file, and the JAR file is used from JavaFX. JavaFX can call any Groovy code without a problem, but some extra work was still necessary. The Groovy classes return a java.util.List with the indexing information. JavaFX can use lists, but you can&amp;#39;t use binding on it. The following code for example will &lt;span style="text-decoration:underline;"&gt;not&lt;/span&gt;&amp;nbsp;compile:&lt;/p&gt;
&lt;pre style="font-family:Andale Mono, Lucida Console, Monaco, fixed, monospace;color:#000000;background-color:#eee;font-size:12px;border:1px dashed #999999;line-height:14px;padding:5px;overflow:auto;width:100%;"&gt;&lt;code&gt; var list = new ArrayList();
    list.add(&amp;quot;Str1&amp;quot;);
    list.add(&amp;quot;Str2&amp;quot;);

    var seq = bind for(item in list) {
        item;
    }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This can be partly solved by transforming the List into a Sequence yourself (example below) so you can at least use binding and sequence syntax in the rest of the code, but you still need to update the sequence yourself when the List is changed.&amp;nbsp;&lt;/p&gt;
&lt;pre style="font-family:Andale Mono, Lucida Console, Monaco, fixed, monospace;color:#000000;background-color:#eee;font-size:12px;border:1px dashed #999999;line-height:14px;padding:5px;overflow:auto;width:100%;"&gt;&lt;code&gt;function createSequence(list : List) : FolderItem[]{
    var items : FolderItem[] = [];

    for(item in list) {
        insert item as FolderItem into items;
    };

    return items;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;While this might look like a problem, it&amp;#39;s just a inconvenience. It&amp;#39;s great that JavaFX call Java. This feature alone makes JavaFX more interesting than AIR, where your whole app must be ActionScript. While I don&amp;#39;t mind writing the UI in a new (less mature) language, I don&amp;#39;t want to write all my code in it.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Strange binding bug?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I did run into some strange error at some point. As you might have noticed in the code of the BreadCrum, I use a bind for color while this is already in a bound context. To me this seems unnecessary. However if I remove the bind, the application still works correctly, but also shows a warning at the command line, telling that a node was added to a Group while not removed from it&amp;#39;s old Group. I can&amp;#39;t explain it at this moment, and to me it seems like a bug.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Talking about bugs, I found that a lot of bugs are fixed in version 1.2. In previous versions I did still sometimes run into, often binding related, bugs. Besides this error everything worked exactly as expected.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Using FileChooser&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;JavaFX doesn&amp;#39;t have a FileChooser component. You can use the Swing JFileChooser without any problem however, and it doesn&amp;#39;t compromise rendering since a native window is used anyway.&amp;nbsp;&lt;/p&gt;
&lt;pre style="font-family:Andale Mono, Lucida Console, Monaco, fixed, monospace;color:#000000;background-color:#eee;font-size:12px;border:1px dashed #999999;line-height:14px;padding:5px;overflow:auto;width:100%;"&gt;&lt;code&gt;var fc = new JFileChooser();
fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);

var retVal = fc.showOpenDialog(null);

if(retVal == JFileChooser.APPROVE_OPTION) {
   dirNameInput.text = fc.getSelectedFile().getAbsolutePath();
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Executing background tasks&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Another new feature in JavaFX 1.2 is support for background task execution. In the Folder-Visualizer application the indexing can potentially take a long time, and you don&amp;#39;t want the interface to freeze as soon as indexing starts. The indexing should run in a separate thread obviously. JavaFX has the JavaTaskBase class that is similar with Java&amp;#39;s Callable. You need to override the &amp;quot;create&amp;quot; function that returns a RunnableFeature. The RunnableFeature contains the real work, and can be implemented in Java. When the task is done, you probably want to change something in the UI. Similar to Swing programming you can use a method &amp;quot;Entry.deferAction(Runnable)&amp;quot; to run code on the UI thread. The code that will run on the UI thread is a callback. &lt;/p&gt;
&lt;p&gt;Confused yet? It took me a minute to grasp it. Three extra classes to just execute a piece of Java code on the background. While it&amp;#39;s an elegant solution, it&amp;#39;s still feels like a lot of work. So to summarize you&amp;#39;ll need the following&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;A task description (written in JavaFX, extends JavaTaskBase)&lt;/li&gt;
&lt;li&gt;A RunnableFuture implementation (written in Java, implements RunnableFuture)&lt;/li&gt;
&lt;li&gt;A callback interface (so that Java can call JavaFX)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I will show the implementation of each class, and the code that actually starts the task.&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration:underline;"&gt;Task Description&lt;/span&gt;&lt;/p&gt;
&lt;pre style="font-family:Andale Mono, Lucida Console, Monaco, fixed, monospace;color:#000000;background-color:#eee;font-size:12px;border:1px dashed #999999;line-height:14px;padding:5px;overflow:auto;width:100%;"&gt;&lt;code&gt;public class VisualizeTask extends JavaTaskBase{
    public var dir : String;
    public var callback : FXListener;

    public override function create() {
       new VisualizeFuture(dir, callback);

    }

}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration:underline;"&gt;RunnableFuture implementation&lt;/span&gt;&lt;/p&gt;
&lt;pre style="font-family:Andale Mono, Lucida Console, Monaco, fixed, monospace;color:#000000;background-color:#eee;font-size:12px;border:1px dashed #999999;line-height:14px;padding:5px;overflow:auto;width:100%;"&gt;&lt;code&gt;public class VisualizeFuture implements RunnableFuture {

    private final FXListener listener;
    private final String dir;
    

    public VisualizeFuture(final String dir, final FXListener listener) {
        this.listener = listener;
        this.dir = dir;       
    }

    public void run() throws Exception {
        Folder folder = new Folder(dir);
        FolderVisualizer visualizer = FolderVisualizer.create(folder);
        final List&amp;lt;FolderItem&amp;gt; items = visualizer.toVisualize(folder, 5);

        Entry.deferAction(new Runnable() {

            public void run() {
                listener.callback(items);
            }
        });
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration:underline;"&gt;Callback interface&lt;/span&gt;&lt;/p&gt;
&lt;pre style="font-family:Andale Mono, Lucida Console, Monaco, fixed, monospace;color:#000000;background-color:#eee;font-size:12px;border:1px dashed #999999;line-height:14px;padding:5px;overflow:auto;width:100%;"&gt;&lt;code&gt;public interface FXListener {
    public void callback(List&amp;lt;FolderItem&amp;gt; items);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration:underline;"&gt;Executing the task&lt;/span&gt;&lt;/p&gt;
&lt;pre style="font-family:Andale Mono, Lucida Console, Monaco, fixed, monospace;color:#000000;background-color:#eee;font-size:12px;border:1px dashed #999999;line-height:14px;padding:5px;overflow:auto;width:100%;"&gt;&lt;code&gt; var visualizeTask = VisualizeTask {
        dir: dirNameInput.text
        callback: FXListener {
            override function callback(ret : List) : Void{                
                createChart(createSequence(ret));
            }
        }
    };
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Downloading Folder-Visualizer and check the code&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The Folder-Visualizer is hosted at Google Code: &lt;a href="http://folder-visualizer.googlecode.com"&gt;http://folder-visualizer.googlecode.com&lt;/a&gt;. You can &lt;a href="http://folder-visualizer.googlecode.com/files/FolderVisualizer-JavaFX.jnlp"&gt;install&lt;/a&gt; the application by simply clicking the JNLP file, it will install as Webstart application. Besides the JavaFX version, there is a AIR version developed by &lt;a href="http://jcraane.blogspot.com/"&gt;Jamie Craane&lt;/a&gt;.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=16667" width="1" height="1"&gt;</description><category domain="http://blogs.infosupport.com/blogs/paul_bakker/archive/tags/JavaFX/default.aspx">JavaFX</category></item><item><title>VMware acquires SpringSource</title><link>http://blogs.infosupport.com/blogs/paul_bakker/archive/2009/08/11/vmware-acquires-springsource.aspx</link><pubDate>Tue, 11 Aug 2009 07:41:00 GMT</pubDate><guid isPermaLink="false">56f6167b-0c51-4839-ab2d-34653eeb5c9c:16620</guid><dc:creator>Paulb</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.infosupport.com/blogs/paul_bakker/rsscomments.aspx?PostID=16620</wfw:commentRss><comments>http://blogs.infosupport.com/blogs/paul_bakker/archive/2009/08/11/vmware-acquires-springsource.aspx#comments</comments><description>&lt;p&gt;Interesting news today; SpringSource is acquired by VMware. Rod Johnson will continue to lead SpringSource however. The idea behind the merge is extending the Spring stack with deep support for virtualization. There is no product overlap between the two companies, and licenses are not going to change according to Rod Johnson. While VMware is not a company that I expected to be interested in a company like SpringSource, it does make a lot of sense. I feel like this will truly result in a better full-stack experience, so I can&amp;#39;t wait for hearing more details about new products etc!&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Read the original blog post &lt;a href="http://blog.springsource.com/2009/08/10/springsource-chapter-two/"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=16620" width="1" height="1"&gt;</description><category domain="http://blogs.infosupport.com/blogs/paul_bakker/archive/tags/Spring/default.aspx">Spring</category><category domain="http://blogs.infosupport.com/blogs/paul_bakker/archive/tags/Spring+Source/default.aspx">Spring Source</category><category domain="http://blogs.infosupport.com/blogs/paul_bakker/archive/tags/VMware/default.aspx">VMware</category></item><item><title>JavaFx Charts</title><link>http://blogs.infosupport.com/blogs/paul_bakker/archive/2009/07/10/javafx-charts.aspx</link><pubDate>Fri, 10 Jul 2009 14:03:00 GMT</pubDate><guid isPermaLink="false">56f6167b-0c51-4839-ab2d-34653eeb5c9c:16314</guid><dc:creator>Paulb</dc:creator><slash:comments>8</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.infosupport.com/blogs/paul_bakker/rsscomments.aspx?PostID=16314</wfw:commentRss><comments>http://blogs.infosupport.com/blogs/paul_bakker/archive/2009/07/10/javafx-charts.aspx#comments</comments><description>&lt;p&gt;One of the really cool things in the JavaFx 1.2 release are the addition of Charts. The charts look great but the documentation is far from sufficient. So I wrote down this post to help out a little.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pie chart&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Lets start with a pie chart.&amp;nbsp;The most important part of a pie chart definition is the sequence of data. For the example chart, there are three PieChart.Data instances in the data sequence. Netbeans&amp;#39; code completion doesn&amp;#39;t really work anymore when working on inner classes (such as PieChart.Data) so don&amp;#39;t expect to get any help from the IDE. Each data point must specify a value (the percentage of the section), the fill (color of the section) and a label.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.infosupport.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/paul_5F00_bakker/piechart2.png"&gt;&lt;img src="http://blogs.infosupport.com/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/paul_5F00_bakker/piechart2.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;pre style="font-family:Andale Mono, Lucida Console, Monaco, fixed, monospace;color:#000000;background-color:#eee;font-size:12px;border:1px dashed #999999;line-height:14px;padding:5px;overflow:auto;width:100%;"&gt;&lt;code&gt;PieChart {
            title: &amp;quot;Language Popularity (Tiobe Index)&amp;quot;
            data: [
                PieChart.Data {
                   value: 20.452                   
                   label: &amp;quot;Java&amp;quot;
                }

                PieChart.Data {
                   value: 4.530                   
                   label: &amp;quot;C#&amp;quot;
                }

                PieChart.Data {
                   value: 10.419
                   label: &amp;quot;C++&amp;quot;
                }

                PieChart.Data {
                   value: 17.319
                   label: &amp;quot;C&amp;quot;
                }

                PieChart.Data {
                   value: 9.269
                   label: &amp;quot;PHP&amp;quot;
                }

                PieChart.Data {
                   value: 7.789
                   label: &amp;quot;Visual Basic&amp;quot;
                }

                PieChart.Data {
                   value: 100 - 20.452 - 4.530 - 10.419 - 17.319 - 9.269 - 7.789
                   label: &amp;quot;Other&amp;quot;
                }
            ]
        }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The 3D version of the chart works exactly the same, just use the PieChart3D class instead.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.infosupport.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/paul_5F00_bakker/pie3dcart2.png"&gt;&lt;img src="http://blogs.infosupport.com/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/paul_5F00_bakker/pie3dcart2.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Scaling&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;For scaling a chart you can simply use the scaleX and scaleY properties. Rendering will be smooth even when you scale to large values because the charts are drawn directly, no pictures are used.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bar chart&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Next where going to look at the bar chart. A bar chart&amp;#39;s data (BarChart.Data) is grouped in series (BarChart.Series). Take the following chart as an example, it shows the top 6 of the &lt;a href="http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html"&gt;Tiobe index&lt;/a&gt;.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.infosupport.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/paul_5F00_bakker/barchart.png"&gt;&lt;img src="http://blogs.infosupport.com/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/paul_5F00_bakker/barchart.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style="font-weight:normal;"&gt;In this chart there are two series: 2008 and 2009. Each series contains data for each language. The names of the series will be rendered in the legend. The languages are specified in the categories property of the CategoryAxis. The bounds of the value axis is specified in the valueAxis.&amp;nbsp;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;pre style="font-family:Andale Mono, Lucida Console, Monaco, fixed, monospace;color:#000000;background-color:#eee;font-size:12px;border:1px dashed #999999;line-height:14px;padding:5px;overflow:auto;width:100%;"&gt;&lt;code&gt; BarChart {
        categoryAxis: CategoryAxis {
            categories: [&amp;quot;Java&amp;quot;, &amp;quot;C&amp;quot;, &amp;quot;C++&amp;quot;, &amp;quot;PHP&amp;quot;, &amp;quot;Visual Basic&amp;quot;, &amp;quot;C#&amp;quot;]
        }
        valueAxis: NumberAxis {
            lowerBound: 0
            upperBound: 25
            tickUnit: 20
            label:&amp;quot;Rating (%)&amp;quot;
        }
        data: [
            BarChart.Series {
                name: &amp;quot;2008&amp;quot;
                data: [
                    BarChart.Data {
                        value: 20.452 + 0.89
                    }

                    BarChart.Data {
                        value: 17.319 - 1.37
                    }

                    BarChart.Data {
                        value: 10.419 + 0.27
                    }

                    BarChart.Data {
                        value: 9.269 + 0.26
                    }

                    BarChart.Data {
                        value: 7.789 + 2.66
                    }

                    BarChart.Data {
                        value: 4.540 - 0.54
                    }
                ]
           }

           BarChart.Series {
                name: &amp;quot;2009&amp;quot;
                data: [
                    BarChart.Data {
                        value: 20.452
                    }

                    BarChart.Data {
                        value: 17.319
                    }

                   BarChart.Data {
                        value: 10.419
                    }

                     BarChart.Data {
                        value: 9.269
                    }

                    BarChart.Data {
                        value: 7.789
                    }

                    BarChart.Data {
                        value: 4.540

                    }
                ]
            }

        ]
    }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The 3D version of the bar chart works exactly the same again.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Line chart&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Next is the line chart. Just like the bar chart, a line chart&amp;#39;s data is divided into series. Each serie defines values for a line on the graph. In the example graph there are two; one for the temperatures in 2008, and one for 2009. It&amp;#39;s important to first specify the upper and lower bounds of the xAxis and yAxis. If you don&amp;#39;t, your graph won&amp;#39;t display anything. Also set the ticketcount for the xAis correctly. In the example code you&amp;#39;ll also see that I specified a formatTicketLabel funtion. This function is used to create String values of each value.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;All there is left is specify the data points for the graph. You only need to set the value property.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.infosupport.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/paul_5F00_bakker/linechart.png"&gt;&lt;img border="0" src="http://blogs.infosupport.com/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/paul_5F00_bakker/linechart.png" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;pre style="font-family:Andale Mono, Lucida Console, Monaco, fixed, monospace;color:#000000;background-color:#eee;font-size:12px;border:1px dashed #999999;line-height:14px;padding:5px;overflow:auto;width:100%;"&gt;&lt;code&gt;LineChart {
        title: &amp;quot;Daily mean temparatures in July (data from KNMI)&amp;quot;
        xAxis: NumberAxis {
            tickUnit:1
            lowerBound:8
            upperBound: 12
            label: &amp;quot;Day (in July)&amp;quot;
            formatTickLabel: function(val) {numberFormatter.format(val)}
        }

        yAxis: NumberAxis {
            lowerBound: 0
            upperBound: 30
            label: &amp;quot;Temperature&amp;quot;
        }

        data: [
            LineChart.Series {
                name: &amp;quot;2009&amp;quot;
                data: [
                    LineChart.Data {
                        xValue: 8
                        yValue: 15.6
                    }

                    LineChart.Data {
                        xValue: 9
                        yValue: 15.1
                    }

                    LineChart.Data {
                        xValue: 10
                        yValue: 14.4
                    }

                    LineChart.Data {
                        xValue: 11
                        yValue: 16.6
                    }

                    LineChart.Data {
                        xValue: 12
                        yValue: 17.5
                    }
                ]
            }

            LineChart.Series {
                name: &amp;quot;2008&amp;quot;
                data: [
                    LineChart.Data {
                        xValue: 8
                        yValue: 14.7
                    }

                    LineChart.Data {
                        xValue: 9
                        yValue: 15.6
                    }

                    LineChart.Data {
                        xValue: 10
                        yValue: 16.9
                    }

                    LineChart.Data {
                        xValue: 11
                        yValue: 16.6
                    }

                    LineChart.Data {
                        xValue: 12
                        yValue: 15.0
                    }
                ]
            }
        ]
    }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bubble chart&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The last chart is the bubble chart. The bubble chart is similar to the line chart, but introduces a third series of values. For the example graph I used the sunshine duration. This third series of data is displayed as a bubble. The bigger the value, the bigger the bubble. This value is specified in the BubbleChart.Data radius property.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.infosupport.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/paul_5F00_bakker/bubblechart.png"&gt;&lt;img src="http://blogs.infosupport.com/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/paul_5F00_bakker/bubblechart.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;pre style="font-family:Andale Mono, Lucida Console, Monaco, fixed, monospace;color:#000000;background-color:#eee;font-size:12px;border:1px dashed #999999;line-height:14px;padding:5px;overflow:auto;width:100%;"&gt;&lt;code&gt;BubbleChart {
        scaleBubbleRadiusUsingAxis: false

        
        title : &amp;quot;Daily mean temparatures in July (data from KNMI)&amp;quot;
                xAxis : NumberAxis{
                    lowerBound: 7
                    upperBound : 13
                    label: &amp;quot;Day&amp;quot;
                    visible: true
                    axisStrokeWidth: 1
                    tickUnit : 1
                    tickLabelsVisible: true
                   


                }
                yAxis : NumberAxis{
                    lowerBound: 0
                    upperBound : 30
                    tickUnit: 1
                    label: &amp;quot;Temperature&amp;quot;
                    visible: true
                    tickLabelsVisible: true
                   
               }

        data: [
            BubbleChart.Series {
                name: &amp;quot;Sunshine duraction in 0.1 hour&amp;quot;

                data: [
                    BubbleChart.Data {
                     xValue: 8
                     yValue: 15.6
                     radius: 47
                   }

                   BubbleChart.Data {
                     xValue: 9
                     yValue: 15.1
                     radius: 69
                   }

                   BubbleChart.Data {
                     xValue: 10
                     yValue: 14.4
                     radius: 16
                   }

                   BubbleChart.Data {
                     xValue: 11
                     yValue: 16.6
                     radius: 57
                   }

                   BubbleChart.Data {
                     xValue: 12
                     yValue: 17.5
                     radius: 45
                   }
                ]
            }
         ]
        }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;You can &lt;a href="http://www.xs4all.nl/~paulb84/charts/Charts.jnlp"&gt;run&lt;/a&gt; the demo as a Webstart application.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=16314" width="1" height="1"&gt;</description><category domain="http://blogs.infosupport.com/blogs/paul_bakker/archive/tags/JavaFX/default.aspx">JavaFX</category><category domain="http://blogs.infosupport.com/blogs/paul_bakker/archive/tags/charts/default.aspx">charts</category></item><item><title>JavaOne - JavaFX 1.2 released</title><link>http://blogs.infosupport.com/blogs/paul_bakker/archive/2009/06/04/javaone-javafx-1-2-released.aspx</link><pubDate>Thu, 04 Jun 2009 20:27:00 GMT</pubDate><guid isPermaLink="false">56f6167b-0c51-4839-ab2d-34653eeb5c9c:16081</guid><dc:creator>Paulb</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.infosupport.com/blogs/paul_bakker/rsscomments.aspx?PostID=16081</wfw:commentRss><comments>http://blogs.infosupport.com/blogs/paul_bakker/archive/2009/06/04/javaone-javafx-1-2-released.aspx#comments</comments><description>&lt;p&gt;JavaFX 1.2 is available now and I&amp;#39;m very impressed. First of all, I didn&amp;#39;t expect any release before the end of this year. I was hoping for a preview/beta release here at JavaOne with new components and layout managers. Instead there is a full release, with even more than I was hoping for.&lt;/p&gt;
&lt;p&gt;Most importantly:&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Components&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&amp;nbsp;Finally some real JavaFX components. No wrapped Swing components, but full JavaFX components. The most important components are now included, such as a scrollbar, sliders, progress bars and a list component. Still basic (no fancy datagrid for example), but enough to be used seriously. All of the components are supporting CSS, which enables you to easily change the look &amp;amp; feel of your application just using standard components.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Charting&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Besides all the standard components, some charting components are available. Again, all fully supporting CSS, and the API looks nice you use.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Layout&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The lack of layout managers was another important problem in the previous release. You were basically left calculating sizes and positions manually which is not very pleasant. First of all the way component sizes are calculated by a container is improved. Next they created some standard layout components. The containers are still simple (compared to the Swing layout managers), but they do the basic magic that&amp;#39;s required for most applications. I was also happy to hear that the HBox and VBox are no working properly, which have cost me a few too much hours working around in the previous release.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Great work by the JavaFX team, I&amp;#39;m impressed by the work done in just a few months.&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=16081" width="1" height="1"&gt;</description><category domain="http://blogs.infosupport.com/blogs/paul_bakker/archive/tags/JavaFX/default.aspx">JavaFX</category><category domain="http://blogs.infosupport.com/blogs/paul_bakker/archive/tags/JavaOne/default.aspx">JavaOne</category></item><item><title>JavaOne day one - JDK 7, JEE 6, JavaFX 1.2 and an appstore </title><link>http://blogs.infosupport.com/blogs/paul_bakker/archive/2009/06/03/javaone-day-one-jdk-7-jee-6-javafx-1-2-and-an-appstore.aspx</link><pubDate>Wed, 03 Jun 2009 17:41:00 GMT</pubDate><guid isPermaLink="false">56f6167b-0c51-4839-ab2d-34653eeb5c9c:16074</guid><dc:creator>Paulb</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.infosupport.com/blogs/paul_bakker/rsscomments.aspx?PostID=16074</wfw:commentRss><comments>http://blogs.infosupport.com/blogs/paul_bakker/archive/2009/06/03/javaone-day-one-jdk-7-jee-6-javafx-1-2-and-an-appstore.aspx#comments</comments><description>&lt;p&gt;
&lt;p&gt;The first general session started with some exiting news. JDK 7, JEE 6 and JavaFX 1.2 are available now. Surprising, because half of the JEE 6 specs are not final yet and JDK 7 is far from finished. Later on the day the announcement doesn&amp;#39;t quite stand. JEE 6 will be released september, and JDK 7 somewhere next year. Besides the usual &amp;quot;we are big companies and like each other&amp;quot; content there were two real announcements. First of all there will be a Java appstore, which enables you to sell your own Java and JavaFX applications. Besides the fact that it feels very much an Apple appstore rip off, it actually is very interesting. They are not quite there yet however because they decided to first put the appstore online with no possibility to pay for applications. They want feedback to decide how the payment model is going to work. A stupid decision to my opinion. If you can&amp;#39;t make money writing applications, there is not enough push behind it to get this thing popular. It still is interesting though. Reading between the lines this secures JavaFX&amp;#39;s position too. JavaFX is crucial for the appstore&amp;#39;s success.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Everybody was waiting for some Oracle news of course, but that&amp;#39;s still under strict rules, so nothing really new about that. Reading between the lines once again, it seems not that much is going to change at first, and another hint that JavaFX is not going to disappear. Happy about that :-)&lt;/p&gt;
&lt;p&gt;The JEE6 specs are looking really good. I&amp;#39;m specially happy with EJB 3.1. The 3.0 spec was good, but some things were missing (such as a decent timer implementation). The 3.1 spec doesn&amp;#39;t really add anything revolutionary, but EJB 3 now feels finished and complete.&amp;nbsp;&lt;/p&gt;
&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=16074" width="1" height="1"&gt;</description><category domain="http://blogs.infosupport.com/blogs/paul_bakker/archive/tags/Java/default.aspx">Java</category><category domain="http://blogs.infosupport.com/blogs/paul_bakker/archive/tags/JavaFX/default.aspx">JavaFX</category><category domain="http://blogs.infosupport.com/blogs/paul_bakker/archive/tags/JEE6/default.aspx">JEE6</category><category domain="http://blogs.infosupport.com/blogs/paul_bakker/archive/tags/JavaOne/default.aspx">JavaOne</category></item><item><title>Getting started with JEE 6 - EJB 3.1, JSF 2.0 and JAX-RS on GlassFish V3</title><link>http://blogs.infosupport.com/blogs/paul_bakker/archive/2009/03/15/Getting-started-with-JEE-6-_2D00_-EJB-3.1_2C00_-JSF-2.0-and-JAX_2D00_RS-on-GlassFish-V3.aspx</link><pubDate>Sun, 15 Mar 2009 16:24:00 GMT</pubDate><guid isPermaLink="false">56f6167b-0c51-4839-ab2d-34653eeb5c9c:15298</guid><dc:creator>Paulb</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.infosupport.com/blogs/paul_bakker/rsscomments.aspx?PostID=15298</wfw:commentRss><comments>http://blogs.infosupport.com/blogs/paul_bakker/archive/2009/03/15/Getting-started-with-JEE-6-_2D00_-EJB-3.1_2C00_-JSF-2.0-and-JAX_2D00_RS-on-GlassFish-V3.aspx#comments</comments><description>&lt;p&gt;JEE 6 is almost there. The final version is expected to be released at JavaOne this year, which is the first week of June. So this is a good moment to try out the new features. Let's first see what's new in JEE 6. After that I will show how to install the new APIs to try them out yourself. To me the most important changes in JEE 6 are the following: &lt;/p&gt;  &lt;p&gt;-WebBeans    &lt;br /&gt;-EJB 3.1 (Lite)     &lt;br /&gt;-JSF 2.0     &lt;br /&gt;-JAX-RS     &lt;br /&gt;-Servlet 3.0     &lt;br /&gt;-JPA 2.0 &lt;/p&gt;  &lt;p&gt;JEE 6 also introduces the concept of profiles. A profile defines a subset of JEE to be more lightweight and focussed to a specific application type. The only profile at this moment is the web profile. THe web profile will probably be supported by containers such as Tomcat, enabling you to use JEE web technology including EJB Lite, without the need for a full blown app server. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Intstalling EJB 3.1 Lite, JAX-RS and JSF 2.0      &lt;br /&gt;&lt;/strong&gt;The easiest way to get started with JEE 6 is using Glassfish V3. The next version of Glassfish will be released together with JEE 6. After downloading Glassfish you should start the update tool. This tool helps you to easily add features to Glassfish. At this moment, EJB 3.x is not fully supported by Glassfish. Only EJB Lite is supported, which is fine for now. EJB will be fully supported in the final release. Installing EJB Lite and JAX-RS is as easy as selecting them in the update tool and click the install button. Installing JSF 2.0 needs a little trick however. In the list you'll see JSF, but it only enables you to update to the next minor update which is 1.2.x. There is no option to upgrade to 2.0. You can solve this problem by first de-installing JSF. After that, you'll find a JSF 2.0 option in the list. &lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;strong&gt;Usage in NetBeans 6.5      &lt;br /&gt;&lt;/strong&gt;In Netbeans you should now create a Web project. That's right, you shouldn't create a Enterprise Project. If you do, you'll find that it can't be deployed to GlassFish V3. The whole application including EJB Lite Session Beans will be deployed as a WAR file.     &lt;br /&gt;Trying out JAX-RS and EJB 3.1 Lite     &lt;br /&gt;I started trying out features by creating a RESTful service using JAX-RS. I was hoping that EJB3 style injection would be fully supported by now, but it isn't. You still can't use @PersistenceContext to get hold of a EntityManager. There's still a lot of discussion going on to what degree this must be supported, but I'm really hoping it will make the final release. JAX-RS will be a lot more usable when injection of EJB Session Beans and EntityManagers works. &lt;/p&gt;  &lt;p&gt;There is an easy work around however. Using the new type of JNDI names, Global Names, it's easy to find a EJB 3.1 Lite Session Bean. Session Beans do support injection, so all JPA code can be delegated to the Session Bean. The lookup of the Global Name works like this: &lt;/p&gt;  &lt;p&gt;PhoneService s = (PhoneService) new InitialContext().lookup(&amp;quot;java:global/MobileShopServices/PhoneService&amp;quot;); &lt;/p&gt;  &lt;p&gt;The name is structured as follows: java:global/ApplicationName/BeanName.    &lt;br /&gt;The Session Bean is created as a EJB 3.1 Lite Session bean. &lt;/p&gt;  &lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;max-height:200px;"&gt;   &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;     &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; @Stateless &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; PhoneService {  &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;    @PersistenceContext &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;    &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; EntityManager em; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;     &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; List&amp;lt;Phone&amp;gt; getPhones() { &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;       List&amp;lt;Phone&amp;gt; phones = em.createQuery(&lt;span style="color:#006080;"&gt;&amp;quot;from Phone p&amp;quot;&lt;/span&gt;).getResultList(); &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;       &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; phones; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;    } &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt; } &lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;As you can see, there is no interface. Interfaces are now optional for Session Beans. Not something you would always want, but I see it's use for Session Beans used as JSF backing beans (as used in Seam). Injection works well however. &lt;/p&gt;

&lt;p&gt;So the only thing to left to do from the JAX-RS resource is call the Session Bean and return it's result as XML. The full method is implemented as follows: &lt;/p&gt;

&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;max-height:200px;"&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; @GET &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; @Produces(&lt;span style="color:#006080;"&gt;&amp;quot;application/xml&amp;quot;&lt;/span&gt;) &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; PhonesConverter getXml() { &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;    &lt;span style="color:#0000ff;"&gt;try&lt;/span&gt; { &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;       PhoneService s = (PhoneService) &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; InitialContext()&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;         .lookup(&lt;span style="color:#006080;"&gt;&amp;quot;java:global/MobileShopServices/PhoneService&amp;quot;&lt;/span&gt;); &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; PhonesConverter(s.getPhones()); &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt; } &lt;span style="color:#0000ff;"&gt;catch&lt;/span&gt; (NamingException ex) { &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt; Logger.getLogger(PhoneResource.&lt;span style="color:#0000ff;"&gt;class&lt;/span&gt;.getName()).log(Level.SEVERE, &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;, ex); &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;throw&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; RuntimeException(ex); &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt;  } &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  12:&lt;/span&gt; } &lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;It uses a converter class to convert a list of JPA Entities to XML. The converter basically adds JAXB annotations to the classes. &lt;/p&gt;

&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;max-height:200px;"&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; @XmlRootElement(name = &lt;span style="color:#006080;"&gt;&amp;quot;phones&amp;quot;&lt;/span&gt;)&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; PhonesConverter {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; List&amp;lt;PhoneConverter&amp;gt; phones;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; PhonesConverter() {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;     }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; PhonesConverter(List&amp;lt;Phone&amp;gt; phones) {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.phones = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; ArrayList&amp;lt;PhoneConverter&amp;gt;();&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;for&lt;/span&gt;(Phone phone : phones) {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.phones.add(&lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; PhoneConverter(phone));&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  12:&lt;/span&gt;         }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  13:&lt;/span&gt;     }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  14:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  15:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; List&amp;lt;PhoneConverter&amp;gt; getPhones() {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  16:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; phones;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  17:&lt;/span&gt;     }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  18:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  19:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; setPhones(List&amp;lt;PhoneConverter&amp;gt; phones) {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  20:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.phones = phones;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  21:&lt;/span&gt;     }    &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  22:&lt;/span&gt; }&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;That's all there is to it :-) 
  &lt;br /&gt;There's a lot more to tell about JAX-RS and EJB 3.1 (lite), but I'll get to that in a later post. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;JSF 2.0 
    &lt;br /&gt;&lt;/strong&gt;After JSF 2.0 is installed on GlassFish, you can start to use it immediately. The only thing you'll have to do to tell the container that you're doing JSF 2.0 is change the scheme location of the faces-config.xml. &lt;/p&gt;

&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;max-height:200px;"&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &amp;lt;faces-config xmlns=&lt;span style="color:#006080;"&gt;&amp;quot;http://java.sun.com/xml/ns/javaee&amp;quot;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt;     xmlns:xsi=&lt;span style="color:#006080;"&gt;&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;     xsi:schemaLocation=&lt;span style="color:#006080;"&gt;&amp;quot;http://java.sun.com/xml/ns/javaee &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;         http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd&amp;quot;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;     version=&lt;span style="color:#006080;"&gt;&amp;quot;2.0&amp;quot;&lt;/span&gt;&amp;gt; &lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;After doing that, you can use @ManagedBean to create Managed Beans and you can use Facelets without any installation or configuration. There's a lot more to tell about JSF 2.0 but i'll go into more details in a later post. &lt;/p&gt;

&lt;p&gt;There seems to be no easy way to install WebBeans in GlassFish yet. I'll try to get it working anyway and report on that too.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=15298" width="1" height="1"&gt;</description></item><item><title>JavaFX Christmas greeting</title><link>http://blogs.infosupport.com/blogs/paul_bakker/archive/2008/12/21/JavaFX-Christmas-greeting.aspx</link><pubDate>Sun, 21 Dec 2008 22:06:00 GMT</pubDate><guid isPermaLink="false">56f6167b-0c51-4839-ab2d-34653eeb5c9c:14876</guid><dc:creator>Paulb</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.infosupport.com/blogs/paul_bakker/rsscomments.aspx?PostID=14876</wfw:commentRss><comments>http://blogs.infosupport.com/blogs/paul_bakker/archive/2008/12/21/JavaFX-Christmas-greeting.aspx#comments</comments><description>&lt;p&gt;I made a JavaFX version of the Christmas card from my company. Basically I separated the picture into four parts, and made each part clickable. When you click, it will zoom in. Simple, but it looks ok. At this moment I can&amp;#39;t directly post applets at the blog, so check it out &lt;a href="http://www.xs4all.nl/~paulb84/card/Kerstkaart.html" target="_blank"&gt;here &lt;/a&gt;. The code is just two files, the scene itself and the component for showing each image.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.xs4all.nl/~paulb84/card/Main.fx" target="_blank"&gt;main.fx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.xs4all.nl/~paulb84/card/ImageDisplay.fx" target="_blank"&gt;ImageDisplay.fx &lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;img height="436" src="http://www.xs4all.nl/~paulb84/card/card-screenshot.jpg" width="437" /&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=14876" width="1" height="1"&gt;</description><category domain="http://blogs.infosupport.com/blogs/paul_bakker/archive/tags/JavaFX/default.aspx">JavaFX</category></item><item><title>Live from Devoxx - JavaRebel, zero turnaround development</title><link>http://blogs.infosupport.com/blogs/paul_bakker/archive/2008/12/12/Live-from-Devoxx-_2D00_-JavaRebel_2C00_-zero-turnaround-development.aspx</link><pubDate>Fri, 12 Dec 2008 17:00:00 GMT</pubDate><guid isPermaLink="false">56f6167b-0c51-4839-ab2d-34653eeb5c9c:14867</guid><dc:creator>Paulb</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.infosupport.com/blogs/paul_bakker/rsscomments.aspx?PostID=14867</wfw:commentRss><comments>http://blogs.infosupport.com/blogs/paul_bakker/archive/2008/12/12/Live-from-Devoxx-_2D00_-JavaRebel_2C00_-zero-turnaround-development.aspx#comments</comments><description>&lt;div&gt;Yesterday&amp;#39;s latest talk was about zero turnaround development in Java. I mainly attended the session because I really, really hate waiting for the tedious deploy cycle after changing some code. It&amp;#39;s one of the main reasons I believe Grails works so efficient compared to most other web frameworks (even while Grails doesn&amp;#39;t do real hot swapping code). The session was extremely well structured. First the turnaround problem was explained including the technical difficulties. More interesting where the reasons why the turnaround problem is so painful. Besides the actual time you spend waiting each week, it also completely disrupts your &amp;#39;flow&amp;#39;. Costing much more time to get back into your work. The fact that quality of work is probably also hurt a lot was not even covered, but I&amp;#39;m sure this will even be a big factor too. Seams to be another good reason to go for a more lightweight development approach...&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Next some basic solutions where covered (which can be used with standard tools), which can make live a lot better but are still not a full solution. At last JavaRebel was covered. JavaRebel is a commercial tool, but is very reasonable priced (it&amp;#39;s actually really cheap). JavaRebel install&amp;#39;s an agent into the VM, enabling to hotswap almost all type of code changes without any restart or re-initialization required. It&amp;#39;s truly amazing. It&amp;#39;s even more amazing that you don&amp;#39;t have to do anything to get this behavior, other than enabling the agent. It event supports deeper support for a few frameworks, including Spring, to hot swap configuration files.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;After showing JavaRebel a short demo was shown about a new tool of the company. It&amp;#39;s sort of a server runtime that enables you to hot upgrade and downgrade applications without ever going down. This was even proofed during the session by upgrading a chat application that was running at that very moment in the conference room. Not a second of downtime. The only thing I was thinking about after the session was: I want this. I&amp;#39;m going to try out JavaRebel and probably going to get a personal license.&amp;nbsp;&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=14867" width="1" height="1"&gt;</description><category domain="http://blogs.infosupport.com/blogs/paul_bakker/archive/tags/Java/default.aspx">Java</category><category domain="http://blogs.infosupport.com/blogs/paul_bakker/archive/tags/Devoxx/default.aspx">Devoxx</category><category domain="http://blogs.infosupport.com/blogs/paul_bakker/archive/tags/JavaRebel/default.aspx">JavaRebel</category></item><item><title>Live from Devoxx - Spring 3.0 and DM server</title><link>http://blogs.infosupport.com/blogs/paul_bakker/archive/2008/12/12/Live-from-Devoxx-_2D00_-Spring-3.0-and-DM-server.aspx</link><pubDate>Fri, 12 Dec 2008 16:22:00 GMT</pubDate><guid isPermaLink="false">56f6167b-0c51-4839-ab2d-34653eeb5c9c:14866</guid><dc:creator>Paulb</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.infosupport.com/blogs/paul_bakker/rsscomments.aspx?PostID=14866</wfw:commentRss><comments>http://blogs.infosupport.com/blogs/paul_bakker/archive/2008/12/12/Live-from-Devoxx-_2D00_-Spring-3.0-and-DM-server.aspx#comments</comments><description>&lt;p&gt;Ok the title is not completely true anymore. I&amp;#39;m back at home, so it&amp;#39;s &amp;#39;almost live&amp;#39; from Devoxx ;-) Yesterday was busy from early morning to early morning, so didn&amp;#39;t really find the time to blog... Anyway, the last two Devoxx days where excellent too. I&amp;#39;ll split the blogpost in two.&lt;/p&gt;&lt;p&gt;&amp;nbsp;I had a three Spring related sessions. One about the upcoming 3.0 version, and two about the DM server. Probably the most important change in 3.0 is full REST support. Besides that there are countless minor improvements. Minor you might ask, is that all the next version has to offer? Yes it does.&amp;nbsp;Luckily. Spring is really complete already, and I&amp;#39;m glad they choose to just&amp;nbsp;continue&amp;nbsp;the same path without making big changes that aren&amp;#39;t really necessary. REST support was something the framework was lacking&amp;nbsp;completely&amp;nbsp;so far however, so I was happy to hear they did a lot of work around this. The MVC framework will support all RESTful properties by (mostly) just setting annotations. Besides some extra annotations for things like different&amp;nbsp;representations, the REST framework feels exactly the same as MVC as we already know. Couldn&amp;#39;t be better to my opinion. Besides REST support and a lot of other enhancements they are looking into supporting some JEE6 standards. One of the most interesting things on the list was Webbeans. I don&amp;#39;t really see how the Webbeans component model and bijection support could be&amp;nbsp;integrated&amp;nbsp;into Spring without completely turning the Spring component model upside down. Anyway, I exited to see how they plan to get this down.&lt;/p&gt;&lt;p&gt;&amp;nbsp;Besides a new Spring version, I attended two sessions about the DM server. I&amp;#39;m impressed by it. DM server enables you to basically&amp;nbsp;divide&amp;nbsp;your application into OSGI modules&amp;nbsp;and deploy it as such too. This makes it possible to use a shared repository, run multiple versions of an applications and to gracefully update to newer versions. This should also enable to use a more clean programming model, advocating better separation of concerns. I have to try it out myself to see if it really works very&amp;nbsp;convenient&amp;nbsp;however. I&amp;#39;ll post some about my findings after trying, and I plan to do some in company presentations about it later on.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=14866" width="1" height="1"&gt;</description><category domain="http://blogs.infosupport.com/blogs/paul_bakker/archive/tags/Java/default.aspx">Java</category><category domain="http://blogs.infosupport.com/blogs/paul_bakker/archive/tags/Spring/default.aspx">Spring</category><category domain="http://blogs.infosupport.com/blogs/paul_bakker/archive/tags/Devoxx/default.aspx">Devoxx</category><category domain="http://blogs.infosupport.com/blogs/paul_bakker/archive/tags/DM+server/default.aspx">DM server</category></item><item><title>Live from Devoxx - Keynote and Parallel programming</title><link>http://blogs.infosupport.com/blogs/paul_bakker/archive/2008/12/10/Live-from-Devoxx-_2D00_-Keynote-and-Parallel-programming.aspx</link><pubDate>Wed, 10 Dec 2008 13:35:00 GMT</pubDate><guid isPermaLink="false">56f6167b-0c51-4839-ab2d-34653eeb5c9c:14853</guid><dc:creator>Paulb</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.infosupport.com/blogs/paul_bakker/rsscomments.aspx?PostID=14853</wfw:commentRss><comments>http://blogs.infosupport.com/blogs/paul_bakker/archive/2008/12/10/Live-from-Devoxx-_2D00_-Keynote-and-Parallel-programming.aspx#comments</comments><description>&lt;div&gt;Keynote and Concurrent programming.&lt;/div&gt;&lt;div&gt;The first keynote was all about JavaFX. Since it&amp;#39;s just released last week this was probably the first big presentation of it. Because I&amp;#39;ve followed JavaFX really really closely for the past months, I didn&amp;#39;t hear anything new in the keynote. They did surprise me with one thing however, they had a running JavaFX application on a mobile. Nice :-) Just a few more months before we can try that out too. Anyway, the presentation was done nicely with really good looking demo&amp;#39;s. The second part of the keynote was done my IBM about RFID. All conference passes are RFID tagged and they do some tracking with it, and in the keynote they showed how. Interesting, but the talk about the software was really complex with half a million different products stuffed in it. Not really my thing.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Next was about parallel programming. Starting with the pre Java 5 way of doing concurrency, and the new Executor framework in Java 5, Brian gave a good overview of the problems you&amp;#39;ll run into with those approaches. The rest of the talk was about the new parallel programming support in Java 7. It was the first time I saw it, and I&amp;#39;m impressed by it. It makes parallel programming much more easy but also much more efficient. Definitively going to try it out at home.&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=14853" width="1" height="1"&gt;</description><category domain="http://blogs.infosupport.com/blogs/paul_bakker/archive/tags/Java/default.aspx">Java</category><category domain="http://blogs.infosupport.com/blogs/paul_bakker/archive/tags/JavaFX/default.aspx">JavaFX</category><category domain="http://blogs.infosupport.com/blogs/paul_bakker/archive/tags/Devoxx/default.aspx">Devoxx</category><category domain="http://blogs.infosupport.com/blogs/paul_bakker/archive/tags/Java+7/default.aspx">Java 7</category></item><item><title>Live from Devoxx - The next version of Flex</title><link>http://blogs.infosupport.com/blogs/paul_bakker/archive/2008/12/09/Live-from-Devoxx-_2D00_-The-next-version-of-Flex.aspx</link><pubDate>Tue, 09 Dec 2008 15:49:00 GMT</pubDate><guid isPermaLink="false">56f6167b-0c51-4839-ab2d-34653eeb5c9c:14851</guid><dc:creator>Paulb</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.infosupport.com/blogs/paul_bakker/rsscomments.aspx?PostID=14851</wfw:commentRss><comments>http://blogs.infosupport.com/blogs/paul_bakker/archive/2008/12/09/Live-from-Devoxx-_2D00_-The-next-version-of-Flex.aspx#comments</comments><description>&lt;div&gt;My morning was all about Flex. The talk was about all the new stuff coming to the Flex platform. I&amp;#39;ve seen more of Catalyst and it&amp;#39;s just simply great.&amp;nbsp;&lt;/div&gt;&lt;div&gt;During the talk a video was shown with a demo of the designer process using Catalyst. With some round tripping between Photoshop, Illustrator and Catalyst they made&amp;nbsp;&lt;/div&gt;&lt;div&gt;a fully working application without actually writing any code. Not that I don&amp;#39;t like writing code (of course I do), but the whole interaction design of an application should be done by&lt;/div&gt;&lt;div&gt;a designer, not by me. And that&amp;#39;s possible now. Great! Too bad we&amp;#39;ll have to wait until late 2009 to start working with it.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The rest of the talk was about Gumbo, the next version of Flex. A lot of interesting new stuff here too. First of all the complete component model is changed in Gumbo.&amp;nbsp;&lt;/div&gt;&lt;div&gt;This makes the creating of custom components a lot easier, and has much better support for separating code and visuals (the skin). The new component model will run parallel with the&amp;nbsp;&lt;/div&gt;&lt;div&gt;existing model, so you&amp;#39;re not forced to migrate any existing code.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I&amp;#39;ve been able to get a very, very early-bits dvd of Catalyst (which I&amp;#39;m installing right this moment) so more about that later :-)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=14851" width="1" height="1"&gt;</description><category domain="http://blogs.infosupport.com/blogs/paul_bakker/archive/tags/Flex/default.aspx">Flex</category><category domain="http://blogs.infosupport.com/blogs/paul_bakker/archive/tags/Devoxx/default.aspx">Devoxx</category></item><item><title>Live from Devoxx - University day 1</title><link>http://blogs.infosupport.com/blogs/paul_bakker/archive/2008/12/08/Live-from-Devoxx-_2D00_-University-day-1.aspx</link><pubDate>Mon, 08 Dec 2008 12:50:00 GMT</pubDate><guid isPermaLink="false">56f6167b-0c51-4839-ab2d-34653eeb5c9c:14844</guid><dc:creator>Paulb</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.infosupport.com/blogs/paul_bakker/rsscomments.aspx?PostID=14844</wfw:commentRss><comments>http://blogs.infosupport.com/blogs/paul_bakker/archive/2008/12/08/Live-from-Devoxx-_2D00_-University-day-1.aspx#comments</comments><description>&lt;p&gt;The Devoxx conference in Antwerp is this week. I&amp;#39;ll be posting about sessions this week as much as I can. We just finished the first university session. A university session is normally a 3 hour talk, which makes it possible to go more in depth than normal conference sessions. The session I attended was&amp;nbsp;separated&amp;nbsp;in two talks however.&lt;/p&gt;&lt;p&gt;The first talk was about agile in general. It was a really well presented talk with a lot of real life experience stories. Besides that I didn&amp;#39;t really hear a lot of new things. At the end they got more into all kind of practical experiences which was really interesting. Too bad the session didn&amp;#39;t span the whole slot, i&amp;#39;m sure it would&amp;#39;ve been great. One new thing (for me) they explained in detail was the way they do the planning game. First order user stories by difficulty, by moving story cards around at the table, and next do the same but order on business value. By having those two values, it makes it much easier picking stories for a iteration.&lt;/p&gt;&lt;p&gt;The second talk was about Scrum, but presented poorly. I don&amp;#39;t know a lot about Scrum, but I didn&amp;#39;t really learn a lot from the session either... People have to learn not to write slides as documents and read them line by line. Rather just give me a book, or present in a better way.&lt;/p&gt;&lt;p&gt;&amp;nbsp;I&amp;#39;m now halfway the Servlet 3.0 and JSF 2.0 specs presentation. The Servlet 3.0 spec has some really interesting new additions such as modularization of the web.xml, annotation support and&amp;nbsp;asynchronous&amp;nbsp;support. The&amp;nbsp;Asynchronous support looks really good. It enables you to keep a connection to the client open and push data to it while processing the request. I&amp;#39;m not sure how often you will use the new things in the specs. Most people now uses web frameworks, not servlets directly. But maybe some frameworks can make good use of the new Servlets stuff. We&amp;#39;ll see. At least the specs are interesting :-)&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=14844" width="1" height="1"&gt;</description><category domain="http://blogs.infosupport.com/blogs/paul_bakker/archive/tags/Java/default.aspx">Java</category><category domain="http://blogs.infosupport.com/blogs/paul_bakker/archive/tags/agile/default.aspx">agile</category><category domain="http://blogs.infosupport.com/blogs/paul_bakker/archive/tags/Devoxx/default.aspx">Devoxx</category><category domain="http://blogs.infosupport.com/blogs/paul_bakker/archive/tags/JSF+2.0/default.aspx">JSF 2.0</category><category domain="http://blogs.infosupport.com/blogs/paul_bakker/archive/tags/Servlet+3.0/default.aspx">Servlet 3.0</category></item><item><title>Adobe Catalyst - A new step in designer/developer workflow</title><link>http://blogs.infosupport.com/blogs/paul_bakker/archive/2008/12/06/Adobe-Catalyst-_2D00_-A-new-step-in-designer_2F00_developer-workflow.aspx</link><pubDate>Sat, 06 Dec 2008 14:20:00 GMT</pubDate><guid isPermaLink="false">56f6167b-0c51-4839-ab2d-34653eeb5c9c:14830</guid><dc:creator>Paulb</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.infosupport.com/blogs/paul_bakker/rsscomments.aspx?PostID=14830</wfw:commentRss><comments>http://blogs.infosupport.com/blogs/paul_bakker/archive/2008/12/06/Adobe-Catalyst-_2D00_-A-new-step-in-designer_2F00_developer-workflow.aspx#comments</comments><description>&lt;p&gt;Last week my&amp;nbsp;colleague&amp;nbsp;Alex van Beek visited Adobe Max, and he told me some really impressive things he has seen there. One of the most interesting things that will be available soon is Adobe Catalyst. This is a new tool that helps improving the designer/developer workflow for Flex applications. I checked it out on the website, and it&amp;#39;s really impressive.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;A designer can simply use tools such as Photoshop and draw a nice looking button. Next the designer can import the layers from this design into Catalyst and just say that the drawing should act as a button, making it also possible to attach specific layers to the various states of the component (mouseover, click, etc.). From than it&amp;#39;s a fully working Flex component that can be used within Flex. This is really something I want to have :-)&lt;/p&gt;&lt;p&gt;Haven&amp;#39;t we seen this kind of tool before? Yes we certainly have. It&amp;#39;s very much like Blend from Microsoft, but better. There are more&amp;nbsp;possibilities, and designers don&amp;#39;t have to start using different design tooling. This is something that really puts Flex a step in front of JavaFX again. For JavaFX we have Nile, which can export the layers of a Photoshop or Illustrator design to JavaFX, but there is no possibility to work with different states of a component or create a custom scroll bar easily with Nile.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;Check out Catalyst yourself at the following url:&amp;nbsp;http://labs.adobe.com/technologies/flashcatalyst/ There are two movies at the website.&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=14830" width="1" height="1"&gt;</description><category domain="http://blogs.infosupport.com/blogs/paul_bakker/archive/tags/Flex/default.aspx">Flex</category><category domain="http://blogs.infosupport.com/blogs/paul_bakker/archive/tags/Catalyst/default.aspx">Catalyst</category><category domain="http://blogs.infosupport.com/blogs/paul_bakker/archive/tags/Adobe/default.aspx">Adobe</category></item></channel></rss>