@Override public Set<Type> getTypes() { Set<Type> contracts = new HashSet<>(); contracts.addAll(binding.getContracts()); // Merge aliases with the main bean if (!binding.getAliases().isEmpty()) { binding.getAliases().forEach(alias -> contracts.add(alias.getContract())); } contracts.add(Object.class); return contracts; }
private static void setupSupplierFactoryBridge(Binding<?, ?> binding, ServiceBindingBuilder<?> builder) { builder.named(binding.getName()); binding.getContracts().forEach(builder::to); binding.getQualifiers().forEach(builder::qualifiedBy); builder.in(transformScope(binding.getScope())); if (binding.getRank() != null) { builder.ranked(binding.getRank()); } if (binding.isProxiable() != null) { builder.proxy(binding.isProxiable()); } if (binding.isProxiedForSameScope() != null) { builder.proxyForSameScope(binding.isProxiedForSameScope()); } }
public int getRank() { if (binding.getRank() != null) { return binding.getRank(); } Class<T> type = binding.getImplementationType(); if (type != null) { Priority priority = type.getAnnotation(Priority.class); if (priority != null) { return priority.value(); } } return 1; }
@Override public Set<Annotation> getQualifiers() { Set<Annotation> qualifiers = new HashSet<>(); qualifiers.addAll(DEFAULT_QUALIFIERS); if (binding.getQualifiers() != null) { qualifiers.addAll(binding.getQualifiers()); } // Merge aliases with the main bean if (!binding.getAliases().isEmpty()) { binding.getAliases().forEach(alias -> qualifiers.addAll(alias.getQualifiers())); } return qualifiers; }
@Override public boolean bind(Class<?> component, Set<Class<?>> providerContracts) { if (ctx == null) { return false; } if (AnnotationUtils.findAnnotation(component, Component.class) != null) { String[] beanNames = ctx.getBeanNamesForType(component); if (beanNames == null || beanNames.length != 1) { LOGGER.severe(LocalizationMessages.NONE_OR_MULTIPLE_BEANS_AVAILABLE(component)); return false; } String beanName = beanNames[0]; Binding binding = Bindings.supplier(new SpringManagedBeanFactory(ctx, injectionManager, beanName)) .to(component) .to(providerContracts); injectionManager.register(binding); LOGGER.config(LocalizationMessages.BEAN_REGISTERED(beanNames[0])); return true; } return false; }
/** * Binds the single descriptor using an external {@link DynamicConfiguration}. * * @param locator HK2 injection manager. * @param dc HK2 Dynamic configuration to bind the object. * @param binding Jersey descriptor as a holder of information about an injection point. */ private static void bindBinding(ServiceLocator locator, DynamicConfiguration dc, Binding<?, ?> binding) { if (ClassBinding.class.isAssignableFrom(binding.getClass())) { ActiveDescriptor<?> activeDescriptor = translateToActiveDescriptor((ClassBinding<?>) binding); bindBinding(locator, dc, activeDescriptor, binding.getAliases()); } else if (InstanceBinding.class.isAssignableFrom(binding.getClass())) { ActiveDescriptor<?> activeDescriptor = translateToActiveDescriptor((InstanceBinding<?>) binding); bindBinding(locator, dc, activeDescriptor, binding.getAliases()); } else if (InjectionResolverBinding.class.isAssignableFrom(binding.getClass())) { InjectionResolverBinding resolverDescriptor = (InjectionResolverBinding) binding; bindBinding(locator, dc, wrapInjectionResolver(resolverDescriptor), binding.getAliases()); bindBinding(locator, dc, translateToActiveDescriptor(resolverDescriptor), binding.getAliases()); } else if (SupplierClassBinding.class.isAssignableFrom(binding.getClass())) { bindSupplierClassBinding(locator, (SupplierClassBinding<?>) binding); } else if (SupplierInstanceBinding.class.isAssignableFrom(binding.getClass())) { bindSupplierInstanceBinding(locator, (SupplierInstanceBinding<?>) binding); } else { throw new RuntimeException(LocalizationMessages.UNKNOWN_DESCRIPTOR_TYPE(binding.getClass().getSimpleName())); } }
@Override public String getName() { return binding.getName(); }
@Override public void register(Binding binding) { // TODO: Remove this temporary hack and replace it using different Singleton SubResource/EnhancedSubResource registration. // After the completed registration is able to register ClassBinding Singleton and InstanceBinding. // Unfortunately, there is no other simple way how to recognize and allow only SubResource registration after the // completed registration. if (completed && (binding.getScope() == Singleton.class || binding instanceof InstanceBinding)) { Hk2Helper.bind(getServiceLocator(), binding); } else { bindings.bind(binding); } }
binding.addAlias(contract) .in(scope.getName()) .qualifiedBy(CustomAnnotationLiteral.INSTANCE);
@Override @SuppressWarnings("unchecked") protected void configure() { ContextInjectionResolverImpl resolver = new ContextInjectionResolverImpl(beanManager); /* * Binding for CDI, without this binding JerseyInjectionTarget wouldn't know about the ContextInjectionTarget and * injection into fields would be disabled. */ bind(resolver) .to(new GenericType<InjectionResolver<Context>>() {}) .to(ContextInjectionResolver.class); /* * Binding for Jersey, without this binding Jersey wouldn't put together ContextInjectionResolver and * DelegatedInjectionValueParamProvider and therefore injection into resource method would be disabled. */ bind(Bindings.service(resolver)) .to(new GenericType<InjectionResolver<Context>>() {}) .to(ContextInjectionResolver.class); } }
/** * Binds the single descriptor using an external {@link DynamicConfiguration}. * * @param locator HK2 injection manager. * @param dc HK2 Dynamic configuration to bind the object. * @param binding Jersey descriptor as a holder of information about an injection point. */ private static void bindBinding(ServiceLocator locator, DynamicConfiguration dc, Binding<?, ?> binding) { if (ClassBinding.class.isAssignableFrom(binding.getClass())) { ActiveDescriptor<?> activeDescriptor = translateToActiveDescriptor((ClassBinding<?>) binding); bindBinding(locator, dc, activeDescriptor, binding.getAliases()); } else if (InstanceBinding.class.isAssignableFrom(binding.getClass())) { ActiveDescriptor<?> activeDescriptor = translateToActiveDescriptor((InstanceBinding<?>) binding); bindBinding(locator, dc, activeDescriptor, binding.getAliases()); } else if (InjectionResolverBinding.class.isAssignableFrom(binding.getClass())) { InjectionResolverBinding resolverDescriptor = (InjectionResolverBinding) binding; bindBinding(locator, dc, wrapInjectionResolver(resolverDescriptor), binding.getAliases()); bindBinding(locator, dc, translateToActiveDescriptor(resolverDescriptor), binding.getAliases()); } else if (SupplierClassBinding.class.isAssignableFrom(binding.getClass())) { bindSupplierClassBinding(locator, (SupplierClassBinding<?>) binding); } else if (SupplierInstanceBinding.class.isAssignableFrom(binding.getClass())) { bindSupplierInstanceBinding(locator, (SupplierInstanceBinding<?>) binding); } else { throw new RuntimeException(LocalizationMessages.UNKNOWN_DESCRIPTOR_TYPE(binding.getClass().getSimpleName())); } }
@Override public void register(Binding binding) { // TODO: Remove this temporary hack and replace it using different Singleton SubResource/EnhancedSubResource registration. // After the completed registration is able to register ClassBinding Singleton and InstanceBinding. // Unfortunately, there is no other simple way how to recognize and allow only SubResource registration after the // completed registration. if (completed && (binding.getScope() == Singleton.class || binding instanceof InstanceBinding)) { Hk2Helper.bind(getServiceLocator(), binding); } else { bindings.bind(binding); } }
binding.addAlias(contract) .in(scope.getName()) .qualifiedBy(CustomAnnotationLiteral.INSTANCE);
private static void setupSupplierFactoryBridge(Binding<?, ?> binding, ServiceBindingBuilder<?> builder) { builder.named(binding.getName()); binding.getContracts().forEach(builder::to); binding.getQualifiers().forEach(builder::qualifiedBy); builder.in(transformScope(binding.getScope())); if (binding.getRank() != null) { builder.ranked(binding.getRank()); } if (binding.isProxiable() != null) { builder.proxy(binding.isProxiable()); } if (binding.isProxiedForSameScope() != null) { builder.proxyForSameScope(binding.isProxiedForSameScope()); } }
@SuppressWarnings("unchecked") @Override public boolean bind(Class<?> component, Set<Class<?>> providerContracts) { if (LOGGER.isLoggable(Level.FINE)) { LOGGER.fine(LocalizationMessages.EJB_CLASS_BEING_CHECKED(component)); } if (injectionManager == null) { throw new IllegalStateException(LocalizationMessages.EJB_COMPONENT_PROVIDER_NOT_INITIALIZED_PROPERLY()); } if (!isEjbComponent(component)) { return false; } if (!ejbInterceptorRegistered) { registerEjbInterceptor(); } Binding binding = Bindings.supplier(new EjbFactory(component, initialContext, EjbComponentProvider.this)) .to(component) .to(providerContracts); injectionManager.register(binding); if (LOGGER.isLoggable(Level.CONFIG)) { LOGGER.config(LocalizationMessages.EJB_CLASS_BOUND_WITH_CDI(component)); } return true; }
/** * Binds the single descriptor using an external {@link DynamicConfiguration}. * * @param locator HK2 injection manager. * @param dc HK2 Dynamic configuration to bind the object. * @param binding Jersey descriptor as a holder of information about an injection point. */ private static void bindBinding(ServiceLocator locator, DynamicConfiguration dc, Binding<?, ?> binding) { if (ClassBinding.class.isAssignableFrom(binding.getClass())) { ActiveDescriptor<?> activeDescriptor = translateToActiveDescriptor((ClassBinding<?>) binding); bindBinding(locator, dc, activeDescriptor, binding.getAliases()); } else if (InstanceBinding.class.isAssignableFrom(binding.getClass())) { ActiveDescriptor<?> activeDescriptor = translateToActiveDescriptor((InstanceBinding<?>) binding); bindBinding(locator, dc, activeDescriptor, binding.getAliases()); } else if (InjectionResolverBinding.class.isAssignableFrom(binding.getClass())) { InjectionResolverBinding resolverDescriptor = (InjectionResolverBinding) binding; bindBinding(locator, dc, wrapInjectionResolver(resolverDescriptor), binding.getAliases()); bindBinding(locator, dc, translateToActiveDescriptor(resolverDescriptor), binding.getAliases()); } else if (SupplierClassBinding.class.isAssignableFrom(binding.getClass())) { bindSupplierClassBinding(locator, (SupplierClassBinding<?>) binding); } else if (SupplierInstanceBinding.class.isAssignableFrom(binding.getClass())) { bindSupplierInstanceBinding(locator, (SupplierInstanceBinding<?>) binding); } else { throw new RuntimeException(LocalizationMessages.UNKNOWN_DESCRIPTOR_TYPE(binding.getClass().getSimpleName())); } }
@Override public void register(Binding binding) { // TODO: Remove this temporary hack and replace it using different Singleton SubResource/EnhancedSubResource registration. // After the completed registration is able to register ClassBinding Singleton and InstanceBinding. // Unfortunately, there is no other simple way how to recognize and allow only SubResource registration after the // completed registration. if (completed && (binding.getScope() == Singleton.class || binding instanceof InstanceBinding)) { Hk2Helper.bind(getServiceLocator(), binding); } else { bindings.bind(binding); } }
binding.addAlias(contract) .in(scope.getName()) .qualifiedBy(CustomAnnotationLiteral.INSTANCE);
private static void setupSupplierFactoryBridge(Binding<?, ?> binding, ServiceBindingBuilder<?> builder) { builder.named(binding.getName()); binding.getContracts().forEach(builder::to); binding.getQualifiers().forEach(builder::qualifiedBy); builder.in(transformScope(binding.getScope())); if (binding.getRank() != null) { builder.ranked(binding.getRank()); } if (binding.isProxiable() != null) { builder.proxy(binding.isProxiable()); } if (binding.isProxiedForSameScope() != null) { builder.proxyForSameScope(binding.isProxiedForSameScope()); } }
@Override public boolean bind(Class<?> component, Set<Class<?>> providerContracts) { if (ctx == null) { return false; } if (AnnotationUtils.findAnnotation(component, Component.class) != null) { String[] beanNames = ctx.getBeanNamesForType(component); if (beanNames == null || beanNames.length != 1) { LOGGER.severe(LocalizationMessages.NONE_OR_MULTIPLE_BEANS_AVAILABLE(component)); return false; } String beanName = beanNames[0]; Binding binding = Bindings.supplier(new SpringManagedBeanFactory(ctx, injectionManager, beanName)) .to(component) .to(providerContracts); injectionManager.register(binding); LOGGER.config(LocalizationMessages.BEAN_REGISTERED(beanNames[0])); return true; } return false; }