@Override public void init() { registerBeanDefinitionParser("context-credentials", new ContextCredentialsBeanDefinitionParser()); registerBeanDefinitionParser("context-resource-loader", new ContextResourceLoaderBeanDefinitionParser()); registerBeanDefinitionParser("context-region", new ContextRegionBeanDefinitionParser()); registerBeanDefinitionParser("context-instance-data", new ContextInstanceDataPropertySourceBeanDefinitionParser()); registerBeanDefinitionParser("stack-configuration", new StackConfigurationBeanDefinitionParser()); } }
@Override public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) { GlobalBeanDefinitionUtils.retrieveResourceIdResolverBeanName(registry); } }
/** * Returns the name of the resource id resolver bean. This method is provided as utility method for bean definition * parsers that create bean definitions with a dependency to the global resource id resolver bean. If the resource * id resolver bean of type {@link ResourceIdResolver} has not yet been registered with the provided bean definition * registry, it is automatically registered. * * @param registry * the bean definition registry to check for an existing resource id resolver bean definition, and to register the * resource id resolver bean definition with, if needed * @return the bean name of the resource id resolver bean */ @SuppressWarnings("SameReturnValue") public static String retrieveResourceIdResolverBeanName(BeanDefinitionRegistry registry) { registerResourceIdResolverBeanIfNeeded(registry); return RESOURCE_ID_RESOLVER_BEAN_NAME; }
@Override protected void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) { registerResourceIdResolverBeanIfNeeded(parserContext.getRegistry()); String amazonCloudFormationClientBeanName = getCustomClientOrDefaultClientBeanName(element, parserContext, "amazon-cloud-formation", CLOUD_FORMATION_CLIENT_CLASS_NAME); String amazonEc2ClientBeanName = getCustomClientOrDefaultClientBeanName(element, parserContext, "amazon-ec2", EC2_CLIENT_CLASS_NAME); String stackName = element.getAttribute(STACK_NAME_ATTRIBUTE_NAME); builder.addConstructorArgReference(amazonCloudFormationClientBeanName); AbstractBeanDefinition stackNameProviderBeanDefinition = StringUtils.isEmpty(stackName) ? buildAutoDetectingStackNameProviderBeanDefinition(amazonCloudFormationClientBeanName, amazonEc2ClientBeanName) : buildStaticStackNameProviderBeanDefinition(stackName); builder.addConstructorArgValue(stackNameProviderBeanDefinition); buildAndRegisterStackUserTagsIfNeeded(element, parserContext, amazonCloudFormationClientBeanName, stackNameProviderBeanDefinition); }
private static AbstractBeanDefinition buildAutoDetectingStackNameProviderBeanDefinition(String amazonCloudFormationClientBeanName, String amazonEc2ClientBeanName) { BeanDefinitionBuilder autoDetectingStackNameProviderBeanDefinitionBuilder = genericBeanDefinition(AUTO_DETECTING_STACK_NAME_PROVIDER_CLASS_NAME); autoDetectingStackNameProviderBeanDefinitionBuilder.addConstructorArgReference(amazonCloudFormationClientBeanName); autoDetectingStackNameProviderBeanDefinitionBuilder.addConstructorArgReference(amazonEc2ClientBeanName); autoDetectingStackNameProviderBeanDefinitionBuilder.addConstructorArgValue(buildInstanceIdProviderBeanDefinition()); return autoDetectingStackNameProviderBeanDefinitionBuilder.getBeanDefinition(); }
static void registerResourceIdResolverBeanIfNeeded(BeanDefinitionRegistry registry) { if (!(registry.containsBeanDefinition(RESOURCE_ID_RESOLVER_BEAN_NAME))) { registry.registerBeanDefinition(RESOURCE_ID_RESOLVER_BEAN_NAME, buildResourceIdResolverBeanDefinition()); } }
/** * Creates a bean definition for the credentials object. This methods creates a bean definition instead of the direct * implementation to allow property place holder to change any place holder used for the access or secret key. * * @param credentialsProviderElement * - The element that contains the credentials attributes ACCESS_KEY_ATTRIBUTE_NAME and SECRET_KEY_ATTRIBUTE_NAME * @param parserContext * - Used to report any errors if there is no ACCESS_KEY_ATTRIBUTE_NAME or SECRET_KEY_ATTRIBUTE_NAME available with * a * valid value * @return - the bean definition with an {@link com.amazonaws.auth.BasicAWSCredentials} class */ private static BeanDefinition getCredentials(Element credentialsProviderElement, ParserContext parserContext) { BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition("com.amazonaws.auth.BasicAWSCredentials"); builder.addConstructorArgValue(getAttributeValue(ACCESS_KEY_ATTRIBUTE_NAME, credentialsProviderElement, parserContext)); builder.addConstructorArgValue(getAttributeValue(SECRET_KEY_ATTRIBUTE_NAME, credentialsProviderElement, parserContext)); return builder.getBeanDefinition(); }
@Override public void init() { registerBeanDefinitionParser("context-credentials", new ContextCredentialsBeanDefinitionParser()); registerBeanDefinitionParser("context-resource-loader", new ContextResourceLoaderBeanDefinitionParser()); registerBeanDefinitionParser("context-region", new ContextRegionBeanDefinitionParser()); registerBeanDefinitionParser("context-instance-data", new ContextInstanceDataPropertySourceBeanDefinitionParser()); registerBeanDefinitionParser("stack-configuration", new StackConfigurationBeanDefinitionParser()); } }
@Override public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) { GlobalBeanDefinitionUtils.retrieveResourceIdResolverBeanName(registry); } }
@Override protected void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) { registerResourceIdResolverBeanIfNeeded(parserContext.getRegistry()); String amazonCloudFormationClientBeanName = getCustomClientOrDefaultClientBeanName(element, parserContext, "amazon-cloud-formation", CLOUD_FORMATION_CLIENT_CLASS_NAME); String amazonEc2ClientBeanName = getCustomClientOrDefaultClientBeanName(element, parserContext, "amazon-ec2", EC2_CLIENT_CLASS_NAME); String stackName = element.getAttribute(STACK_NAME_ATTRIBUTE_NAME); builder.addConstructorArgReference(amazonCloudFormationClientBeanName); AbstractBeanDefinition stackNameProviderBeanDefinition = StringUtils.isEmpty(stackName) ? buildAutoDetectingStackNameProviderBeanDefinition(amazonCloudFormationClientBeanName, amazonEc2ClientBeanName) : buildStaticStackNameProviderBeanDefinition(stackName); builder.addConstructorArgValue(stackNameProviderBeanDefinition); buildAndRegisterStackUserTagsIfNeeded(element, parserContext, amazonCloudFormationClientBeanName, stackNameProviderBeanDefinition); }
/** * Returns the name of the resource id resolver bean. This method is provided as utility method for bean definition * parsers that create bean definitions with a dependency to the global resource id resolver bean. If the resource * id resolver bean of type {@link ResourceIdResolver} has not yet been registered with the provided bean definition * registry, it is automatically registered. * * @param registry * the bean definition registry to check for an existing resource id resolver bean definition, and to register the * resource id resolver bean definition with, if needed * @return the bean name of the resource id resolver bean */ @SuppressWarnings("SameReturnValue") public static String retrieveResourceIdResolverBeanName(BeanDefinitionRegistry registry) { registerResourceIdResolverBeanIfNeeded(registry); return RESOURCE_ID_RESOLVER_BEAN_NAME; }
private static AbstractBeanDefinition buildAutoDetectingStackNameProviderBeanDefinition(String amazonCloudFormationClientBeanName, String amazonEc2ClientBeanName) { BeanDefinitionBuilder autoDetectingStackNameProviderBeanDefinitionBuilder = genericBeanDefinition(AUTO_DETECTING_STACK_NAME_PROVIDER_CLASS_NAME); autoDetectingStackNameProviderBeanDefinitionBuilder.addConstructorArgReference(amazonCloudFormationClientBeanName); autoDetectingStackNameProviderBeanDefinitionBuilder.addConstructorArgReference(amazonEc2ClientBeanName); autoDetectingStackNameProviderBeanDefinitionBuilder.addConstructorArgValue(buildInstanceIdProviderBeanDefinition()); return autoDetectingStackNameProviderBeanDefinitionBuilder.getBeanDefinition(); }
static void registerResourceIdResolverBeanIfNeeded(BeanDefinitionRegistry registry) { if (!(registry.containsBeanDefinition(RESOURCE_ID_RESOLVER_BEAN_NAME))) { registry.registerBeanDefinition(RESOURCE_ID_RESOLVER_BEAN_NAME, buildResourceIdResolverBeanDefinition()); } }
/** * Creates a bean definition for the credentials object. This methods creates a bean definition instead of the direct * implementation to allow property place holder to change any place holder used for the access or secret key. * * @param credentialsProviderElement * - The element that contains the credentials attributes ACCESS_KEY_ATTRIBUTE_NAME and SECRET_KEY_ATTRIBUTE_NAME * @param parserContext * - Used to report any errors if there is no ACCESS_KEY_ATTRIBUTE_NAME or SECRET_KEY_ATTRIBUTE_NAME available with * a * valid value * @return - the bean definition with an {@link com.amazonaws.auth.BasicAWSCredentials} class */ private static BeanDefinition getCredentials(Element credentialsProviderElement, ParserContext parserContext) { BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition("com.amazonaws.auth.BasicAWSCredentials"); builder.addConstructorArgValue(getAttributeValue(ACCESS_KEY_ATTRIBUTE_NAME, credentialsProviderElement, parserContext)); builder.addConstructorArgValue(getAttributeValue(SECRET_KEY_ATTRIBUTE_NAME, credentialsProviderElement, parserContext)); return builder.getBeanDefinition(); }
private static BeanDefinition createElastiCacheFactoryBean(Element source, ParserContext parserContext, String clusterId, ManagedList<BeanDefinition> cacheFactories) { BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.rootBeanDefinition(ELASTICACHE_FACTORY_BEAN); beanDefinitionBuilder.addConstructorArgReference(getCustomClientOrDefaultClientBeanName(source, parserContext, "amazon-elasti-cache", ELASTI_CACHE_CLIENT_CLASS_NAME)); beanDefinitionBuilder.addConstructorArgValue(clusterId); beanDefinitionBuilder.addConstructorArgReference(GlobalBeanDefinitionUtils.retrieveResourceIdResolverBeanName(parserContext.getRegistry())); beanDefinitionBuilder.addConstructorArgValue(cacheFactories); return beanDefinitionBuilder.getBeanDefinition(); }
private static BeanDefinition createElastiCacheFactoryBean(Element source, ParserContext parserContext, String clusterId, ManagedList<BeanDefinition> cacheFactories) { BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.rootBeanDefinition(ELASTICACHE_FACTORY_BEAN); beanDefinitionBuilder.addConstructorArgReference(getCustomClientOrDefaultClientBeanName(source, parserContext, "amazon-elasti-cache", ELASTI_CACHE_CLIENT_CLASS_NAME)); beanDefinitionBuilder.addConstructorArgValue(clusterId); beanDefinitionBuilder.addConstructorArgReference(GlobalBeanDefinitionUtils.retrieveResourceIdResolverBeanName(parserContext.getRegistry())); beanDefinitionBuilder.addConstructorArgValue(cacheFactories); return beanDefinitionBuilder.getBeanDefinition(); }
private static BeanDefinition buildDatabaseInstancePolicy(Element element, ParserContext parserContext) { BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.rootBeanDefinition(DatabaseInstanceStatusRetryPolicy.class); String amazonRdsClientBeanName = getCustomClientOrDefaultClientBeanName(element, parserContext, "amazon-rds", AMAZON_RDS_CLIENT_CLASS_NAME); beanDefinitionBuilder.addConstructorArgReference(amazonRdsClientBeanName); beanDefinitionBuilder.addConstructorArgValue(element.getAttribute(AmazonRdsDataSourceBeanDefinitionParser.DB_INSTANCE_IDENTIFIER)); String resourceIdResolverBeanName = GlobalBeanDefinitionUtils.retrieveResourceIdResolverBeanName(parserContext.getRegistry()); beanDefinitionBuilder.addPropertyReference("resourceIdResolver", resourceIdResolverBeanName); return beanDefinitionBuilder.getBeanDefinition(); }
protected void registerDataSource(BeanDefinitionRegistry beanDefinitionRegistry, String amazonRdsClientBeanName, String dbInstanceIdentifier, String password, boolean readReplica, String userName, String databaseName) { BeanDefinitionBuilder datasourceBuilder = getBeanDefinitionBuilderForDataSource(readReplica); //Constructor (mandatory) args datasourceBuilder.addConstructorArgReference(amazonRdsClientBeanName); datasourceBuilder.addConstructorArgValue(dbInstanceIdentifier); datasourceBuilder.addConstructorArgValue(password); //optional args datasourceBuilder.addPropertyValue("username", userName); datasourceBuilder.addPropertyValue("databaseName", databaseName); String resourceResolverBeanName = GlobalBeanDefinitionUtils.retrieveResourceIdResolverBeanName(beanDefinitionRegistry); datasourceBuilder.addPropertyReference("resourceIdResolver", resourceResolverBeanName); datasourceBuilder.addPropertyValue("dataSourceFactory", BeanDefinitionBuilder.rootBeanDefinition(TomcatJdbcDataSourceFactory.class).getBeanDefinition()); beanDefinitionRegistry.registerBeanDefinition(dbInstanceIdentifier, datasourceBuilder.getBeanDefinition()); }
protected void registerDataSource(BeanDefinitionRegistry beanDefinitionRegistry, String amazonRdsClientBeanName, String dbInstanceIdentifier, String password, boolean readReplica, String userName, String databaseName) { BeanDefinitionBuilder datasourceBuilder = getBeanDefinitionBuilderForDataSource(readReplica); //Constructor (mandatory) args datasourceBuilder.addConstructorArgReference(amazonRdsClientBeanName); datasourceBuilder.addConstructorArgValue(dbInstanceIdentifier); datasourceBuilder.addConstructorArgValue(password); //optional args datasourceBuilder.addPropertyValue("username", userName); datasourceBuilder.addPropertyValue("databaseName", databaseName); String resourceResolverBeanName = GlobalBeanDefinitionUtils.retrieveResourceIdResolverBeanName(beanDefinitionRegistry); datasourceBuilder.addPropertyReference("resourceIdResolver", resourceResolverBeanName); datasourceBuilder.addPropertyValue("dataSourceFactory", BeanDefinitionBuilder.rootBeanDefinition(TomcatJdbcDataSourceFactory.class).getBeanDefinition()); beanDefinitionRegistry.registerBeanDefinition(dbInstanceIdentifier, datasourceBuilder.getBeanDefinition()); }
private static BeanDefinition buildDatabaseInstancePolicy(Element element, ParserContext parserContext) { BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.rootBeanDefinition(DatabaseInstanceStatusRetryPolicy.class); String amazonRdsClientBeanName = getCustomClientOrDefaultClientBeanName(element, parserContext, "amazon-rds", AMAZON_RDS_CLIENT_CLASS_NAME); beanDefinitionBuilder.addConstructorArgReference(amazonRdsClientBeanName); beanDefinitionBuilder.addConstructorArgValue(element.getAttribute(AmazonRdsDataSourceBeanDefinitionParser.DB_INSTANCE_IDENTIFIER)); String resourceIdResolverBeanName = GlobalBeanDefinitionUtils.retrieveResourceIdResolverBeanName(parserContext.getRegistry()); beanDefinitionBuilder.addPropertyReference("resourceIdResolver", resourceIdResolverBeanName); return beanDefinitionBuilder.getBeanDefinition(); }