private T instance()

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();
            }
        }
    }