Re: JPA and class enhancers

From: Bill Dudney (bdudne..pache.org)
Date: Mon Mar 27 2006 - 15:35:31 EST

  • Next message: Jeff Genender: "Re: JPA and class enhancers"

    Hey Jeff,

    I was just reading the license here;

    http://asm.objectweb.org/license.html

    It does not claim to be BSD but perhaps it is anyway?

    In any event I don't see a prob with CGLib since its used extensively
    inside Apache projects.

    Now if I could find some decent docs ;-)

    TTFN,

    Bill Dudney
    MyFaces - http://myfaces.apache.org
    Cayenne - http://incubator.apache.org/projects/cayenne.html

    On Mar 27, 2006, at 12:02 PM, Jeff Genender wrote:

    > I am certain ASM's license is fine since its BSD:
    >
    > http://people.apache.org/~cliffs/3party.html
    >
    > Second, Geronimo uses CGLib, which in-turn uses ASM, so I am pretty
    > sure
    > there are no issues at all.
    >
    >
    > Bill Dudney wrote:
    >> Hi All,
    >>
    >> The other advantage of CGLib is its licensed with the ASL 1.1. While
    >> ASM's license is very liberal its not a 'typical' license and we
    >> would
    >> have to go through some review with lega..pache.org to get the
    >> license
    >> OK'd.
    >>
    >> TTFN,
    >>
    >> Bill Dudney
    >> MyFaces - http://myfaces.apache.org
    >> Cayenne - http://incubator.apache.org/projects/cayenne.html
    >>
    >>
    >>
    >> On Mar 27, 2006, at 10:29 AM, Andrus Adamchik wrote:
    >>
    >>> I have almost no experience with bytecode enhancement frameworks.
    >>> The
    >>> only reason ASM seemed attractive is because of its small footprint
    >>> (generally we are trying to keep the dependency list as small as
    >>> reasonably possible).
    >>>
    >>> I agree - ASM is too low level, and I am not against CGLib if it
    >>> saves
    >>> us time. But can anyone show a simple example of the differences
    >>> between the two?
    >>>
    >>> Also with CGLib how would we solve the problem of changing
    >>> CayenneDataObject code? Is there a good way to grab stuff from the
    >>> existing compiled class?
    >>>
    >>> Andrus
    >>>
    >>>
    >>> On Mar 27, 2006, at 6:58 PM, Jeff Genender wrote:
    >>>
    >>>> How about CGLib instead of ASM directly? ASM is a bit complex and
    >>>> necessitates a certain knowledge of the JVM op codes. IMHO,
    >>>> CGLib seems
    >>>> high level enough to make this work. Thoughts?
    >>>>
    >>>> Jeff
    >>>>
    >>>> Bill Dudney wrote:
    >>>>> Hi Andrus,
    >>>>>
    >>>>> Sorry for such a tardy reply but I'm just getting going on the JPA
    >>>>> stuff...
    >>>>>
    >>>>> Jeff and I were at TSS Symposium last week and we had a chance
    >>>>> to talk
    >>>>> through the work for JPA. I wanted to get our thoughts into an
    >>>>> email
    >>>>> and
    >>>>> off to the list so we are not duplicating work. We are planning on
    >>>>> doing
    >>>>> the mapping work. Jeff is going to tackle handling the annotations
    >>>>> and I
    >>>>> am going to handle parsing the orm.xml files and augmenting the
    >>>>> mapping
    >>>>> info.
    >>>>>
    >>>>> Other thoughts etc are inline.
    >>>>>
    >>>>> On Mar 7, 2006, at 2:45 AM, Andrus Adamchik wrote:
    >>>>>
    >>>>>> I did a little research on bytecode enhancement (CAY-460) and
    >>>>>> wanted
    >>>>>> to share some thoughts.
    >>>>>>
    >>>>>> It turned out that it is fairly simple to modify bytecode with
    >>>>>> the ASM
    >>>>>> framework:
    >>>>>>
    >>>>>> http://asm.objectweb.org/
    >>>>>>
    >>>>>> I checked in a basic enhancer that adds objectId and
    >>>>>> persistenceState
    >>>>>> properties to POJOs already. Coding the rest of the DataObject
    >>>>>> enhancements shouldn't be a problem, however ASM code is not
    >>>>>> something
    >>>>>> that is easy to maintain by hand (so if say CayenneDataObject
    >>>>>> changes
    >>>>>> internally, I'd like the enhancer to pick up such changes
    >>>>>> automatically). I guess we may implement some sort of template
    >>>>>> based
    >>>>>> approach. ASM allows to take an existing class X and generate
    >>>>>> regular
    >>>>>> Java code that can act as a script for creating class X
    >>>>>> bytcode from
    >>>>>> scratch. So theoretically an enhancer itself can be generated.
    >>>>>>
    >>>>>
    >>>>> This looks interesting. I like the idea of using ASM to weave
    >>>>> in the
    >>>>> required enhancements. I looked at the code you checked in and I'm
    >>>>> happy
    >>>>> to start down the path of getting the rest of the required code
    >>>>> woven
    >>>>> in. I will also start looking at the template based approach. I
    >>>>> will
    >>>>> probably do this before I get to the XML work so we can start
    >>>>> testing ASAP.
    >>>>>
    >>>>>> BTW, ASM visitor API can be used for another purpose - processing
    >>>>>> annotations (CAY-456), thus solving two problems at once.
    >>>>>>
    >>>>>
    >>>>> This looks cool (the ASM is really cool for doing this kind of
    >>>>> work
    >>>>> AFAICT). Jeff is going to head down this path.
    >>>>>
    >>>>>>
    >>>>>> Another issue is integrating the enhancer in the provider. The
    >>>>>> requirement is that enhanced classes must be accessible to the
    >>>>>> application ClassLoader, so my original solution with a
    >>>>>> specialized
    >>>>>> child ClassLoader won't work. I see three ways to do the
    >>>>>> integration
    >>>>>> (we may implement all three of them).
    >>>>>>
    >>>>>> 1. "cgen" - by merging all CayenneDataObject code in the class
    >>>>>> generator template. This will work for people who use Cayenne
    >>>>>> to model
    >>>>>> their ORM classes, but want a superclass that is not a
    >>>>>> DataObject.
    >>>>>> This is not suitable for persistent classes created outside
    >>>>>> Cayenne
    >>>>>> and deployed with Cayenne provider.
    >>>>>>
    >>>>>> 2. "cdeploy" - enhancing compiler Ant task ala JDO.
    >>>>>>
    >>>>>> 3. Runtime - this would use JDK 1.5 java.lang.instrument API.
    >>>>>> On the
    >>>>>> one hand it is the least intrusive option, but on the other it
    >>>>>> requires a special runtime parameter (-javaagent:cayenne.jar).
    >>>>>>
    >>>>>> Ideas, comments?
    >>>>>>
    >>>>>
    >>>>> From my reading of the spec it looks like the ClassTransformer
    >>>>> is there
    >>>>> so that 3 does not require the special runtime parameter. Is there
    >>>>> something that I'm missing? I am basing my assumptions on the
    >>>>> comment
    >>>>> (starting on page 148) on the addTransformer(ClassTransformer)
    >>>>> method on
    >>>>> the PersistenceUnitInfo class.
    >>>>>
    >>>>> Thoughts welcome. Also if you are doing any of this work please
    >>>>> speak up
    >>>>> so we don't duplicate.
    >>>>>
    >>>>> TTFN,
    >>>>>
    >>>>> Bill Dudney
    >>>>> MyFaces - http://myfaces.apache.org
    >>>>> Cayenne - http://incubator.apache.org/projects/cayenne.html
    >>>>>
    >>>>>
    >>>>>
    >>>>
    >>>



    This archive was generated by hypermail 2.0.0 : Mon Mar 27 2006 - 15:36:16 EST