diff --git a/modules/ROOT/pages/cdi-extension-user-feature.adoc b/modules/ROOT/pages/cdi-extension-user-feature.adoc index e8102762e..578d8a143 100644 --- a/modules/ROOT/pages/cdi-extension-user-feature.adoc +++ b/modules/ROOT/pages/cdi-extension-user-feature.adoc @@ -11,13 +11,14 @@ :seo-description: :page-layout: general-reference :page-type: general -= Creating a CDI Extension inside a User Feature += Creating a CDI extension inside an Open Liberty user feature -Contexts and Dependency Injection (CDI) provides powerful extensions to augment, extend, or override the behaviour of CDI. If you wish for the extensions inside a Open Liberty User Feature to be found by CDI you must implement an Open Liberty specific SPI: `io.openliberty.cdi.spi.CDIExtensionMetadata`. +Contexts and Dependency Injection (CDI) provides powerful extensions to augment, extend, or override the behavior of CDI. To enable CDI to find the extensions inside an Open Liberty user feature, you must implement an Open Liberty-specific SPI: `io.openliberty.cdi.spi.CDIExtensionMetadata`. -`CDIExtensionMetadata` also provides syntactic sugar for the two most common uses of a CDI Extension: Registering a class as a CDI bean, and registering an annotation as a Bean Defining Annotation (BDA). +The `CDIExtensionMetadata` class also enables the two most common uses of a CDI Extension: registering a class as a CDI bean, and registering an annotation as a bean defining annotation (BDA). -Here is an example of an implementation of `CDIExtensionMetadata`. +The following example shows an implementation of the `CDIExtensionMetadata` class, with three possible methods that extend the class: `getBeanClasses`, `getBeanDefiningAnnotationClasses`, and `getExtensions`. +Each of these methods has a default implementation that returns an empty set, so you can implement only the ones that are relevant to your needs. [source,java] @@ -36,32 +37,31 @@ import org.osgi.service.component.annotations.Component; public class CDIIntegrationMetaData implements CDIExtensionMetadata { public Set> getBeanClasses() { - //CDIBean will become a CDI bean and can be injected with `@Inject CDIBean cdiBean`. If it does not have a scope, the scope will default to @Dependent. + //CDIBean becomes a CDI bean and can be injected with `@Inject CDIBean cdiBean`. If it does not have a scope, the scope defaults to @Dependent. return Set.of(CDIBean.class); } - + public Set> getBeanDefiningAnnotationClasses() { - //CDIAnnotation will become a BeanDefiningAnnotation. Any class annotated @Annotation can be injected via CDI. - //Unless CDIAnnotation defines otherwise, the default scope is @Dependent. See https://jakarta.ee/specifications/cdi/4.0/jakarta-cdi-spec-4.0#scopes + //CDIAnnotation becomes a BeanDefiningAnnotation. Any class annotated @Annotation can be injected via CDI. + //Unless CDIAnnotation defines otherwise, the default scope is @Dependent. See https://jakarta.ee/specifications/cdi/4.0/jakarta-cdi-spec-4.0#scopes //For details on how annotations define their scope. return Set.of(CDIAnnotation.class); } - + public Set> getExtensions() { - //CDIExtension will be processed as a full CDI extension. + //CDIExtension is processed as a full CDI extension. return Set.of(CDIExtension.class); } - + } ---- -The `@Component` annotation is required so that Open Liberty will process your implementation of CDIExtensionMetadata. The three methods all have a default implementation that returns an empty set, so you only have to implement the ones relevent to your needs. - -And this is all you need to make your user extension extend CDI. If you want a step by step guide to creating a user feature that extends CDI from scratch see the link below. +The `@Component` annotation is required so that Open Liberty processes your implementation of the `CDIExtensionMetadata` class. +This configuration is all you need to make your user extension extend CDI. For a step-by-step guide to creating a user feature that extends CDI, see the link:https://openliberty.io/blog/2024/06/28/liberty-user-feature-tutorial.html[How to package a library as an Open Liberty user feature] blog post. -= Useful Links -Javadoc for `CDIExtensionMetadata` can be found at: https://openliberty.io/docs/latest/reference/javadoc/spi/cdi-1.2.html?path=24.0.0.8/com.ibm.websphere.appserver.spi.cdi_1.1-javadoc/io/openliberty/cdi/spi/package-summary.html -A step by step guide to creating a user feature, including an implementation of `CDIExtensionMetadata`, can be found at: https://openliberty.io/blog/2024/06/28/liberty-user-feature-tutorial.html +== See also +- link:https://openliberty.io/docs/latest/reference/javadoc/spi/cdi-1.2.html?path=24.0.0.8/com.ibm.websphere.appserver.spi.cdi_1.1-javadoc/io/openliberty/cdi/spi/package-summary.html[CDIExtensionMetadata Javadoc] +- link:https://jakarta.ee/specifications/cdi/4.0/jakarta-cdi-spec-4.0#scopes[Scopes in CDI 4.0]