Re: Plastic: An ASM wrapper for Tapestry 5.3
Eugene Kuleshov <[email protected]>
| Newsgroups | gmane.comp.java.objectweb.asm |
|---|---|
| Message-ID | <[email protected]> |
Howard, You may want to start with providing a 5 minute howto tutorial or a cookbook. Learning a new framework by the javadocs is not exactly trivial task... regards, Eugene On Thu, Apr 21, 2011 at 3:59 PM, Howard Lewis Ship <[email protected]> wrote: > I'm not sure how many of you are aware of Tapestry > (http://tapestry.apache.org/) ... it's a sophisticated Java web > application framework. At its core, it does some sophisticated > meta-programming on Java classes, transforming them at load time to > give them a number of new capabilities and such. This has built up in > Tapestry 5 over the last few years, using a wrapper around Javassist. > > However, Javassist is poorly documented, supported and maintained. > It's also repeatedly caused problems with code compiled for JDK 1.6. > Several months ago, I decided to see if I could port my highest level > abstractions from Javassist to ASM (in fact, the move to higher > abstractions goes back a year or more). > > The result is Plastic. Plastic is a layer on top of ASM. It entirely > hides the ASM APIs. > > The JavaDoc is here (from Tapestry's continuous integration build): > > https://builds.apache.org/hudson/job/tapestry-trunk-freestyle/ws/trunk/build/documentation/javadocs/org/apache/tapestry5/plastic/package-summary.html > > (start with PlasticManager and PlasticClass) > > Plastic is used in two ways: > > 1) To create new objects, typically proxy objects implementing one or > more interfaces > > 2) To instrument existing code, modifying its implementation > incrementally as classes are individually loaded > > In most cases, you add behavior by introducing new interfaces and new > methods and by applying advice to existing methods. For fields you > may inject values into the field, or outright replace access to the > field with delegation through a supplied FieldConduit. > > You also get efficient access to methods, regardless of visibility, > via MethodHandle, as well as efficient access to fields (which are > required to be private) via FieldHandle. > > Finally, there's a nice DSL, InstructionBuilder, used for providing > the implementation of a method directly. > > Although Plastic is part of Tapestry, it is entirely usable outside of > Tapestry; it's a sub-project of Tapestry with no dependencies (it even > uses a repackaged copy of the ASM 3.3.1 source). Tapestry 5.3, > including Plastic, is currently in an alpha state. > > I'm generally quite pleased with how Plastic has come out, and I'd > like to share it with others with a similar interest. > > Tapestry's inversion-of-control layer uses Plastic to generate various > kinds of proxies, to handle everything from just-in-time > initialization, to more advanced design patterns (such as > chain-of-command), to crazy stuff such as allowing method invocations > to return placeholder objects while computations execute on separate > thread. > > In Tapestry's web layer, Plastic is used for additional types of > proxies, and for the property expression language (Tapestry compiles > template expressions such "user.name" directly to bytecode for optimal > execution). > > In the next few weeks, I'll be converted the component class > transformation part from the Javassist layer to Plastic. > > I'm very interested in comments and suggestions concerning Plastic. > > -- > Howard M. Lewis Ship > > Creator of Apache Tapestry > > The source for Tapestry training, mentoring and support. Contact me to > learn how I can get you up and productive in Tapestry fast! > > (971) 678-5210 > http://howardlewisship.com > > > -- > You receive this message as a subscriber of the [email protected] mailing list. > To unsubscribe: mailto:[email protected] > For general help: mailto:[email protected]?subject=help > OW2 mailing lists service home page: http://www.ow2.org/wws > >
message-footer.txt
(text/plain, 238 B)
-- You receive this message as a subscriber of the [email protected] mailing list. To unsubscribe: mailto:[email protected] For general help: mailto:[email protected]?subject=help OW2 mailing lists service home page: http://www.ow2.org/wws