private ManagedList<AbstractBeanDefinition> parseListeners(Element element, ParserContext parserContext, String stepName) { List<Element> listenersElements = DomUtils.getChildElementsByTagName(element, LISTENERS_ELEMENT); ManagedList<AbstractBeanDefinition> listeners = new ManagedList<>(); if (listenersElements.size() == 1) { Element listenersElement = listenersElements.get(0); CompositeComponentDefinition compositeDef = new CompositeComponentDefinition(listenersElement.getTagName(), parserContext.extractSource(element)); parserContext.pushContainingComponent(compositeDef); listeners.setMergeEnabled(false); List<Element> listenerElements = DomUtils.getChildElementsByTagName(listenersElement, LISTENER_ELEMENT); for (Element listenerElement : listenerElements) { String beanName = listenerElement.getAttribute(REF_ATTRIBUTE); BeanDefinitionBuilder bd = BeanDefinitionBuilder.genericBeanDefinition(listenerType); bd.addPropertyValue("delegate", new RuntimeBeanReference(beanName)); applyListenerScope(beanName, parserContext.getRegistry()); listeners.add(bd.getBeanDefinition()); new PropertyParser(beanName, parserContext, getBatchArtifactType(stepName), stepName).parseProperties(listenerElement); } parserContext.popAndRegisterContainingComponent(); } else if (listenersElements.size() > 1) { parserContext.getReaderContext().error( "The '<listeners/>' element may not appear more than once in a single " + element.getLocalName(), element); } return listeners; }
@Test public void testStepListenerStepScoped() { @SuppressWarnings("resource") GenericApplicationContext applicationContext = new GenericApplicationContext(); AbstractBeanDefinition newBeanDefinition = BeanDefinitionBuilder.genericBeanDefinition("stepListener").getBeanDefinition(); newBeanDefinition.setScope("step"); applicationContext.registerBeanDefinition("stepListener", newBeanDefinition); ListenerParser listenerParser = new ListenerParser(StepListenerFactoryBean.class, "listeners"); listenerParser.applyListenerScope("stepListener", applicationContext); BeanDefinition beanDefinition = applicationContext.getBeanDefinition("stepListener"); assertEquals("step", beanDefinition.getScope()); }
@Test public void testJobListenerSingletonScoped() { @SuppressWarnings("resource") GenericApplicationContext applicationContext = new GenericApplicationContext(); AbstractBeanDefinition newBeanDefinition = BeanDefinitionBuilder.genericBeanDefinition("jobListener").getBeanDefinition(); newBeanDefinition.setScope("step"); applicationContext.registerBeanDefinition("jobListener", newBeanDefinition); ListenerParser listenerParser = new ListenerParser(JsrJobListenerFactoryBean.class, "jobExecutionListeners"); listenerParser.applyListenerScope("jobListener", applicationContext); BeanDefinition beanDefinition = applicationContext.getBeanDefinition("jobListener"); assertEquals("job", beanDefinition.getScope()); } }
private ManagedList<AbstractBeanDefinition> parseListeners(Element element, ParserContext parserContext, String stepName) { List<Element> listenersElements = DomUtils.getChildElementsByTagName(element, LISTENERS_ELEMENT); ManagedList<AbstractBeanDefinition> listeners = new ManagedList<AbstractBeanDefinition>(); if (listenersElements.size() == 1) { Element listenersElement = listenersElements.get(0); CompositeComponentDefinition compositeDef = new CompositeComponentDefinition(listenersElement.getTagName(), parserContext.extractSource(element)); parserContext.pushContainingComponent(compositeDef); listeners.setMergeEnabled(false); List<Element> listenerElements = DomUtils.getChildElementsByTagName(listenersElement, LISTENER_ELEMENT); for (Element listenerElement : listenerElements) { String beanName = listenerElement.getAttribute(REF_ATTRIBUTE); BeanDefinitionBuilder bd = BeanDefinitionBuilder.genericBeanDefinition(listenerType); bd.addPropertyValue("delegate", new RuntimeBeanReference(beanName)); applyListenerScope(beanName, parserContext.getRegistry()); listeners.add(bd.getBeanDefinition()); new PropertyParser(beanName, parserContext, getBatchArtifactType(stepName), stepName).parseProperties(listenerElement); } parserContext.popAndRegisterContainingComponent(); } else if (listenersElements.size() > 1) { parserContext.getReaderContext().error( "The '<listeners/>' element may not appear more than once in a single " + element.getLocalName(), element); } return listeners; }
private ManagedList<AbstractBeanDefinition> parseListeners(Element element, ParserContext parserContext, String stepName) { List<Element> listenersElements = DomUtils.getChildElementsByTagName(element, LISTENERS_ELEMENT); ManagedList<AbstractBeanDefinition> listeners = new ManagedList<AbstractBeanDefinition>(); if (listenersElements.size() == 1) { Element listenersElement = listenersElements.get(0); CompositeComponentDefinition compositeDef = new CompositeComponentDefinition(listenersElement.getTagName(), parserContext.extractSource(element)); parserContext.pushContainingComponent(compositeDef); listeners.setMergeEnabled(false); List<Element> listenerElements = DomUtils.getChildElementsByTagName(listenersElement, LISTENER_ELEMENT); for (Element listenerElement : listenerElements) { String beanName = listenerElement.getAttribute(REF_ATTRIBUTE); BeanDefinitionBuilder bd = BeanDefinitionBuilder.genericBeanDefinition(listenerType); bd.addPropertyValue("delegate", new RuntimeBeanReference(beanName)); applyListenerScope(beanName, parserContext.getRegistry()); listeners.add(bd.getBeanDefinition()); new PropertyParser(beanName, parserContext, getBatchArtifactType(stepName), stepName).parseProperties(listenerElement); } parserContext.popAndRegisterContainingComponent(); } else if (listenersElements.size() > 1) { parserContext.getReaderContext().error( "The '<listeners/>' element may not appear more than once in a single " + element.getLocalName(), element); } return listeners; }
private ManagedList<AbstractBeanDefinition> parseListeners(Element element, ParserContext parserContext, String stepName) { List<Element> listenersElements = DomUtils.getChildElementsByTagName(element, LISTENERS_ELEMENT); ManagedList<AbstractBeanDefinition> listeners = new ManagedList<AbstractBeanDefinition>(); if (listenersElements.size() == 1) { Element listenersElement = listenersElements.get(0); CompositeComponentDefinition compositeDef = new CompositeComponentDefinition(listenersElement.getTagName(), parserContext.extractSource(element)); parserContext.pushContainingComponent(compositeDef); listeners.setMergeEnabled(false); List<Element> listenerElements = DomUtils.getChildElementsByTagName(listenersElement, LISTENER_ELEMENT); for (Element listenerElement : listenerElements) { String beanName = listenerElement.getAttribute(REF_ATTRIBUTE); BeanDefinitionBuilder bd = BeanDefinitionBuilder.genericBeanDefinition(listenerType); bd.addPropertyValue("delegate", new RuntimeBeanReference(beanName)); applyListenerScope(beanName, parserContext.getRegistry()); listeners.add(bd.getBeanDefinition()); new PropertyParser(beanName, parserContext, getBatchArtifactType(stepName), stepName).parseProperties(listenerElement); } parserContext.popAndRegisterContainingComponent(); } else if (listenersElements.size() > 1) { parserContext.getReaderContext().error( "The '<listeners/>' element may not appear more than once in a single " + element.getLocalName(), element); } return listeners; }