Skip to content

Commit c0b7494

Browse files
committed
Merge branch '7.0.x'
2 parents 5bf58cf + b7882d7 commit c0b7494

6 files changed

Lines changed: 23 additions & 16 deletions

File tree

spring-core/src/main/java/org/springframework/util/ClassUtils.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,12 @@ public abstract class ClassUtils {
9494
/** The ".class" file suffix. */
9595
public static final String CLASS_FILE_SUFFIX = ".class";
9696

97+
/**
98+
* The ".package-info" suffix for package class names.
99+
* @since 7.0.8
100+
*/
101+
public static final String PACKAGE_INFO_SUFFIX = ".package-info";
102+
97103
/** Precomputed value for the combination of private, static and final modifiers. */
98104
private static final int NON_OVERRIDABLE_MODIFIER = Modifier.PRIVATE | Modifier.STATIC | Modifier.FINAL;
99105

spring-core/src/main/java24/org/springframework/core/type/classreading/ClassFileAnnotationMetadata.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ final class ClassFileAnnotationMetadata implements AnnotationMetadata {
7878
this.className = className;
7979
this.accessFlags = accessFlags;
8080
this.enclosingClassName = enclosingClassName;
81-
this.superClassName = (!className.endsWith(".package-info")) ? superClassName : null;
81+
this.superClassName = (!className.endsWith(ClassUtils.PACKAGE_INFO_SUFFIX) ? superClassName : null);
8282
this.independentInnerClass = independentInnerClass;
8383
this.interfaceNames = interfaceNames;
8484
this.memberClassNames = memberClassNames;

spring-orm/src/main/java/org/springframework/orm/jpa/LocalEntityManagerFactoryBean.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -76,9 +76,6 @@ public class LocalEntityManagerFactoryBean extends AbstractEntityManagerFactoryB
7676

7777
private static final String NON_JTA_DATASOURCE_PROPERTY = "jakarta.persistence.nonJtaDataSource";
7878

79-
private static final String PACKAGE_INFO_SUFFIX = ".package-info";
80-
81-
8279
private @Nullable PersistenceConfiguration configuration;
8380

8481
private String @Nullable [] packagesToScan;
@@ -249,7 +246,7 @@ protected EntityManagerFactory createNativeEntityManagerFactory() throws Persist
249246
// Expose managed packages as package-info class names if not included already
250247
// (accepted by PersistenceConfiguration on Hibernate as well as EclipseLink)
251248
for (String managedPackage : result.getManagedPackages()) {
252-
classNameSet.add(managedPackage + PACKAGE_INFO_SUFFIX);
249+
classNameSet.add(managedPackage + ClassUtils.PACKAGE_INFO_SUFFIX);
253250
}
254251
// Expose pre-resolved Class references to PersistenceConfiguration.
255252
PersistenceConfiguration config = getPersistenceConfiguration();

spring-orm/src/main/java/org/springframework/orm/jpa/hibernate/LocalSessionFactoryBuilder.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -103,8 +103,6 @@ public class LocalSessionFactoryBuilder extends Configuration {
103103

104104
private static final String RESOURCE_PATTERN = "/**/*.class";
105105

106-
private static final String PACKAGE_INFO_SUFFIX = ".package-info";
107-
108106
private static final TypeFilter[] DEFAULT_ENTITY_TYPE_FILTERS = new TypeFilter[] {
109107
new AnnotationTypeFilter(Entity.class, false),
110108
new AnnotationTypeFilter(Embeddable.class, false),
@@ -312,8 +310,9 @@ public LocalSessionFactoryBuilder scanPackages(String... packagesToScan) throws
312310
else if (CONVERTER_TYPE_FILTER.match(reader, readerFactory)) {
313311
converterClassNames.add(className);
314312
}
315-
else if (className.endsWith(PACKAGE_INFO_SUFFIX)) {
316-
packageNames.add(className.substring(0, className.length() - PACKAGE_INFO_SUFFIX.length()));
313+
else if (className.endsWith(ClassUtils.PACKAGE_INFO_SUFFIX)) {
314+
packageNames.add(className.substring(0,
315+
className.length() - ClassUtils.PACKAGE_INFO_SUFFIX.length()));
317316
}
318317
}
319318
catch (FileNotFoundException ex) {

spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/PersistenceManagedTypesScanner.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,6 @@ public final class PersistenceManagedTypesScanner {
5959

6060
private static final String CLASS_RESOURCE_PATTERN = "/**/*.class";
6161

62-
private static final String PACKAGE_INFO_SUFFIX = ".package-info";
63-
6462
private static final String IGNORE_CLASSFORMAT_PROPERTY_NAME = "spring.classformat.ignore";
6563

6664
private static final boolean shouldIgnoreClassFormatException =
@@ -157,9 +155,9 @@ private void scanPackage(String pkg, ScanResult scanResult) {
157155
}
158156
}
159157
}
160-
if (className.endsWith(PACKAGE_INFO_SUFFIX)) {
158+
if (className.endsWith(ClassUtils.PACKAGE_INFO_SUFFIX)) {
161159
scanResult.managedPackages.add(className.substring(0,
162-
className.length() - PACKAGE_INFO_SUFFIX.length()));
160+
className.length() - ClassUtils.PACKAGE_INFO_SUFFIX.length()));
163161
}
164162
}
165163
catch (FileNotFoundException ex) {

spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/SpringPersistenceUnitInfo.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -264,11 +264,18 @@ private class SmartPersistenceUnitInfoInvocationHandler implements InvocationHan
264264
}
265265
else if (method.getName().equals("getAllClassNames")) {
266266
// JPA 4.0 letting the container perform the scanning
267-
if (excludeUnlistedClasses()) {
268-
return getManagedClassNames(); // typically coming from Spring default persistence unit
267+
if (excludeUnlistedClasses()) { // typically coming from Spring default persistence unit
268+
List<String> mergedClassesAndPackages =
269+
new ArrayList<>(getManagedClassNames().size() + getManagedPackages().size());
270+
mergedClassesAndPackages.addAll(getManagedClassNames());
271+
for (String managedPackage : getManagedPackages()) {
272+
mergedClassesAndPackages.add(managedPackage + ClassUtils.PACKAGE_INFO_SUFFIX);
273+
}
274+
return mergedClassesAndPackages;
269275
}
270276
throw new UnsupportedOperationException(
271-
"JPA 4.0 getAllClassNames only supported with exclude-unlisted-classes");
277+
"JPA 4.0 getAllClassNames only supported with Spring-configured packagesToScan or " +
278+
"with completely listed managed classes plus exclude-unlisted-classes=true");
272279
}
273280

274281
// Regular methods to be delegated to SpringPersistenceUnitInfo

0 commit comments

Comments
 (0)