Friday, June 18, 2010

Annotation Scanning Standard

We (the industry) need to get something in place for Java EE 7 to get scanning under control at a platform level. The metadata-complete concept of each individual spec is less helpful given the growing number of specifications that can have class-level "discoverable" annotations.

The rules we have for scanning for ejbs in a webapp are quite unintuitive. And how they relate to the scanning of the new Java EE 6 level annotations are unintuitive to the point that how they are handled, I bet, is rather vendor specific:

  • @DataSourceDefinition(s)
  • @ManagedBean

    The cost of scanning a jar is constant in that it doesn't matter how many annotations you might be looking for or what spec they come from. If each individual spec continues to add spec-specific descriptor support for specifying which jars to scan, we're going to wind up with a rather big mess.

    We should lock this down with a clean and simple file to control which jars.

    Something as simple as the following would be a massive improvement.

    META-INF/scanning.xml

    <scanning>
      <jars>
        <jar>foo.jar</jar>
        <jar>bar.jar</jar>
      </jars>
      <packages>
        <package>org.foo.widgets</package>
        <package>com.bar.components</package>
      </packages>
    </scanning>
    
    I'd love it to have regex support, but even without it there's a big improvement.