/** * Returns a proxy (newly created or cached) which is able to call the given {@link Supplier}. This method does not cache * a result. * * @param injectee information about the injection point. * @param supplier supplier called using the proxy. * @return created proxy which resolve the value in the proper scope. */ public Object noCachedProxy(Injectee injectee, Supplier<Object> supplier) { return createProxy(getClass(injectee.getRequiredType()), supplier); }
@Override public Object resolve(Injectee injectee) { if (!injectee.getRequiredType().equals(EntityManagerFactory.class)) { return null; } final PersistenceUnit annotation = injectee.getParent().getAnnotation(PersistenceUnit.class); final String unitName = annotation.unitName(); if (!persistenceUnits.containsKey(unitName)) { throw new ContainerException(LocalizationMessages.PERSISTENCE_UNIT_NOT_CONFIGURED(unitName)); } return Proxy.newProxyInstance( this.getClass().getClassLoader(), new Class[] {EntityManagerFactory.class}, new ThreadLocalNamedInvoker<EntityManagerFactory>(persistenceUnits.get(unitName))); }
@Override public Object resolve(Injectee injectee) { if (!injectee.getRequiredType().equals(EntityManagerFactory.class)) { return null; } final PersistenceUnit annotation = injectee.getParent().getAnnotation(PersistenceUnit.class); final String unitName = annotation.unitName(); if (!persistenceUnits.containsKey(unitName)) { throw new ContainerException(LocalizationMessages.PERSISTENCE_UNIT_NOT_CONFIGURED(unitName)); } return Proxy.newProxyInstance( this.getClass().getClassLoader(), new Class[] {EntityManagerFactory.class}, new ThreadLocalNamedInvoker<EntityManagerFactory>(persistenceUnits.get(unitName))); }
@Override public Object resolve(Injectee injectee) { Injectee newInjectee = injectee; if (injectee.isFactory()) { newInjectee = getFactoryInjectee(injectee, ReflectionHelper.getTypeArgument(injectee.getRequiredType(), 0)); } Bean<?> bean = descriptorCache.apply(newInjectee.getRequiredType()); if (bean != null) { CreationalContext ctx = beanManager.get().createCreationalContext(bean); Object result = bean.create(ctx); if (injectee.isFactory()) { return (Supplier<Object>) () -> result; } else { return result; } } return null; }
private Object createProxy(Injectee injectee, InjectionResolver resolver) { return createProxy(getClass(injectee.getRequiredType()), () -> resolver.resolve(injectee)); }
/** * Returns {@code true} if one of the proxiable annotations is present on the clazz into which values are injected. * <p> * In these cases the value is not proxiable: * <ul> * <li>Class without the annotation</li> * <li>Class annotated by {@link javax.enterprise.context.RequestScoped}</li> * <li>Class annotated by {@link org.glassfish.jersey.process.internal.RequestScoped}</li> * <ul/> * * @param injectee information about the injection point. * @return {@code true} if contains one proxiable annotation at least. */ public boolean isPrixiable(Injectee injectee) { return !ignoredClass(injectee.getRequiredType()) && isPrixiable(injectee.getParentClassScope()); }
Type genericType = injectee.getRequiredType();
Type genericType = injectee.getRequiredType();
private static InjecteeImpl toInjecteeImpl(org.glassfish.jersey.internal.inject.Injectee injectee) { InjecteeImpl hk2injectee = new InjecteeImpl() { @Override public Class<?> getInjecteeClass() { return injectee.getInjecteeClass(); } }; hk2injectee.setRequiredType(injectee.getRequiredType()); hk2injectee.setRequiredQualifiers(injectee.getRequiredQualifiers()); hk2injectee.setParent(injectee.getParent()); if (injectee.getInjecteeDescriptor() != null) { hk2injectee.setInjecteeDescriptor((ActiveDescriptor<?>) injectee.getInjecteeDescriptor().get()); } return hk2injectee; }
private static InjecteeImpl toInjecteeImpl(org.glassfish.jersey.internal.inject.Injectee injectee) { InjecteeImpl hk2injectee = new InjecteeImpl() { @Override public Class<?> getInjecteeClass() { return injectee.getInjecteeClass(); } }; hk2injectee.setRequiredType(injectee.getRequiredType()); hk2injectee.setRequiredQualifiers(injectee.getRequiredQualifiers()); hk2injectee.setParent(injectee.getParent()); if (injectee.getInjecteeDescriptor() != null) { hk2injectee.setInjecteeDescriptor((ActiveDescriptor<?>) injectee.getInjecteeDescriptor().get()); } return hk2injectee; }
Type genericType = injectee.getRequiredType();
@Override public Object resolve(Injectee injectee) { if (!injectee.getRequiredType().equals(EntityManagerFactory.class)) { return null; } final PersistenceUnit annotation = injectee.getParent().getAnnotation(PersistenceUnit.class); final String unitName = annotation.unitName(); if (!persistenceUnits.containsKey(unitName)) { throw new ContainerException(LocalizationMessages.PERSISTENCE_UNIT_NOT_CONFIGURED(unitName)); } return Proxy.newProxyInstance( this.getClass().getClassLoader(), new Class[] {EntityManagerFactory.class}, new ThreadLocalNamedInvoker<EntityManagerFactory>(persistenceUnits.get(unitName))); }
Type genericType = injectee.getRequiredType();
private static InjecteeImpl toInjecteeImpl(org.glassfish.jersey.internal.inject.Injectee injectee) { InjecteeImpl hk2injectee = new InjecteeImpl() { @Override public Class<?> getInjecteeClass() { return injectee.getInjecteeClass(); } }; hk2injectee.setRequiredType(injectee.getRequiredType()); hk2injectee.setRequiredQualifiers(injectee.getRequiredQualifiers()); hk2injectee.setParent(injectee.getParent()); if (injectee.getInjecteeDescriptor() != null) { hk2injectee.setInjecteeDescriptor((ActiveDescriptor<?>) injectee.getInjecteeDescriptor().get()); } return hk2injectee; }
private static InjecteeImpl toInjecteeImpl(org.glassfish.jersey.internal.inject.Injectee injectee) { InjecteeImpl hk2injectee = new InjecteeImpl() { @Override public Class<?> getInjecteeClass() { return injectee.getInjecteeClass(); } }; hk2injectee.setRequiredType(injectee.getRequiredType()); hk2injectee.setRequiredQualifiers(injectee.getRequiredQualifiers()); hk2injectee.setParent(injectee.getParent()); if (injectee.getInjecteeDescriptor() != null) { hk2injectee.setInjecteeDescriptor((ActiveDescriptor<?>) injectee.getInjecteeDescriptor().get()); } return hk2injectee; }