Class EnhancementHelper
java.lang.Object
org.datanucleus.enhancer.EnhancementHelper
Helper class for the DN bytecode enhancement contract.
It contains methods to register metadata for persistable classes and to perform common operations needed by implementations, not by end users.
It allows construction of instances of persistable classes without using reflection.
Persistable classes register themselves via a static method at class load time. There is no security restriction on this access. TODO Provide a mechanism to automatically deregister classes when their class loader exits? or register against the NucleusContext?
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescription(package private) static classHelper class to manage persistable classes.static interface -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate static final List<EnhancementHelper.RegisterClassListener> This list contains the registered listeners forRegisterClassEvents.private static Map<Class, EnhancementHelper.Meta> Static mapping ofPersistableclass to an instance of that class.private static EnhancementHelper -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidAdd the specifiedRegisterClassListenerto the listener list.static EnhancementHelperprivate static PersistablegetPersistableForClass(Class pcClass) Look up the instance for a Persistable class.Returns a collection of class objects of the registered persistable classes.newInstance(Class pcClass, StateManager sm) Create a new instance of the class and assign its StateManager.newInstance(Class pcClass, StateManager sm, Object oid) Create a new instance of the class and assign its StateManager and key values from the ObjectId.newObjectIdInstance(Class pcClass) Create a new instance of the ObjectId class of thisPersistableclass.newObjectIdInstance(Class pcClass, Object obj) Create a new instance of the class used by the parameter Class for JDO identity, using the key constructor of the object id class.static voidregisterClass(Class pcClass, Persistable pc) Register metadata by class.voidRemove the specifiedRegisterClassListenerfrom the listener list.voidUnregister all classes for the specified class loader.
-
Field Details
-
singletonHelper
-
registeredClasses
Static mapping ofPersistableclass to an instance of that class. New entries are added by the static method in eachPersistableclass initialisation. Entries are never removed. -
listeners
This list contains the registered listeners forRegisterClassEvents.
-
-
Constructor Details
-
EnhancementHelper
private EnhancementHelper()
-
-
Method Details
-
getInstance
-
newInstance
Create a new instance of the class and assign its StateManager.- Parameters:
pcClass- thePersistableclass.sm- theStateManagerwhich will own the new instance.- Returns:
- the new instance, or
nullif the class is not registered. - See Also:
-
newInstance
Create a new instance of the class and assign its StateManager and key values from the ObjectId. If the oid parameter isnull, no key values are copied. The new instance has itsdnFlagsset toLOAD_REQUIRED.- Parameters:
pcClass- thePersistableclass.sm- theStateManagerwhich will own the new instance.oid- the ObjectId instance from which to copy key field values.- Returns:
- the new instance, or
nullif the class is not registered. - See Also:
-
newObjectIdInstance
Create a new instance of the ObjectId class of thisPersistableclass. It is intended only for application identity. This method should not be called for classes that use single field identity; newObjectIdInstance(Class, Object) should be used instead. If the class has been enhanced for datastore identity, or if the class is abstract, null is returned.- Parameters:
pcClass- thePersistableclass.- Returns:
- the new ObjectId instance, or
nullif the class is not registered.
-
newObjectIdInstance
Create a new instance of the class used by the parameter Class for JDO identity, using the key constructor of the object id class. It is intended for single field identity. The identity instance returned has no relationship with the values of the primary key fields of the persistence-capable instance on which the method is called. If the key is the wrong class for the object id class, null is returned.For classes that use single field identity, if the parameter is of one of the following types, the behavior must be as specified:
NumberorCharacter: the parameter must be the single field type or the wrapper class of the primitive field type; the parameter is passed to the single field identity constructorObjectIdFieldSupplier: the field value is fetched from theObjectIdFieldSupplierand passed to the single field identity constructorString: the String is passed to the single field identity constructor
- Parameters:
pcClass- thePersistableclass.obj- theObjectform of the object id- Returns:
- the new ObjectId instance, or
nullif the class is not registered.
-
registerClass
Register metadata by class. This is called by the enhanced constructor of thePersistableclass.- Parameters:
pcClass- thePersistableclass used as the key for lookup.pc- an instance of thePersistableclass. TODO We can just do pcClass.newInstance() to get one!
-
unregisterClasses
Unregister all classes for the specified class loader.- Parameters:
cl- ClassLoader
-
addRegisterClassListener
Add the specifiedRegisterClassListenerto the listener list.- Parameters:
crl- the listener to be added
-
removeRegisterClassListener
Remove the specifiedRegisterClassListenerfrom the listener list.- Parameters:
crl- the listener to be removed
-
getRegisteredClasses
Returns a collection of class objects of the registered persistable classes.- Returns:
- registered persistable classes
-
getPersistableForClass
Look up the instance for a Persistable class.- Parameters:
pcClass- theClass.- Returns:
- the Persistable instance for the
Class.
-