Top Description Fields Constructors Methods
org.glassfish.pfl.dynamic.copyobject.impl

public Class ClassCopierFactoryPipelineImpl

extends Object
implements PipelineClassCopierFactory
Class Inheritance
All Implemented Interfaces
org.glassfish.pfl.dynamic.copyobject.impl.PipelineClassCopierFactory, org.glassfish.pfl.dynamic.copyobject.impl.ClassCopierFactory
Imports
java.lang.reflect.Constructor, .Field, .Method, java.security.AccessControlContext, java.util.IdentityHashMap, .LinkedHashMap, java.util.concurrent.locks.ReentrantReadWriteLock, java.util.logging.LogManager, .Logger, org.glassfish.pfl.dynamic.copyobject.spi.ReflectiveCopyException

A factory used for creating ClassCopier instances. An instance of this factory can be created and customized to handle special copying semantics for certain classes. This maintains a cache of ClassCopiers, so that a ClassCopier is never created more than once for a particular class.

Field Summary

Modifier and TypeField and Description
private ClassCopierFactory
private ClassCopier
private CachingClassCopierFactory
private static final Class<?>[]
private static final Class<?>[]
private static final Class<?>[]
private ClassCopierFactory
private ReentrantReadWriteLock
private ClassCopierFactory

Constructor Summary

AccessConstructor and Description
public

Method Summary

Modifier and TypeMethod and Description
public ClassCopier
getClassCopier(Class<?> cls)

Implements org.glassfish.pfl.dynamic.copyobject.impl.ClassCopierFactory.getClassCopier.

Analyze cls to determine the appropriate ClassCopier and return the ClassCopier instance.

public ClassCopier
lookupInCache(Class<?> cls)

Implements org.glassfish.pfl.dynamic.copyobject.impl.PipelineClassCopierFactory.lookupInCache.

Look for cls only in the cache; do not create a ClassCopier if there isn't one already in the cache.

public boolean
reflectivelyCopyable(Class<?> cls)

Implements org.glassfish.pfl.dynamic.copyobject.impl.PipelineClassCopierFactory.reflectivelyCopyable.

Added this method so reflective copier could check if serializable object contains a transient field of specific type.

public final synchronized void
registerImmutable(Class<?> cls)

Implements org.glassfish.pfl.dynamic.copyobject.impl.PipelineClassCopierFactory.registerImmutable.

Register an immutable class, so that it will not be copied, but just passed by reference.

public void
Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Field Detail

arrayFactoryback to summary
private ClassCopierFactory arrayFactory
errorCopierback to summary
private ClassCopier errorCopier
factoryCacheback to summary
private CachingClassCopierFactory factoryCache
immutableback to summary
private static final Class<?>[] immutable
mapClassesback to summary
private static final Class<?>[] mapClasses
notCopyableback to summary
private static final Class<?>[] notCopyable
ordinaryFactoryback to summary
private ClassCopierFactory ordinaryFactory
rwlockback to summary
private ReentrantReadWriteLock rwlock
specialFactoryback to summary
private ClassCopierFactory specialFactory

Constructor Detail

ClassCopierFactoryPipelineImplback to summary
public ClassCopierFactoryPipelineImpl()

Method Detail

getClassCopierback to summary
public ClassCopier getClassCopier(Class<?> cls) throws ReflectiveCopyException

Implements org.glassfish.pfl.dynamic.copyobject.impl.ClassCopierFactory.getClassCopier.

Analyze cls to determine the appropriate ClassCopier and return the ClassCopier instance. Will only create a ClassCopier for a given Class once.

Annotations
@Override
lookupInCacheback to summary
public ClassCopier lookupInCache(Class<?> cls)

Implements org.glassfish.pfl.dynamic.copyobject.impl.PipelineClassCopierFactory.lookupInCache.

Look for cls only in the cache; do not create a ClassCopier if there isn't one already in the cache.

Annotations
@Override
reflectivelyCopyableback to summary
public boolean reflectivelyCopyable(Class<?> cls)

Implements org.glassfish.pfl.dynamic.copyobject.impl.PipelineClassCopierFactory.reflectivelyCopyable.

Doc from org.glassfish.pfl.dynamic.copyobject.impl.PipelineClassCopierFactory.reflectivelyCopyable.

Added this method so reflective copier could check if serializable object contains a transient field of specific type.

Annotations
@Override
registerImmutableback to summary
public final synchronized void registerImmutable(Class<?> cls)

Implements org.glassfish.pfl.dynamic.copyobject.impl.PipelineClassCopierFactory.registerImmutable.

Register an immutable class, so that it will not be copied, but just passed by reference.

Annotations
@Override
setSpecialClassCopierFactoryback to summary
public void setSpecialClassCopierFactory(ClassCopierFactory ccf)

Implements org.glassfish.pfl.dynamic.copyobject.impl.PipelineClassCopierFactory.setSpecialClassCopierFactory.

Set a special ClassCopierFactory to handle some application specific needs.

Annotations
@Override