Package com.blazebit.cdi

Source Code of com.blazebit.cdi.CdiUtils

/*
* Copyright 2011 Blazebit
*/
package com.blazebit.cdi;

import java.lang.annotation.Annotation;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.enterprise.context.spi.CreationalContext;
import javax.enterprise.inject.Any;
import javax.enterprise.inject.Default;
import javax.enterprise.inject.spi.Bean;
import javax.enterprise.inject.spi.BeanManager;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import org.apache.deltaspike.core.api.literal.DefaultLiteral;

/**
* Utillity class for Cdi related actions.
*
* @author Christian Beikov
* @since 0.1.2
*/
public class CdiUtils {

  private static final Logger log = Logger
      .getLogger(CdiUtils.class.getName());

  /**
   * Retrieves the #{@link BeanManager} instance via JNDI.
   *
   * @return The found bean manager instance if found, otherwise null
   */
  public static BeanManager getBeanManager() {
    try {
      InitialContext initialContext = new InitialContext();
      return (BeanManager) initialContext.lookup("java:comp/BeanManager");
    } catch (NamingException e) {
      log.log(Level.SEVERE, "Couldn't get BeanManager through JNDI", e);
      return null;
    }
  }

  /**
   * Retrieves the instance for a named bean by the given name
   *
   * @param name
   *            The name of the bean to look for
   * @return The found bean object if found, otherwise null
   */
  @SuppressWarnings("unchecked")
  public static <T> T getBean(String name) {
    BeanManager bm = getBeanManager();
    Bean<?> bean = bm.getBeans(name).iterator().next();
    CreationalContext<?> ctx = bm.createCreationalContext(bean);
    return (T) bm.getReference(bean, bean.getBeanClass(), ctx);
  }

  /**
   * Retrieves the bean for the given class from the bean manager available
   * via JNDI qualified with #{@link Any}.
   *
   * @param <T>
   *            The type of the bean to look for
   * @param clazz
   *            The class of the bean to look for
   * @return The bean instance if found, otherwise null
   */
  public static <T> T getBean(Class<T> clazz) {
    return getBean(getBeanManager(), clazz);
  }

  /**
   * Retrieves the bean for the given class from the given bean manager
   * qualified with #{@link Default}.
   *
   * @param <T>
   *            The type of the bean to look for
   * @param bm
   *            The bean manager which should be used for the lookup
   * @param clazz
   *            The class of the bean to look for
   * @return The bean instance if found, otherwise null
   */
  public static <T> T getBean(BeanManager bm, Class<T> clazz) {
    return getBean(bm, clazz, (Annotation[]) null);
  }

  /**
   * Retrieves the bean for the given class from the bean manager available
   * via JNDI qualified with the given annotation(s).
   *
   * @param <T>
   *            The type of the bean to look for
   * @param clazz
   *            The class of the bean to look for
   * @param annotationClasses
   *            The qualifiers the bean for the given class must have
   * @return The bean instance if found, otherwise null
   */
  public static <T> T getBean(Class<T> clazz, Annotation... annotations) {
    return getBean(getBeanManager(), clazz, annotations);
  }

  /**
   * Retrieves the bean for the given class from the given bean manager
   * qualified with the given annotation(s).
   *
   * @param <T>
   *            The type of the bean to look for
   * @param bm
   *            The bean manager which should be used for the lookup
   * @param clazz
   *            The class of the bean to look for
   * @param annotationClasses
   *            The qualifiers the bean for the given class must have
   * @return The bean instance if found, otherwise null
   */
  @SuppressWarnings("unchecked")
  public static <T> T getBean(BeanManager bm, Class<T> clazz,
      Annotation... annotations) {

    Bean<?> bean;

    if (annotations != null) {
      bean = bm.getBeans(clazz, annotations).iterator().next();
    } else {
      bean = bm.getBeans(clazz, new DefaultLiteral()).iterator().next();
    }
    CreationalContext<?> ctx = bm.createCreationalContext(bean);
    return (T) bm.getReference(bean, clazz, ctx);
  }
}
TOP

Related Classes of com.blazebit.cdi.CdiUtils

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.