Skip to content

Instantly share code, notes, and snippets.

@arey
Created April 9, 2014 19:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save arey/10308277 to your computer and use it in GitHub Desktop.
Save arey/10308277 to your computer and use it in GitHub Desktop.
No-operation Hibernate Scanner
package com.javaetmoi.core.persistence.hibernate;
import java.util.Collections;
import java.util.Set;
import org.hibernate.jpa.boot.archive.internal.StandardArchiveDescriptorFactory;
import org.hibernate.jpa.boot.scan.spi.AbstractScannerImpl;
import org.hibernate.jpa.boot.scan.spi.ScanOptions;
import org.hibernate.jpa.boot.scan.spi.ScanResult;
import org.hibernate.jpa.boot.spi.ClassDescriptor;
import org.hibernate.jpa.boot.spi.MappingFileDescriptor;
import org.hibernate.jpa.boot.spi.PackageDescriptor;
import org.hibernate.jpa.boot.spi.PersistenceUnitDescriptor;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
/**
* No-operation Hibernate Scanner.
*
* <p>
* Do not scan for any classes, packages or resources inside a persistence unit. Return an empty
* ScanResult. To use in conjunction with the Spring LocalContainerEntityManagerFactoryBean and its
* setPackagesToScan method.<br>
* A specific Hibernate properties has to be set: <code>
* hibernate.ejb.resource_scanner=com.javaetmoi.core.persistence.hibernate.NopScanner
* </code>
*
*/
public class NopScanner extends AbstractScannerImpl {
public NopScanner() {
super(StandardArchiveDescriptorFactory.INSTANCE);
}
@Override
public ScanResult scan(PersistenceUnitDescriptor persistenceUnit, ScanOptions scanOptions) {
final ResultCollector resultCollector = new ResultCollector(scanOptions);
// Don't scan any archive
return ScanResultImpl.from(resultCollector);
}
private static class ScanResultImpl implements ScanResult {
private final Set<PackageDescriptor> packageDescriptorSet;
private final Set<ClassDescriptor> classDescriptorSet;
private final Set<MappingFileDescriptor> mappingFileSet;
private ScanResultImpl(Set<PackageDescriptor> packageDescriptorSet,
Set<ClassDescriptor> classDescriptorSet, Set<MappingFileDescriptor> mappingFileSet) {
this.packageDescriptorSet = packageDescriptorSet;
this.classDescriptorSet = classDescriptorSet;
this.mappingFileSet = mappingFileSet;
}
static ScanResult from(ResultCollector resultCollector) {
return new ScanResultImpl(
Collections.unmodifiableSet(resultCollector.getPackageDescriptorSet()),
Collections.unmodifiableSet(resultCollector.getClassDescriptorSet()),
Collections.unmodifiableSet(resultCollector.getMappingFileSet()));
}
@Override
public Set<PackageDescriptor> getLocatedPackages() {
return packageDescriptorSet;
}
@Override
public Set<ClassDescriptor> getLocatedClasses() {
return classDescriptorSet;
}
@Override
public Set<MappingFileDescriptor> getLocatedMappingFiles() {
return mappingFileSet;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment