Skip to content

Commit de6aa69

Browse files
dreab8sebersole
authored andcommitted
HHH-18633 Split Jandex-based scanning into new module/artifact
1 parent 5280e15 commit de6aa69

26 files changed

+138
-43
lines changed

hibernate-core/hibernate-core.gradle

+5-2
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,6 @@ dependencies {
2828
api jakartaLibs.jta
2929

3030
implementation libs.hibernateModels
31-
implementation libs.hibernateModelsJandex
32-
implementation libs.jandex
3331
implementation libs.classmate
3432
implementation libs.byteBuddy
3533

@@ -50,8 +48,12 @@ dependencies {
5048
// annotationProcessor project( ":annotation-descriptor-generator" )
5149
compileOnly project( ":annotation-descriptor-generator" )
5250

51+
runtimeOnly project(':hibernate-scan-jandex')
52+
5353
testImplementation project(':hibernate-testing')
5454
testImplementation project(':hibernate-ant')
55+
testImplementation project(':hibernate-scan-jandex')
56+
5557
testImplementation testLibs.shrinkwrapApi
5658
testImplementation testLibs.shrinkwrap
5759
testImplementation testLibs.shrinkwrapDescriptors
@@ -71,6 +73,7 @@ dependencies {
7173
testRuntimeOnly libs.byteBuddy
7274
testRuntimeOnly testLibs.weld
7375
testRuntimeOnly testLibs.wildFlyTxnClient
76+
testImplementation libs.jandex
7477
testImplementation jakartaLibs.jsonb
7578
testImplementation libs.jackson
7679
testRuntimeOnly libs.jacksonXml

hibernate-core/src/main/java/org/hibernate/boot/archive/scan/internal/DisabledScanner.java

+20-5
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,11 @@
55
package org.hibernate.boot.archive.scan.internal;
66

77
import java.util.Collections;
8+
import java.util.Set;
89

10+
import org.hibernate.boot.archive.scan.spi.ClassDescriptor;
11+
import org.hibernate.boot.archive.scan.spi.MappingFileDescriptor;
12+
import org.hibernate.boot.archive.scan.spi.PackageDescriptor;
913
import org.hibernate.boot.archive.scan.spi.ScanEnvironment;
1014
import org.hibernate.boot.archive.scan.spi.ScanOptions;
1115
import org.hibernate.boot.archive.scan.spi.ScanParameters;
@@ -19,11 +23,22 @@
1923
* @author Petteri Pitkanen
2024
*/
2125
public class DisabledScanner implements Scanner {
22-
private static final ScanResult emptyScanResult = new ScanResultImpl(
23-
Collections.emptySet(),
24-
Collections.emptySet(),
25-
Collections.emptySet()
26-
);
26+
private static final ScanResult emptyScanResult = new ScanResult() {
27+
@Override
28+
public Set<PackageDescriptor> getLocatedPackages() {
29+
return Collections.emptySet();
30+
}
31+
32+
@Override
33+
public Set<ClassDescriptor> getLocatedClasses() {
34+
return Collections.emptySet();
35+
}
36+
37+
@Override
38+
public Set<MappingFileDescriptor> getLocatedMappingFiles() {
39+
return Collections.emptySet();
40+
}
41+
};
2742

2843
@Override
2944
public ScanResult scan(final ScanEnvironment environment, final ScanOptions options, final ScanParameters parameters) {

hibernate-core/src/main/java/org/hibernate/boot/archive/scan/spi/Scanner.java

+6
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
*/
55
package org.hibernate.boot.archive.scan.spi;
66

7+
import org.hibernate.boot.archive.spi.ArchiveDescriptorFactory;
8+
79
/**
810
* Defines the contract for Hibernate to be able to scan for classes, packages and resources inside a
911
* persistence unit.
@@ -29,4 +31,8 @@ public interface Scanner {
2931
* @param params The parameters for scanning
3032
*/
3133
ScanResult scan(ScanEnvironment environment, ScanOptions options, ScanParameters params);
34+
35+
default void setArchiveDescriptorFactory(ArchiveDescriptorFactory archiveDescriptorFactory){
36+
throw new UnsupportedOperationException();
37+
}
3238
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
/*
2+
* SPDX-License-Identifier: LGPL-2.1-or-later
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.boot.archive.scan.spi;
6+
7+
import org.hibernate.boot.archive.spi.ArchiveDescriptorFactory;
8+
import org.hibernate.service.Service;
9+
10+
public interface ScannerFactory extends Service {
11+
Scanner getScanner(ArchiveDescriptorFactory archiveDescriptorFactory);
12+
}

hibernate-core/src/main/java/org/hibernate/boot/model/process/internal/ScanningCoordinator.java

+13-4
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,22 @@
88
import java.net.URL;
99
import java.util.ArrayList;
1010
import java.util.HashSet;
11+
import java.util.Iterator;
1112
import java.util.List;
1213
import java.util.Set;
1314

1415
import org.hibernate.boot.MappingException;
1516
import org.hibernate.boot.archive.internal.StandardArchiveDescriptorFactory;
1617
import org.hibernate.boot.archive.internal.UrlInputStreamAccess;
18+
import org.hibernate.boot.archive.scan.internal.DisabledScanner;
1719
import org.hibernate.boot.archive.scan.internal.StandardScanParameters;
18-
import org.hibernate.boot.archive.scan.internal.StandardScanner;
1920
import org.hibernate.boot.archive.scan.spi.ClassDescriptor;
2021
import org.hibernate.boot.archive.scan.spi.MappingFileDescriptor;
2122
import org.hibernate.boot.archive.scan.spi.PackageDescriptor;
2223
import org.hibernate.boot.archive.scan.spi.ScanEnvironment;
2324
import org.hibernate.boot.archive.scan.spi.ScanResult;
2425
import org.hibernate.boot.archive.scan.spi.Scanner;
26+
import org.hibernate.boot.archive.scan.spi.ScannerFactory;
2527
import org.hibernate.boot.archive.spi.ArchiveDescriptorFactory;
2628
import org.hibernate.boot.internal.ClassLoaderAccessImpl;
2729
import org.hibernate.boot.jaxb.Origin;
@@ -86,11 +88,18 @@ private static Scanner buildScanner(BootstrapContext bootstrapContext, ClassLoad
8688

8789
if ( scannerSetting == null ) {
8890
// No custom Scanner specified, use the StandardScanner
89-
if ( archiveDescriptorFactory == null ) {
90-
return new StandardScanner();
91+
final Iterator<ScannerFactory> iterator = bootstrapContext.getServiceRegistry()
92+
.requireService( ClassLoaderService.class )
93+
.loadJavaServices( ScannerFactory.class )
94+
.iterator();
95+
if ( iterator.hasNext() ) {
96+
// todo: check for multiple scanner and in case raise a warning?
97+
final ScannerFactory factory = iterator.next();
98+
return factory.getScanner( archiveDescriptorFactory );
9199
}
92100
else {
93-
return new StandardScanner( archiveDescriptorFactory );
101+
// todo: add a debug message that there is no Scanner?
102+
return new DisabledScanner();
94103
}
95104
}
96105
else {

hibernate-core/src/test/java/org/hibernate/orm/test/bootstrap/scanning/CustomScanner.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
*/
55
package org.hibernate.orm.test.bootstrap.scanning;
66

7-
import org.hibernate.boot.archive.scan.internal.StandardScanner;
7+
import org.hibernate.archive.scan.internal.StandardScanner;
88
import org.hibernate.boot.archive.scan.spi.ScanEnvironment;
99
import org.hibernate.boot.archive.scan.spi.ScanOptions;
1010
import org.hibernate.boot.archive.scan.spi.ScanParameters;

hibernate-core/src/test/java/org/hibernate/orm/test/bootstrap/scanning/JarVisitorTest.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -16,17 +16,17 @@
1616
import java.util.Collections;
1717
import java.util.List;
1818

19+
import org.hibernate.archive.scan.internal.ClassDescriptorImpl;
20+
import org.hibernate.archive.scan.internal.ScanResultCollector;
21+
import org.hibernate.archive.scan.internal.StandardScanner;
22+
import org.hibernate.archive.scan.spi.AbstractScannerImpl;
1923
import org.hibernate.boot.archive.internal.ArchiveHelper;
2024
import org.hibernate.boot.archive.internal.ExplodedArchiveDescriptor;
2125
import org.hibernate.boot.archive.internal.JarFileBasedArchiveDescriptor;
2226
import org.hibernate.boot.archive.internal.JarProtocolArchiveDescriptor;
2327
import org.hibernate.boot.archive.internal.StandardArchiveDescriptorFactory;
24-
import org.hibernate.boot.archive.scan.internal.ClassDescriptorImpl;
25-
import org.hibernate.boot.archive.scan.internal.ScanResultCollector;
2628
import org.hibernate.boot.archive.scan.internal.StandardScanOptions;
2729
import org.hibernate.boot.archive.scan.internal.StandardScanParameters;
28-
import org.hibernate.boot.archive.scan.internal.StandardScanner;
29-
import org.hibernate.boot.archive.scan.spi.AbstractScannerImpl;
3030
import org.hibernate.boot.archive.scan.spi.ClassDescriptor;
3131
import org.hibernate.boot.archive.scan.spi.MappingFileDescriptor;
3232
import org.hibernate.boot.archive.scan.spi.ScanEnvironment;

hibernate-core/src/test/java/org/hibernate/orm/test/bootstrap/scanning/ScannerTest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@
1414
import jakarta.persistence.EntityManagerFactory;
1515
import jakarta.persistence.Persistence;
1616

17+
import org.hibernate.archive.scan.internal.StandardScanner;
1718
import org.hibernate.boot.archive.scan.internal.StandardScanOptions;
1819
import org.hibernate.boot.archive.scan.internal.StandardScanParameters;
19-
import org.hibernate.boot.archive.scan.internal.StandardScanner;
2020
import org.hibernate.boot.archive.scan.spi.ClassDescriptor;
2121
import org.hibernate.boot.archive.scan.spi.MappingFileDescriptor;
2222
import org.hibernate.boot.archive.scan.spi.ScanEnvironment;

hibernate-core/src/test/java/org/hibernate/orm/test/bootstrap/scanning/ScanningCoordinatorTest.java

+5-5
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@
99
import java.util.Arrays;
1010
import java.util.Collections;
1111

12+
import org.hibernate.archive.scan.internal.ClassDescriptorImpl;
13+
import org.hibernate.boot.archive.scan.internal.DisabledScanner;
14+
import org.hibernate.archive.scan.internal.MappingFileDescriptorImpl;
15+
import org.hibernate.archive.scan.internal.PackageDescriptorImpl;
16+
import org.hibernate.archive.scan.internal.ScanResultImpl;
1217
import org.hibernate.boot.MetadataSources;
1318
import org.hibernate.boot.archive.internal.ByteArrayInputStreamAccess;
14-
import org.hibernate.boot.archive.scan.internal.ClassDescriptorImpl;
15-
import org.hibernate.boot.archive.scan.internal.DisabledScanner;
16-
import org.hibernate.boot.archive.scan.internal.MappingFileDescriptorImpl;
17-
import org.hibernate.boot.archive.scan.internal.PackageDescriptorImpl;
18-
import org.hibernate.boot.archive.scan.internal.ScanResultImpl;
1919
import org.hibernate.boot.archive.scan.spi.ClassDescriptor;
2020
import org.hibernate.boot.archive.scan.spi.MappingFileDescriptor;
2121
import org.hibernate.boot.archive.scan.spi.PackageDescriptor;

hibernate-integrationtest-java-modules/hibernate-integrationtest-java-modules.gradle

+1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ java.modularity.inferModulePath = true
1717
dependencies {
1818
api project( ':hibernate-core' )
1919
api project( ':hibernate-envers' )
20+
implementation project( ':hibernate-scan-jandex' )
2021
//Provide the jakarta.cdi module, as it's required by module jakarta.transaction
2122
//but not provided as transitive dependency of Narayana.
2223
testRuntimeOnly( jakartaLibs.cdi )

hibernate-integrationtest-java-modules/src/test/java/org/hibernate/orm/integrationtest/java/module/test/ScannerTest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import org.hibernate.boot.archive.internal.StandardArchiveDescriptorFactory;
1111
import org.hibernate.boot.archive.scan.internal.StandardScanOptions;
1212
import org.hibernate.boot.archive.scan.internal.StandardScanParameters;
13-
import org.hibernate.boot.archive.scan.internal.StandardScanner;
13+
import org.hibernate.archive.scan.internal.StandardScanner;
1414
import org.hibernate.boot.archive.scan.spi.ClassDescriptor;
1515
import org.hibernate.boot.archive.scan.spi.ScanResult;
1616
import org.hibernate.orm.integrationtest.java.module.test.entity.Author;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
description = 'Integrate support for Jandex into Hibernate O/RM'
2+
3+
apply from: rootProject.file( 'gradle/published-java-module.gradle' )
4+
5+
6+
dependencies {
7+
api project( ':hibernate-core' )
8+
api jakartaLibs.jpa
9+
10+
implementation libs.jandex
11+
12+
testImplementation project( ':hibernate-testing' )
13+
14+
}
15+
16+
sourceSets.test.resources {
17+
setSrcDirs( ['src/test/resources'] )
18+
}

hibernate-core/src/main/java/org/hibernate/boot/archive/scan/internal/ClassDescriptorImpl.java renamed to hibernate-scan-jandex/src/main/java/org/hibernate/archive/scan/internal/ClassDescriptorImpl.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
* SPDX-License-Identifier: LGPL-2.1-or-later
33
* Copyright Red Hat Inc. and Hibernate Authors
44
*/
5-
package org.hibernate.boot.archive.scan.internal;
5+
package org.hibernate.archive.scan.internal;
66

77
import java.io.Serializable;
88

hibernate-core/src/main/java/org/hibernate/boot/archive/scan/internal/MappingFileDescriptorImpl.java renamed to hibernate-scan-jandex/src/main/java/org/hibernate/archive/scan/internal/MappingFileDescriptorImpl.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
* SPDX-License-Identifier: LGPL-2.1-or-later
33
* Copyright Red Hat Inc. and Hibernate Authors
44
*/
5-
package org.hibernate.boot.archive.scan.internal;
5+
package org.hibernate.archive.scan.internal;
66

77
import java.io.Serializable;
88

hibernate-core/src/main/java/org/hibernate/boot/archive/scan/internal/NoopEntryHandler.java renamed to hibernate-scan-jandex/src/main/java/org/hibernate/archive/scan/internal/NoopEntryHandler.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
* SPDX-License-Identifier: LGPL-2.1-or-later
33
* Copyright Red Hat Inc. and Hibernate Authors
44
*/
5-
package org.hibernate.boot.archive.scan.internal;
5+
package org.hibernate.archive.scan.internal;
66

77
import org.hibernate.boot.archive.spi.ArchiveContext;
88
import org.hibernate.boot.archive.spi.ArchiveEntry;

hibernate-core/src/main/java/org/hibernate/boot/archive/scan/internal/PackageDescriptorImpl.java renamed to hibernate-scan-jandex/src/main/java/org/hibernate/archive/scan/internal/PackageDescriptorImpl.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
* SPDX-License-Identifier: LGPL-2.1-or-later
33
* Copyright Red Hat Inc. and Hibernate Authors
44
*/
5-
package org.hibernate.boot.archive.scan.internal;
5+
package org.hibernate.archive.scan.internal;
66

77
import java.io.Serializable;
88

hibernate-core/src/main/java/org/hibernate/boot/archive/scan/internal/ScanResultCollector.java renamed to hibernate-scan-jandex/src/main/java/org/hibernate/archive/scan/internal/ScanResultCollector.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
* SPDX-License-Identifier: LGPL-2.1-or-later
33
* Copyright Red Hat Inc. and Hibernate Authors
44
*/
5-
package org.hibernate.boot.archive.scan.internal;
5+
package org.hibernate.archive.scan.internal;
66

77
import java.util.Collections;
88
import java.util.HashSet;

hibernate-core/src/main/java/org/hibernate/boot/archive/scan/internal/ScanResultImpl.java renamed to hibernate-scan-jandex/src/main/java/org/hibernate/archive/scan/internal/ScanResultImpl.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
* SPDX-License-Identifier: LGPL-2.1-or-later
33
* Copyright Red Hat Inc. and Hibernate Authors
44
*/
5-
package org.hibernate.boot.archive.scan.internal;
5+
package org.hibernate.archive.scan.internal;
66

77
import java.io.Serializable;
88
import java.util.Set;

hibernate-core/src/main/java/org/hibernate/boot/archive/scan/internal/StandardScanner.java renamed to hibernate-scan-jandex/src/main/java/org/hibernate/archive/scan/internal/StandardScanner.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22
* SPDX-License-Identifier: LGPL-2.1-or-later
33
* Copyright Red Hat Inc. and Hibernate Authors
44
*/
5-
package org.hibernate.boot.archive.scan.internal;
5+
package org.hibernate.archive.scan.internal;
66

7+
import org.hibernate.archive.scan.spi.AbstractScannerImpl;
78
import org.hibernate.boot.archive.internal.StandardArchiveDescriptorFactory;
8-
import org.hibernate.boot.archive.scan.spi.AbstractScannerImpl;
99
import org.hibernate.boot.archive.spi.ArchiveDescriptorFactory;
1010

1111
/**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
/*
2+
* SPDX-License-Identifier: LGPL-2.1-or-later
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.archive.scan.internal;
6+
7+
import org.hibernate.boot.archive.scan.spi.Scanner;
8+
import org.hibernate.boot.archive.scan.spi.ScannerFactory;
9+
import org.hibernate.boot.archive.spi.ArchiveDescriptorFactory;
10+
11+
public class StandardScannerFactory implements ScannerFactory {
12+
@Override
13+
public Scanner getScanner(ArchiveDescriptorFactory archiveDescriptorFactory) {
14+
if ( archiveDescriptorFactory == null ) {
15+
return new StandardScanner();
16+
}
17+
return new StandardScanner( archiveDescriptorFactory );
18+
}
19+
}

hibernate-core/src/main/java/org/hibernate/boot/archive/scan/spi/AbstractScannerImpl.java renamed to hibernate-scan-jandex/src/main/java/org/hibernate/archive/scan/spi/AbstractScannerImpl.java

+8-3
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,19 @@
22
* SPDX-License-Identifier: LGPL-2.1-or-later
33
* Copyright Red Hat Inc. and Hibernate Authors
44
*/
5-
package org.hibernate.boot.archive.scan.spi;
5+
package org.hibernate.archive.scan.spi;
66

77
import java.net.URL;
88
import java.util.HashMap;
99
import java.util.Map;
1010

11-
import org.hibernate.boot.archive.scan.internal.NoopEntryHandler;
12-
import org.hibernate.boot.archive.scan.internal.ScanResultCollector;
11+
import org.hibernate.archive.scan.internal.NoopEntryHandler;
12+
import org.hibernate.archive.scan.internal.ScanResultCollector;
13+
import org.hibernate.boot.archive.scan.spi.ScanEnvironment;
14+
import org.hibernate.boot.archive.scan.spi.ScanOptions;
15+
import org.hibernate.boot.archive.scan.spi.ScanParameters;
16+
import org.hibernate.boot.archive.scan.spi.ScanResult;
17+
import org.hibernate.boot.archive.scan.spi.Scanner;
1318
import org.hibernate.boot.archive.spi.ArchiveContext;
1419
import org.hibernate.boot.archive.spi.ArchiveDescriptor;
1520
import org.hibernate.boot.archive.spi.ArchiveDescriptorFactory;

hibernate-core/src/main/java/org/hibernate/boot/archive/scan/spi/ClassFileArchiveEntryHandler.java renamed to hibernate-scan-jandex/src/main/java/org/hibernate/archive/scan/spi/ClassFileArchiveEntryHandler.java

+4-3
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
* SPDX-License-Identifier: LGPL-2.1-or-later
33
* Copyright Red Hat Inc. and Hibernate Authors
44
*/
5-
package org.hibernate.boot.archive.scan.spi;
5+
package org.hibernate.archive.scan.spi;
66

77
import java.io.IOException;
88
import java.io.InputStream;
@@ -11,8 +11,9 @@
1111
import jakarta.persistence.Entity;
1212
import jakarta.persistence.MappedSuperclass;
1313

14-
import org.hibernate.boot.archive.scan.internal.ClassDescriptorImpl;
15-
import org.hibernate.boot.archive.scan.internal.ScanResultCollector;
14+
import org.hibernate.archive.scan.internal.ClassDescriptorImpl;
15+
import org.hibernate.archive.scan.internal.ScanResultCollector;
16+
import org.hibernate.boot.archive.scan.spi.ClassDescriptor;
1617
import org.hibernate.boot.archive.spi.ArchiveContext;
1718
import org.hibernate.boot.archive.spi.ArchiveEntry;
1819
import org.hibernate.boot.archive.spi.ArchiveEntryHandler;

hibernate-core/src/main/java/org/hibernate/boot/archive/scan/spi/NonClassFileArchiveEntryHandler.java renamed to hibernate-scan-jandex/src/main/java/org/hibernate/archive/scan/spi/NonClassFileArchiveEntryHandler.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22
* SPDX-License-Identifier: LGPL-2.1-or-later
33
* Copyright Red Hat Inc. and Hibernate Authors
44
*/
5-
package org.hibernate.boot.archive.scan.spi;
5+
package org.hibernate.archive.scan.spi;
66

7-
import org.hibernate.boot.archive.scan.internal.MappingFileDescriptorImpl;
8-
import org.hibernate.boot.archive.scan.internal.ScanResultCollector;
7+
import org.hibernate.archive.scan.internal.MappingFileDescriptorImpl;
8+
import org.hibernate.archive.scan.internal.ScanResultCollector;
99
import org.hibernate.boot.archive.spi.ArchiveContext;
1010
import org.hibernate.boot.archive.spi.ArchiveEntry;
1111
import org.hibernate.boot.archive.spi.ArchiveEntryHandler;

0 commit comments

Comments
 (0)