/* * Hibernate Search, full-text search for your domain model * * License: GNU Lesser General Public License (LGPL), version 2.1 or later * See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>. */ package org.hibernate.search.test.integration.wildfly.cdi.integration; import java.util.Set; import javax.enterprise.context.spi.CreationalContext; import javax.enterprise.inject.spi.Bean; import javax.enterprise.inject.spi.BeanManager; import org.hibernate.search.hcore.spi.BeanResolver; /** * @author Yoann Rodiere */ public class CDIBeanResolver implements BeanResolver { private final BeanManager beanManager; public CDIBeanResolver(BeanManager beanManager) { super(); this.beanManager = beanManager; } @Override public <T> T resolve(Class<?> reference, Class<T> expectedClass) { Set<Bean<?>> beans = beanManager.getBeans( reference ); if ( beans.isEmpty() ) { throw new IllegalArgumentException( "No CDI bean for class " + reference.getName() ); } else if ( beans.size() > 1 ) { throw new IllegalArgumentException( "Multiple CDI beans for class " + reference.getName() + ": " + beans ); } else { Object beanInstance = getBeanInstance( beans.iterator().next() ); return expectedClass.cast( beanInstance ); } } private <T> T getBeanInstance(Bean<T> bean) { CreationalContext<T> context = beanManager.createCreationalContext( null ); return bean.create( context ); } }