Waarom Aangepaste Extensies? Omdat We Het Kunnen!
Laten we eerlijk zijn: kant-en-klare oplossingen voldoen niet altijd. Soms moet je zelf aan de slag en iets op maat maken. Daar komen aangepaste Quarkus-extensies om de hoek kijken. Ze zijn als de geheime saus die je applicatie uniek krachtig maakt.
"Met grote kracht komt grote verantwoordelijkheid" – Oom Ben (en elke Quarkus-ontwikkelaar ooit)
De Ingrediënten voor Onze Extensie Toverdrank
Voordat we beginnen, laten we onze tools verzamelen:
- Een vleugje creativiteit (maak je geen zorgen, daar hebben we genoeg van)
- Quarkus (natuurlijk)
- Jakarta EE (onze trouwe metgezel)
- Een snufje geduld (geloof me, dat heb je nodig)
Stap 1: Conceptualiseer Je Extensie
Eerst en vooral – wat wil je dat je extensie doet? Voor deze tutorial maken we iets leuks en nuttigs: een "RandomQuoteGenerator" extensie. Want wie heeft er geen behoefte aan een dosis wijsheid (of gekkigheid) in hun code?
Stap 2: Het Project Opzetten
Tijd om aan de slag te gaan. Start je terminal en laten we een nieuw Quarkus-extensieproject maken:
mvn io.quarkus:quarkus-maven-plugin:create-extension -DextensionId=io.mycompany:quarkus-random-quote-generator
Dit commando creëert een basisstructuur voor onze extensie. Het is als de fundering van een huis – nog niet erg spannend, maar essentieel.
Stap 3: De Kernfunctionaliteit Implementeren
Nu gaan we wat vlees aan de botten toevoegen. We maken een RandomQuoteGenerator
klasse die het zware werk doet:
package io.mycompany.quarkus.random.quote.generator;
import jakarta.enterprise.context.ApplicationScoped;
import java.util.List;
import java.util.Random;
@ApplicationScoped
public class RandomQuoteGenerator {
private static final List<String> QUOTES = List.of(
"I'm not a great programmer; I'm just a good programmer with great habits." - Kent Beck,
"Talk is cheap. Show me the code." - Linus Torvalds,
"Programming isn't about what you know; it's about what you can figure out." - Chris Pine
);
private final Random random = new Random();
public String getRandomQuote() {
return QUOTES.get(random.nextInt(QUOTES.size()));
}
}
Kijk naar die prachtige Jakarta CDI-annotatie (@ApplicationScoped
). Het is alsof we onze klasse superkrachten geven!
Stap 4: Het Runtime Module Creëren
Vervolgens moeten we de runtime module opzetten. Dit is waar de magie gebeurt wanneer iemand onze extensie daadwerkelijk gebruikt:
package io.mycompany.quarkus.random.quote.generator.runtime;
import io.mycompany.quarkus.random.quote.generator.RandomQuoteGenerator;
import io.quarkus.arc.runtime.BeanContainer;
import io.quarkus.runtime.annotations.Recorder;
@Recorder
public class RandomQuoteGeneratorRecorder {
public void initialize(BeanContainer container) {
container.instance(RandomQuoteGenerator.class).getRandomQuote();
}
}
Deze recorderklasse is als de backstage crew van een theater – het zet alles achter de schermen op.
Stap 5: Deployment Module - Waar de Stukken Samen Komen
Nu gaan we de deployment module maken. Dit is waar we Quarkus vertellen hoe onze extensie te integreren:
package io.mycompany.quarkus.random.quote.generator.deployment;
import io.mycompany.quarkus.random.quote.generator.RandomQuoteGenerator;
import io.mycompany.quarkus.random.quote.generator.runtime.RandomQuoteGeneratorRecorder;
import io.quarkus.arc.deployment.AdditionalBeanBuildItem;
import io.quarkus.deployment.annotations.BuildStep;
import io.quarkus.deployment.annotations.ExecutionTime;
import io.quarkus.deployment.annotations.Record;
import io.quarkus.deployment.builditem.FeatureBuildItem;
class RandomQuoteGeneratorProcessor {
private static final String FEATURE = "random-quote-generator";
@BuildStep
FeatureBuildItem feature() {
return new FeatureBuildItem(FEATURE);
}
@BuildStep
AdditionalBeanBuildItem registerBean() {
return AdditionalBeanBuildItem.unremovableOf(RandomQuoteGenerator.class);
}
@BuildStep
@Record(ExecutionTime.RUNTIME_INIT)
void initialize(RandomQuoteGeneratorRecorder recorder) {
recorder.initialize();
}
}
Deze processor is als de dirigent van een orkest, die ervoor zorgt dat alle delen van onze extensie harmonieus samenwerken.
Stap 6: Configuratie
Elke goede extensie heeft enkele configuratieopties nodig. Laten we een manier toevoegen om onze citaten aan te passen:
package io.mycompany.quarkus.random.quote.generator.runtime;
import io.quarkus.runtime.annotations.ConfigItem;
import io.quarkus.runtime.annotations.ConfigPhase;
import io.quarkus.runtime.annotations.ConfigRoot;
@ConfigRoot(name = "random-quote", phase = ConfigPhase.RUN_TIME)
public class RandomQuoteConfig {
/**
* Aangepaste citaten om toe te voegen aan de generator
*/
@ConfigItem(name = "custom-quotes")
public Optional<List<String>> customQuotes;
}
Nu kunnen gebruikers hun eigen citaten toevoegen. Het is als het geven van een penseel om hun eigen kleuren aan ons meesterwerk toe te voegen!
Stap 7: Testen - Omdat We Professionals Zijn
Geen enkele extensie is compleet zonder tests. Laten we een eenvoudige test schrijven om ervoor te zorgen dat onze generator werkt:
package io.mycompany.quarkus.random.quote.generator;
import io.quarkus.test.junit.QuarkusTest;
import org.junit.jupiter.api.Test;
import jakarta.inject.Inject;
import static org.junit.jupiter.api.Assertions.assertNotNull;
@QuarkusTest
public class RandomQuoteGeneratorTest {
@Inject
RandomQuoteGenerator generator;
@Test
public void testRandomQuoteGeneration() {
String quote = generator.getRandomQuote();
assertNotNull(quote);
System.out.println("Generated quote: " + quote);
}
}
Tests uitvoeren is als het geven van een gezondheidscontrole aan je code. Beter veilig dan sorry!
Stap 8: Documentatie - Omdat We Vriendelijk Zijn
Last but not least, laten we wat documentatie schrijven. Maak een README.md-bestand in de hoofdmap van je project:
# Quarkus Random Quote Generator Extension
Deze extensie voegt een willekeurige citatengenerator toe aan je Quarkus-applicatie.
## Gebruik
1. Voeg de extensie toe aan je project:
```xml
<dependency>
<groupId>io.mycompany</groupId>
<artifactId>quarkus-random-quote-generator</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
```
2. Injecteer en gebruik de generator in je code:
```java
@Inject
RandomQuoteGenerator generator;
public void printRandomQuote() {
System.out.println(generator.getRandomQuote());
}
```
3. Pas citaten aan in je application.properties:
```properties
quarkus.random-quote.custom-quotes=May the source be with you,I code, therefore I am
```
Goede documentatie is als goed becommentarieerde code – het maakt het leven van iedereen gemakkelijker.
De Grote Finale: Je Extensie Publiceren
Je hebt het gedaan! Je extensie is klaar om de wereld te veroveren. Om het te publiceren:
- Duw je code naar GitHub
- Stel CI/CD in (GitHub Actions zijn je vriend)
- Publiceer naar Maven Central (want delen is zorgzaam)
Afronden
En daar heb je het – je eigen Quarkus-extensie, van idee tot productieklare oplossing. Het is alsof je net een nieuwe spreuk aan het Quarkus-spreukenboek hebt toegevoegd. Onthoud, met grote kracht komt... nou ja, je kent de rest.
Ga nu verder en breid Quarkus uit naar hartenlust. Wie weet? Jouw extensie kan wel eens het volgende grote ding in het Quarkus-ecosysteem zijn. Veel programmeerplezier, en moge je builds altijd succesvol zijn!
"De beste code is helemaal geen code." - Jeff Atwood (maar we maken een uitzondering voor geweldige Quarkus-extensies)