AbsaOSS / AbsaOSS/hyperdrive

Identify component factories by identifier string

Aperta
#99 0 commenti 1 reazione 1 assegnatario Assegnata a @kevinwallimann Vedi su GitHub
enhancement
Lingua principale
Scala
Stelle
47
Fork
14
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Descrizione

**Description**
Currently, component factories are loaded in `ClassLoaderUtils` given their fully qualified classnames. The classname is passed by the configuration. (e.g. `component.writer`)

That means that components don't have the possibility to be refactored (renaming, moving to a different package) without introducing a breaking change which would require updating any existing configuration that uses that component.

**Tasks**
- Add a method `getIdentifier: String` to the interface `ComponentFactory`. `getClass.getName` may be used as a default value. (so this feature won't be a breaking change)
- Implementing components are responsible for providing a unique identifier. It's advisable to prefix the identifier with a human readable name, because it will be referenced in the configuration, logged, etc..
- Use `getIdentifier` to load the factory in `ClassLoaderUtils`. Currently, it loads the class directly given the class name. This approach doesn't work to efficiently load the factory by the identifier. With #83, component factories can be loaded using the Service Provider Interface (SPI), i.e. with `ServiceLoader`. All factories expose the `getIdentifier` method, that's how it can be found

**Other**
- The same identifier might be used by each component to prefix its configuration properties to avoid name clashes.

Guida per i contributori

Nessuna guida per i contributori indicizzata per questo repository

Valutazione

Questa issue non è ancora stata valutata.

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.