This is an automated email from the ASF dual-hosted git repository. jshao pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/gravitino.git
The following commit(s) were added to refs/heads/main by this push: new 98482575a3 [#8167]improve(core): Improve the SPI to load in the specific mapper class (#8170) 98482575a3 is described below commit 98482575a393cb4d3686ce3c951d7f268f4536bf Author: Jerry Shao <jerrys...@datastrato.com> AuthorDate: Tue Aug 19 19:18:56 2025 +0800 [#8167]improve(core): Improve the SPI to load in the specific mapper class (#8170) ### What changes were proposed in this pull request? Change the SPI interface to add the specific mapper list instead of general package name. ### Why are the changes needed? Currently, we're using package name to load in all the mapper class to MyBatis configuration, but our package contains lots of classes other than mapper class, so they will also load in unexpected classes to increase the footprint. So here slightly adjust the SPI to avoid load in the unwanted classes. Fix: #8167 ### Does this PR introduce _any_ user-facing change? No. ### How was this patch tested? Existing tests. --- .../provider/DefaultMapperPackageProvider.java | 61 ++++++++++++++++++++-- .../mapper/provider/MapperPackageProvider.java | 14 ++--- .../session/SqlSessionFactoryHelper.java | 2 +- 3 files changed, 66 insertions(+), 11 deletions(-) diff --git a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/DefaultMapperPackageProvider.java b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/DefaultMapperPackageProvider.java index 17f316408b..f214bd1962 100644 --- a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/DefaultMapperPackageProvider.java +++ b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/DefaultMapperPackageProvider.java @@ -18,13 +18,66 @@ */ package org.apache.gravitino.storage.relational.mapper.provider; +import com.google.common.collect.ImmutableList; +import java.util.List; +import org.apache.gravitino.storage.relational.mapper.CatalogMetaMapper; +import org.apache.gravitino.storage.relational.mapper.FilesetMetaMapper; +import org.apache.gravitino.storage.relational.mapper.FilesetVersionMapper; +import org.apache.gravitino.storage.relational.mapper.GroupMetaMapper; +import org.apache.gravitino.storage.relational.mapper.GroupRoleRelMapper; +import org.apache.gravitino.storage.relational.mapper.JobMetaMapper; +import org.apache.gravitino.storage.relational.mapper.JobTemplateMetaMapper; +import org.apache.gravitino.storage.relational.mapper.MetalakeMetaMapper; +import org.apache.gravitino.storage.relational.mapper.ModelMetaMapper; +import org.apache.gravitino.storage.relational.mapper.ModelVersionAliasRelMapper; +import org.apache.gravitino.storage.relational.mapper.ModelVersionMetaMapper; +import org.apache.gravitino.storage.relational.mapper.OwnerMetaMapper; +import org.apache.gravitino.storage.relational.mapper.PolicyMetaMapper; +import org.apache.gravitino.storage.relational.mapper.PolicyMetadataObjectRelMapper; +import org.apache.gravitino.storage.relational.mapper.PolicyVersionMapper; +import org.apache.gravitino.storage.relational.mapper.RoleMetaMapper; +import org.apache.gravitino.storage.relational.mapper.SchemaMetaMapper; +import org.apache.gravitino.storage.relational.mapper.SecurableObjectMapper; +import org.apache.gravitino.storage.relational.mapper.StatisticMetaMapper; +import org.apache.gravitino.storage.relational.mapper.TableColumnMapper; +import org.apache.gravitino.storage.relational.mapper.TableMetaMapper; +import org.apache.gravitino.storage.relational.mapper.TagMetaMapper; +import org.apache.gravitino.storage.relational.mapper.TagMetadataObjectRelMapper; +import org.apache.gravitino.storage.relational.mapper.TopicMetaMapper; +import org.apache.gravitino.storage.relational.mapper.UserMetaMapper; +import org.apache.gravitino.storage.relational.mapper.UserRoleRelMapper; + /** The default provider that supplies the primary mapper package for Gravitino. */ public class DefaultMapperPackageProvider implements MapperPackageProvider { - private static final String DEFAULT_MAPPER_PACKAGE = - "org.apache.gravitino.storage.relational.mapper"; @Override - public String getPackageName() { - return DEFAULT_MAPPER_PACKAGE; + public List<Class<?>> getMapperClasses() { + return ImmutableList.of( + CatalogMetaMapper.class, + FilesetMetaMapper.class, + FilesetVersionMapper.class, + GroupMetaMapper.class, + GroupRoleRelMapper.class, + JobMetaMapper.class, + JobTemplateMetaMapper.class, + MetalakeMetaMapper.class, + ModelMetaMapper.class, + ModelVersionAliasRelMapper.class, + ModelVersionMetaMapper.class, + OwnerMetaMapper.class, + PolicyMetadataObjectRelMapper.class, + PolicyMetaMapper.class, + PolicyVersionMapper.class, + RoleMetaMapper.class, + SchemaMetaMapper.class, + SecurableObjectMapper.class, + StatisticMetaMapper.class, + TableColumnMapper.class, + TableMetaMapper.class, + TagMetadataObjectRelMapper.class, + TagMetaMapper.class, + TopicMetaMapper.class, + UserMetaMapper.class, + UserRoleRelMapper.class); } } diff --git a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/MapperPackageProvider.java b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/MapperPackageProvider.java index 47c4c33eaf..23709866f1 100644 --- a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/MapperPackageProvider.java +++ b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/MapperPackageProvider.java @@ -18,16 +18,18 @@ */ package org.apache.gravitino.storage.relational.mapper.provider; +import java.util.List; + /** - * A Service Provider Interface (SPI) for providing package names that contain MyBatis Mapper - * interfaces. Implementations of this interface allow for the automatic discovery and registration - * of mappers from different modules. + * A Service Provider Interface (SPI) to provide a list of MyBatis Mapper interfaces. + * Implementations of this interface allow for the automatic discovery and registration of mappers + * from different modules. */ public interface MapperPackageProvider { /** - * Returns the package name where MyBatis Mapper interfaces are located. + * Get a list of MyBatis Mapper classes to register into MyBatis configuration. * - * @return A string representing the package name to be scanned. + * @return a list of MyBatis Mapper classes */ - String getPackageName(); + List<Class<?>> getMapperClasses(); } diff --git a/core/src/main/java/org/apache/gravitino/storage/relational/session/SqlSessionFactoryHelper.java b/core/src/main/java/org/apache/gravitino/storage/relational/session/SqlSessionFactoryHelper.java index a649a454b0..e31cf1683a 100644 --- a/core/src/main/java/org/apache/gravitino/storage/relational/session/SqlSessionFactoryHelper.java +++ b/core/src/main/java/org/apache/gravitino/storage/relational/session/SqlSessionFactoryHelper.java @@ -107,7 +107,7 @@ public class SqlSessionFactoryHelper { configuration.setDatabaseId(jdbcType.name().toLowerCase()); ServiceLoader<MapperPackageProvider> loader = ServiceLoader.load(MapperPackageProvider.class); for (MapperPackageProvider provider : loader) { - configuration.addMappers(provider.getPackageName()); + provider.getMapperClasses().forEach(configuration::addMapper); } // Create the SqlSessionFactory object, it is a singleton object