<?xml version="1.0"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Planet NetBeans</title>
    <link>http://www.planetnetbeans.org/</link>
    <language>en</language>
    <description>Planet NetBeans - http://www.planetnetbeans.org/</description>
    <item>
      <title>Geertjan's Blog: Groovy Makes Web Services Embarrassingly Easy</title>
      <guid isPermaLink="false">http://blogs.sun.com/geertjan/entry/groovy_makes_web_services_embarrassingly</guid>
      <link>http://blogs.sun.com/geertjan/entry/groovy_makes_web_services_embarrassingly</link>
      <description>Meera pointed me to another very cool article she's written, &lt;a href="http://www.testearly.com/2008/07/23/restful-web-services-in-60-seconds/"&gt;RESTful Web Services in 60 Seconds&lt;/a&gt;, and (because I've been in an intensely groovy frame of mind for a few days now), I immediately associated it with my earlier experiments with Groovy and web services, in a blog entry entitled &lt;a href="http://blogs.sun.com/geertjan/entry/groovy_web_service"&gt;Groovy Web Service&lt;/a&gt; from
      the end of last year, based on some key learnings from &lt;a href="http://groovy.codehaus.org/GroovyWS"&gt;the official Groovy web service site&lt;/a&gt;, (which has expanded a lot since then, I noticed today). At the time, I needed to hack things quite a bit to get web services to work with Groovy in NetBeans IDE (as honestly recorded in that blog entry). &lt;p&gt;So, I thought, how do things stand today in terms of Groovy and web services in NetBeans IDE? To be perfectly honest, the improvement
      couldn't have been much better, aside from the currently incomplete code completion (which is a work in progress still). In fact, I was able to mix and match Matisse with a Groovy web service, although you can't tell from the result: &lt;p&gt;&lt;img src="http://blogs.sun.com/geertjan/resource/groovy-makes-ws-easy.png" border="1" /&gt; &lt;p&gt;This is the &lt;tt&gt;actionPerformed&lt;/tt&gt; in the JButton in the Matisse form that you see above: &lt;pre&gt;ShakesWSClient shakes = new
      ShakesWSClient(); private void searchButtonActionPerformed(java.awt.event.ActionEvent evt) { String searchString = shakes.setSearchString(searchTextArea.getText()); resultTextArea.setText(searchString); }&lt;/pre&gt; &lt;p&gt;And this is the ENTIRE web service client: &lt;pre&gt;package org.me.hello import groovyx.net.ws.WSClient class ShakesWSClient { def proxy = new WSClient("http://www.xmlme.com/WSShakespeare.asmx?WSDL", ShakesWSClient.class.classLoader) String setSearchString(searchString) { def
      newQuote = proxy.GetSpeech(searchString) return newQuote } }&lt;/pre&gt; &lt;p&gt;Really, that's just a bit ridiculous. And I'm sure that the Groovy experts could cut the above code down a few lines and characters further. And I didn't need to hack anything in NetBeans. The Groovy class behaved seamlessly with the Java class.&lt;p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;</description>
      <pubDate>Wed, 23 Jul 2008 16:33:20 +0000</pubDate>
    </item>
    <item>
      <title>NetBeans Core QA: Why is 'Build' action grey on new project?</title>
      <guid isPermaLink="false">http://blogs.sun.com/coreqa/entry/why_is_build_action_grey</guid>
      <link>http://blogs.sun.com/coreqa/entry/why_is_build_action_grey</link>
      <description>Create new project in NetBeans IDE. Right click the project. The &lt;b&gt;Build&lt;/b&gt; and &lt;b&gt;Clean&lt;/b&gt; action is always grey out. &lt;center&gt; &lt;img src="http://blogs.sun.com/coreqa/resource/nb65/compile-on-save.jpg" /&gt; &lt;/center&gt; When you open an old project then it is there. So what is the magic here? Go to project properties, in category &lt;i&gt;Compiling&lt;/i&gt; you'll find &lt;b&gt;Compile On Save&lt;/b&gt; check box. When checked then the saved file
      is always compiled when you save it. &lt;br /&gt;&lt;center&gt; &lt;img src="http://blogs.sun.com/coreqa/resource/nb65/pp-compile-on-save.jpg" /&gt; &lt;/center&gt; &lt;br /&gt;&lt;br /&gt; Are you interested in more details? Try it in &lt;a href="http://deadlock.netbeans.org/hudson/job/trunk/"&gt;latest builds&lt;/a&gt; or &lt;a href="http://wiki.netbeans.org/CompileOnSave"&gt;read the specification&lt;/a&gt;.</description>
      <pubDate>Wed, 23 Jul 2008 14:04:23 +0000</pubDate>
    </item>
    <item>
      <title>Michel Graciano's Weblog: NetBeans 6.5 - Database support refreshed...</title>
      <guid isPermaLink="false">http://www.jroller.com/hmichel/entry/netbeans_6_5_database_support</guid>
      <link>http://www.jroller.com/hmichel/entry/netbeans_6_5_database_support</link>
      <description>&lt;p&gt;The main NetBeans 6.5 feature I have been looking forward to is the new database support. For details about what is coming, &lt;a href="http://wiki.netbeans.org/DatabaseFeaturesForNB65"&gt;look here for details&lt;/a&gt;.&lt;br /&gt; For now, we already can use code completion, some features as editable queries result, quick column info on result table and another really cool features. You can see below an image about what is coming...&lt;br /&gt; &lt;p align="center"&gt;&lt;a
      target="_blank" href="http://www.jroller.com/hmichel/resource/sql_editor_metal.png"&gt;&lt;img src="http://www.jroller.com/hmichel/resource/sql_editor_cc_metal.png" /&gt;&lt;br /&gt; [Click to enlarge]&lt;br /&gt; &lt;/a&gt;&lt;br /&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;BTW, the execution plan will be implemented just for feature versions. If it is important to you, &lt;a href="http://www.netbeans.org/issues/show_bug.cgi?id=141352"&gt;vote for it now here&lt;/a&gt;! &lt;img
      src="http://www.jroller.com/images/smileys/smile.gif" class="smiley" alt=":)" title=":)" /&gt;&lt;/p&gt; &lt;p&gt;Happy coding!&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;</description>
      <pubDate>Wed, 23 Jul 2008 13:59:38 +0000</pubDate>
    </item>
    <item>
      <title>Bistro!: A visit to JUG Ukraine</title>
      <guid isPermaLink="false">http://blogs.sun.com/alexismp/entry/a_visit_to_jug_ukraine</guid>
      <link>http://blogs.sun.com/alexismp/entry/a_visit_to_jug_ukraine</link>
      <description>&lt;img src="http://blogs.sun.com/alexismp/feed/entries/rss" border="0" vspace="4" hspace="4" align="left" /&gt; &lt;p&gt; Call me crazy or workaholic but I took a few hours out of my vacation in &lt;a href="http://en.wikipedia.org/wiki/Kiev"&gt;Kiev, Ukraine&lt;/a&gt; to visit the &lt;a href="http://jug.com.ua/"&gt;local JUG&lt;/a&gt;. &lt;/p&gt; &lt;p&gt; The meeting was hosted at &lt;a href="http://www.globallogic.com/"&gt;GlobalLogic&lt;/a&gt; (somewhat of a &lt;a
      href="http://picasaweb.google.com/jug.ukraine/200807"&gt;geek's paradise&lt;/a&gt;) and was pretty well attended given the last-minute organization. The presentation slides (in English) are &lt;a href="http://blogs.sun.com/alexismp/resource/GlassFish-UkraineJUG-July2008_long.pdf"&gt;here&lt;/a&gt; and the full photo album &lt;a href="http://picasaweb.google.com/jug.ukraine/200807"&gt;there&lt;/a&gt;. &lt;/p&gt; &lt;p&gt; &lt;img src="http://blogs.sun.com/alexismp/resource/jugua-01-small.png" /&gt;
      &lt;img src="http://blogs.sun.com/alexismp/resource/jugua-02-small.png" /&gt; &lt;/p&gt; &lt;p&gt; The presentation started with a bit of a challenge as no one was using GlassFish (mainly WebLogic, WebpShere, Tomcat and some JBoss). Given the presentation + Q&amp;amp;A session lasted almost 2 hours, I think it's fair to say that the interest was great. There were many questions during and after the presentation. Here's the refined Q&amp;amp;A: &lt;/p&gt; &lt;p&gt; &amp;bull; &lt;b&gt;OpenESB looks
      interesting (documentation, NetBeans graphical tooling, ...), but can I use &lt;a href="http://en.wikipedia.org/wiki/BPEL4People"&gt;BPEL4People&lt;/a&gt; with it?&lt;/b&gt; &lt;br /&gt;Unfortunately IBM does not support JBI and to the best of my knowledge, there is no BPEL4People service engine. OpenESB and JavaCAPS do come with a &lt;a href="http://www.oasis-open.org/committees/wsbpel/"&gt;WS-BPEL&lt;/a&gt; implementation though. &lt;/p&gt; &lt;p&gt; &amp;bull; &lt;b&gt;What is the
      Hibernate/TopLink split? (me asking)&lt;/b&gt; &lt;br /&gt;- Hibernate: 60% &lt;br /&gt;- TopLink: 40% &lt;/p&gt; &lt;p&gt; &amp;bull; &lt;b&gt;Is the 404 error in the admin console during your demo a bug or a feature ? ;)&lt;/b&gt; &lt;br /&gt;It's certainly a &lt;a href="https://glassfish.dev.java.net/issues/show_bug.cgi?id=5194"&gt;bug&lt;/a&gt;. Fixed in GlassFish 2.1. &lt;/p&gt; &lt;p&gt; &amp;bull; &lt;b&gt;Can I deploy OSGi bundles on GlassFish v3?&lt;/b&gt; &lt;br /&gt;Well, GlassFish v3 is
      running on top of Felix by default so it can host any OSGi bundle. The question is rather how it can extend the features of GFv3. This is a &lt;a href="http://blogs.sun.com/alexismp/resource/GFv3OSGiRuntime.png"&gt;nice picture&lt;/a&gt; to explain the additional metadata required. &lt;/p&gt; &lt;p&gt; &amp;bull; &lt;b&gt;Can GlassFish run on the JRE (not the JDK)? This makes a difference for me in terms of re-distribution.&lt;/b&gt; &lt;br /&gt;Provided you don't need to compile JSP's, GlassFish
      should run fine on top of the JRE, but this has not been extensively tested. Note that creating domains also requires the JDK (although that's not really runtime per say). I'll probably blog more on this, including the legal side to this (yes, you can redistribute the JDK). &lt;/p&gt; &lt;p&gt; &amp;bull; &lt;b&gt;How does GlassFish manage the ClassPath when using JSR 199 (Java Compiler API) to compile JSP's?&lt;/b&gt; &lt;br /&gt;The default &lt;a
      href="http://java.sun.com/javase/6/docs/api/java/lang/Compiler.html"&gt;JavaDoc for this API&lt;/a&gt; isn't really helpful. In general, &lt;a href="http://java.sun.com/javase/6/docs/api/javax/tools/JavaCompiler.html"&gt;&lt;code&gt;JavaCompiler.getTask(...)&lt;/code&gt;&lt;/a&gt; gives you the ability to pass a set of options, including a classpath. You may also find this &lt;a href="https://hickory.dev.java.net/nonav/apidocs/index.html?net/java/dev/hickory/testing/Compilation.html"&gt;testing
      API&lt;/a&gt; to he helpful in debugging compile issues. Finally, this &lt;a href="http://blogs.sun.com/kchung/entry/speed_up_jsp_compilations_with"&gt;link&lt;/a&gt; explains the performance benefits of using JDK 6's javac API in GlassFish. All is done dynamically now, all you need to do is use Java 6 to run GlassFish. &lt;/p&gt; &lt;p&gt; &lt;img src="http://blogs.sun.com/alexismp/resource/jugua-05-small.png" /&gt; &lt;img src="http://blogs.sun.com/alexismp/resource/jugua-07-small.png" /&gt;
      &lt;/p&gt; &lt;p&gt; &amp;bull; &lt;b&gt;Does GlassFish support distributed transactions between multiple JVMs?&lt;/b&gt; &lt;br /&gt;Well, if you're talking about WS-Coordination and WS-AtomicTransaction, these are both implemented as part of the &lt;a href="http://metro.dev.java.net"&gt;Metro&lt;/a&gt; Web Services tack which itself is part of GlassFish v2 and above. This enables distributed transactions even with .Net services. &lt;/p&gt; &lt;p&gt; &amp;bull; &lt;b&gt;You claim that Grizzly has
      very good performance for serving both static and dynamic data. Do you have any benchmark results?&lt;/b&gt; &lt;br /&gt;Yes. You probably want to start looking at this &lt;a href="http://weblogs.java.net/blog/jfarcand/archive/2006/03/can_a_grizzly_r.html"&gt;original post&lt;/a&gt; by Jean-François Arcand. It's a bit old but Grizzly and GlassFish only got better with time! &lt;/p&gt; &lt;p&gt; &amp;bull; &lt;b&gt;How do you move from one version of GlassFish to another? Other products make this
      pretty painful.&lt;/b&gt; &lt;br /&gt;We take compatibility very seriously. It's a company thing (think Java 1.0). With every copy of GlassFish we provide &lt;code&gt;bin/asupgrade&lt;/code&gt; which allows you to point to a source GlassFish domain, say GlassFish v1, and a target, say GlassFish v2. The tool will proceed to read the applications, resources, and configuration and recreate them in the target application server. You can achieve similar results with &lt;code&gt;bin/asadmin
      backup-domain&lt;/code&gt; and &lt;code&gt;bin/asadmin restore-domain&lt;/code&gt; within a single version of GlassFish. &lt;/p&gt; &lt;p&gt; &amp;bull; &lt;b&gt;Have people started using GlassFish in production? Any more you could share?&lt;/b&gt; &lt;br /&gt;Some people (like &lt;a href="http://blogs.sun.com/stories/entry/wotif"&gt;Wotif.com&lt;/a&gt;) have started using GlassFish v1 in production. With the release of GlassFish v2 less than a year ago, we've seen a great level of deployments some
      (a fraction) is discussed by the users themselves on this blog: &lt;a href="http://blogs.sun.com/stories"&gt;http://blogs.sun.com/stories&lt;/a&gt;. &lt;/p&gt; &lt;p&gt; &amp;bull; &lt;b&gt;Does GlassFish suffer from the same memory leaks as Tomcat on redeploys?&lt;/b&gt; &lt;br /&gt;We've fixed a couple of bug in GlassFish v2 which should make the redeployment of artifacts painless, including on Windows which had a tendency to lock deployed files. &lt;/p&gt; &lt;p&gt; So there you are, this is all
      the questions I could remember. If you have more, please comment here, I'll add them to the entry. &lt;/p&gt;</description>
      <pubDate>Wed, 23 Jul 2008 12:46:52 +0000</pubDate>
    </item>
    <item>
      <title>Adam Bien: "No XML" - Dependency Injection (EJB 3) For Absolute Beginners, or Is Possible To Inject With Less Code / XML?</title>
      <guid isPermaLink="false">http://www.adam-bien.com/roller/abien/entry/no_xml_dependency_injection_jpa</guid>
      <link>http://www.adam-bien.com/roller/abien/entry/no_xml_dependency_injection_jpa</link>
      <description>If you already invested the three minutes working through the &lt;a href="http://www.adam-bien.com/roller/abien/abien/entry/ejb_3_session_for_absolute" target="_self"&gt;post &amp;quot;EJB 3 (@Session) For Absolute Beginners - 3 Minutes Bootstrap, 5 Steps&amp;quot;&lt;/a&gt;, you can skip the requirements section.&lt;br /&gt;&lt;p&gt;&lt;u&gt;&lt;font size="3"&gt;Requirements: &lt;/font&gt;&lt;/u&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Installled JDK 1.5 (better
      1.6)&amp;nbsp;&lt;/li&gt;&lt;li&gt;An IDE of your choice e.g. vi, emacs, netbeans 6.1 (SE or EE), Eclipse Genymede (SE or EE)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;@Stateless, @Local, @Entity, @Id Annotations in classpath &lt;br /&gt;&lt;/li&gt;&lt;li&gt;An Java EE 5 capable application server of your choice. It will work with Glassfish v1+ (better v2), JBoss 4.2+, WLS 10+ and probably Geronimo (not tried yed)&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;u&gt;&lt;font size="3"&gt;What is Dependency Injection
      (DI)?&lt;/font&gt;&lt;/u&gt;&lt;/p&gt;&lt;p&gt;DI is a fancy term for a simple thing: someone (in this case something -&gt; the EJB 3 container) cares about managing the dependencies for you. You just have to declare the need for it.&lt;br /&gt;EJB 3 is using annotations for this purpose, absolutely &lt;b&gt;NO XML&lt;/b&gt; is needed. &lt;/p&gt;&lt;p&gt;Basically: everything which is stored in JNDI can be injected, instead of &amp;quot;looked up&amp;quot;.&lt;br
      /&gt;&lt;/p&gt;&lt;p&gt;&lt;u&gt;&lt;font size="3"&gt;What is to do:&lt;/font&gt;&lt;/u&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt; To inject one Session Bean to another use the @EJB annotation:&lt;br /&gt;&lt;font&gt;@Stateless&lt;br /&gt;public class BookServiceBean implements BookService {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt; @EJB&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private SearchService search;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;Common error: you cannot inject classes in EJB
      3.0, but only interfaces. This will change in EJB 3.1...&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;To inject a DataSource, Queue, ConnectionFactory, Mail, SessionContext etc. you will need the @Resource annotation:&lt;br /&gt;&lt;font&gt;@Stateless&lt;br /&gt;public class BookServiceBean implements BookService {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;@Resource(mappedName=&amp;quot;jndi/sample&amp;quot;)&lt;/b&gt;&lt;br
      /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private DataSource ds;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;To use the persistence, just use the &lt;font&gt;@PersistenceContext&lt;/font&gt; annotation:&lt;/li&gt;&lt;/ol&gt;&lt;font&gt;@Stateless&lt;br /&gt;public class BookServiceBean implements BookService {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt; @PersistenceContext&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private EntityManager em;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br
      /&gt;&lt;p&gt;&lt;u&gt;&lt;font size="3"&gt;How it works:&lt;/font&gt;&lt;/u&gt;&lt;/p&gt;&lt;p&gt; EJB 3 DI operates in &amp;quot;Convention over Configuration&amp;quot; mode. So in general: in case there is only one possibility - it will be injected.&lt;br /&gt;If there are more than one, you will have to configure manifesting your choice...&lt;/p&gt;&lt;p&gt;&lt;font size="3"&gt;&lt;u&gt;The easiest possible start:&lt;/u&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;...is with &lt;a target="_blank"
      href="http://download.netbeans.org/netbeans/6.1/final/"&gt;Netbeans 6.1 (EE)&lt;/a&gt; -&amp;nbsp; download the first choice (139 MB - all included). It will not only install the IDE, but the application server (Reference Implementation: Glassfish RI), sample database etc. &lt;a href="http://www.eclipse.org/ganymede/" target="_self"&gt;Eclipse's Ganymede&lt;/a&gt; is good as well, however you will need more projects (one for EJB 3, one for JPA), setup the application server etc. so it takes slightly
      more time if you are an absolute beginner :-).&lt;u&gt; &lt;/u&gt;&lt;/p&gt;&lt;p&gt;&lt;u&gt;&lt;font size="3"&gt;Why is it good:&lt;/font&gt;&lt;/u&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;No overhead - the code is as lean as it can be (any suggestions to make it simpler? :-)). The jar contains nothing else, but the interfaces and classes.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;It's simple - and sufficient for most use cases.&lt;/li&gt;&lt;li&gt;Is easy to test: the reference can be set in JUnit directly (I will
      cover this in one of the next posts)&lt;/li&gt;&lt;li&gt;Is configurable - all annotations can be overruled by XML. Even legacy POJOs can be integrated that way. See an extrem example - the deployment of a &lt;a target="_blank" href="http://www.adam-bien.com/roller/abien/entry/ejb_3_0_and_legacy"&gt;Swing Table Model as EJB 3&lt;/a&gt; :-).&lt;/li&gt;&lt;li&gt;No vendor lock in: EJB 3 is one and only component model I now, which is vendor neutral, with several available implementations (JBoss,
      Glassfish, Weblogic, Websphere, openEJB, SAP, Spring Pitchfork, Geronimo + forgotten ones). &lt;a target="_blank" href="http://code.google.com/p/google-guice/"&gt;Google Guice&lt;/a&gt; is, however, promising as well. The dependency to EJB 3 spec itself is low - if it &lt;a target="_blank" href="http://www.adam-bien.com/roller/abien/entry/what_happens_if_you_start"&gt;does not work for you&lt;/a&gt;, you can deploy this &amp;quot;pojos&amp;quot; to something else...&lt;/li&gt;&lt;li&gt;The EJB 3
      container is able to monitor (see e.g. Glassfish &lt;a target="_blank" href="https://glassfish.dev.java.net/javaee5/monitoring/callflow/callflow.html"&gt;CallFlow&lt;/a&gt;) the whole invocation chain of EJBs. If you are developer: you probably don't care, but your operations :-)&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;</description>
      <pubDate>Wed, 23 Jul 2008 11:18:03 +0000</pubDate>
    </item>
    <item>
      <title>Jun Qian (钱骏) 's Weblog: XAM AutoGen: a tool to automate XAM model generation</title>
      <guid isPermaLink="false">http://blogs.sun.com/jqian/entry/automate_xam_model_generation</guid>
      <link>http://blogs.sun.com/jqian/entry/automate_xam_model_generation</link>
      <description>&lt;p&gt;&lt;a href="http://xml.netbeans.org/xam-usage.html"&gt;XAM&lt;/a&gt;&lt;a href="http://xml.netbeans.org/xam-usage.html"&gt; (Extensible Abstract Model)&lt;/a&gt; is an extensible framework for building domain-specific object model on top of any base models. Many NetBeans modules (such as WSDL Model, Schema Model, XSLT Model, BPEL Model) are built on top of XAM. A XAM-based model is best suited for an IDE like NetBeans because of its IDE-friendly features (unlimited undo/redo,
      automatic synchronization, document fidelity, etc.), but you are not tied to NetBeans by using XAM.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;p&gt;To create a XAM-based model, one typically starts from the schema describing the domain. It's a very tedious process to generate all the Java interfaces and implementation classes, along with the all plumbing classes (factories, visitors, etc.).&amp;nbsp; &lt;/p&gt; &lt;p&gt;To ease the pain of manual class creation, a tool is needed to auto generate a XAM-based
      model from a XML schema. This blog entry describes a tool that takes a domain schema as input, and uses &lt;a href="http://velocity.apache.org/"&gt;Velocity &lt;/a&gt;templates to generate a XAM-based model.&lt;/p&gt; &lt;p&gt;This tool doesn't use any popular schema language (such as &lt;a href="http://en.wikipedia.org/wiki/XML_Schema_%28W3C%29"&gt;XML Schema (W3C)&lt;/a&gt;, or &lt;a href="http://en.wikipedia.org/wiki/RELAX_NG"&gt;Relax NG&lt;/a&gt;.)&amp;nbsp; There are a couple of reasons:
      &lt;/p&gt; &lt;ol&gt; &lt;li&gt;A formal XML schema language is a little bit too heavy. I want to clearly define what is supported and what is not. &lt;br /&gt;&lt;/li&gt; &lt;li&gt;In addition to domain typing, I also want to add extra semantics. For example, I want to express an element FOO has an attribute BAR of type URI or QName which refers to another element BAZ in this or even a foreign domain.&lt;/li&gt; &lt;/ol&gt;The following is the meta schema (the schema for your domain schema) used by
      this tool:&lt;br /&gt; &lt;blockquote&gt; &lt;pre&gt;&amp;lt;xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; targetNamespace="http://xml.netbeans.org/schema/xamgen" &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xmlns:tns="http://xml.netbeans.org/schema/xamgen"
      &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; elementFormDefault="qualified"&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsd:element name="Content"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsd:complexType&gt;
      &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsd:sequence&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsd:element name="Element"&amp;nbsp; minOccurs="0" maxOccurs="unbounded"/&gt;
      &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsd:element name="EnumType" minOccurs="0" maxOccurs="unbounded"/&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsd:sequence&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsd:complexType&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;
      &amp;lt;/xsd:element&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsd:element name="Element"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsd:complexType&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsd:sequence&gt;
      &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsd:element name="Attribute" minOccurs="0" maxOccurs="unbounded"/&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsd:element name="ChildElement" minOccurs="0" maxOccurs="unbounded"/&gt;
      &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsd:sequence&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsd:attribute name="name" type="xsd:string" use="required"/&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsd:attribute name="className" type="xsd:string"/&gt;
      &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsd:attribute name="root" type="xsd:boolean" default="false"/&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsd:attribute name="virtual" type="xsd:boolean" default="false"/&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsd:attribute
      name="base" type="xsd:string"/&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsd:attribute name="anyAttribute" type="xsd:boolean" default="false"/&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsd:attribute name="anyElement" type="xsd:boolean" default="false"/&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
      &amp;lt;/xsd:complexType&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsd:element&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsd:element name="Attribute"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsd:complexType&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsd:attribute name="name" type="xsd:string" use="required"/&gt;
      &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsd:attribute name="type" type="xsd:string" use="required"/&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsd:attribute name="reference" type="xsd:string"/&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsd:complexType&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;
      &amp;lt;/xsd:element&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsd:element name="ChildElement"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsd:complexType&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsd:attribute name="name" type="xsd:string" use="required"/&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
      &amp;lt;xsd:attribute name="multiplicity" type="xsd:string" default="n"/&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsd:attribute name="ordered" type="xsd:boolean" default="false"/&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsd:complexType&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsd:element&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsd:element
      name="EnumType"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsd:complexType&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsd:sequence&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsd:element name="Enumeration" minOccurs="0" maxOccurs="unbounded"/&gt;
      &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsd:sequence&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsd:complexType&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsd:element&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsd:element name="Enumeration"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsd:complexType&gt;
      &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;xsd:attribute name="value" type="xsd:string" use="required"/&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsd:complexType&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/xsd:element&gt; &amp;lt;/xsd:schema&gt;&lt;/pre&gt; &lt;/blockquote&gt; &lt;p&gt; Most of it should be pretty straightforward. Here are a few notes:&lt;/p&gt; &lt;ul&gt;
      &lt;li&gt;Element.root: whether this element is a root element in an instance document in your domain. Multiple root elements in a domain are allowed.&lt;br /&gt;&lt;/li&gt; &lt;li&gt;Element.className: you can use this attribute to overwrite the default component class name derived from the element name.&lt;br /&gt;&lt;/li&gt; &lt;li&gt;Element.abstract: whether the corresponding component class is abstract.&lt;br /&gt;&lt;/li&gt; &lt;li&gt;Element.base: the name of the element whose corresponding
      domain component class serves as a base class.&lt;br /&gt;&lt;/li&gt; &lt;li&gt;Attribute.type: Java type, for example, &amp;quot;String&amp;quot;, &amp;quot;boolean&amp;quot;, &lt;a&gt;&lt;/a&gt;&amp;quot;java.util.List&amp;lt;javax.xml.namespace.QName&gt;&amp;quot;.&lt;br /&gt;&lt;/li&gt; &lt;li&gt;Attribute.reference: use this if the attribute value references another component in the model. &lt;br /&gt;&lt;/li&gt; &lt;ul&gt; &lt;li&gt;If you want to reference a component that can be globally
      identified by QName, use &amp;quot;QName&amp;quot; for the corresponding Attribute.type;&lt;br /&gt;&lt;/li&gt; &lt;li&gt;For local reference, you can use &amp;quot;String&amp;quot; or &amp;quot;URI&amp;quot; as Attribute.type. Note that you can define the reference to be something like &amp;quot;elementA/elementB&amp;quot; for a multi-level reference.&lt;br /&gt;&lt;/li&gt; &lt;/ul&gt; &lt;/ul&gt; &lt;p&gt;&lt;b&gt;Example:&lt;/b&gt;&lt;/p&gt; &lt;p&gt;Here is a schema instance describing an example
      domain:&lt;/p&gt; &lt;blockquote&gt; &lt;pre&gt;&amp;lt;Content xmlns="http://xml.netbeans.org/schema/xamgen" &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xsi:schemaLocation="http://xml.netbeans.org/schema/xamgen xamgen.xsd"&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Element name="composite"
      root="true"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Attribute name="name" type="String"/&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Attribute name="targetNamespace" type="java.net.URI"/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ChildElement name="component"/&gt;
      &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ChildElement name="connection"/&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Element&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Element name="component"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Attribute name="name" type="String"/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;
      &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ChildElement name="provides"/&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ChildElement name="consumes"/&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ChildElement name="property"/&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Element&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Element name="endpoint" virtual="true"&gt;
      &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Attribute name="name" type="String"/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ChildElement name="interface" multiplicity="1"/&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Element&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Element name="provides" base="endpoint"/&gt;
      &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Element name="consumes" base="endpoint"/&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Element name="property"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Attribute name="name" type="String"/&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Attribute name="value" type="String"/&gt;
      &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Attribute name="override" type="OverrideOptions"/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Element&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Element name="connection"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Attribute name="source" type="javax.xml.namespace.QName"
      reference="consumes"/&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Attribute name="target" type="javax.xml.namespace.QName" reference="provides"/&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Element&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Element name="interface" virtual="true"/&gt; &amp;nbsp;&amp;nbsp; &amp;nbsp;
      &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Element name="interface.wsdl" className="InterfaceWSDL" base="interface"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Attribute name="interface" type="java.net.URI"/&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Element&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;EnumType name="OverrideOptions"&gt;
      &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Enumeration value="no"/&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Enumeration value="may"/&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Enumeration value="must"/&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/EnumType&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;lt;/Content&gt; &lt;/pre&gt; &lt;/blockquote&gt;
      &lt;p&gt;Here is a little configuration file:&lt;br /&gt;&lt;/p&gt; &lt;blockquote&gt;# XML file describing the domain data model. &lt;br /&gt;domainDataModelFile=DemoDataModel.xml&lt;br /&gt;&lt;br /&gt;# Namespace URI for the domain model&lt;br /&gt;namespaceURI=http://www.yourorg.org/xmlns/foo/1.0&lt;br /&gt;&lt;br /&gt;# Name of the domain model, such as &amp;quot;WSDL&amp;quot;, &amp;quot;Schema&amp;quot;, etc.&lt;br /&gt;domainModelName=Foo&lt;br /&gt;&lt;br /&gt;# Package name for the base
      model classes. &lt;br /&gt;modelPackage=org.yourorg.foo.model&lt;br /&gt;&lt;br /&gt;# Header file to be included in all the generated Java files.&lt;br /&gt;headerFile=Header.txt&lt;br /&gt;&lt;br /&gt;# Your name&lt;br /&gt;author=jqian &lt;br /&gt;&lt;/blockquote&gt; &lt;p&gt;The following shows the list of classes this XAM AutoGen Tool spits out when fed with the above domain schema and configuration file:&lt;br /&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt; &lt;img
      src="http://blogs.sun.com/jqian/resource/xam_autogen_sample_output.png" /&gt;&lt;br /&gt;&lt;/p&gt; &lt;/blockquote&gt; &lt;p&gt;&lt;b&gt;Usage:&lt;/b&gt;&lt;/p&gt; &lt;p&gt;Here is the steps you need to take to use this tool: &lt;br /&gt;&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Unzip &lt;a href="http://blogs.sun.com/jqian/resource/XAMAutoGen.zip"&gt;this zip file&lt;/a&gt;&lt;/li&gt; &lt;li&gt;Define your domain data model under the &lt;i&gt;config&lt;/i&gt; directory. &lt;br /&gt;&lt;/li&gt;
      &lt;li&gt;Configure a few properties in &lt;i&gt;config/config.properties&lt;/i&gt;&lt;/li&gt; &lt;li&gt;Run &amp;quot;&lt;i&gt;java&amp;nbsp; -jar&amp;nbsp; XAMGenerator.jar&amp;nbsp; &amp;lt;output_dir&gt;&lt;/i&gt;&amp;quot;. (The output_dir could be your Java project or NetBeans module project's source directory.)&lt;br /&gt;&lt;/li&gt; &lt;li&gt;In your project, add dependency to &lt;i&gt;platform8/lib/org-openide-util.jar&lt;/i&gt; and
      &lt;i&gt;ide9/modules/org-netbeans-modules-xml-xam.jar&lt;/i&gt; under your NetBeans directory.&lt;br /&gt;&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;That's it.&lt;br /&gt;&lt;/p&gt; &lt;p&gt;I am currently using this tool to auto generate the data model for &lt;a href="http://en.wikipedia.org/wiki/Service_component_architecture"&gt;SCA (Service Component Architecture)&lt;/a&gt;. &lt;a href="http://blogs.sun.com/jqian/resource/SCADataModel.xml"&gt;Here &lt;/a&gt;is the domain schema for the SCA Assembly Model.
      You can compare it with the &lt;a href="http://www.osoa.org/xmlns/sca/1.0/"&gt;original XSD Schemas&lt;/a&gt;. Based on my usage, I am going to keep improving this XAM AutoGen Tool . If you have any comments or suggestions, I am all ears.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;p&gt;P.S. I found this&lt;span id="form1:center_container:page_border:fixed_contentarea:fixed_contextbox:bottomPanel:categoryDetailPanel:descPanel:txtDescription"&gt; &lt;/span&gt;&lt;a
      href="http://plugins.netbeans.org/PluginPortal/faces/PluginDetailPage.jsp?pluginid=9155"&gt;NetBeans Velocity plugin&lt;/a&gt;&lt;span id="form1:center_container:page_border:fixed_contentarea:fixed_contextbox:bottomPanel:categoryDetailPanel:descPanel:txtDescription"&gt; along the way. Very nice as a Velocity template viewer, but once you start editing the templates, it's getting a little crazy sometimes.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <pubDate>Wed, 23 Jul 2008 00:05:52 +0000</pubDate>
    </item>
    <item>
      <title>Geertjan's Blog: Creating a Grails Plugin in NetBeans IDE</title>
      <guid isPermaLink="false">http://blogs.sun.com/geertjan/entry/hello_grails_plugin</guid>
      <link>http://blogs.sun.com/geertjan/entry/hello_grails_plugin</link>
      <description>Let's create a plugin for Grails. Grails is, after all, modular and pluggable. Here's the ultimate simple Grails plugin, just to give an idea what is involved, from start to finish. The most useful references I have found so far are these: &lt;ul&gt; &lt;li&gt;&lt;p&gt;&lt;a href="http://www.grails.org/The+Plug-in+Developers+Guide"&gt;The Plug-in Developers Guide&lt;/a&gt; &lt;li&gt;&lt;p&gt;&lt;a
      href="http://jshingler.blogspot.com/2008/07/phone-number-custom-constraint-for.html"&gt;Phone Number Custom Constraint for Grails&lt;/a&gt; &lt;li&gt;&lt;p&gt;&lt;a href="http://dahernan.net/2008/02/my-first-grails-plugin.html"&gt;My first Grails plugin&lt;/a&gt; &lt;/p&gt;&lt;/li&gt;&lt;/p&gt;&lt;/li&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Between those three, you should have enough to figure things out. I still found it hard, despite those instructions and so to avoid having to figure things
      out again some time in the future, I'll write absolutely everything here. &lt;p&gt;&lt;u&gt;Creating the Plugin&lt;/u&gt; &lt;ol&gt; &lt;p&gt;&lt;li&gt;On the command line, run this: &lt;pre&gt;grails create-plugin SamplePlugin&lt;/pre&gt; &lt;p&gt;Now you have a Grails plugin. However, at the same time it is just another Grails application, which means you can simply open it in NetBeans IDE. (I.e., there is no import process and no NetBeans artifacts are added to the plugin in order to be able to
      open it in the IDE.) &lt;p&gt;&lt;li&gt;So open the plugin in the IDE. The Projects window isn't very interesting, it just shows you the same as you would normally see for Grails applications: &lt;p&gt;&lt;img src="http://blogs.sun.com/geertjan/resource/grails-plugin-1.png" /&gt; &lt;p&gt;The Files window (Ctrl-2) however, shows a lot more: &lt;p&gt;&lt;img src="http://blogs.sun.com/geertjan/resource/grails-plugin-2.png" /&gt; &lt;p&gt;Open the "SamplePluginGrailsPlugin.groovy" file and there you see
      the following: &lt;pre&gt;class SamplePluginGrailsPlugin { def version = 0.1 def dependsOn = [:] def doWithSpring = { // TODO Implement runtime spring config (optional) } def doWithApplicationContext = { applicationContext -&gt; // TODO Implement post initialization spring config (optional) } def doWithWebDescriptor = { xml -&gt; // TODO Implement additions to web.xml (optional) } def doWithDynamicMethods = { ctx -&gt; // TODO Implement registering dynamic methods to classes (optional) } def onChange
      = { event -&gt; // TODO Implement code that is executed when this class plugin class is changed // the event contains: event.application and event.applicationContext objects } def onApplicationChange = { event -&gt; // TODO Implement code that is executed when any class in a GrailsApplication changes // the event contain: event.source, event.application and event.applicationContext objects } }&lt;/pre&gt; &lt;p&gt;I.e., you have hooks for integrating your code into meaningful places in the plugin.
      &lt;p&gt;&lt;li&gt;Now we'll create code that will let our plugin provide a new "constraint". (If you don't know what that is, you will know by the time you finish reading all this.) To do so, we will need to extend &lt;a href="http://grails.org/doc/1.0.x/api/org/codehaus/groovy/grails/validation/AbstractConstraint.html"&gt;org.codehaus.groovy.grails.validation.AbstractConstraint&lt;/a&gt;, in a package within &lt;tt&gt;src/groovy&lt;/tt&gt;: &lt;pre&gt;import
      org.codehaus.groovy.grails.validation.AbstractConstraint import org.springframework.validation.Errors class BestFrameworkConstraint extends AbstractConstraint { private static final String DEFAULT_MESSAGE_CODE = "default.answer.invalid.message"; public static final String NAME = "oneCorrectResponse"; private boolean validateConstraint &lt;b&gt;//The parameter which the constraint is validated against:&lt;/b&gt; @Override public void setParameter(Object constraintParameter) { if (!(constraintParameter
      instanceof Boolean)) throw new IllegalArgumentException("Parameter for constraint [" + NAME + "] of property [" + constraintPropertyName + "] of class [" + constraintOwningClass + "] must be a boolean value"); this.validateConstraint = ((Boolean) constraintParameter).booleanValue() super.setParameter(constraintParameter); } &lt;b&gt;//Returns the default message for the given message code in the current locale:&lt;/b&gt; @Override protected void processValidate(Object target, Object propertyValue,
      Errors errors) { if (validateConstraint &amp;amp;&amp;amp; !validate(target, propertyValue)) { def args = (Object[]) [constraintPropertyName, constraintOwningClass, propertyValue] super.rejectValue(target, errors, DEFAULT_MESSAGE_CODE, "not." + NAME, args); } } &lt;b&gt;//Returns whether the constraint supports being applied against the specified type:&lt;/b&gt; @Override boolean supports(Class type) { return type != null &amp;amp;&amp;amp; String.class.isAssignableFrom(type); } &lt;b&gt;//The name
      of the constraint, which the user of the plugin will use //when working with your plugin.&lt;/b&gt; @Override String getName() { return NAME; } &lt;b&gt;//Validate this constraint against a property value, //In this case, ONLY "Grails" is valid, everything else will cause an error:&lt;/b&gt; @Override boolean validate(target, propertyValue) { propertyValue ==~ /^Grails$/ } }&lt;/pre&gt; &lt;p&gt;&lt;li&gt;Next, back in the Groovy plugin class that we looked at earlier, hook the above class into the
      plugin, using the "doWithSpring" closure to do so: &lt;pre&gt;def doWithSpring = { &lt;b&gt;ConstrainedProperty.registerNewConstraint( BestFrameworkConstraint.NAME, BestFrameworkConstraint.class);&lt;/b&gt; }&lt;/pre&gt; &lt;p&gt;&lt;li&gt;Now, back on the command line, navigate to within the "SamplePlugin" folder. There, run the following: &lt;pre&gt;grails package-plugin&lt;/pre&gt; &lt;p&gt;Back in the IDE, examine the ZIP file that the above command created: &lt;p&gt;&lt;img
      src="http://blogs.sun.com/geertjan/resource/grails-plugin-3.png" /&gt; &lt;/p&gt;&lt;/p&gt;&lt;/li&gt;&lt;/p&gt;&lt;/li&gt;&lt;/p&gt;&lt;/li&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/li&gt;&lt;/p&gt;&lt;/p&gt;&lt;/li&gt;&lt;/p&gt;&lt;/ol&gt; &lt;p&gt;That ZIP file &lt;b&gt;is&lt;/b&gt; your Grails plugin. &lt;p&gt;&lt;u&gt;Installing the Plugin&lt;/u&gt; &lt;p&gt;Now we will install our plugin in a new application. &lt;ol&gt; &lt;p&gt;&lt;li&gt;First, create a new Grails
      application by going to the New Project wizard (Ctrl-Shift-N) and choosing Groovy | Grails Application. Click Next and type "SampleApplication" and then click Finish. &lt;p&gt;&lt;li&gt;After the IDE has finished running the "grails create-app" command for you, you will see the new application open in the IDE. Right-click it and choose "Plugins", as shown here: &lt;p&gt;&lt;img src="http://blogs.sun.com/geertjan/resource/grails-plugin-4.png" /&gt; &lt;p&gt;&lt;li&gt;In the Grails Plugins dialog,
      notice that the list gets filled with many potential plugins that you might want to install, from the Grails plugins repository. Instead, we'll install our own. Click Browse and browse to the ZIP file that we created three steps ago and notice that it appears in the text field at the bottom of the dialog: &lt;p&gt;&lt;img src="http://blogs.sun.com/geertjan/resource/grails-plugin-5.png" /&gt; &lt;p&gt;&lt;li&gt;Click "Install" and then a progress bar appears, ending with the plugin being installed.
      Notice that you can also uninstall it: &lt;p&gt;&lt;img src="http://blogs.sun.com/geertjan/resource/grails-plugin-6.png" /&gt; &lt;p&gt;&lt;li&gt;Take a look at your application and notice (in the Files window) what's happened to the plugin. It's been unzipped, plus the ZIP file is still there. And all that's been done in the "plugins" folder. &lt;i&gt;Nothing&lt;/i&gt; else has changed, which means that uninstallation is as simple as removing the folder from the "plugins" folder: &lt;p&gt;&lt;img
      src="http://blogs.sun.com/geertjan/resource/grails-plugin-15.png" /&gt; &lt;p&gt;Thanks to "convention over configuration", Grails knows exactly where everything is&amp;#8212;so that, for example, the "plugin.xml" file that you see above, if found within the folder structure you see above, is the indicator to Grails that a plugin is available for use.
      &lt;/p&gt;&lt;/p&gt;&lt;/li&gt;&lt;/p&gt;&lt;/p&gt;&lt;/li&gt;&lt;/p&gt;&lt;/p&gt;&lt;/li&gt;&lt;/p&gt;&lt;/p&gt;&lt;/li&gt;&lt;/p&gt;&lt;/li&gt;&lt;/p&gt;&lt;/ol&gt; &lt;p&gt;&lt;u&gt;Using the Functionality Provided By the Plugin&lt;/u&gt; &lt;ol&gt; &lt;p&gt;&lt;li&gt;Let's now use our plugin. Create a domain class called "Quiz", after right-clicking the "Domain Classes" node and choosing "Create new Domain Class": &lt;p&gt;&lt;img src="http://blogs.sun.com/geertjan/resource/grails-plugin-7.png"
      /&gt; &lt;p&gt;&lt;li&gt;Right-click the "Controllers" node and choose "Create new controller". Type "Quiz" and then click Finish. Use the Groovy editor to add one line for adding the scaffolding (and uncomment the other line): &lt;p&gt;&lt;img src="http://blogs.sun.com/geertjan/resource/grails-plugin-8.png" /&gt; &lt;p&gt;&lt;li&gt;Back in the "Quiz" domain class, add your property and use the "oneCorrectResponse" constraint defined in your plugin, as shown here: &lt;p&gt;&lt;img
      src="http://blogs.sun.com/geertjan/resource/grails-plugin-9.png" /&gt; &lt;p&gt;&lt;b&gt;Note:&lt;/b&gt; The "oneCorrectResponse" constraint that you see above is the name of the constraint defined in the plugin. &lt;p&gt;&lt;li&gt;And then add the message to the &lt;tt&gt;messages.properties&lt;/tt&gt; file, which is within the "Messages Bundles" node: &lt;p&gt;&lt;img src="http://blogs.sun.com/geertjan/resource/grails-plugin-10.png" /&gt; &lt;p&gt;&lt;li&gt;Run the application and you will see that
      your constraint will prevent anything other than "Grails" from being considered acceptable, when "Create" is clicked below: &lt;p&gt;&lt;img src="http://blogs.sun.com/geertjan/resource/grails-plugin-13.png" /&gt; &lt;/p&gt;&lt;/li&gt;&lt;/p&gt;&lt;/p&gt;&lt;/li&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/li&gt;&lt;/p&gt;&lt;/p&gt;&lt;/li&gt;&lt;/p&gt;&lt;/p&gt;&lt;/li&gt;&lt;/p&gt;&lt;/ol&gt; &lt;p&gt;Congratulations, you've created, installed, and used your first Grails
      plugin!&lt;p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;</description>
      <pubDate>Tue, 22 Jul 2008 23:55:12 +0000</pubDate>
    </item>
    <item>
      <title>Another Random Developer Blog » NetBeans: Using Spring and Facelets together with NetBeans 6.1</title>
      <guid isPermaLink="false">http://blog.jdevelop.eu/?p=155</guid>
      <link>http://blog.jdevelop.eu/?p=155</link>
      <description>&lt;p&gt;&lt;img src="http://blog.jdevelop.eu/uploads/spring.gif" /&gt;&lt;img src="http://blog.jdevelop.eu/uploads/glassfishlogo.jpg" /&gt;&lt;img src="http://blog.jdevelop.eu/uploads/facelets.jpg" /&gt;&lt;img src="http://blog.jdevelop.eu/uploads/netbeanslogo.gif" /&gt;&lt;br /&gt; &lt;strong&gt;&lt;span&gt;&lt;a href="http://blog.jdevelop.eu/?p=155" rel="nofollow"&gt;[Read more]&lt;/a&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt; Technorati Tags:: Facelets, GlassFish, Java, MyFaces,
      NetBeans, Spring</description>
      <pubDate>Tue, 22 Jul 2008 20:45:40 +0000</pubDate>
    </item>
    <item>
      <title>tm's weblog: Hudson as a tool for testing? Yes!</title>
      <guid isPermaLink="false">http://blogs.sun.com/tm/entry/hudson_a_a_tool_for</guid>
      <link>http://blogs.sun.com/tm/entry/hudson_a_a_tool_for</link>
      <description>Lots of folks in NetBeans started to use &lt;a href="https://hudson.dev.java.net/"&gt;&lt;b&gt;Hudson&lt;/b&gt;&lt;/a&gt; as a tool for continuous integration, or just for building NetBeans from various clones, or to build test, whatever you can imagine. Just take a look at &lt;a href="http://deadlock.netbeans.org/hudson/"&gt;Deadlock machine&lt;/a&gt; and you will see a plenty of NetBeans related jobs. We (NetBeans QE) recently got an idea to utilize Hudson as our testing
      infrastructure. Yes, NetBeans have a lot of automated tests that are being ran daily and test results are evaluated for potential problems. So you have tests, you have machines, but you still need an infrastructure to connect this together. We chose Hudson, because it's a great tool, and what's really cool - is &lt;b&gt;&lt;a href="http://hudson.gotdns.com/wiki/display/HUDSON/Extend+Hudson"&gt;extensible&lt;/a&gt;&lt;/b&gt; by various plugins (available on Hudson's web, or you can write your own if
      you wish). The basic idea was to use Hudson as "master-slave" architecture, where you simply set up on master what do you want to run, and master distributes the work to the slaves, that execute the jobs. More detailed approach to this - configure on master which tests do you want to run on which platforms, and they will get executed on appropriate slaves. And getting one level lower - to achieve this, you have to have something we called &lt;i&gt;generic Ant script&lt;/i&gt;, which will provide all
      the stuff needed to execute test: &lt;ol&gt; &lt;li&gt;Download IDE - the IDE build which will be tested &lt;li&gt;Download NetBeans &lt;a href="http://blogs.sun.com/xzajo/entry/binary_test_distribution_for_netbeans"&gt;Test Distribution&lt;/a&gt; - Test Distribution contains binaries of all tests from NetBeans repo. &lt;li&gt;Run selected tests - Specify which tests from Test Distribution will run in tested IDE &lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/ol&gt; So i wrote and Ant script with plenty of
      useful targets to provide this functionality (Yeah, by this I learned a lot how to write Ant scrips:-) ). This Ant script is generic, and all the stuff like where to take IDE build, where to take Test Distribution, which tests run, what to do with results etc. are controlled by passing corresponding properties. Once we have this working, the only thing we have to do, is to distribute the Ant script to machine we want to run tests on, and provide some better UI than command line for the main
      properties, which control the test execution. Therefore me and Max Sauer extended Hudson by &lt;i&gt;Test Run Plugin&lt;/i&gt; (sources are not public right now), that enables Hudson to copy our generic Ant script on target slave machines and extends job configuration with our panel for setting properties for testrun. With all this stuff working, people can simply log in on master, select one or more slave machines on which will tests run, configure which build will be tested by which test (through
      nice GUI :-) ), run the job and take a nap while watching the progress of tests execution on target machines. When test run is finished, you get a nice overview of test results (yes, built-in feature of Hudson).&lt;br /&gt; The main benefits we take from Hudson (aka features we really like): &lt;ul&gt; &lt;li&gt;Master-slave architecture - you can have various machine with various architectures/OS added into testing farm. &lt;li&gt;JUnit results processing - nice HTML, results trends, charts,...
      &lt;li&gt;Scheduler - triggering of testrun by another job (which can listen e.g. if new production build is available), or "cron-like" settings. &lt;li&gt;Email notification - send email if tests do not pass. &lt;li&gt;SCP plugin - we can send test results to remote machine that can parse them and store into DB. &lt;li&gt;Authentication - simply configure and point Hudson to your LDAP server, really out of box functionality. &lt;li&gt;Multiple JDK installations - specify location where are JDKs
      located and voila - you can run whole matrix of tests - one axis is JDKs, second is platform. &lt;li&gt;...many many others:-) &lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/ul&gt; And conclusion? Hudson is not only contentious integration tool, it can be almost whatever you like.</description>
      <pubDate>Tue, 22 Jul 2008 14:55:17 +0000</pubDate>
    </item>
    <item>
      <title>NetBeans for PHP: Feature freeze was reached</title>
      <guid isPermaLink="false">http://blogs.sun.com/netbeansphp/entry/feature_freeze_was_reached</guid>
      <link>http://blogs.sun.com/netbeansphp/entry/feature_freeze_was_reached</link>
      <description>&lt;p&gt; Our team has reached the feature freeze for NetBeans 6.5. It means we will concentrate mainly on stabilization, bug fixing and improving performance. And this is where you can really help us. How? Try a &lt;a href="http://bits.netbeans.org/download/trunk/nightly/latest/"&gt;development build&lt;/a&gt; or &lt;a href="http://bits.netbeans.org/download/6.5/m1/"&gt;NetBeans 6.5 M1&lt;/a&gt;. NetBeans 6.5 M2 is planned to be published on Aug 11th, so it will be a good idea to switch
      to it then. &lt;/p&gt; &lt;p&gt;If you find any bug or you have feature and enhancement requests, enter them in &lt;a href="http://www.netbeans.org/issues/enter_bug.cgi"&gt;Issuezilla&lt;/a&gt; (you have to be log in). We always appreciate it.&amp;nbsp; And don't forget to include additional information such as the build number, OS etc. This information can be easily copied from the About dialog.&lt;/p&gt; &lt;p&gt; &lt;img src="http://blogs.sun.com/netbeansphp/resource/article_images/AboutBox65.png"
      /&gt; &lt;/p&gt; &lt;p&gt;Although we are in the stabilization phase, minor improvements are still possible. We are trying to create superb PHP IDE and you can help us enormously. Just let us know what you think. Also feel free to write your opinions, suggestions&amp;nbsp; here or discuss it on &lt;a href="mailto:users@php.netbeans.org"&gt;users@php.netbeans.org&lt;/a&gt;&amp;nbsp; mainling list. Subscribing is easy, just send an empty email to &lt;a
      href="mailto:users-subscribe@php.netbeans.org"&gt;users-subscribe@php.netbeans.org&lt;/a&gt;. &lt;/p&gt;</description>
      <pubDate>Tue, 22 Jul 2008 13:25:06 +0000</pubDate>
    </item>
  </channel>
</rss>
