Search in sources :

Example 1 with ArchiveDescriptorFactory

use of org.hibernate.boot.archive.spi.ArchiveDescriptorFactory in project hibernate-orm by hibernate.

the class ScanningCoordinator method buildScanner.

@SuppressWarnings("unchecked")
private static Scanner buildScanner(MetadataBuildingOptions options, ClassLoaderAccess classLoaderAccess) {
    final Object scannerSetting = options.getScanner();
    final ArchiveDescriptorFactory archiveDescriptorFactory = options.getArchiveDescriptorFactory();
    if (scannerSetting == null) {
        // No custom Scanner specified, use the StandardScanner
        if (archiveDescriptorFactory == null) {
            return new StandardScanner();
        } else {
            return new StandardScanner(archiveDescriptorFactory);
        }
    } else {
        if (Scanner.class.isInstance(scannerSetting)) {
            if (archiveDescriptorFactory != null) {
                throw new IllegalStateException("A Scanner instance and an ArchiveDescriptorFactory were both specified; please " + "specify one or the other, or if you need to supply both, Scanner class to use " + "(assuming it has a constructor accepting a ArchiveDescriptorFactory).  " + "Alternatively, just pass the ArchiveDescriptorFactory during your own " + "Scanner constructor assuming it is statically known.");
            }
            return (Scanner) scannerSetting;
        }
        final Class<? extends Scanner> scannerImplClass;
        if (Class.class.isInstance(scannerSetting)) {
            scannerImplClass = (Class<? extends Scanner>) scannerSetting;
        } else {
            scannerImplClass = classLoaderAccess.classForName(scannerSetting.toString());
        }
        if (archiveDescriptorFactory != null) {
            // find the single-arg constructor - its an error if none exists
            try {
                final Constructor<? extends Scanner> constructor = scannerImplClass.getConstructor(SINGLE_ARG);
                try {
                    return constructor.newInstance(archiveDescriptorFactory);
                } catch (Exception e) {
                    throw new IllegalStateException("Error trying to instantiate custom specified Scanner [" + scannerImplClass.getName() + "]", e);
                }
            } catch (NoSuchMethodException e) {
                throw new IllegalArgumentException("Configuration named a custom Scanner and a custom ArchiveDescriptorFactory, but " + "Scanner impl did not define a constructor accepting ArchiveDescriptorFactory");
            }
        } else {
            // find the single-arg constructor - its an error if none exists
            try {
                final Constructor<? extends Scanner> constructor = scannerImplClass.getConstructor(SINGLE_ARG);
                try {
                    return constructor.newInstance(StandardArchiveDescriptorFactory.INSTANCE);
                } catch (Exception e) {
                    throw new IllegalStateException("Error trying to instantiate custom specified Scanner [" + scannerImplClass.getName() + "]", e);
                }
            } catch (NoSuchMethodException e) {
                try {
                    final Constructor<? extends Scanner> constructor = scannerImplClass.getConstructor();
                    try {
                        return constructor.newInstance();
                    } catch (Exception e2) {
                        throw new IllegalStateException("Error trying to instantiate custom specified Scanner [" + scannerImplClass.getName() + "]", e2);
                    }
                } catch (NoSuchMethodException ignore) {
                    throw new IllegalArgumentException("Configuration named a custom Scanner, but we were unable to locate " + "an appropriate constructor");
                }
            }
        }
    }
}
Also used : StandardScanner(org.hibernate.boot.archive.scan.internal.StandardScanner) Scanner(org.hibernate.boot.archive.scan.spi.Scanner) StandardScanner(org.hibernate.boot.archive.scan.internal.StandardScanner) Constructor(java.lang.reflect.Constructor) ArchiveDescriptorFactory(org.hibernate.boot.archive.spi.ArchiveDescriptorFactory) StandardArchiveDescriptorFactory(org.hibernate.boot.archive.internal.StandardArchiveDescriptorFactory) MappingException(org.hibernate.boot.MappingException)

Aggregations

Constructor (java.lang.reflect.Constructor)1 MappingException (org.hibernate.boot.MappingException)1 StandardArchiveDescriptorFactory (org.hibernate.boot.archive.internal.StandardArchiveDescriptorFactory)1 StandardScanner (org.hibernate.boot.archive.scan.internal.StandardScanner)1 Scanner (org.hibernate.boot.archive.scan.spi.Scanner)1 ArchiveDescriptorFactory (org.hibernate.boot.archive.spi.ArchiveDescriptorFactory)1