You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jdo-dev@db.apache.org by "Richard Schilling (JIRA)" <ji...@apache.org> on 2008/10/17 19:08:44 UTC
[jira] Commented: (JDO-591) Enhancer Invocation API
[ https://issues.apache.org/jira/browse/JDO-591?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12640581#action_12640581 ]
Richard Schilling commented on JDO-591:
---------------------------------------
This is certainly needed for enhancers.
I might add some methods to the API presented to interrogate a class after enhancement to answer the following questions:
* what enhancer processed the class?
* what methods/members were added to the class by the enhancer?
* how many bytes were added to the class when it was enhanced?
* what version of JDO does the enhanced class conform to?
It might also be convenient to give the enhancer the ability to do on-demand enhancing of a single class. And, to specify a debugging level. Thoughts?
I've added to the suggested API for discussion...
package javax.jdo.enhancer;
import java.lang.instrument.ClassFileTransformer;
public interface JDOEnhancer extends ClassFileTransformer
{
public long bytesAdded(String enhancedClassName); // how many bytes were added to the class
public String[] methodsAdded(String enhancedClassName); // list of method signatures added
public static String enhancerVendor(); // whose enhancer is this?
public String enhancedBy(String enhancedClassName); // who enhanced this class?
public String[] membersAdded(String enhancedClassName); // list of member signautures added to the class
public long enhanceDate(String enhancedClassName); // when was the class enhanced (ms since epoch)
public Class enhance(String className, File jdoConfigFile); // enhance a single class given a config
public Class enhance(String className); // enhance using config file found in default locations
public void setDebugLevel(enum level); // set the debugging level to an enumaration/constant value
void setVerbose(boolean arg);
void setOutputDirectory(String dirName);
void enhancePersistenceUnit(String persistenceUnit);
void enhanceClasses(String[] classNames);
void enhanceJdoFiles(String[] jdoFileNames);
void enhanceJar(String jarFileName);
}
Would it also be useful to add some methods so that the enhancer reports what it plans on doing to a class that has not been processed yet? I'm not suggesting it, but I'm curious to know what people think. Something like:
public String generatePlan(String className);
> Enhancer Invocation API
> -----------------------
>
> Key: JDO-591
> URL: https://issues.apache.org/jira/browse/JDO-591
> Project: JDO
> Issue Type: New Feature
> Components: api2
> Reporter: Andy Jefferson
> Assignee: Andy Jefferson
> Fix For: JDO 2 maintenance release 3
>
>
> Having a standard interface to invoke the enhancer makes a lot of sense so we can have interchangeability of enhancers (for implementations that support BinaryCompatibility).
> A start point (for discussions) could be
> java -cp classpath {enhancer-class} [options] [jdo-files] [class-files]
> where options can be
> -persistenceUnit persistence-unit-name : Name of a "persistence-unit" to enhance the classes for
> -d target-dir-name : Write the enhanced classes to the specified directory
> -checkonly : Just check the classes for enhancement status
> -v : verbose output
> This then allows enhancement of the specified classes, or the classes defined by the specified JDO files, or the classes defined by the specified persistence-unit.
> What other control would people like to see ?
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.