luni, 9 februarie 2015

[OmniFaces utilities (2.0)] Get the current injection point within a dynamic producer Bean


[OmniFaces utilities] The getCurrentInjectionPoint() gets the current injection point when called from a context where injection is taking place (e.g. from a producer).This is mostly intended to be used from within a dynamic producer Bean. For a "regular" producer (using Produces) an InjectionPoint can either be injected into the bean that contains the producer method, or directly provided as argument of said method.

Method:
Usage:

JSF page
...
<h:body>   
 <h:form>
  <h:commandButton value="BeanA" action="#{beanA.randomNumberA()}"/>
 </h:form>
 <h:form>
  <h:commandButton value="BeanB" action="#{beanB.randomNumberB()}"/>
 </h:form>
</h:body>
...

DynamicProducer (see Dynamic CDI producers, 1 August 2014, by: Arjan Tijms)

import javax.enterprise.inject.spi.InjectionPoint;
import org.omnifaces.util.Beans;

public class DynamicIntegerProducer implements Bean<Integer> {
 ...
 @Override
 public Integer create(CreationalContext<Integer> creationalContext) {
  InjectionPoint injectionPoint = Beans.getCurrentInjectionPoint(creationalContext);
  System.out.println("Current Injection Point: " + injectionPoint);
  // do something with the injection point
  return new Random().nextInt(1000);
 }
 ...
}

BeanA
@Named
@RequestScoped
public class BeanA {

 @Inject
 private Integer rndA;

 public void randomNumberA() {
  System.out.println("Injected random number in BeanA: " + rndA);
 }
}

BeanB
@Named
@RequestScoped
public class BeanB {
   
 @Inject
 private Integer rndB;
    
 public void randomNumberB() {
  System.out.println("Injected random number in BeanB: " + rndB);
 }   
}

Now, press button BeanA and afterwards button, BeanB. You will see this output:

Current Injection Point: [BackedAnnotatedField] @Inject private some.beans.BeanA.rndA
Injected random number in BeanA: 538
Current Injection Point: [BackedAnnotatedField] @Inject private some.beans.BeanB.rndB
Injected random number in BeanB: 266

API GH-SOURCE GH-EXAMPLE[CDIDynamicProducer]

Niciun comentariu:

Trimiteți un comentariu