Copyright (c) 2008 - 2013 Oracle Corporation. All rights reserved.
This program and the accompanying materials are made available under the
terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
which accompanies this distribution.
The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
and the Eclipse Distribution License is available at
http://www.eclipse.org/org/documents/edl-v10.php.
Contributors:
Linda DeMichiel - Java Persistence 2.1
Linda DeMichiel - Java Persistence 2.0
/*******************************************************************************
* Copyright (c) 2008 - 2013 Oracle Corporation. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
* which accompanies this distribution.
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
* Linda DeMichiel - Java Persistence 2.1
* Linda DeMichiel - Java Persistence 2.0
*
******************************************************************************/
package javax.persistence.spi;
import java.security.ProtectionDomain;
import java.lang.instrument.IllegalClassFormatException;
A persistence provider supplies an instance of this interface to the
PersistenceUnitInfo.addTransformer
method. The supplied transformer instance will get called to transform entity class files when they are loaded or redefined. The transformation occurs before the class is defined by the JVM. Since: Java Persistence 1.0
/**
* A persistence provider supplies an instance of this
* interface to the {@link PersistenceUnitInfo#addTransformer
* PersistenceUnitInfo.addTransformer}
* method. The supplied transformer instance will get
* called to transform entity class files when they are
* loaded or redefined. The transformation occurs before
* the class is defined by the JVM.
*
* @since Java Persistence 1.0
*/
public interface ClassTransformer {
Invoked when a class is being loaded or redefined.
The implementation of this method may transform the
supplied class file and return a new replacement class
file.
Params: - loader – the defining loader of the class to be
transformed, may be null if the bootstrap loader
- className – the name of the class in the internal form
of fully qualified class and interface names
- classBeingRedefined – if this is a redefine, the
class being redefined, otherwise null
- protectionDomain – the protection domain of the
class being defined or redefined
- classfileBuffer – the input byte buffer in class
file format - must not be modified
Throws: - IllegalClassFormatException – if the input does
not represent a well-formed class file
Returns: a well-formed class file buffer (the result of
the transform), or null if no transform is performed
/**
* Invoked when a class is being loaded or redefined.
* The implementation of this method may transform the
* supplied class file and return a new replacement class
* file.
*
* @param loader the defining loader of the class to be
* transformed, may be null if the bootstrap loader
* @param className the name of the class in the internal form
* of fully qualified class and interface names
* @param classBeingRedefined if this is a redefine, the
* class being redefined, otherwise null
* @param protectionDomain the protection domain of the
* class being defined or redefined
* @param classfileBuffer the input byte buffer in class
* file format - must not be modified
* @return a well-formed class file buffer (the result of
* the transform), or null if no transform is performed
* @throws IllegalClassFormatException if the input does
* not represent a well-formed class file
*/
byte[] transform(ClassLoader loader,
String className,
Class<?> classBeingRedefined,
ProtectionDomain protectionDomain,
byte[] classfileBuffer)
throws IllegalClassFormatException;
}