Skip to content

Commit

Permalink
edits
Browse files Browse the repository at this point in the history
  • Loading branch information
dmuelle committed Sep 13, 2024
1 parent a6d1cd3 commit 97d020b
Showing 1 changed file with 10 additions and 9 deletions.
19 changes: 10 additions & 9 deletions modules/ROOT/pages/cdi-extension-user-feature.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,10 @@

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]
Expand All @@ -36,31 +37,31 @@ import org.osgi.service.component.annotations.Component;
public class CDIIntegrationMetaData implements CDIExtensionMetadata
{
public Set<Class<?>> 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<Class<? extends Annotation>> getBeanDefiningAnnotationClasses() {
//CDIAnnotation will become a BeanDefiningAnnotation. Any class annotated @Annotation can be injected via CDI.
//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<Class<? extends Extension>> 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.
The `@Component` annotation is required so that Open Liberty processes your implementation of the `CDIExtensionMetadata` class.

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.
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.


== See also
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
- 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]

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
- link:https://jakarta.ee/specifications/cdi/4.0/jakarta-cdi-spec-4.0#scopes[Scopes in CDI 4.0]

0 comments on commit 97d020b

Please sign in to comment.