001 /*
002 * Licensed to the Apache Software Foundation (ASF) under one
003 * or more contributor license agreements. See the NOTICE file
004 * distributed with this work for additional information
005 * regarding copyright ownership. The ASF licenses this file
006 * to you under the Apache License, Version 2.0 (the
007 * "License"); you may not use this file except in compliance
008 * with the License. You may obtain a copy of the License at
009 *
010 * http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing,
013 * software distributed under the License is distributed on an
014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015 * KIND, either express or implied. See the License for the
016 * specific language governing permissions and limitations
017 * under the License.
018 */
019
020 //
021 // This source code implements specifications defined by the Java
022 // Community Process. In order to remain compliant with the specification
023 // DO NOT add/change/or delete method signatures!
024 //
025
026 package javax.persistence.spi;
027
028 import java.security.ProtectionDomain;
029 import java.lang.instrument.IllegalClassFormatException;
030
031 /**
032 * @version $Rev: 467742 $ $Date: 2006-10-25 15:30:38 -0400 (Wed, 25 Oct 2006) $
033 */
034 public interface ClassTransformer {
035 /**
036 * Invoked when a class is being loaded or redefined. The implementation of this
037 * method may transform the supplied class file and return a new replacement class
038 * file.
039 *
040 * @param loader The defining loader of the class to be transformed, may be null if
041 * the bootstrap loader
042 * @param className The name of the class in the internal form of fully qualified
043 * class and interface names
044 * @param classBeingRedefined If this is a redefine, the class being redefined,
045 * otherwise null
046 * @param protectionDomain The protection domain of the class being defined or
047 * redefined
048 * @param classfileBuffer The input byte buffer in class file format - must not be
049 * modified
050 * @return A well-formed class file buffer (the result of the transform), or null if
051 * no transform is performed
052 * @throws java.lang.instrument.IllegalClassFormatException
053 * If the input does not represent a well-formed
054 * class file
055 */
056 byte[] transform(
057 ClassLoader loader,
058 String className,
059 Class<?> classBeingRedefined,
060 ProtectionDomain protectionDomain,
061 byte[] classfileBuffer) throws IllegalClassFormatException;
062
063 }