in src/main/java/org/apache/geronimo/jcache/simple/cdi/CDIJCacheHelper.java [274:300]
private <T> T instance(final Class<T> type) {
final Set<Bean<?>> beans = beanManager.getBeans(type);
if (beans.isEmpty()) {
if (CacheKeyGenerator.class == type) {
return (T) defaultCacheKeyGenerator;
}
if (CacheResolverFactory.class == type) {
return (T) defaultCacheResolverFactory();
}
return null;
}
final Bean<?> bean = beanManager.resolve(beans);
final CreationalContext<?> context = beanManager.createCreationalContext(bean);
final Class<? extends Annotation> scope = bean.getScope();
final boolean normalScope = beanManager.isNormalScope(scope);
try {
final Object reference = beanManager.getReference(bean, bean.getBeanClass(), context);
if (!normalScope) {
toRelease.add(context);
}
return (T) reference;
} finally {
if (normalScope) { // TODO: release at the right moment, @PreDestroy? question is: do we assume it is thread safe?
context.release();
}
}
}