/******************************************************************************* * 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 {@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. * * @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; }