@Override public String receiveBeanInstance(String id) { Bean<?> bean = probe.getBean(id); if (bean != null && Components.isInspectableScope(bean.getScope())) { Object instance = Components.findContextualInstance(bean, beanManager); if (instance != null) { return JsonObjects.createContextualInstanceJson(bean, instance, probe); } } return null; }
/** * * @param bean * @param beans * @param probe * @return <code>true</code> if there's at least one bean which depends on the given bean, <code>false</code> otherwise */ static boolean hasDependents(Bean<?> bean, Collection<Bean<?>> beans, Probe probe) { return !getDependents(bean, beans, probe, true).isEmpty(); }
/** * * @return the bean if a satisfied and unambiguous dependency is found for the Instance required type and quialifiers */ static Bean<?> getInstanceResolvedBean(BeanManager beanManager, InjectionPoint injectionPoint) { try { Set<Bean<?>> beans = beanManager.getBeans(getFacadeType(injectionPoint), injectionPoint.getQualifiers().toArray(new Annotation[injectionPoint.getQualifiers().size()])); if (!beans.isEmpty()) { return beanManager.resolve(beans); } } catch (Exception ignored) { } return null; }
for (Class<?> stereotype : Components.getSortedProbeComponetCandidates(bean.getStereotypes())) { stereotypesBuilder.add(Json.objectBuilder().add(CLASS, stereotype.getName()).add(PROBE_COMPONENT, Components.isProbeComponent(stereotype))); beanBuilder.add(EJB_NAME, true); beanBuilder.add(SESSION_BEAN_TYPE, Components.getSessionBeanType(sessionBean.getEjbDescriptor()).toString()); } else if (bean instanceof AbstractProducerBean) { if (!classInterceptorBindings.isEmpty()) { JsonArrayBuilder bindingsBuilder = Json.arrayBuilder(); for (Annotation binding : Components.getSortedProbeComponetAnnotationCandidates(classInterceptorBindings)) { bindingsBuilder.add(Json.objectBuilder().add(VALUE, annotationToString(binding)).add(PROBE_COMPONENT, Components.isProbeAnnotation(binding)));
/** * Built-in beans are identified by the set of types. Moreover, each bean deployment archive has its own instance. * * @param dependency * @param probe * @param beanManager * @param type * @return */ private static JsonObjectBuilder createBuiltInDependency(Dependency dependency, Probe probe, BeanManagerImpl beanManager, String type) { AbstractBuiltInBean<?> builtInBean = (AbstractBuiltInBean<?>) dependency.getBean(); JsonObjectBuilder builtInDependency = createDependency(probe.getBean(Components.getBuiltinBeanId(builtInBean)), dependency, probe); if (builtInBean.getBeanClass().equals(InstanceImpl.class)) { // Special treatment of Instance<?> Bean<?> lazilyFetched = Components.getInstanceResolvedBean(beanManager, dependency.getInjectionPoint()); if (lazilyFetched != null && !Components.isBuiltinBeanButNotExtension(lazilyFetched)) { JsonObjectBuilder lazilyFetchedDependency = createDependency(lazilyFetched, null, probe); lazilyFetchedDependency.add(REQUIRED_TYPE, Formats.formatType(Components.getFacadeType(dependency.getInjectionPoint()), false)).add(QUALIFIERS, createQualifiers(dependency.getInjectionPoint().getQualifiers(), false)); lazilyFetchedDependency.add(INFO, INFO_FETCHING_LAZILY); lazilyFetchedDependency.add(IS_POTENTIAL, true); builtInDependency.add(type, Json.arrayBuilder().add(lazilyFetchedDependency)); } } return builtInDependency; }
Bean<?> lazilyFetched = getInstanceResolvedBean(beanManager, injectionPoint); if (lazilyFetched != null && lazilyFetched.equals(bean)) { dependents.add(Dependency.createPotential(candidate, injectionPoint, INFO_FETCHING_LAZILY)); if (isBuiltinBeanButNotExtension(candidateDependency)) { satisfies = bean.equals(probe.getBean(Components.getBuiltinBeanId((AbstractBuiltInBean<?>) candidateDependency))); } else { satisfies = bean.equals(candidateDependency);
ModuleEnablement enablement = beanDeploymentArchivesMap.get(bda).getEnabled(); JsonArrayBuilder interceptors = Json.arrayBuilder(); for (Class<?> interceptor : Components.getSortedProbeComponetCandidates(enablement.getInterceptors())) { JsonArrayBuilder accesibleBdasBuilder = Json.arrayBuilder(); for (BeanManagerImpl accesible : manager.getAccessibleManagers()) { accesibleBdasBuilder.add(Components.getId(accesible.getId())); bdaBuilder.add(BEANS, Components.getNumberOfEnabledBeans(manager)); bdasBuilder.add(bdaBuilder);
for (Dependency dependent : Components.getDependents(bean, probe)) { if (Components.isBuiltinBeanButNotExtension(dependent.getBean())) { dependentsBuilder .add(createDependency(probe.getBean(Components.getBuiltinBeanId((AbstractBuiltInBean<?>) dependent.getBean())), dependent, probe)); continue;
for (Dependency dep : Components.getDependencies(bean, beanManager, probe)) { if (dep.isUnsatisfied()) { dependenciesBuilder.add(createDependency(null, dep, probe).add(IS_UNSATISFIED, true)); continue; if (Components.isBuiltinBeanButNotExtension(dep.getBean())) { dependenciesBuilder.add(createBuiltInDependency(dep, probe, beanManager, DEPENDENCIES)); continue;
for (Class<?> stereotype : Components.getSortedProbeComponetCandidates(bean.getStereotypes())) { stereotypesBuilder.add(Json.objectBuilder().add(CLASS, stereotype.getName()).add(PROBE_COMPONENT, Components.isProbeComponent(stereotype))); beanBuilder.add(EJB_NAME, true); beanBuilder.add(SESSION_BEAN_TYPE, Components.getSessionBeanType(sessionBean.getEjbDescriptor()).toString()); } else if (bean instanceof AbstractProducerBean) {
try { Bean<?> dependency = beanManager.resolve(beans); if (isBuiltinBeanButNotExtension(dependency)) { dependency = probe.getBean(Components.getBuiltinBeanId((AbstractBuiltInBean<?>) dependency));
/** * * @param beanIdentifier * @return a generated id for the given beanIdentifier */ static String getId(BeanIdentifier beanIdentifier) { return getId(beanIdentifier.asString()); }
@Override public int compare(BeanDeploymentArchive bda1, BeanDeploymentArchive bda2) { // Ids containing "WEB-INF/classes" have the highest priority int result = Boolean.compare(bda2.getId().contains(WEB_INF_CLASSES), bda1.getId().contains(WEB_INF_CLASSES)); if (result == 0) { // Additional bean archive should have the lowest priority when sorting // This suffix is supported by WildFly and Weld Servlet result = Boolean.compare(bda1.getId().endsWith(ADDITIONAL_BDA_SUFFIX), bda2.getId().endsWith(ADDITIONAL_BDA_SUFFIX)); if (result == 0) { // Then order by number of enabled beans result = Components.getNumberOfEnabledBeans(bdaToManager.get(bda2)).compareTo( Components.getNumberOfEnabledBeans(bdaToManager.get(bda1))); } } // Unless decided compare the ids lexicographically return result == 0 ? bda1.getId().compareTo(bda2.getId()) : result; } };
JsonObjectBuilder builder = createSimpleBeanJson(bean, probe); builder.add(SCOPE, simplifiedScope(bean.getScope())); builder.add(CONTEXT_ID, Components.getInspectableScopeId(bean.getScope())); builder.add(CLASS, contextualInstance.getClass().getName()); builder.add(HASH, contextualInstance.hashCode());
for (Class<?> stereotype : Components.getSortedProbeComponetCandidates(bean.getStereotypes())) { stereotypesBuilder.add(Json.objectBuilder().add(CLASS, stereotype.getName()).add(PROBE_COMPONENT, Components.isProbeComponent(stereotype))); beanBuilder.add(EJB_NAME, true); beanBuilder.add(SESSION_BEAN_TYPE, Components.getSessionBeanType(sessionBean.getEjbDescriptor()).toString()); } else if (bean instanceof AbstractProducerBean) { if (!classInterceptorBindings.isEmpty()) { JsonArrayBuilder bindingsBuilder = Json.arrayBuilder(); for (Annotation binding : Components.getSortedProbeComponetAnnotationCandidates(classInterceptorBindings)) { bindingsBuilder.add(Json.objectBuilder().add(VALUE, annotationToString(binding)).add(PROBE_COMPONENT, Components.isProbeAnnotation(binding)));
/** * Built-in beans are identified by the set of types. Moreover, each bean deployment archive has its own instance. * * @param dependency * @param probe * @param beanManager * @param type * @return */ private static JsonObjectBuilder createBuiltInDependency(Dependency dependency, Probe probe, BeanManagerImpl beanManager, String type) { AbstractBuiltInBean<?> builtInBean = (AbstractBuiltInBean<?>) dependency.getBean(); JsonObjectBuilder builtInDependency = createDependency(probe.getBean(Components.getBuiltinBeanId(builtInBean)), dependency, probe); if (builtInBean.getBeanClass().equals(InstanceImpl.class)) { // Special treatment of Instance<?> Bean<?> lazilyFetched = Components.getInstanceResolvedBean(beanManager, dependency.getInjectionPoint()); if (lazilyFetched != null && !Components.isBuiltinBeanButNotExtension(lazilyFetched)) { JsonObjectBuilder lazilyFetchedDependency = createDependency(lazilyFetched, null, probe); lazilyFetchedDependency.add(REQUIRED_TYPE, Formats.formatType(Components.getFacadeType(dependency.getInjectionPoint()), false)).add(QUALIFIERS, createQualifiers(dependency.getInjectionPoint().getQualifiers(), false)); lazilyFetchedDependency.add(INFO, INFO_FETCHING_LAZILY); lazilyFetchedDependency.add(IS_POTENTIAL, true); builtInDependency.add(type, Json.arrayBuilder().add(lazilyFetchedDependency)); } } return builtInDependency; }
Bean<?> lazilyFetched = getInstanceResolvedBean(beanManager, injectionPoint); if (lazilyFetched != null && lazilyFetched.equals(bean)) { dependents.add(Dependency.createPotential(candidate, injectionPoint, INFO_FETCHING_LAZILY)); if (isBuiltinBeanButNotExtension(candidateDependency)) { satisfies = bean.equals(probe.getBean(Components.getBuiltinBeanId((AbstractBuiltInBean<?>) candidateDependency))); } else { satisfies = bean.equals(candidateDependency);
ModuleEnablement enablement = beanDeploymentArchivesMap.get(bda).getEnabled(); JsonArrayBuilder interceptors = Json.arrayBuilder(); for (Class<?> interceptor : Components.getSortedProbeComponetCandidates(enablement.getInterceptors())) { JsonArrayBuilder accesibleBdasBuilder = Json.arrayBuilder(); for (BeanManagerImpl accesible : manager.getAccessibleManagers()) { accesibleBdasBuilder.add(Components.getId(accesible.getId())); bdaBuilder.add(BEANS, Components.getNumberOfEnabledBeans(manager)); bdasBuilder.add(bdaBuilder);
for (Dependency dependent : Components.getDependents(bean, probe)) { if (Components.isBuiltinBeanButNotExtension(dependent.getBean())) { dependentsBuilder .add(createDependency(probe.getBean(Components.getBuiltinBeanId((AbstractBuiltInBean<?>) dependent.getBean())), dependent, probe)); continue;
for (Dependency dep : Components.getDependencies(bean, beanManager, probe)) { if (dep.isUnsatisfied()) { dependenciesBuilder.add(createDependency(null, dep, probe).add(IS_UNSATISFIED, true)); continue; if (Components.isBuiltinBeanButNotExtension(dep.getBean())) { dependenciesBuilder.add(createBuiltInDependency(dep, probe, beanManager, DEPENDENCIES)); continue;