1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.myfaces.cdi.util;
20
21 import java.lang.annotation.Annotation;
22 import java.lang.reflect.Type;
23 import java.util.Collections;
24 import java.util.Set;
25 import javax.enterprise.context.ContextNotActiveException;
26 import javax.enterprise.context.SessionScoped;
27 import javax.enterprise.context.spi.Context;
28
29 import javax.enterprise.context.spi.CreationalContext;
30 import javax.enterprise.inject.spi.Bean;
31 import javax.enterprise.inject.spi.BeanManager;
32 import javax.faces.context.ExternalContext;
33 import javax.faces.view.ViewScoped;
34 import org.apache.myfaces.webapp.AbstractFacesInitializer;
35
36
37
38
39 public class CDIUtils
40 {
41 public static BeanManager getBeanManager(ExternalContext externalContext)
42 {
43 return (BeanManager) externalContext.getApplicationMap().get(
44 AbstractFacesInitializer.CDI_BEAN_MANAGER_INSTANCE);
45 }
46
47
48
49 public static <T> T lookup(BeanManager bm, Class<T> clazz)
50 {
51 Set<Bean<?>> beans = bm.getBeans(clazz);
52 return resolveInstance(bm, beans, clazz);
53 }
54
55 public static Object lookup(BeanManager bm, String name)
56 {
57 Set<Bean<?>> beans = bm.getBeans(name);
58 return resolveInstance(bm, beans, Object.class);
59 }
60
61 private static <T> T resolveInstance(BeanManager bm, Set<Bean<?>> beans, Type type)
62 {
63 Bean<?> bean = bm.resolve(beans);
64 CreationalContext<?> cc = bm.createCreationalContext(bean);
65 T dao = (T) bm.getReference(bean, type, cc);
66 return dao;
67
68 }
69
70 @SuppressWarnings("unchecked")
71 public static <T> Bean<T> resolve(BeanManager beanManager, Class<T> beanClass, Annotation... qualifiers)
72 {
73 Set<Bean<?>> beans = beanManager.getBeans(beanClass, qualifiers);
74
75 for (Bean<?> bean : beans)
76 {
77 if (bean.getBeanClass() == beanClass)
78 {
79 return (Bean<T>) beanManager.resolve(Collections.<Bean<?>>singleton(bean));
80 }
81 }
82
83 return (Bean<T>) beanManager.resolve(beans);
84 }
85
86 @SuppressWarnings("unchecked")
87 public static <T> Bean<T> resolve(BeanManager beanManager, Type type, Annotation... qualifiers)
88 {
89 Set<Bean<?>> beans = beanManager.getBeans(type, qualifiers);
90
91 return (Bean<T>) beanManager.resolve(beans);
92 }
93
94 public static <T> T getInstance(BeanManager beanManager, Class<T> beanClass,
95 boolean create, Annotation... qualifiers)
96 {
97 try
98 {
99 Bean<T> bean = resolve(beanManager, beanClass, qualifiers);
100 return (bean != null) ? getInstance(beanManager, bean, create) : null;
101 }
102 catch (ContextNotActiveException e)
103 {
104 return null;
105 }
106 }
107
108 public static <T> T getInstance(BeanManager beanManager, Type type,
109 boolean create, Annotation... qualifiers)
110 {
111 try
112 {
113 Bean<T> bean = resolve(beanManager, type, qualifiers);
114 return (bean != null) ? getInstance(beanManager, bean, create) : null;
115 }
116 catch (ContextNotActiveException e)
117 {
118 return null;
119 }
120 }
121
122 public static <T> T getInstance(BeanManager beanManager, Bean<T> bean, boolean create)
123 {
124 Context context = beanManager.getContext(bean.getScope());
125
126 if (create)
127 {
128 return context.get(bean, beanManager.createCreationalContext(bean));
129 }
130 else
131 {
132 return context.get(bean);
133 }
134 }
135
136 public static boolean isSessionScopeActive(BeanManager beanManager)
137 {
138 try
139 {
140 Context ctx = beanManager.getContext(SessionScoped.class);
141 return ctx != null;
142 }
143 catch (ContextNotActiveException ex)
144 {
145
146 }
147 catch (Exception ex)
148 {
149
150
151
152 }
153 return false;
154 }
155
156 public static boolean isViewScopeActive(BeanManager beanManager)
157 {
158 try
159 {
160 Context ctx = beanManager.getContext(ViewScoped.class);
161 return ctx != null;
162 }
163 catch (ContextNotActiveException ex)
164 {
165
166 }
167 catch (Exception ex)
168 {
169
170
171
172 }
173 return false;
174 }
175
176 }