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 - 13:46:25 EST