Skip to content

Align GeoFence to GeoServer3#285

Draft
etj wants to merge 4 commits into
mainfrom
geofence_39
Draft

Align GeoFence to GeoServer3#285
etj wants to merge 4 commits into
mainfrom
geofence_39

Conversation

@etj

@etj etj commented Mar 12, 2026

Copy link
Copy Markdown
Member

With the first commit the project build and tests pass.

Todo:

  • datasource configuration (see also copilot review)
  • datasource routing (see also copilot review)
  • webapp setup
  • webapp for rest test setup
  • cleanup XML annotation from core model
  • cleanup XML annotation from services/dto classes
  • final cleanup

Copilot AI review requested due to automatic review settings March 12, 2026 14:33
@etj etj linked an issue Mar 12, 2026 that may be closed by this pull request

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR aligns the GeoFence codebase with GeoServer 3 by restructuring modules and updating package coordinates/namespaces, while modernizing parts of the persistence/services layers and tests.

Changes:

  • Migrates many Java packages from org.geoserver.geofence... to org.geofence... and introduces new src/core/* Maven modules.
  • Reworks persistence/services wiring toward Spring Java config + Jakarta (jakarta.persistence, jakarta.xml.bind) APIs.
  • Replaces/removes legacy REST/login/webtest artifacts and updates tests to JUnit Jupiter + (new) Testcontainers-based infrastructure.

Reviewed changes

Copilot reviewed 227 out of 408 changed files in this pull request and generated 9 comments.

Show a summary per file
File Description
src/services/modules/rest/client/src/main/java/org/geoserver/geofence/services/rest/AdminRuleServiceHelper.java Removed legacy REST client helper.
src/services/modules/rest/client/pom.xml Removed legacy REST client module POM.
src/services/modules/rest/api/src/main/java/org/geoserver/geofence/services/rest/model/util/Identifier.java_ Removed legacy REST API utility model.
src/services/modules/rest/api/src/main/java/org/geoserver/geofence/services/rest/model/config/RESTFullGRUserList.java Removed legacy REST config model.
src/services/modules/rest/api/src/main/java/org/geoserver/geofence/services/rest/model/config/RESTConfigurationRemapping.java Removed legacy REST configuration remapping model.
src/services/modules/rest/api/src/main/java/org/geoserver/geofence/services/rest/exception/NotFoundRestEx.java Removed legacy REST exception type.
src/services/modules/rest/api/src/main/java/org/geoserver/geofence/services/rest/exception/InternalErrorRestEx.java Removed legacy REST exception type.
src/services/modules/rest/api/src/main/java/org/geoserver/geofence/services/rest/exception/ConflictRestEx.java Removed legacy REST exception type.
src/services/modules/rest/api/src/main/java/org/geoserver/geofence/services/rest/exception/BadRequestRestEx.java Removed legacy REST exception type.
src/services/modules/rest/api/src/main/java/org/geoserver/geofence/services/rest/RESTBatchService.java Removed legacy REST batch service interface.
src/services/modules/rest/api/src/main/java/org/geoserver/geofence/services/rest/RESTAdminRuleService.java Removed legacy REST admin rule service interface.
src/services/modules/rest/api/pom.xml Removed legacy REST API module POM.
src/services/modules/pom.xml Removed legacy modules aggregator POM.
src/services/modules/login/impl/src/test/resources/applicationContext-test.xml Removed legacy login Spring test context.
src/services/modules/login/impl/src/test/java/org/geoserver/geofence/login/util/MD5UtilTest.java Removed legacy login hashing test.
src/services/modules/login/impl/src/main/resources/applicationContext.xml Removed legacy login Spring context.
src/services/modules/login/impl/src/main/java/org/geoserver/geofence/login/util/TokenEncoder.java Removed legacy token encoder.
src/services/modules/login/impl/src/main/java/org/geoserver/geofence/login/util/SessionManager.java Removed legacy session manager.
src/services/modules/login/impl/src/main/java/org/geoserver/geofence/login/util/MD5Util.java Removed legacy MD5 helper.
src/services/modules/login/impl/src/main/java/org/geoserver/geofence/login/util/GrantAll.java Removed legacy auth provider.
src/services/modules/login/impl/src/main/java/org/geoserver/geofence/login/LoginServiceImpl.java Removed legacy login service implementation.
src/services/modules/login/impl/pom.xml Removed legacy login impl module POM.
src/services/modules/login/api/src/main/java/org/geoserver/geofence/login/LoginService.java Removed legacy SOAP login API.
src/services/modules/login/api/pom.xml Removed legacy login API module POM.
src/services/modules/generic-api/src/main/java/org/geoserver/geofence/api/exception/AuthException.java Removed legacy generic API exception.
src/services/modules/generic-api/src/main/java/org/geoserver/geofence/api/dto/RegisteredUser.java Removed legacy generic API DTO.
src/services/modules/generic-api/src/main/java/org/geoserver/geofence/api/dto/GrantedAuths.java Removed legacy generic API DTO.
src/services/modules/generic-api/src/main/java/org/geoserver/geofence/api/dto/Authority.java Removed legacy auth DTO enum.
src/services/modules/generic-api/src/main/java/org/geoserver/geofence/api/UserRegistry.java Removed legacy user registry API.
src/services/modules/generic-api/src/main/java/org/geoserver/geofence/api/AuthProvider.java Removed legacy auth provider API.
src/services/modules/generic-api/pom.xml Removed legacy generic-api module POM.
src/services/core/webtest/src/main/webapp/WEB-INF/web.xml Removed legacy webtest web.xml.
src/services/core/webtest/src/main/webapp/WEB-INF/remoting-servlet.xml Removed legacy webtest Spring remoting servlet config.
src/services/core/webtest/src/main/resources/log4j2.xml Removed legacy webtest logging config.
src/services/core/webtest/src/main/resources/geofence-datasource.properties Removed legacy webtest datasource props.
src/services/core/webtest/src/main/resources/geofence-datasource-ovr.properties Removed legacy webtest overrides.
src/services/core/webtest/src/main/resources/applicationContext.xml Removed legacy webtest spring context.
src/services/core/services-impl/src/test/resources/geofence-datasource-ovr.properties Removed legacy test datasource overrides.
src/services/core/services-impl/src/test/java/org/geoserver/test/AbstractSpringContextTest.java Removed legacy Spring context base test.
src/services/core/services-impl/src/test/java/org/geoserver/geofence/services/GFUserAdminServiceImplTest.java Removed legacy service impl test.
src/services/core/services-impl/src/main/resources/applicationContext.xml Removed legacy service impl Spring context.
src/services/core/services-api/src/test/java/org/geoserver/geofence/services/util/RuleFilterTest.java Removed legacy RuleFilter test.
src/services/core/services-api/src/main/java/org/geoserver/geofence/services/dto/ShortUser.java Removed legacy DTO.
src/services/core/services-api/src/main/java/org/geoserver/geofence/services/dto/ShortAdminRule.java Removed legacy DTO.
src/services/core/services-api/src/main/java/org/geoserver/geofence/services/RuleReaderService.java Removed legacy services API interface.
src/services/core/services-api/src/main/java/org/geoserver/geofence/services/GFUserAdminService.java Removed legacy GFUser admin service API.
src/services/core/services-api/pom.xml Removed legacy services-api module POM.
src/services/core/pom.xml Removed legacy core aggregator POM.
src/services/core/persistence/src/test/resources/geofence-datasource-ovr.properties Removed legacy persistence test overrides.
src/services/core/persistence/src/test/java/org/geoserver/geofence/core/dao/util/DaoRegistryTest.java Removed legacy DAO registry test.
src/services/core/persistence/src/test/java/org/geoserver/geofence/core/dao/UserGroupDAOTest.java Removed legacy DAO test.
src/services/core/persistence/src/test/java/org/geoserver/geofence/core/dao/GFUserDAOTest.java Removed legacy DAO test.
src/services/core/persistence/src/main/resources/geofence-externalize-aux.properties Removed legacy externalize props.
src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/util/GeofenceDaoRegistry.java Removed legacy DAO registry implementation.
src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/impl/GFUserDAOImpl.java Removed legacy GF user DAO impl.
src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/RestrictedGenericDAO.java Removed legacy restricted DAO API.
src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/RegistrableDAO.java Removed legacy marker interface.
src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/GFUserDAO.java Removed legacy DAO interface.
src/services/core/persistence-pg-test/src/test/resources/log4j.properties Removed legacy pg test logging config.
src/services/core/persistence-pg-test/src/test/resources/geofence-datasource-ovr.properties Removed legacy pg test overrides.
src/services/core/model/src/main/java/org/geoserver/geofence/core/model/adapter/dual/MapType.java Removed legacy JAXB map adapter type.
src/services/core/model/src/main/java/org/geoserver/geofence/core/model/adapter/dual/MapEntryType.java Removed legacy JAXB map entry type.
src/services/core/model/src/main/java/org/geoserver/geofence/core/model/adapter/XMultiPolygonAdapter.java Removed legacy geometry adapter.
src/services/core/model/src/main/java/org/geoserver/geofence/core/model/adapter/PolygonAdapter.java Removed legacy geometry adapter.
src/services/core/model/src/main/java/org/geoserver/geofence/core/model/adapter/MapAdapter.java Removed legacy map adapter.
src/services/core/model/src/main/java/org/geoserver/geofence/core/model/adapter/FKUserAdapter.java Removed legacy FK adapter.
src/services/core/model/src/main/java/org/geoserver/geofence/core/model/adapter/FKGSInstanceAdapter.java Removed legacy FK adapter.
src/services/core/model/src/main/java/org/geoserver/geofence/core/model/adapter/FK2UserGroupSetAdapter2.java Removed legacy set adapter.
src/services/core/model/src/main/java/org/geoserver/geofence/core/model/adapter/FK2UserGroupAdapter.java Removed legacy FK2 adapter.
src/services/core/model/src/main/java/org/geoserver/geofence/core/model/adapter/FK2UserAdapter.java Removed legacy FK2 adapter.
src/services/core/model/pom.xml Removed legacy model-internal module POM.
src/misc/csv2geofence/src/test/resources/log4j.properties Updated logger namespace.
src/misc/csv2geofence/src/main/resources/log4j.properties Updated logger namespace.
src/misc/csv2geofence/src/main/java/org/geoserver/csv2geofence/impl/UsersProcessor.java Updated imports to new namespaces.
src/misc/csv2geofence/src/main/java/org/geoserver/csv2geofence/impl/RulesProcessor.java Updated imports to new namespaces.
src/misc/csv2geofence/src/main/java/org/geoserver/csv2geofence/Runner.java Updated imports to new namespaces.
src/misc/csv2geofence/pom.xml Updated Maven coordinates/version.
src/core/services-impl/src/test/resources/log4j2.xml Updated logger namespace.
src/core/services-impl/src/test/java/org/geofence/core/services/util/CategorizedCircularBufferTest.java Migrated test package + JUnit Jupiter.
src/core/services-impl/src/test/java/org/geofence/core/services/UserGroupAdminServiceImplTest.java Added JUnit Jupiter service test.
src/core/services-impl/src/test/java/org/geofence/core/services/UserAdminServiceImplTest.java Migrated to new packages + JUnit Jupiter.
src/core/services-impl/src/test/java/org/geofence/core/services/AdminRuleAdminServiceImplTest.java Migrated to new packages + JUnit Jupiter.
src/core/services-impl/src/main/java/org/geofence/core/services/util/CategorizedCircularBuffer.java Migrated package + minor refactors.
src/core/services-impl/src/main/java/org/geofence/core/services/util/AccessInfoInternal.java Migrated package + minor refactors.
src/core/services-impl/src/main/java/org/geofence/core/services/config/GeofenceServiceConfig.java Added Spring Java config for services.
src/core/services-impl/src/main/java/org/geofence/core/services/UserGroupAdminServiceImpl.java Migrated to Spring @Service + new DAO package.
src/core/services-impl/src/main/java/org/geofence/core/services/UserAdminServiceImpl.java Migrated to Spring @Service + new DAO package.
src/core/services-impl/src/main/java/org/geofence/core/services/InstanceAdminServiceImpl.java Migrated to Spring @Service + new DAO package.
src/core/services-impl/src/main/java/org/geofence/core/services/DefaultUserResolver.java Migrated to Spring @Service + SPI package change.
src/core/services-impl/src/main/java/org/geofence/core/services/AuthorizationServiceImpl.java Migrated to Spring @Service + new DAO package.
src/core/services-api/src/test/java/org/geofence/core/services/util/RuleFilterTest.java Added migrated RuleFilter JUnit Jupiter test.
src/core/services-api/src/test/java/org/geofence/core/services/util/IPUtilsTest.java Migrated JUnit test to new package/Jupiter.
src/core/services-api/src/main/java/org/geofence/core/services/util/IPUtils.java Migrated utility package + minor formatting.
src/core/services-api/src/main/java/org/geofence/core/services/spi/UserResolver.java Migrated SPI package + removed deprecated methods.
src/core/services-api/src/main/java/org/geofence/core/services/exception/NotFoundServiceEx.java Migrated exception package + formatting.
src/core/services-api/src/main/java/org/geofence/core/services/exception/InternalErrorServiceEx.java Migrated exception package + formatting.
src/core/services-api/src/main/java/org/geofence/core/services/exception/BadRequestServiceEx.java Migrated exception package + formatting.
src/core/services-api/src/main/java/org/geofence/core/services/dto/ShortUser.java Added DTO in new services-api module.
src/core/services-api/src/main/java/org/geofence/core/services/dto/ShortInstance.java Migrated DTO + Jakarta JAXB.
src/core/services-api/src/main/java/org/geofence/core/services/dto/ShortGroup.java Migrated DTO + Jakarta JAXB.
src/core/services-api/src/main/java/org/geofence/core/services/dto/ShortAdminRule.java Added DTO in new services-api module.
src/core/services-api/src/main/java/org/geofence/core/services/dto/CatalogModeDTO.java Migrated enum to new package.
src/core/services-api/src/main/java/org/geofence/core/services/dto/AuthUser.java Migrated DTO to new package.
src/core/services-api/src/main/java/org/geofence/core/services/dto/AccessInfo.java Migrated DTO to new package.
src/core/services-api/src/main/java/org/geofence/core/services/UserGroupAdminService.java Migrated service API to new package.
src/core/services-api/src/main/java/org/geofence/core/services/UserAdminService.java Migrated service API to new package.
src/core/services-api/src/main/java/org/geofence/core/services/RuleReaderService.java Added migrated services API interface.
src/core/services-api/src/main/java/org/geofence/core/services/InstanceAdminService.java Migrated service API to new package.
src/core/services-api/src/main/java/org/geofence/core/services/GetProviderService.java Migrated base service API to new package.
src/core/services-api/src/main/java/org/geofence/core/services/ConfigAdminService.java Migrated service API to new package.
src/core/services-api/src/main/java/org/geofence/core/services/AuthorizationService.java Migrated service API to new package.
src/core/services-api/pom.xml Added new services-api module POM.
src/core/pom.xml Added new core aggregator POM.
src/core/persistence/src/test/resources/log4j2.xml Updated logger namespace.
src/core/persistence/src/test/java/org/geofence/core/db/dao/util/PwEncoderTest.java Migrated test package/JUnit Jupiter.
src/core/persistence/src/test/java/org/geofence/core/db/dao/UserDAOTest.java Migrated test package/JUnit Jupiter.
src/core/persistence/src/test/java/org/geofence/core/db/TestContainerBootstrap.java Added Testcontainers bootstrap for tests.
src/core/persistence/src/test/java/org/geofence/core/db/BaseContainerTest.java Added base Testcontainers + Spring test config.
src/core/persistence/src/main/java/org/geofence/core/db/utils/SchemaExporter.java Migrated schema exporter package + model imports.
src/core/persistence/src/main/java/org/geofence/core/db/datasource/DynamicRoutingDataSource.java Added dynamic routing datasource.
src/core/persistence/src/main/java/org/geofence/core/db/datasource/DatabaseRegistry.java Added runtime database registry for routing datasource.
src/core/persistence/src/main/java/org/geofence/core/db/dao/util/PwEncoder.java Migrated persistence util package.
src/core/persistence/src/main/java/org/geofence/core/db/dao/search/SearchUtil.java Migrated search util package + formatting.
src/core/persistence/src/main/java/org/geofence/core/db/dao/search/Search.java Migrated to Jakarta persistence.
src/core/persistence/src/main/java/org/geofence/core/db/dao/search/LongSearch.java Migrated to Jakarta persistence.
src/core/persistence/src/main/java/org/geofence/core/db/dao/search/BaseSearch.java Migrated to Jakarta persistence + formatting.
src/core/persistence/src/main/java/org/geofence/core/db/dao/impl/UserGroupDAOImpl.java Migrated DAO impl + Spring component metadata.
src/core/persistence/src/main/java/org/geofence/core/db/dao/impl/RuleLimitsDAOImpl.java Migrated DAO impl + Spring repository metadata.
src/core/persistence/src/main/java/org/geofence/core/db/dao/impl/RuleDAOImpl.java Migrated DAO impl + API changes to single-entity persist.
src/core/persistence/src/main/java/org/geofence/core/db/dao/impl/LayerDetailsDAOImpl.java Migrated DAO impl + API changes to single-entity persist.
src/core/persistence/src/main/java/org/geofence/core/db/dao/impl/GSInstanceDAOImpl.java Migrated DAO impl + API changes to single-entity persist.
src/core/persistence/src/main/java/org/geofence/core/db/dao/impl/BaseDAOImpl.java Replaced legacy BaseDAO with Jakarta-based BaseDAOImpl.
src/core/persistence/src/main/java/org/geofence/core/db/dao/impl/AdminRuleDAOImpl.java Migrated DAO impl + API changes to single-entity persist.
src/core/persistence/src/main/java/org/geofence/core/db/dao/UserGroupDAO.java Migrated DAO API to new base DAO interface.
src/core/persistence/src/main/java/org/geofence/core/db/dao/SearchableDAO.java Migrated DAO API package.
src/core/persistence/src/main/java/org/geofence/core/db/dao/RuleLimitsDAO.java Migrated DAO API to new base DAO interface.
src/core/persistence/src/main/java/org/geofence/core/db/dao/RuleDAO.java Migrated DAO API package.
src/core/persistence/src/main/java/org/geofence/core/db/dao/PrioritizableDAO.java Migrated DAO API to new base DAO interface.
src/core/persistence/src/main/java/org/geofence/core/db/dao/LayerDetailsDAO.java Migrated DAO API to new base DAO interface.
src/core/persistence/src/main/java/org/geofence/core/db/dao/GSUserDAO.java Migrated DAO API to new base DAO interface.
src/core/persistence/src/main/java/org/geofence/core/db/dao/GSInstanceDAO.java Migrated DAO API to new base DAO interface.
src/core/persistence/src/main/java/org/geofence/core/db/dao/DuplicateKeyException.java Migrated exception package + formatting.
src/core/persistence/src/main/java/org/geofence/core/db/dao/BaseDAO.java Added new base DAO interface.
src/core/persistence/src/main/java/org/geofence/core/db/dao/AllowedStylesProvider.java Migrated interface package + indentation fix.
src/core/persistence/src/main/java/org/geofence/core/db/dao/AdminRuleDAO.java Migrated DAO API package.
src/core/persistence/src/main/java/org/geofence/core/db/config/HibernateConfig.java Added transaction manager config.
src/core/persistence/src/main/java/org/geofence/core/db/config/GeofenceUserDAOSelector.java Added DAO selector config.
src/core/persistence/src/main/java/org/geofence/core/db/config/GeofencePersistenceConfig.java Added Spring Java config for persistence/JPA.
src/core/model/src/test/java/org/geofence/core/model/util/PwEncoderTest.java Migrated model util test to JUnit Jupiter.
src/core/model/src/test/java/org/geofence/core/model/IPAddressRangeTest.java Migrated model test to JUnit Jupiter.
src/core/model/src/test/java/org/geofence/core/model/Base64EncodersTest.java Migrated JAXB import and JUnit Jupiter assertions.
src/core/model/src/main/java/org/geofence/core/model/util/package-info.java Fixed package-info package declaration.
src/core/model/src/main/java/org/geofence/core/model/util/PwEncoder.java Migrated model util to Jakarta JAXB.
src/core/model/src/main/java/org/geofence/core/model/util/EWKTParser.java Migrated package + minor signature cleanup.
src/core/model/src/main/java/org/geofence/core/model/package-info.java Added (commented) placeholder package-info.
src/core/model/src/main/java/org/geofence/core/model/enums/package-info.java Fixed enums package-info package declaration.
src/core/model/src/main/java/org/geofence/core/model/enums/ValueType.java Migrated package + formatting.
src/core/model/src/main/java/org/geofence/core/model/enums/SpatialFilterType.java Migrated package + formatting.
src/core/model/src/main/java/org/geofence/core/model/enums/LayerType.java Migrated package + formatting.
src/core/model/src/main/java/org/geofence/core/model/enums/KnownServices.java Migrated package + formatting.
src/core/model/src/main/java/org/geofence/core/model/enums/InsertPosition.java Migrated package.
src/core/model/src/main/java/org/geofence/core/model/enums/GrantType.java Migrated package.
src/core/model/src/main/java/org/geofence/core/model/enums/CatalogMode.java Migrated package + formatting.
src/core/model/src/main/java/org/geofence/core/model/enums/AdminGrantType.java Migrated package.
src/core/model/src/main/java/org/geofence/core/model/enums/AccessType.java Migrated package.
src/core/model/src/main/java/org/geofence/core/model/adapter/package-info.java Fixed adapter package-info package declaration.
src/core/model/src/main/java/org/geofence/core/model/adapter/MultiPolygonAdapter.java Migrated adapter package + formatting.
src/core/model/src/main/java/org/geofence/core/model/adapter/IdentifiableAdapter.java Migrated JAXB adapter to Jakarta.
src/core/model/src/main/java/org/geofence/core/model/adapter/GeometryAdapter.java Migrated JAXB adapter to Jakarta + formatting.
src/core/model/src/main/java/org/geofence/core/model/adapter/FKUserGroupAdapter.java Migrated adapter package.
src/core/model/src/main/java/org/geofence/core/model/RuleLimits.java Migrated entity to Jakarta + refactored rule mapping.
src/core/model/src/main/java/org/geofence/core/model/Prioritizable.java Migrated package + formatting.
src/core/model/src/main/java/org/geofence/core/model/LayerAttribute.java Migrated entity to Jakarta + doc formatting.
src/core/model/src/main/java/org/geofence/core/model/Identifiable.java Migrated package + formatting.
src/core/model/src/main/java/org/geofence/core/model/IPRangeProvider.java Migrated package + formatting.
src/core/model/pom.xml Added new model module POM under new groupId/version.
Comments suppressed due to low confidence (1)

src/core/persistence/src/main/java/org/geofence/core/db/config/GeofenceUserDAOSelector.java:1

  • Selecting DAO implementations via daos.get(0) is brittle: bean ordering is not guaranteed unless explicitly controlled, and this will also throw at runtime if no implementations are registered. A more robust approach is to mark the preferred DAO as @Primary, or select by @Qualifier/bean name, or enforce deterministic ordering (e.g., sort by @Order and validate the result) and fail with a clear message when no candidate is available.
package org.geofence.core.db.config;

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +1 to +9
// @XmlJavaTypeAdapters({
// @XmlJavaTypeAdapter(type = LocalDateTime.class, value = LocalDateTimeAdapter.class)
// })
// package org.geofence.core.model;
//
// import java.time.LocalDateTime;
// import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
// import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapters;
// import org.geofence.core.model.adapter.LocalDateTimeAdapter;

Copilot AI Mar 12, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This package-info.java has no actual package ...; declaration (it’s fully commented out). A package-info.java file without a package statement will fail Java compilation. Either delete this file entirely, or restore a real package declaration (and any required annotations/imports) so it becomes valid Java source.

Suggested change
// @XmlJavaTypeAdapters({
// @XmlJavaTypeAdapter(type = LocalDateTime.class, value = LocalDateTimeAdapter.class)
// })
// package org.geofence.core.model;
//
// import java.time.LocalDateTime;
// import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
// import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapters;
// import org.geofence.core.model.adapter.LocalDateTimeAdapter;
@jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapters({
@jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter(
type = java.time.LocalDateTime.class,
value = org.geofence.core.model.adapter.LocalDateTimeAdapter.class
)
})
package org.geofence.core.model;

Copilot uses AI. Check for mistakes.
public InternalErrorServiceEx(String message)
{
public InternalErrorServiceEx(String message) {
super(Response.Status.BAD_REQUEST);

Copilot AI Mar 12, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

InternalErrorServiceEx is mapped to Response.Status.BAD_REQUEST (400), which contradicts the class name and typical semantics (should be 500). This will cause internal errors to be reported as client errors. Use Response.Status.INTERNAL_SERVER_ERROR here.

Suggested change
super(Response.Status.BAD_REQUEST);
super(Response.Status.INTERNAL_SERVER_ERROR);

Copilot uses AI. Check for mistakes.
name = "gf_rule_limits",
uniqueConstraints =
@UniqueConstraint(
columnNames = "rule_id", // @InternalModel

Copilot AI Mar 12, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The table uniqueConstraints references a rule_id column, but the relationship is mapped via @JoinColumn(name = \"id\") (and @MapsId). This introduces a schema mismatch (constraint on a non-existent column) and will break schema generation / migrations. Align the constraint and join column naming consistently (e.g., make the FK column rule_id and map it accordingly, or update the unique constraint to match the actual join column).

Suggested change
columnNames = "rule_id", // @InternalModel
columnNames = "id", // @InternalModel

Copilot uses AI. Check for mistakes.
Comment on lines +57 to +60
@MapsId
@OneToOne(optional = false)
@Check(constraints = "rule.access='LIMIT'") // ??? check this
@JoinColumn(foreignKey = @ForeignKey(name = "fk_limits_rule"))
private Rule rule;
@JoinColumn(name = "id", foreignKey = @ForeignKey(name = "fk_limits_rule"))
Rule rule;

Copilot AI Mar 12, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The table uniqueConstraints references a rule_id column, but the relationship is mapped via @JoinColumn(name = \"id\") (and @MapsId). This introduces a schema mismatch (constraint on a non-existent column) and will break schema generation / migrations. Align the constraint and join column naming consistently (e.g., make the FK column rule_id and map it accordingly, or update the unique constraint to match the actual join column).

Copilot uses AI. Check for mistakes.
Comment on lines +3 to +15
import org.hibernate.SessionFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.orm.jpa.hibernate.HibernateTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;

@Configuration
public class HibernateConfig {

@Bean
public PlatformTransactionManager transactionManager(SessionFactory sessionFactory) {

return new HibernateTransactionManager(sessionFactory);

Copilot AI Mar 12, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This config declares a transactionManager(SessionFactory) bean, but the persistence setup in GeofencePersistenceConfig creates a JPA EntityManagerFactory + JpaTransactionManager, and it doesn’t define a SessionFactory bean. As-is, this is likely to fail application context startup due to an unsatisfied SessionFactory dependency (or introduce multiple transaction managers with ambiguous wiring). Prefer removing this config, or define/provide a SessionFactory bean explicitly, or consolidate on the existing geofenceTransactionManager.

Suggested change
import org.hibernate.SessionFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.orm.jpa.hibernate.HibernateTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
@Configuration
public class HibernateConfig {
@Bean
public PlatformTransactionManager transactionManager(SessionFactory sessionFactory) {
return new HibernateTransactionManager(sessionFactory);
/**
* Legacy placeholder for Hibernate configuration.
*
* The actual transaction management is configured elsewhere
* (for example via a JpaTransactionManager).
*/
public final class HibernateConfig {
private HibernateConfig() {
// Prevent instantiation

Copilot uses AI. Check for mistakes.
Comment on lines +25 to +29
private DynamicRoutingDataSource routingDataSource;

public GeofencePersistenceConfig() {
routingDataSource = new DynamicRoutingDataSource();
}

Copilot AI Mar 12, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

DynamicRoutingDataSource routingDataSource is instantiated but never exposed as a Spring bean nor used as the DataSource returned by dataSource(...). At the same time, DatabaseRegistry is designed to mutate a DynamicRoutingDataSource. If dynamic routing is intended, the config should wire routingDataSource as the primary DataSource and register at least one default target datasource; otherwise, this routing infrastructure should be removed to avoid dead/unused code paths that will confuse future maintenance.

Copilot uses AI. Check for mistakes.
Comment on lines +47 to +60
@Bean
public DataSource dataSource(
@Value("${geofence.datasource.url}") String url,
@Value("${geofence.datasource.username}") String username,
@Value("${geofence.datasource.password}") String password,
@Value("${geofence.datasource.driver}") String driver) {

HikariDataSource dataSource = new HikariDataSource();
dataSource.setJdbcUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
dataSource.setDriverClassName(driver);
return dataSource;
}

Copilot AI Mar 12, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

DynamicRoutingDataSource routingDataSource is instantiated but never exposed as a Spring bean nor used as the DataSource returned by dataSource(...). At the same time, DatabaseRegistry is designed to mutate a DynamicRoutingDataSource. If dynamic routing is intended, the config should wire routingDataSource as the primary DataSource and register at least one default target datasource; otherwise, this routing infrastructure should be removed to avoid dead/unused code paths that will confuse future maintenance.

Copilot uses AI. Check for mistakes.
LinkedList<T> typedList = typedLists.get(key);
if (typedList == null)
return Collections.EMPTY_LIST;
if (typedList == null) return Collections.EMPTY_LIST;

Copilot AI Mar 12, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Returning Collections.EMPTY_LIST is a raw type and can trigger unchecked warnings / type-safety issues. Prefer returning Collections.emptyList() (which is generically typed) to keep the method type-safe.

Suggested change
if (typedList == null) return Collections.EMPTY_LIST;
if (typedList == null) return Collections.emptyList();

Copilot uses AI. Check for mistakes.
ret.setAllowedStyles(
allowedStyles == null
? null
: new HashSet(allowedStyles)); // new Set will prevent marshalling hibernate classes

Copilot AI Mar 12, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This uses a raw new HashSet(allowedStyles), which loses generic type information and produces unchecked warnings. Use a parameterized copy (new HashSet<>(allowedStyles)) to preserve type safety.

Suggested change
: new HashSet(allowedStyles)); // new Set will prevent marshalling hibernate classes
: new HashSet<>(allowedStyles)); // new Set will prevent marshalling hibernate classes

Copilot uses AI. Check for mistakes.
@etj etj marked this pull request as draft March 12, 2026 14:57
@etj etj self-assigned this Mar 12, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Align GeoFence to GeoServer3

2 participants