[hibernate-dev] Jandex 2.0 Beta - Java 8 Type Annotations, Generics, & Offline Reflection

Steve Ebersole steve at hibernate.org
Mon Dec 1 18:33:39 EST 2014


Yes, this is the new Jandex stuff I mentioned in Amsterdam.  Moving to
Jandex at all is one of the tasks we marked as optional for ORM 5.0.  This
would mean changing the legacy AnnotationBinder awesome-sauce to use
Jandex, not the new metamodel code; so that would be a lot of work.
Volunteers to help gets its done faster :)

On Mon, Dec 1, 2014 at 2:24 PM, Hardy Ferentschik <hardy at hibernate.org>
wrote:

> Hi,
>
> I think this email of Jason is worth forwarding to hibernate-dev.
> Jandex 2 sounds really interesting for all Hibernate projects. To a
> certain degree Jandex offers now
> a lot of the things Steve tried to do with the reflight stuff. I am not
> sure whether Jandex can completely
> replace it, but t can be for sure of help. Especially interesting to me is
> the fully resolved type information.
>
> In Search we have been talking for a long time to get rid of Commons
> Annotations. It is basically already possible
> now (using Jandex 1), but it got pushed back so far. Now with Jandex 2 we
> definitely should make the switch. Maybe Search 5.1?
>
> Last but not least Validator, there we have been talking about Jandex for
> a while as well. The new version would not have
> the benefit of being able to remove the dependency to classmate.
>
> I think we should have a look at this Beta and provide feedback to Jason
> if we find any problems. I am for sure to have a look
> at it in the context of Validator.
>
> --Hardy
>
>
> ----- Forwarded message from Jason Greene  -----
>
> I normally don’t spam you guys with Beta announcements, but since many of
> you are using Jandex, and this release has significant changes, in
> particular additional APIs, I wanted to make sure there was an opportunity
> for feedback before going final.
>
> For those unfamiliar with Jandex, it was originally created as an
> efficient bytecode based annotation indexer for AS7, but over time has
> evolved to also act as a reflection library that does not require
> class-loading nor complete linkage (you can analyze partial class graphs).
>
> For those interested in playing with runtime Java 8 Type annotations,
> which will likely end up in EE8 APIs, this release will likely be quite
> useful to you, since standard Java reflection does not currently expose
> this data.
>
> A brief guide for using Jandex is located here:
> https://github.com/wildfly/jandex
>
> Full notes are below.
>
> Thanks!
>
>
>
> Jandex 2.0
> —————
>
> - Binary and Source Compatibility
>
>   All previous code *using* Jandex 1.1 should compile and run against 2.0.
>   However, any code that extended “closed" contracts (e.g.
> AnnotationTarget)
>   will require updating.
>
> - Offline reflective APIs and improvements
>
>   All methods and fields, whether annotated or not are all accessible, and
>   supporting APIs were created to enable access to the information.
>
>   Generics information is provided in a familiar pattern similar to Java
>   reflection but with usability improvements. Type information is fully
>   resolved.
>
>   Method and field access now supports binary searchable. Annotations are
>   categorized and filtered at various levels.
>
>   All need to cast has been eliminated from the framework.
>
> - Implemented offline index persistence
>
>   The format is radically different to support the storage of
>   generics, type annotations, and the aggressive interning used to
>   reduce memory usage. Monster deployment (713MB of class data)
>   only requires 26MB of storage. JDK, which has 128MB of class data is
>   requires only 4.8 MB. Compressing the indexes by including them in a jar
>   reduces the capacity even further to about 14MB and 2.6 MB respectively.
>
>   Loading time is extremely efficient, at 1 second to load the 26MB
>   index for the monster deployment.
>
>   A portability layer is provided to convert the pervious
>   offline index formats into the new internal model.
>
> - Full Java 8 type annotation support
>
>   Java 8 type annotations all you to use annotations almost anywhere.
>   For example, the following is now allowed:
>
>   @A Map<@B Comparable<@F Object @C [] @D [] @E []>, @G List <@H D>> b;
>   @H O1. at E O2<@F S, @G T>. at D O3. at A Nested<@B U, @C V> bar6;
>
>   A new set of APIs were developed to represent all of this information in
>   a useful way to the developer
>
> - Detailed class nesting information available
>
>   CDI needed a way to determine the enclosing class information for
>   all types of inner classes. This is all calculated and presented via
>   a few easy methods
>
> - Memory optimization work
>
>   The overhead required to store all offline reflection
>   info + generics is significant. Implemented a variety of graph
>   reduction strategies.
>
>   End results of a monster deployment containing 713MB of class data
>   (> 100k classes > 1 million methods) = 120MB of memory usage. The
>   JDK has 128MB of class data, which Jandex uses
>   only 20MB of heap to store.
>
> --
> Jason T. Greene
> WildFly Lead / JBoss EAP Platform Architect
> JBoss, a division of Red Hat
>
>
>
> ----- End forwarded message -----
>
> ----- End forwarded message -----
>
> _______________________________________________
> hibernate-dev mailing list
> hibernate-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/hibernate-dev
>


More information about the hibernate-dev mailing list