Ce diaporama a bien été signalé.
Le téléchargement de votre SlideShare est en cours. ×

2/3 : CDI advanced - Antoine Sabot-Durand

Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Chargement dans…3
×

Consultez-les par la suite

1 sur 26 Publicité

2/3 : CDI advanced - Antoine Sabot-Durand

Télécharger pour lire hors ligne

Allez plus Loin avec CDI

En moins de 5 ans d’existence, Contexts and Dependency Injection (CDI) est devenue l’une des principale spécification de Java EE. Néanmoins, CDI est bien souvent perçu comme une simple solution d’injection de dépendance enrichie alors que cette spécification est bien plus riche que ça. Lors de cette présentation, après un rapide rappel des fonctionnalités de base de CDI, nous montrerons comment son utilisation avancée permet Java EE en intégrant des technologies legacy ou plus récent de manière naturelle. Nous finirons avec le travail en cours sur CDI 2.0 qui a commencé début septembre.

Allez plus Loin avec CDI

En moins de 5 ans d’existence, Contexts and Dependency Injection (CDI) est devenue l’une des principale spécification de Java EE. Néanmoins, CDI est bien souvent perçu comme une simple solution d’injection de dépendance enrichie alors que cette spécification est bien plus riche que ça. Lors de cette présentation, après un rapide rappel des fonctionnalités de base de CDI, nous montrerons comment son utilisation avancée permet Java EE en intégrant des technologies legacy ou plus récent de manière naturelle. Nous finirons avec le travail en cours sur CDI 2.0 qui a commencé début septembre.

Publicité
Publicité

Plus De Contenu Connexe

Diaporamas pour vous (20)

Les utilisateurs ont également aimé (20)

Publicité

Similaire à 2/3 : CDI advanced - Antoine Sabot-Durand (20)

Publicité

Plus récents (20)

2/3 : CDI advanced - Antoine Sabot-Durand

  1. 1. CDI ADVANCED Meta Data & Extensions @antoine_sd
  2. 2. ANTOINE SABOT-DURAND • Senior Software Engineer @Red Hat • Java & OSS : • CDI co-spec lead • CDI community development • Tech Lead on Agorava • @antoine_sd
  3. 3. MEET CDI SPI
  4. 4. SPI CAN BE SPLIT IN 4 PARTS
  5. 5. 1.SPI DEDICATED TO TYPE META-MODEL
  6. 6. WHY HAVING A TYPE META-MODEL?
  7. 7. WHY HAVING A TYPE META-MODEL? Because @Annotations are configuration
  8. 8. WHY HAVING A TYPE META-MODEL? Because @Annotations are configuration but they are also read- only
  9. 9. WHY HAVING A TYPE META-MODEL? Because @Annotations are configuration but they are also read- only as we want to write configuration We need a mutable meta-model
  10. 10. WHY HAVING A TYPE META-MODEL? Because @Annotations are configuration but they are also read- only as we want to write configuration We need a mutable meta-model for annotated types
  11. 11. 2.SPI DEDICATED TO CDI META-MODEL
  12. 12. SPI CAN BE USED IN YOUR CODE 1 @Produces public <K, V> Map<K, V> produceMap(InjectionPoint ip) { if (valueIsNumber(ip.getType())) { return new TreeMap<K, V>(); } return new HashMap<K, V>(); }
  13. 13. SPI CAN BE USED IN YOUR CODE 2 public abstract class AbstractBean { @Inject Bean<AbstractBean> meta; @Inject Instance<Foo> fooInstances; public Foo getFooWithSameQualifiers() { Annotation[] beanQualifiers = (Annotation[]) meta.getQualifiers().toArray(); Instance<Foo> mySelect = fooInstances.select(beanQualifiers); if (!(mySelect.isUnsatisfied() && mySelect.isAmbiguous())) return mySelect.get(); else throw new IllegalStateException("Foo with same qualifiers not found"); } }
  14. 14. SPI CAN BE USED IN YOUR CODE 3 @ApplicationScoped public class ExampleBean { private void strictListen(@Observes @Qualified Payload evt, EventMetadata meta) { if(meta.getQualifiers().contains(new QualifiedLiteral()) && meta.getType().equals(Payload.class)) System.out.println("Do something"); else System.out.println("ignore"); } }
  15. 15. 3. CDI ENTRY POINTS
  16. 16. SPI DEDICATED TO EXTENSIONS
  17. 17. MOST OF THESE SPI ARE EVENTS CONTAINING META MODEL SPI CLASSES
  18. 18. MOST OF THESE SPI ARE EVENTS CONTAINING META MODEL SPI CLASSES ProcessAnnotatedType
  19. 19. MOST OF THESE SPI ARE EVENTS CONTAINING META MODEL SPI CLASSES These Events are automatically fired by CDI when application starts and can observed in method included in a CDI extension
  20. 20. CDI EXTENSIONS
  21. 21. CDI EXTENSIONS FOR WHAT ? • A CDI extension can : • Create / modify : • Beans • Injection Target • Injection Points • Cancel beans creation • More generally extensions can modify all CDI context at launch time
  22. 22. TO UNDERSTAND EXTENSIONS • Once application is bootstrapped, the Bean Manager is in read only mode (no dynamic bean registration) • Extensions are launch during bootsrap and are based on CDI events • You only have to @Observes built-in CDI event to create your extensions • Learn the different events fired at boot time on next slide
  23. 23. CDI 1.1 LIFECYCLE Before Bean Discovery Process Bean Scan Archive Process Annotated Type After Deployment Validation Application Running After Bean Discovery Process Producer Before Shutdown Undeploy Application Process Injection Target Process Observer Method Process Injection Point Process Bean Attributes After Type Discovery Occurs once occurs for each elts internal step Deployment starts Bean eligibility check
  24. 24. HOW TO BUILD A CDI EXTENSION • Create a class implementing javax.enterprise.inject.spi.Extension • Add some method that observes CDI lifecyle events to modify Bean Manager meta data • Add file : META-INF/services/ javax.enterprise.inject.spi.Extension in class path. And put the qualified name of the extension in it
  25. 25. SIMPLE EXAMPLE - VETO JPA ENTITIES public class VetoEntityExtension implements Extension { void vetoEntites(@Observes @WithAnnotations(Entity.class)ProcessAnnotatedType<?> pat) { pat.veto(); } }
  26. 26. QUESTIONS

×