blob: 1c6306f17da71ecea3e24fddd8e3e096447bbbf0 [file]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package javax.jdo;
import java.lang.instrument.ClassFileTransformer;
import java.util.Properties;
import javax.jdo.metadata.JDOMetadata;
/**
* Interface for a JDO Enhancer.
*
* @since 3.0
*/
public interface JDOEnhancer extends ClassFileTransformer {
/**
* Return non-configurable properties of this JDOEnhancer. Properties with keys "VendorName" and
* "VersionNumber" are required. Other keys are optional.
*
* @return the non-configurable properties of this JDOEnhancer.
*/
Properties getProperties();
/**
* Whether to provide verbose output
*
* @param flag Verbose?
* @return The enhancer
*/
JDOEnhancer setVerbose(boolean flag);
/**
* Mutator to set the location where enhanced classes are written. Mutator to set the location
* where enhanced classes are written. If this method is not called, classes will be enhanced in
* place, overwriting the existing classes. If overwriting classes in a jar file, the existing
* files in the jar file will be written unchanged except for the enhanced classes. The directory
* name can be absolute or relative.
*
* @param dirName Name of the directory
* @return The enhancer
*/
JDOEnhancer setOutputDirectory(String dirName);
/**
* Mutator to set the class loader to use for loading classes.
*
* @param loader ClassLoader to use
* @return The enhancer
*/
JDOEnhancer setClassLoader(ClassLoader loader);
/**
* Add a persistence-unit to the items to be enhanced.
*
* @param persistenceUnit Name of the persistence unit
* @return The enhancer
*/
JDOEnhancer addPersistenceUnit(String persistenceUnit);
/**
* Add an in-memory class to the items to be enhanced. The class name should be of the form
* "mydomain.MyClass".
*
* @param className Name of the class
* @param bytes The bytes of the class
* @return The enhancer
*/
JDOEnhancer addClass(String className, byte[] bytes);
/**
* Add class(es) to the items to be enhanced. The class names can be absolute file names, relative
* file names, or names of CLASSPATH resources.
*
* @param classNames Names of the classes
* @return The enhancer
*/
JDOEnhancer addClasses(String... classNames);
/**
* Add metadata file(s) to the items to be enhanced. The metadata file names can be absolute file
* names, relative file names, or names of CLASSPATH resources. They should be JDO XML metadata
* files.
*
* @param metadataFiles Names of the files
* @return The enhancer
*/
JDOEnhancer addFiles(String... metadataFiles);
/**
* Add a jar file to the items to be enhanced. The jar file name can be absolute, or relative or a
* CLASSPATH resource.
*
* @param jarFileName Name of the jar file
* @return The enhancer
*/
JDOEnhancer addJar(String jarFileName);
/**
* Method to enhance the items specified using addJar, addFiles, addClasses, addClass,
* addPersistenceUnit.
*
* @return Number of classes enhanced
* @throws JDOEnhanceException if an error occurs during enhancement. If multiple errors occur
* then the nested exceptions provides this detail.
*/
int enhance();
/**
* Method to validate the items specified using addJar, addFiles, addClasses, addClass,
* addPersistenceUnit.
*
* @return Number of classes validated
* @throws JDOEnhanceException if an error occurs during validation. If multiple errors occur then
* the nested exceptions provides this detail.
*/
int validate();
/**
* Method to retrieve the (enhanced) bytes of the specified class. Only applies to the classes
* enhanced in the most recent enhance() call. If no enhance has yet been performed will throw a
* JDOEnhanceException. If the specified class hasn't been enhanced then will throw a
* JDOEnhanceException.
*
* @param className Name of the class (of the form "mydomain.MyClass")
* @return Enhanced bytes
*/
byte[] getEnhancedBytes(String className);
/**
* Method to register metadata with the enhancement process managed by this <code>JDOEnhancer
* </code>. Metadata can be created using the method {@link #newMetadata}. If there is already
* metadata registered for a class contained in this metadata object then a JDOUserException will
* be thrown.
*
* @param metadata The Metadata to register.
* @since 3.0
*/
void registerMetadata(JDOMetadata metadata);
/**
* Method to return a new metadata object that can be subsequently modified and registered with
* the enhancement process using the method {@link #registerMetadata}.
*
* @return The metadata
* @since 3.0
*/
JDOMetadata newMetadata();
}