Class<? extends Annotation>[] filtered = ioc.filter(dep, job, JOB_INJECTIONS); injectBasicResource(job, GridTaskSessionResource.class, ses, dep, taskCls); else if (annCls == GridJobContextResource.class) ioc.inject(job, GridJobContextResource.class, new GridResourceJobContextInjector(jobCtx), dep, taskCls); else if (annCls == GridInstanceResource.class) ioc.inject(job, GridInstanceResource.class, gridInjector, dep, taskCls); else if (annCls == GridExecutorServiceResource.class) ioc.inject(job, GridExecutorServiceResource.class, execInjector, dep, taskCls); else if (annCls == GridLocalNodeIdResource.class) ioc.inject(job, GridLocalNodeIdResource.class, nodeIdInjector, dep, taskCls); else if (annCls == GridLocalHostResource.class) ioc.inject(job, GridLocalHostResource.class, locHostInjector, dep, taskCls); else if (annCls == GridMBeanServerResource.class) ioc.inject(job, GridMBeanServerResource.class, mbeanSrvInjector, dep, taskCls); else if (annCls == GridHomeResource.class) ioc.inject(job, GridHomeResource.class, ggHomeInjector, dep, taskCls); else if (annCls == GridNameResource.class) ioc.inject(job, GridNameResource.class, ggNameInjector, dep, taskCls); else if (annCls == GridMarshallerResource.class) ioc.inject(job, GridMarshallerResource.class, marshInjector, dep, taskCls); else if (annCls == GridSpringApplicationContextResource.class) ioc.inject(job, GridSpringApplicationContextResource.class, springCtxInjector, dep, taskCls); else if (annCls == GridSpringResource.class) ioc.inject(job, GridSpringResource.class, springBeanInjector, dep, taskCls); else if (annCls == GridLoggerResource.class) ioc.inject(job, GridLoggerResource.class, logInjector, dep, taskCls); else if (annCls == GridServiceResource.class)
/** * Injects given resource via field or setter with specified annotations on provided target object. * * @param target Target object. * @param annCls Setter annotation. * @param injector Resource to inject. * @param dep Deployment. * @param depCls Deployment class. * @throws GridException Thrown in case of any errors during injection. */ void inject(Object target, Class<? extends Annotation> annCls, GridResourceInjector injector, @Nullable GridDeployment dep, @Nullable Class<?> depCls) throws GridException { assert target != null; assert annCls != null; assert injector != null; if (isAnnotationPresent(target, annCls, dep)) // Use identity hash set to compare via referential equality. injectInternal(target, annCls, injector, dep, depCls, new GridIdentityHashSet<>(3)); }
/** * Cleans up resources from given lifecycle beans. Essentially, this * method injects {@code null}s into lifecycle bean. * * @param lifecycleBean Lifecycle bean. * @throws GridException Thrown in case of any errors. */ public void cleanup(GridLifecycleBean lifecycleBean) throws GridException { if (log.isDebugEnabled()) log.debug("Cleaning up resources: " + lifecycleBean); // Unwrap Proxy object. Object obj = unwrapTarget(lifecycleBean); // Caching key is null for the life-cycle beans. ioc.inject(obj, GridLoggerResource.class, nullInjector, null, null); ioc.inject(obj, GridServiceResource.class, nullInjector, null, null); ioc.inject(obj, GridExecutorServiceResource.class, nullInjector, null, null); ioc.inject(obj, GridLocalNodeIdResource.class, nullInjector, null, null); ioc.inject(obj, GridLocalHostResource.class, nullInjector, null, null); ioc.inject(obj, GridMBeanServerResource.class, nullInjector, null, null); ioc.inject(obj, GridHomeResource.class, nullInjector, null, null); ioc.inject(obj, GridNameResource.class, nullInjector, null, null); ioc.inject(obj, GridMarshallerResource.class, nullInjector, null, null); ioc.inject(obj, GridSpringApplicationContextResource.class, nullInjector, null, null); ioc.inject(obj, GridSpringResource.class, nullInjector, null, null); ioc.inject(obj, GridInstanceResource.class, nullInjector, null, null); }
for (GridResourceField field : getFieldsWithAnnotation(dep, targetCls, annCls)) { Field f = field.getField(); injectInternal(obj, annCls, injector, dep, depCls, checkedObjs); for (GridResourceMethod mtd : getMethodsWithAnnotation(dep, targetCls, annCls)) { injector.inject(mtd, target, depCls, dep);
/** * Gets set of methods with given annotation. * * @param dep Deployment. * @param cls Class in which search for methods. * @param annCls Annotation. * @return Set of methods with given annotations. */ List<GridResourceMethod> getMethodsWithAnnotation(@Nullable GridDeployment dep, Class<?> cls, Class<? extends Annotation> annCls) { List<GridResourceMethod> mtds = getMethodsFromCache(cls, annCls); if (mtds == null) { mtds = new ArrayList<>(); for (Class cls0 = cls; !cls0.equals(Object.class); cls0 = cls0.getSuperclass()) { for (Method mtd : cls0.getDeclaredMethods()) { Annotation ann = mtd.getAnnotation(annCls); if (ann != null) mtds.add(new GridResourceMethod(mtd, ann)); } } cacheMethods(dep, cls, annCls, mtds); } return mtds; }
/** * Gets all entries from the specified class or its super-classes that have * been annotated with annotation provided. * * @param cls Class in which search for methods. * @param dep Deployment. * @param annCls Annotation. * @return Set of entries with given annotations. */ private List<GridResourceField> getFieldsWithAnnotation(@Nullable GridDeployment dep, Class<?> cls, Class<? extends Annotation> annCls) { List<GridResourceField> fields = getFieldsFromCache(cls, annCls); if (fields == null) { fields = new ArrayList<>(); for (Class cls0 = cls; !cls0.equals(Object.class); cls0 = cls0.getSuperclass()) { for (Field field : cls0.getDeclaredFields()) { Annotation ann = field.getAnnotation(annCls); if (ann != null || GridResourceUtils.mayRequireResources(field)) // Account for anonymous inner classes. fields.add(new GridResourceField(field, ann)); } } cacheFields(dep, cls, annCls, fields); } return fields; }
/** * Checks if annotation is presented on a field or method of the specified object. * * @param target Target object. * @param annCls Annotation class to find on fields or methods of target object. * @param dep Deployment. * @return {@code true} if annotation is presented, {@code false} if it's not. */ boolean isAnnotationPresent(Object target, Class<? extends Annotation> annCls, @Nullable GridDeployment dep) { assert target != null; assert annCls != null; Class<?> targetCls = target.getClass(); Set<Class<?>> skipClss = skipCache.get(annCls); if (skipClss != null && skipClss.contains(targetCls)) return false; List<GridResourceField> fields = getFieldsWithAnnotation(dep, targetCls, annCls); if (!fields.isEmpty()) return true; List<GridResourceMethod> mtds = getMethodsWithAnnotation(dep, targetCls, annCls); if (mtds.isEmpty()) { if (skipClss == null) skipClss = F.addIfAbsent(skipCache, annCls, F.<Class<?>>newCSet()); skipClss.add(targetCls); return false; } return true; }
/** * Checks if annotation presents in specified object. * * @param dep Class deployment. * @param target Object to check. * @param annCls Annotation to find. * @return {@code true} if annotation is presented, {@code false} otherwise. */ public boolean isAnnotationPresent(GridDeployment dep, Object target, Class<? extends Annotation> annCls) { return ioc.isAnnotationPresent(target, annCls, dep); }
/** * Gets list of methods in specified class annotated with specified annotation. * * @param dep Class deployment. * @param rsrcCls Class to find methods in. * @param annCls Annotation to find annotated methods with. * @return List of annotated methods. */ @Nullable public Collection<Method> getMethodsWithAnnotation(GridDeployment dep, Class<?> rsrcCls, Class<? extends Annotation> annCls) { assert dep != null; assert rsrcCls != null; assert annCls != null; List<GridResourceMethod> mtds = ioc.getMethodsWithAnnotation(dep, rsrcCls, annCls); assert mtds != null; if (!mtds.isEmpty()) { return F.viewReadOnly(mtds, new C1<GridResourceMethod, Method>() { @Override public Method apply(GridResourceMethod rsrcMtd) { return rsrcMtd.getMethod(); } }); } return null; }
/** * Injects held resources into given lifecycle bean. * * @param lifecycleBean Lifecycle bean. * @throws GridException Thrown in case of any errors. */ public void inject(GridLifecycleBean lifecycleBean) throws GridException { if (log.isDebugEnabled()) log.debug("Injecting resources: " + lifecycleBean); // Unwrap Proxy object. Object obj = unwrapTarget(lifecycleBean); // No deployment for lifecycle beans. ioc.inject(obj, GridExecutorServiceResource.class, execInjector, null, null); ioc.inject(obj, GridLocalNodeIdResource.class, nodeIdInjector, null, null); ioc.inject(obj, GridLocalHostResource.class, locHostInjector, null, null); ioc.inject(obj, GridMBeanServerResource.class, mbeanSrvInjector, null, null); ioc.inject(obj, GridHomeResource.class, ggHomeInjector, null, null); ioc.inject(obj, GridNameResource.class, ggNameInjector, null, null); ioc.inject(obj, GridMarshallerResource.class, marshInjector, null, null); ioc.inject(obj, GridSpringApplicationContextResource.class, springCtxInjector, null, null); ioc.inject(obj, GridSpringResource.class, springBeanInjector, null, null); ioc.inject(obj, GridInstanceResource.class, gridInjector, null, null); ioc.inject(obj, GridLoggerResource.class, logInjector, null, null); ioc.inject(obj, GridServiceResource.class, srvcInjector, null, null); }
/** * @param dep Deployment. * @param target Target. * @param annClss Annotations. * @return Filtered set of annotations that present in target. */ @SuppressWarnings({"SuspiciousToArrayCall", "unchecked"}) Class<? extends Annotation>[] filter( @Nullable GridDeployment dep, Object target, Collection<Class<? extends Annotation>> annClss) { assert target != null; assert annClss != null && !annClss.isEmpty(); Class<?> cls = target.getClass(); Class<? extends Annotation>[] res = annCache.get(cls); if (res == null) { Collection<Class<? extends Annotation>> res0 = new HashSet<>(annClss.size(), 1.0f); for (Class<? extends Annotation> annCls : annClss) { if (isAnnotationPresent(target, annCls, dep)) res0.add(annCls); } res = new Class[res0.size()]; res0.toArray(res); annCache.putIfAbsent(cls, res); } return res; }
/** * Cleans up resources from given service. Essentially, this * method injects {@code null}s into service bean. * * @param svc Service. * @throws GridException Thrown in case of any errors. */ public void cleanup(GridService svc) throws GridException { if (log.isDebugEnabled()) log.debug("Cleaning up resources: " + svc); // Unwrap Proxy object. Object obj = unwrapTarget(svc); // Caching key is null for the life-cycle beans. ioc.inject(obj, GridLoggerResource.class, nullInjector, null, null); ioc.inject(obj, GridServiceResource.class, nullInjector, null, null); ioc.inject(obj, GridExecutorServiceResource.class, nullInjector, null, null); ioc.inject(obj, GridLocalNodeIdResource.class, nullInjector, null, null); ioc.inject(obj, GridLocalHostResource.class, nullInjector, null, null); ioc.inject(obj, GridMBeanServerResource.class, nullInjector, null, null); ioc.inject(obj, GridHomeResource.class, nullInjector, null, null); ioc.inject(obj, GridNameResource.class, nullInjector, null, null); ioc.inject(obj, GridMarshallerResource.class, nullInjector, null, null); ioc.inject(obj, GridSpringApplicationContextResource.class, nullInjector, null, null); ioc.inject(obj, GridSpringResource.class, nullInjector, null, null); ioc.inject(obj, GridInstanceResource.class, nullInjector, null, null); }
Class<? extends Annotation>[] filtered = ioc.filter(dep, obj, TASK_INJECTIONS); injectBasicResource(obj, GridTaskContinuousMapperResource.class, mapper, dep, taskCls); else if (annCls == GridInstanceResource.class) ioc.inject(obj, GridInstanceResource.class, gridInjector, dep, taskCls); else if (annCls == GridExecutorServiceResource.class) ioc.inject(obj, GridExecutorServiceResource.class, execInjector, dep, taskCls); else if (annCls == GridLocalNodeIdResource.class) ioc.inject(obj, GridLocalNodeIdResource.class, nodeIdInjector, dep, taskCls); else if (annCls == GridLocalHostResource.class) ioc.inject(obj, GridLocalHostResource.class, locHostInjector, dep, taskCls); else if (annCls == GridMBeanServerResource.class) ioc.inject(obj, GridMBeanServerResource.class, mbeanSrvInjector, dep, taskCls); else if (annCls == GridHomeResource.class) ioc.inject(obj, GridHomeResource.class, ggHomeInjector, dep, taskCls); else if (annCls == GridNameResource.class) ioc.inject(obj, GridNameResource.class, ggNameInjector, dep, taskCls); else if (annCls == GridMarshallerResource.class) ioc.inject(obj, GridMarshallerResource.class, marshInjector, dep, taskCls); else if (annCls == GridSpringApplicationContextResource.class) ioc.inject(obj, GridSpringApplicationContextResource.class, springCtxInjector, dep, taskCls); else if (annCls == GridSpringResource.class) ioc.inject(obj, GridSpringResource.class, springBeanInjector, dep, taskCls); else if (annCls == GridLoggerResource.class) ioc.inject(obj, GridLoggerResource.class, logInjector, dep, taskCls); else if (annCls == GridServiceResource.class) ioc.inject(obj, GridServiceResource.class, srvcInjector, dep, taskCls); else { assert annCls == GridUserResource.class;
/** * Injects resources into generic class. * * @param dep Deployment. * @param depCls Deployed class. * @param target Target instance to inject into. * @throws GridException Thrown in case of any errors. */ public void inject(GridDeployment dep, Class<?> depCls, Object target) throws GridException { if (log.isDebugEnabled()) log.debug("Injecting resources: " + target); // Unwrap Proxy object. target = unwrapTarget(target); ioc.inject(target, GridInstanceResource.class, gridInjector, dep, depCls); ioc.inject(target, GridExecutorServiceResource.class, execInjector, dep, depCls); ioc.inject(target, GridLocalNodeIdResource.class, nodeIdInjector, dep, depCls); ioc.inject(target, GridLocalHostResource.class, locHostInjector, dep, depCls); ioc.inject(target, GridMBeanServerResource.class, mbeanSrvInjector, dep, depCls); ioc.inject(target, GridHomeResource.class, ggHomeInjector, dep, depCls); ioc.inject(target, GridNameResource.class, ggNameInjector, dep, depCls); ioc.inject(target, GridMarshallerResource.class, marshInjector, dep, depCls); ioc.inject(target, GridSpringApplicationContextResource.class, springCtxInjector, dep, depCls); ioc.inject(target, GridSpringResource.class, springBeanInjector, dep, depCls); ioc.inject(target, GridLoggerResource.class, logInjector, dep, depCls); ioc.inject(target, GridServiceResource.class, srvcInjector, dep, depCls); // Inject users resource. ioc.inject(target, GridUserResource.class, customInjector, dep, depCls); }
/** * @param obj Object to inject. * @throws GridException If failed to inject. */ public void injectGeneric(Object obj) throws GridException { assert obj != null; if (log.isDebugEnabled()) log.debug("Injecting resources: " + obj); // Unwrap Proxy object. obj = unwrapTarget(obj); // No deployment for lifecycle beans. ioc.inject(obj, GridExecutorServiceResource.class, execInjector, null, null); ioc.inject(obj, GridLocalNodeIdResource.class, nodeIdInjector, null, null); ioc.inject(obj, GridLocalHostResource.class, locHostInjector, null, null); ioc.inject(obj, GridMBeanServerResource.class, mbeanSrvInjector, null, null); ioc.inject(obj, GridHomeResource.class, ggHomeInjector, null, null); ioc.inject(obj, GridNameResource.class, ggNameInjector, null, null); ioc.inject(obj, GridMarshallerResource.class, marshInjector, null, null); ioc.inject(obj, GridSpringApplicationContextResource.class, springCtxInjector, null, null); ioc.inject(obj, GridSpringResource.class, springBeanInjector, null, null); ioc.inject(obj, GridInstanceResource.class, gridInjector, null, null); ioc.inject(obj, GridLoggerResource.class, logInjector, null, null); ioc.inject(obj, GridServiceResource.class, srvcInjector, null, null); }
/** * @param obj Object. * @throws GridException If failed. */ public void cleanupGeneric(Object obj) throws GridException { if (obj != null) { if (log.isDebugEnabled()) log.debug("Cleaning up resources: " + obj); // Unwrap Proxy object. obj = unwrapTarget(obj); // Caching key is null for the life-cycle beans. ioc.inject(obj, GridLoggerResource.class, nullInjector, null, null); ioc.inject(obj, GridServiceResource.class, nullInjector, null, null); ioc.inject(obj, GridExecutorServiceResource.class, nullInjector, null, null); ioc.inject(obj, GridLocalNodeIdResource.class, nullInjector, null, null); ioc.inject(obj, GridLocalHostResource.class, locHostInjector, null, null); ioc.inject(obj, GridMBeanServerResource.class, nullInjector, null, null); ioc.inject(obj, GridHomeResource.class, nullInjector, null, null); ioc.inject(obj, GridNameResource.class, nullInjector, null, null); ioc.inject(obj, GridMarshallerResource.class, nullInjector, null, null); ioc.inject(obj, GridSpringApplicationContextResource.class, nullInjector, null, null); ioc.inject(obj, GridSpringResource.class, nullInjector, null, null); ioc.inject(obj, GridInstanceResource.class, nullInjector, null, null); } }
/** * Injects held resources into given SPI implementation. * * @param spi SPI implementation. * @throws GridException Throw in case of any errors. */ public void inject(GridSpi spi) throws GridException { if (log.isDebugEnabled()) log.debug("Injecting resources: " + spi); // Unwrap Proxy object. Object obj = unwrapTarget(spi); // Caching key is null for the SPIs. ioc.inject(obj, GridExecutorServiceResource.class, execInjector, null, null); ioc.inject(obj, GridLocalNodeIdResource.class, nodeIdInjector, null, null); ioc.inject(obj, GridLocalHostResource.class, locHostInjector, null, null); ioc.inject(obj, GridMBeanServerResource.class, mbeanSrvInjector, null, null); ioc.inject(obj, GridHomeResource.class, ggHomeInjector, null, null); ioc.inject(obj, GridNameResource.class, ggNameInjector, null, null); ioc.inject(obj, GridMarshallerResource.class, marshInjector, null, null); ioc.inject(obj, GridSpringApplicationContextResource.class, springCtxInjector, null, null); ioc.inject(obj, GridSpringResource.class, springBeanInjector, null, null); ioc.inject(obj, GridLoggerResource.class, logInjector, null, null); ioc.inject(obj, GridServiceResource.class, srvcInjector, null, null); ioc.inject(obj, GridAddressResolverResource.class, addrsRslvrInjector, null, null); }
/** * Cleans up resources from given SPI implementation. Essentially, this * method injects {@code null}s into SPI implementation. * * @param spi SPI implementation. * @throws GridException Thrown in case of any errors. */ public void cleanup(GridSpi spi) throws GridException { if (log.isDebugEnabled()) log.debug("Cleaning up resources: " + spi); // Unwrap Proxy object. Object obj = unwrapTarget(spi); ioc.inject(obj, GridLoggerResource.class, nullInjector, null, null); ioc.inject(obj, GridServiceResource.class, nullInjector, null, null); ioc.inject(obj, GridExecutorServiceResource.class, nullInjector, null, null); ioc.inject(obj, GridLocalNodeIdResource.class, nullInjector, null, null); ioc.inject(obj, GridLocalHostResource.class, nullInjector, null, null); ioc.inject(obj, GridMBeanServerResource.class, nullInjector, null, null); ioc.inject(obj, GridHomeResource.class, nullInjector, null, null); ioc.inject(obj, GridNameResource.class, nullInjector, null, null); ioc.inject(obj, GridMarshallerResource.class, nullInjector, null, null); ioc.inject(obj, GridSpringApplicationContextResource.class, nullInjector, null, null); ioc.inject(obj, GridSpringResource.class, nullInjector, null, null); ioc.inject(obj, GridAddressResolverResource.class, nullInjector, null, null); }
/** * Injects resources into service. * * @param svc Service to inject. * @throws GridException If failed. */ public void inject(GridService svc) throws GridException { if (log.isDebugEnabled()) log.debug("Injecting resources: " + svc); // Unwrap Proxy object. Object obj = unwrapTarget(svc); // No deployment for lifecycle beans. ioc.inject(obj, GridExecutorServiceResource.class, execInjector, null, null); ioc.inject(obj, GridLocalNodeIdResource.class, nodeIdInjector, null, null); ioc.inject(obj, GridLocalHostResource.class, locHostInjector, null, null); ioc.inject(obj, GridMBeanServerResource.class, mbeanSrvInjector, null, null); ioc.inject(obj, GridHomeResource.class, ggHomeInjector, null, null); ioc.inject(obj, GridNameResource.class, ggNameInjector, null, null); ioc.inject(obj, GridMarshallerResource.class, marshInjector, null, null); ioc.inject(obj, GridSpringApplicationContextResource.class, springCtxInjector, null, null); ioc.inject(obj, GridSpringResource.class, springBeanInjector, null, null); ioc.inject(obj, GridInstanceResource.class, gridInjector, null, null); ioc.inject(obj, GridLoggerResource.class, logInjector, null, null); ioc.inject(obj, GridServiceResource.class, srvcInjector, null, null); }
/** * This method is declared public as it is used from tests as well. * Note, that this method can be used only with unwrapped objects * (see {@link #unwrapTarget(Object)}). * * @param target Target object. * @param annCls Setter annotation. * @param rsrc Resource to inject. * @throws GridException If injection failed. */ public void injectBasicResource(Object target, Class<? extends Annotation> annCls, Object rsrc) throws GridException { // Safety. assert !(rsrc instanceof GridResourceInjector) : "Invalid injection."; // Basic injection don't cache anything. Use null as a key. ioc.inject(target, annCls, new GridResourceBasicInjector<>(rsrc), null, null); }