/** * */ package org.activejpa.enhancer; import java.lang.instrument.ClassFileTransformer; import java.lang.instrument.IllegalClassFormatException; import java.security.ProtectionDomain; import java.util.Arrays; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * @author ganeshs * */ public class DomainClassFileTransformer implements ClassFileTransformer { private DomainClassEnhancer enhancer; public static final List<String> ignoredPackages = Arrays.asList("javax/", "java/", "sun/", "com/sun/"); private static final Logger logger = LoggerFactory.getLogger(DomainClassFileTransformer.class); public DomainClassFileTransformer(DomainClassEnhancer enhancer) { this.enhancer = enhancer; } public DomainClassFileTransformer() { this(new DomainClassEnhancer()); } @Override public byte[] transform(ClassLoader loader, String className, Class<?> classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException { if (skipClass(className)) { return null; } try { logger.trace("Trying to transform - " + className); if (loader == null) { loader = Thread.currentThread().getContextClassLoader(); } return enhancer.enhance(loader, className); } catch (Exception e) { logger.error("Failed while transforming the class " + className, e); throw new IllegalClassFormatException(e.getMessage()); } } /** * Checks if the class can be ignored * * @param className * @return */ protected boolean skipClass(String className) { for (String name : ignoredPackages) { if (className.startsWith(name)) { return true; } } return false; } }