1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.commons.jcs3.jcache;
20
21 import org.apache.webbeans.config.WebBeansContext;
22 import org.apache.webbeans.container.BeanManagerImpl;
23 import org.apache.webbeans.spi.ContainerLifecycle;
24
25 import java.util.Set;
26 import javax.cache.annotation.BeanProvider;
27 import javax.enterprise.inject.spi.Bean;
28
29 public class OWBBeanProvider implements BeanProvider
30 {
31 private final BeanManagerImpl bm;
32
33 public OWBBeanProvider()
34 {
35 final WebBeansContext webBeansContext = WebBeansContext.currentInstance();
36 final ContainerLifecycle lifecycle = webBeansContext.getService(ContainerLifecycle.class);
37 lifecycle.startApplication(null);
38 Runtime.getRuntime().addShutdownHook(new Thread()
39 {
40 @Override
41 public void run()
42 {
43 lifecycle.stopApplication(null);
44 }
45 });
46 bm = webBeansContext.getBeanManagerImpl();
47 }
48
49 @Override
50 public <T> T getBeanByType(final Class<T> tClass)
51 {
52 if (tClass == null)
53 {
54 throw new IllegalArgumentException("no bean class specified");
55 }
56
57 final Set<Bean<?>> beans = bm.getBeans(tClass);
58 if (beans.isEmpty())
59 {
60 throw new IllegalStateException("no bean of type " + tClass.getName());
61 }
62 final Bean<?> bean = bm.resolve(beans);
63 return (T) bm.getReference(bean, bean.getBeanClass(), bm.createCreationalContext(bean));
64 }
65 }