@Override public ClassLoader createNewTempClassLoader() { return new TempClassLoader(delegateClassLoader); }
Class<?> loaded = findLoadedClass(name); if (loaded != null) { return loaded; Package pkg = findLoadedPackage(packageName); if (pkg == null) { Manifest manifest = readManifestFile(); if (manifest != null) { final Attributes mainAttribute = manifest.getMainAttributes(); final Attributes entryAttribute = manifest.getAttributes(packageName); URL url = "true".equals(getDefinedAttribute(Attributes.Name.SEALED, entryAttribute, mainAttribute)) ? delegate.getResource(name.replace('.', '/') + ".class") : null; definePackage( packageName, getDefinedAttribute(Attributes.Name.SPECIFICATION_TITLE, entryAttribute, mainAttribute), getDefinedAttribute(Attributes.Name.SPECIFICATION_VERSION, entryAttribute, mainAttribute), getDefinedAttribute(Attributes.Name.SPECIFICATION_VENDOR, entryAttribute, mainAttribute), getDefinedAttribute(Attributes.Name.IMPLEMENTATION_TITLE, entryAttribute, mainAttribute), getDefinedAttribute(Attributes.Name.IMPLEMENTATION_VERSION, entryAttribute, mainAttribute), getDefinedAttribute(Attributes.Name.IMPLEMENTATION_VENDOR, entryAttribute, mainAttribute), url ); definePackage(packageName, null, null, null, null, null, null, null); return defineClass(name, buffer, 0, buffer.length); } catch (IOException e) { throw new ClassNotFoundException(name, e);
@Override public ByteBuffer transform(ClassLoader classLoader, String className, ProtectionDomain protectionDomain, ByteBuffer classBytes) throws IllegalArgumentException { byte[] transformedBuffer = getBytes(classBytes); boolean transformed = false; for (javax.persistence.spi.ClassTransformer transformer : persistenceUnitMetadata.getTransformers()) { if (ROOT_LOGGER.isTraceEnabled()) ROOT_LOGGER.tracef("rewrite entity class '%s' using transformer '%s' for '%s'", className, transformer.getClass().getName(), persistenceUnitMetadata.getScopedPersistenceUnitName()); byte[] result; try { // parameter classBeingRedefined is always passed as null // because we won't ever be called to transform already loaded classes. result = transformer.transform(classLoader, className, null, protectionDomain, transformedBuffer); } catch (IllegalClassFormatException e) { throw JpaLogger.ROOT_LOGGER.invalidClassFormat(e, className); } if (result != null) { transformedBuffer = result; transformed = true; if (ROOT_LOGGER.isTraceEnabled()) ROOT_LOGGER.tracef("entity class '%s' was rewritten", className); } } return transformed ? ByteBuffer.wrap(transformedBuffer) : null; }
private void setClassLoaderTransformer(DeploymentUnit deploymentUnit) { // (AS7-2233) each persistence unit can use a persistence provider, that might need // to use ClassTransformers. Providers that need class transformers will add them // during the call to CreateContainerEntityManagerFactory. DelegatingClassFileTransformer transformer = deploymentUnit.getAttachment(DelegatingClassFileTransformer.ATTACHMENT_KEY); boolean appContainsPersistenceProviderJars = false; // remove when we revert WFLY-10520 if ( transformer != null) { for (ResourceRoot resourceRoot : DeploymentUtils.allResourceRoots(deploymentUnit)) { PersistenceUnitMetadataHolder holder = resourceRoot.getAttachment(PersistenceUnitMetadataHolder.PERSISTENCE_UNITS); if (holder != null) { for (PersistenceUnitMetadata pu : holder.getPersistenceUnits()) { if (Configuration.needClassFileTransformer(pu)) { transformer.addTransformer(new JPADelegatingClassFileTransformer(pu)); } // remove this check when we revert WFLY-10520 String provider = pu.getProperties().getProperty(Configuration.PROVIDER_MODULE); if (provider != null) { if (provider.equals(Configuration.PROVIDER_MODULE_APPLICATION_SUPPLIED)) { appContainsPersistenceProviderJars = true; } } } } } // WFLY-10520 Add Hibernate ORM 5.3 compatibility transformer if(!appContainsPersistenceProviderJars && hibernate51CompatibilityTransformer) { transformer.addTransformer(Hibernate51CompatibilityTransformer.getInstance()); } } }
Class<?> loaded = findLoadedClass(name); if (loaded != null) { return loaded; Package pkg = findLoadedPackage(packageName); if (pkg == null) { Manifest manifest = readManifestFile(); if (manifest != null) { final Attributes mainAttribute = manifest.getMainAttributes(); final Attributes entryAttribute = manifest.getAttributes(packageName); URL url = "true".equals(getDefinedAttribute(Attributes.Name.SEALED, entryAttribute, mainAttribute)) ? delegate.getResource(name.replace('.', '/') + ".class") : null; definePackage( packageName, getDefinedAttribute(Attributes.Name.SPECIFICATION_TITLE, entryAttribute, mainAttribute), getDefinedAttribute(Attributes.Name.SPECIFICATION_VERSION, entryAttribute, mainAttribute), getDefinedAttribute(Attributes.Name.SPECIFICATION_VENDOR, entryAttribute, mainAttribute), getDefinedAttribute(Attributes.Name.IMPLEMENTATION_TITLE, entryAttribute, mainAttribute), getDefinedAttribute(Attributes.Name.IMPLEMENTATION_VERSION, entryAttribute, mainAttribute), getDefinedAttribute(Attributes.Name.IMPLEMENTATION_VENDOR, entryAttribute, mainAttribute), url ); definePackage(packageName, null, null, null, null, null, null, null); return defineClass(name, buffer, 0, buffer.length); } catch (IOException e) { throw new ClassNotFoundException(name, e);
@Override public ClassLoader createNewTempClassLoader() { return new TempClassLoader(delegateClassLoader); }
@Override public ByteBuffer transform(ClassLoader classLoader, String className, ProtectionDomain protectionDomain, ByteBuffer classBytes) throws IllegalArgumentException { byte[] transformedBuffer = getBytes(classBytes); boolean transformed = false; for (javax.persistence.spi.ClassTransformer transformer : persistenceUnitMetadata.getTransformers()) { if (ROOT_LOGGER.isTraceEnabled()) ROOT_LOGGER.tracef("rewrite entity class '%s' using transformer '%s' for '%s'", className, transformer.getClass().getName(), persistenceUnitMetadata.getScopedPersistenceUnitName()); byte[] result; try { // parameter classBeingRedefined is always passed as null // because we won't ever be called to transform already loaded classes. result = transformer.transform(classLoader, className, null, protectionDomain, transformedBuffer); } catch (IllegalClassFormatException e) { throw JpaLogger.ROOT_LOGGER.invalidClassFormat(e, className); } if (result != null) { transformedBuffer = result; transformed = true; if (ROOT_LOGGER.isTraceEnabled()) ROOT_LOGGER.tracef("entity class '%s' was rewritten", className); } } return transformed ? ByteBuffer.wrap(transformedBuffer) : null; }
private void setClassLoaderTransformer(DeploymentUnit deploymentUnit) { // (AS7-2233) each persistence unit can use a persistence provider, that might need // to use ClassTransformers. Providers that need class transformers will add them // during the call to CreateContainerEntityManagerFactory. DelegatingClassFileTransformer transformer = deploymentUnit.getAttachment(DelegatingClassFileTransformer.ATTACHMENT_KEY); boolean appContainsPersistenceProviderJars = false; // remove when we revert WFLY-10520 if ( transformer != null) { for (ResourceRoot resourceRoot : DeploymentUtils.allResourceRoots(deploymentUnit)) { PersistenceUnitMetadataHolder holder = resourceRoot.getAttachment(PersistenceUnitMetadataHolder.PERSISTENCE_UNITS); if (holder != null) { for (PersistenceUnitMetadata pu : holder.getPersistenceUnits()) { if (Configuration.needClassFileTransformer(pu)) { transformer.addTransformer(new JPADelegatingClassFileTransformer(pu)); } // remove this check when we revert WFLY-10520 String provider = pu.getProperties().getProperty(Configuration.PROVIDER_MODULE); if (provider != null) { if (provider.equals(Configuration.PROVIDER_MODULE_APPLICATION_SUPPLIED)) { appContainsPersistenceProviderJars = true; } } } } } // WFLY-10520 Add Hibernate ORM 5.3 compatibility transformer if(!appContainsPersistenceProviderJars && hibernate51CompatibilityTransformer) { transformer.addTransformer(Hibernate51CompatibilityTransformer.getInstance()); } } }