Interface ExternalDatabaseReadService

All Known Implementing Classes:
ExternalDatabaseReadServiceImpl

public interface ExternalDatabaseReadService
Read-only retrieval service for ExternalDatabase.

Phase 3 of the ExternalDatabaseService decomposition (strangler fig). This service houses the DAO-bound read cluster previously implemented directly on the ExternalDatabaseServiceImpl facade: loadAllWithAuditTrail, loadWithExternalDatabases, findByName, findByNameWithExternalDatabases, findByNameWithAuditTrail, and findAllByNameIn. All methods delegate to ExternalDatabaseDao (with simple Hibernate.initialize(Object) wrapping where appropriate) and orchestrate no other collaborators.

Write-side methods (create, findOrCreate, update, updateReleaseDetails, updateReleaseLastUpdated, remove, plus the inherited BaseService mutators) stay on the ExternalDatabaseService facade.

Callers should generally keep using ExternalDatabaseService as the facade -- the facade delegates to this service. Direct injection is appropriate where a class is logically read-only (REST endpoints, CLIs, browser controllers, intra-core readers).

ACL / @Secured annotations live on ExternalDatabaseService (the caller-facing facade interface); enforcement happens at the facade proxy boundary, so this interface is intentionally unsecured. (The facade declares @Secured("GROUP_ADMIN") on loadAllWithAuditTrail and @Secured("GROUP_AGENT") on findByNameWithAuditTrail -- those checks still fire when the facade is the call site; intra-gemma-core callers that inject this service directly bypass the duplicate ACL check.)

See Also: