Your SlideShare is downloading. ×
CDI and Weld
CDI and Weld
CDI and Weld
CDI and Weld
CDI and Weld
CDI and Weld
CDI and Weld
CDI and Weld
CDI and Weld
CDI and Weld
CDI and Weld
CDI and Weld
CDI and Weld
CDI and Weld
CDI and Weld
CDI and Weld
CDI and Weld
CDI and Weld
CDI and Weld
CDI and Weld
CDI and Weld
CDI and Weld
CDI and Weld
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

CDI and Weld

994

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
994
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
16
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. CDI .Dependency Injection in JEE6 jens.augustsson@redpill-linpro.comConsulting ● Development ● IT Operations ● Training ● Support ● Products
  • 2. Today. 1. What it is 2. Features 3. AdvicesConsulting ● Development ● IT Operations ● Training ● Support ● Products
  • 3. next... 1. What it isConsulting ● Development ● IT Operations ● Training ● Support ● Products
  • 4. Example.public class TextTranslator {   private final SentenceParser sentenceParser;   private final Translator sentenceTranslator;   @Inject   public TextTranslator(SentenceParser sentenceParser,  Translator sentenceTranslator) {      this.sentenceParser = sentenceParser;      this.sentenceTranslator = sentenceTranslator;   }   public String translate(String text) {      StringBuilder sb = new StringBuilder();      for (String sentence: sentenceParser.parse(text)) {          sb.append(sentenceTranslator.translate(sentence));      }      return sb.toString();   }} Consulting ● Development ● IT Operations ● Training ● Support ● Products
  • 5. Example - 2.@Statelesspublic class SentenceTranslator implements Translator {   public String translate(String sentence) { ... }}public class SentenceParser {   public List<String> parse(String text) { ... }}Injection of: Managed Bean, EJB session beansInjection to: MDB, interceptor, Servlet, JAX-WS SE, JSP (tag h / ev lis) Consulting ● Development ● IT Operations ● Training ● Support ● Products
  • 6. «but Ive heard.....» CDI WebBeans old name for... new name for... Hibernate JSR-299 standardized implements...Weld part of... JPA inspired... includes... next project... uses... Java EE 6 Seam 2Seam 3 JSR-330 created by... Spring Core name for... created by... Guice D4J Consulting ● Development ● IT Operations ● Training ● Support ● Products
  • 7. next... 2. CDI FeaturesConsulting ● Development ● IT Operations ● Training ● Support ● Products
  • 8. Injection points.Class constructor public class Checkout {          private final ShoppingCart cart;    @Inject    public Checkout(ShoppingCart cart) {       this.cart = cart;    } }Initializer method public class Checkout { private ShoppingCart cart; @Inject void setShoppingCart(ShoppingCart cart) { this.cart = cart; } }Direct field public class Checkout { private @Inject ShoppingCart cart; } Consulting ● Development ● IT Operations ● Training ● Support ● Products
  • 9. Injectable bean types. A user-defined class or interface In a JEE module with a /META-INF/beans.xml public class CreditCardPaymentService declare implements PaymentService { ... } use... ...@Inject or? @InjectCreditCardPaymentService ps; PaymentService ps;... ... ...«there can be only one»... Consulting ● Development ● IT Operations ● Training ● Support ● Products
  • 10. Non-default qualifiers. Your custom annotations... CDI anno @Qualifier @Retention(RUNTIME) JavaSE annos @Target({TYPE, METHOD, FIELD, PARAMETER}) public @interface Preferred {} ...links a declared injection point... ...Your anno @Inject @Preferred PaymentService ps; ... ...to a qualified bean @Preferred public class CreditCardPaymentService implements PaymentService { public void process(Payment payment) { ... } } Consulting ● Development ● IT Operations ● Training ● Support ● Products
  • 11. Producer methods.Run time qualifier public PaymentAction { @Inject @Preferred PaymentService userPaymentService; ... } public AnyClass { @Inject User user; @Produces @Preferred public PaymentService getUserPaymentService() { return user.getPaymentServices().get(0); } } Consulting ● Development ● IT Operations ● Training ● Support ● Products
  • 12. Scopes and Contexts.Scope determines...✔ When a new instance of any bean with that scope is created✔ When an existing instance of any bean with that scope is destroyed✔ Which injected references refer to any instance of a bean with that scope✔ CDI features an extensible context modelBuilt-in scopes✔ (@Dependent)✔ @RequestScoped✔ @SessionScoped JEE defined✔ @ApplicationScoped✔ @ConversationScoped Defined by you Consulting ● Development ● IT Operations ● Training ● Support ● Products
  • 13. Conversation Scope.@ConversationScoped @Statefulpublic class OrderBuilder {   private Order order;   private @Inject Conversation conversation;   private @PersistenceContext EntityManager em;   public Order createOrder() {      order = new Order();      conversation.begin();      return order;   }      public void addLineItem(Product product, int quantity) {      order.add(new LineItem(product, quantity));   }   public void saveOrder() {      em.persist(order);      conversation.end();   }   @Remove   public void destroy() {}} Consulting ● Development ● IT Operations ● Training ● Support ● Products
  • 14. Interceptors.business method interceptionlifecycle callback interceptiontimeout method interception (ejb3) Consulting ● Development ● IT Operations ● Training ● Support ● Products
  • 15. Interceptors - 2. Binding @InterceptorBinding @Target({METHOD, TYPE})CDI anno @Retention(RUNTIME) public @interface MySecurity {} public class ShoppingCart {Your anno @MySecurity public void checkout() { ... } } Consulting ● Development ● IT Operations ● Training ● Support ● Products
  • 16. Interceptors - 3. Implementation - business method:@MySecurity @Interceptorpublic class MySecurityInterceptor { @AroundInvoke public Object manageSecurity(InvocationContext ctx) throws Exception { ... }} Implementation - lifecycle: @PostConstruct, @PreDestroy... Implementation - timeout: @AroundTimeout Consulting ● Development ● IT Operations ● Training ● Support ● Products
  • 17. Decorators . Interceptors capture orthogonal application concerns § The reverse is true of decorators@Decoratorpublic abstract class LargeTransactionDecorator implements Account { @Inject @Delegate @Any Account account; @PersistenceContext EntityManager em; public void withdraw(BigDecimal amount) { account.withdraw(amount); if ( amount.compareTo(LARGE_AMOUNT)>0 ) { em.persist( new LoggedWithdrawl(amount) ); } } public void deposit(BigDecimal amount); account.deposit(amount); if ( amount.compareTo(LARGE_AMOUNT)>0 ) { em.persist( new LoggedDeposit(amount) ); } }} Consulting ● Development ● IT Operations ● Training ● Support ● Products
  • 18. Events.Become observable.... @Inject @Updated Event<Document> documentEvent; ... document.setLastModified(new Date()); documentEvent.fire(document); Optional qualifierBecome observer.... public void handleDocs(@Observes @Updated Document document) { ... }Conditional observations... public void handleDocs(@Observes(during = AFTER_SUCCESS) @Updated Document doc) { .. } Consulting ● Development ● IT Operations ● Training ● Support ● Products
  • 19. Predefine scope and interceptors Stereotypes. Declare Predefined by CDI: @ModelEJB @Stateless @Transactional(requiresNew=true) @Namedyour @Secure @RequestScopedCDI @Stereotype @Documented @Target(TYPE) @StereotypeJSE @Retention(RUNTIME) @Target(TYPE,METHOD,FIELD) public @interface BusinessLogic {} @Retention(RUNTIME) public @interface Model {} Use @BusinessLogic public class UserService { ... } Consulting ● Development ● IT Operations ● Training ● Support ● Products
  • 20. next... 3. AdvicesConsulting ● Development ● IT Operations ● Training ● Support ● Products
  • 21. Personal experiences.Good stuff Seam improvement – no outjection, method-time injection etc. Great for use with other frameworks – like jBPM XML-hell is /actually/ goneBe careful Start off with managed beans – switch when needed Annotations are adjectives (@Preferred), not nouns (@CreditCardPayment) Avoid injection from ”thinner” context – use @Dependent Weld documentation not finished Avoid ”upgrade” JBoss AS 5.x XML Configuration in Seam 3 Module Annotation Frustration... IT Operations ● Training ● Support ● Products Consulting ● Development ●
  • 22. Get started!. In JBoss 6.0.0.Final (Weld 1.1.0.Beta2) In GlassFish Server 3.1 (Weld 1.1.0.Final) Embed Weld in Tomcat, Jetty... Android almost :-) Generate project using Seam Forge or M2EclipseAnd read more! Dan Allens slideshare: Google ”Dan Allen slideshare cdi” Gavin King and Bob Lee flamewar: Google ”Gavin King Bob Lee jsr" Consulting ● Development ● IT Operations ● Training ● Support ● Products
  • 23. End. jens.augustsson@redpill-linpro.comConsulting ● Development ● IT Operations ● Training ● Support ● Products

×