Class ProxyManagerImpl

  • All Implemented Interfaces:
    ProxyManager

    public class ProxyManagerImpl
    extends java.lang.Object
    implements ProxyManager
    Default implementation of the ProxyManager interface.
    Author:
    Abe White, Mark Struberg
    • Field Summary

      Fields 
      Modifier and Type Field Description
      static org.apache.xbean.asm9.Type TYPE_OBJECT  
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      protected boolean allowsDuplicates​(java.lang.Class type)
      Return whether the given collection type allows duplicates.
      java.lang.Object copyArray​(java.lang.Object orig)
      Return a new array of the same component type as the given array and containing the same elements.
      java.util.Calendar copyCalendar​(java.util.Calendar orig)
      Return a copy of the given calendar with the same information.
      java.util.Collection copyCollection​(java.util.Collection orig)
      Return a new collection of the same type as the given one with a copy of all contained elements.
      java.lang.Object copyCustom​(java.lang.Object orig)
      Return a copy of the given object with the same information, or null if this manager cannot copy the object.
      java.util.Date copyDate​(java.util.Date orig)
      Return a copy of the given date with the same information.
      java.util.Map copyMap​(java.util.Map orig)
      Return a new map of the same type as the given one with a copy of all contained key/value pairs.
      protected java.lang.reflect.Constructor findCopyConstructor​(java.lang.Class cls)
      Find an appropriate copy constructor for the given type, or return null if none.
      protected java.lang.reflect.Method findGetter​(java.lang.Class type, java.lang.reflect.Method setter)
      Return the getter corresponding to the given setter, or null.
      protected byte[] generateProxyBeanBytecode​(java.lang.Class type, boolean runtime, java.lang.String proxyClassName)
      Generate the bytecode for a bean proxy for the given type.
      protected byte[] generateProxyCalendarBytecode​(java.lang.Class type, boolean runtime, java.lang.String proxyClassName)
      Generate the bytecode for a calendar proxy for the given type.
      protected byte[] generateProxyCollectionBytecode​(java.lang.Class type, boolean runtime, java.lang.String proxyClassName)
      Generate the bytecode for a collection proxy for the given type.
      protected byte[] generateProxyDateBytecode​(java.lang.Class type, boolean runtime, java.lang.String proxyClassName)
      Generate the bytecode for a date proxy for the given type.
      protected byte[] generateProxyMapBytecode​(java.lang.Class type, boolean runtime, java.lang.String proxyClassName)
      Generate the bytecode for a map proxy for the given type.
      boolean getAssertAllowedType()
      Whether to perform runtime checks to ensure that all elements added to collection and map proxies are the proper element/key/value type as defined by the metadata.
      boolean getDelayCollectionLoading()
      Whether loading of collections should be delayed until an operation is performed that requires them to be loaded.
      protected static java.lang.String getProxyClassName​(java.lang.Class type, boolean runtime)
      Return the name of the proxy class to generate for the given type.
      boolean getTrackChanges()
      Whether proxies produced by this factory will use ChangeTrackers to try to cut down on data store operations at the cost of some extra bookkeeping overhead.
      java.util.Collection getUnproxyable()
      Return a mutable view of class names we know cannot be proxied correctly by this manager.
      protected boolean isOrdered​(java.lang.Class type)
      Return whether the given collection type maintains an artificial ordering.
      protected boolean isSetter​(java.lang.reflect.Method meth)
      Return whether the given method is a setter.
      protected boolean isUnproxyable​(java.lang.Class type)
      Return whether the given type is known to be unproxyable.
      protected java.lang.Class loadBuildTimeProxy​(java.lang.Class type, java.lang.ClassLoader loader)
      Load the proxy class generated at build time for the given type, returning null if none exists.
      protected java.lang.Class<?> loadDelayedProxy​(java.lang.Class<?> type)  
      static void main​(java.lang.String[] args)
      Usage: java org.apache.openjpa.util.proxy.ProxyManagerImpl [option]* <class name>+
      Where the following options are recognized: -utils/-u <number>: Generate proxies for the standard java.util collection, map, date, and calendar classes of the given Java version.
      Proxy newCalendarProxy​(java.lang.Class type, java.util.TimeZone zone)
      Return a new calendar proxy.
      Proxy newCollectionProxy​(java.lang.Class type, java.lang.Class elementType, java.util.Comparator compare, boolean autoOff)
      Return a proxy for the given collection type.
      Proxy newCustomProxy​(java.lang.Object orig, boolean autoOff)
      Return a proxy for the given object, or null if this manager cannot proxy the object.
      Proxy newDateProxy​(java.lang.Class type)
      Return a new date proxy.
      Proxy newMapProxy​(java.lang.Class type, java.lang.Class keyType, java.lang.Class elementType, java.util.Comparator compare, boolean autoOff)
      Return a proxy for the given map type.
      void setAssertAllowedType​(boolean assertType)
      Whether to perform runtime checks to ensure that all elements added to collection and map proxies are the proper element/key/value type as defined by the metadata.
      void setDelayCollectionLoading​(boolean delay)
      Whether loading of collections should be delayed until an operation is performed that requires them to be loaded.
      void setTrackChanges​(boolean track)
      Whether proxies produced by this factory will use ChangeTrackers to try to cut down on data store operations at the cost of some extra bookkeeping overhead.
      void setUnproxyable​(java.lang.String clsNames)
      Provided for auto-configuration.
      protected java.lang.Class toProxyableCollectionType​(java.lang.Class type)
      Return the concrete type for proxying.
      protected java.lang.Class toProxyableMapType​(java.lang.Class type)
      Return the concrete type for proxying.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • TYPE_OBJECT

        public static final org.apache.xbean.asm9.Type TYPE_OBJECT
    • Constructor Detail

      • ProxyManagerImpl

        public ProxyManagerImpl()
    • Method Detail

      • getTrackChanges

        public boolean getTrackChanges()
        Whether proxies produced by this factory will use ChangeTrackers to try to cut down on data store operations at the cost of some extra bookkeeping overhead. Defaults to true.
      • setTrackChanges

        public void setTrackChanges​(boolean track)
        Whether proxies produced by this factory will use ChangeTrackers to try to cut down on data store operations at the cost of some extra bookkeeping overhead. Defaults to true.
      • getAssertAllowedType

        public boolean getAssertAllowedType()
        Whether to perform runtime checks to ensure that all elements added to collection and map proxies are the proper element/key/value type as defined by the metadata. Defaults to false.
      • setAssertAllowedType

        public void setAssertAllowedType​(boolean assertType)
        Whether to perform runtime checks to ensure that all elements added to collection and map proxies are the proper element/key/value type as defined by the metadata. Defaults to false.
      • getDelayCollectionLoading

        public boolean getDelayCollectionLoading()
        Whether loading of collections should be delayed until an operation is performed that requires them to be loaded. This property only applies to proxies that implement java.util.Collection (ie. not arrays or maps). Defaults to false.
        Specified by:
        getDelayCollectionLoading in interface ProxyManager
      • setDelayCollectionLoading

        public void setDelayCollectionLoading​(boolean delay)
        Whether loading of collections should be delayed until an operation is performed that requires them to be loaded. Defaults to false.
      • getUnproxyable

        public java.util.Collection getUnproxyable()
        Return a mutable view of class names we know cannot be proxied correctly by this manager.
      • setUnproxyable

        public void setUnproxyable​(java.lang.String clsNames)
        Provided for auto-configuration. Add the given semicolon-separated class names to the set of class names we know cannot be proxied correctly by this manager.
      • copyArray

        public java.lang.Object copyArray​(java.lang.Object orig)
        Description copied from interface: ProxyManager
        Return a new array of the same component type as the given array and containing the same elements. Works for both primitive and object array types.
        Specified by:
        copyArray in interface ProxyManager
      • copyCollection

        public java.util.Collection copyCollection​(java.util.Collection orig)
        Description copied from interface: ProxyManager
        Return a new collection of the same type as the given one with a copy of all contained elements.
        Specified by:
        copyCollection in interface ProxyManager
      • newCollectionProxy

        public Proxy newCollectionProxy​(java.lang.Class type,
                                        java.lang.Class elementType,
                                        java.util.Comparator compare,
                                        boolean autoOff)
        Description copied from interface: ProxyManager
        Return a proxy for the given collection type. The returned collection will allow only addition of elements assignable from the given element type and will use the given comparator, if it is not null.
        Specified by:
        newCollectionProxy in interface ProxyManager
      • copyMap

        public java.util.Map copyMap​(java.util.Map orig)
        Description copied from interface: ProxyManager
        Return a new map of the same type as the given one with a copy of all contained key/value pairs.
        Specified by:
        copyMap in interface ProxyManager
      • newMapProxy

        public Proxy newMapProxy​(java.lang.Class type,
                                 java.lang.Class keyType,
                                 java.lang.Class elementType,
                                 java.util.Comparator compare,
                                 boolean autoOff)
        Description copied from interface: ProxyManager
        Return a proxy for the given map type. The returned map will allow only addition of keys/values assignable from the given keyType/valueType, and will use the given comparator, if it is not null.
        Specified by:
        newMapProxy in interface ProxyManager
      • copyDate

        public java.util.Date copyDate​(java.util.Date orig)
        Description copied from interface: ProxyManager
        Return a copy of the given date with the same information.
        Specified by:
        copyDate in interface ProxyManager
      • copyCalendar

        public java.util.Calendar copyCalendar​(java.util.Calendar orig)
        Description copied from interface: ProxyManager
        Return a copy of the given calendar with the same information.
        Specified by:
        copyCalendar in interface ProxyManager
      • newCalendarProxy

        public Proxy newCalendarProxy​(java.lang.Class type,
                                      java.util.TimeZone zone)
        Description copied from interface: ProxyManager
        Return a new calendar proxy.
        Specified by:
        newCalendarProxy in interface ProxyManager
      • copyCustom

        public java.lang.Object copyCustom​(java.lang.Object orig)
        Description copied from interface: ProxyManager
        Return a copy of the given object with the same information, or null if this manager cannot copy the object.
        Specified by:
        copyCustom in interface ProxyManager
      • newCustomProxy

        public Proxy newCustomProxy​(java.lang.Object orig,
                                    boolean autoOff)
        Description copied from interface: ProxyManager
        Return a proxy for the given object, or null if this manager cannot proxy the object.
        Specified by:
        newCustomProxy in interface ProxyManager
      • toProxyableCollectionType

        protected java.lang.Class toProxyableCollectionType​(java.lang.Class type)
        Return the concrete type for proxying.
      • toProxyableMapType

        protected java.lang.Class toProxyableMapType​(java.lang.Class type)
        Return the concrete type for proxying.
      • isUnproxyable

        protected boolean isUnproxyable​(java.lang.Class type)
        Return whether the given type is known to be unproxyable.
      • loadBuildTimeProxy

        protected java.lang.Class loadBuildTimeProxy​(java.lang.Class type,
                                                     java.lang.ClassLoader loader)
        Load the proxy class generated at build time for the given type, returning null if none exists.
      • loadDelayedProxy

        protected java.lang.Class<?> loadDelayedProxy​(java.lang.Class<?> type)
      • getProxyClassName

        protected static java.lang.String getProxyClassName​(java.lang.Class type,
                                                            boolean runtime)
        Return the name of the proxy class to generate for the given type.
      • generateProxyDateBytecode

        protected byte[] generateProxyDateBytecode​(java.lang.Class type,
                                                   boolean runtime,
                                                   java.lang.String proxyClassName)
        Generate the bytecode for a date proxy for the given type.
      • generateProxyCalendarBytecode

        protected byte[] generateProxyCalendarBytecode​(java.lang.Class type,
                                                       boolean runtime,
                                                       java.lang.String proxyClassName)
        Generate the bytecode for a calendar proxy for the given type.
      • generateProxyCollectionBytecode

        protected byte[] generateProxyCollectionBytecode​(java.lang.Class type,
                                                         boolean runtime,
                                                         java.lang.String proxyClassName)
        Generate the bytecode for a collection proxy for the given type.
      • generateProxyMapBytecode

        protected byte[] generateProxyMapBytecode​(java.lang.Class type,
                                                  boolean runtime,
                                                  java.lang.String proxyClassName)
        Generate the bytecode for a map proxy for the given type.
      • generateProxyBeanBytecode

        protected byte[] generateProxyBeanBytecode​(java.lang.Class type,
                                                   boolean runtime,
                                                   java.lang.String proxyClassName)
        Generate the bytecode for a bean proxy for the given type.
      • allowsDuplicates

        protected boolean allowsDuplicates​(java.lang.Class type)
        Return whether the given collection type allows duplicates.
      • isOrdered

        protected boolean isOrdered​(java.lang.Class type)
        Return whether the given collection type maintains an artificial ordering.
      • isSetter

        protected boolean isSetter​(java.lang.reflect.Method meth)
        Return whether the given method is a setter.
      • findGetter

        protected java.lang.reflect.Method findGetter​(java.lang.Class type,
                                                      java.lang.reflect.Method setter)
        Return the getter corresponding to the given setter, or null.
      • findCopyConstructor

        protected java.lang.reflect.Constructor findCopyConstructor​(java.lang.Class cls)
        Find an appropriate copy constructor for the given type, or return null if none.
      • main

        public static void main​(java.lang.String[] args)
                         throws java.lang.ClassNotFoundException,
                                java.io.IOException
        Usage: java org.apache.openjpa.util.proxy.ProxyManagerImpl [option]* <class name>+
        Where the following options are recognized:
        • -utils/-u <number>: Generate proxies for the standard java.util collection, map, date, and calendar classes of the given Java version. Use 4 for Java 1.4, 5 for Java 5, etc.
        The main method generates .class files for the proxies to the classes given on the command line. It writes the generated classes to beside the ProxyManagerImpl.class file if possible; otherwise it writes to the current directory. The proxy manager looks for these classes before generating its own proxies at runtime.
        Throws:
        java.lang.ClassNotFoundException
        java.io.IOException