List of usage examples for org.springframework.batch.core.scope.context StepContext getStepName
public String getStepName()
From source file:org.pepstock.jem.springbatch.tasks.JemTasklet.java
/** * Is called by SpringBatch framework to execute business logic.<br> * Prepares datasets (and the files and resources) which could be used from * implementation of this class.<br> * Loads JNDI context so all resources could be used by their name, defined * in JCL.//from w ww. j a v a 2 s .c o m * * @param stepContribution step contribution, passed by SpringBatch core * @param chunkContext chunk context, passed by SpringBatch core * @return always the status returned by abstract method * <code>executeByJem</code> * @throws SpringBatchException if a error occurs */ @Override public final RepeatStatus execute(StepContribution stepContribution, ChunkContext chunkContext) throws SpringBatchException { LogAppl.getInstance(); // this boolean is necessary to understand if I have an exception // before calling the main class boolean isExecutionStarted = false; boolean isAbended = false; SpringBatchSecurityManager batchSM = (SpringBatchSecurityManager) System.getSecurityManager(); batchSM.setInternalAction(true); RepeatStatus status = null; // extract stepContext because the step name is necessary StepContext stepContext = chunkContext.getStepContext(); List<DataDescriptionImpl> dataDescriptionImplList = ImplementationsContainer.getInstance() .getDataDescriptionsByItem(stepContext.getStepName()); // new initial context for JNDI InitialContext ic = null; try { ic = ContextUtils.getContext(); // scans all datasource passed for (DataSource source : dataSourceList) { // checks if datasource is well defined if (source.getResource() == null) { throw new SpringBatchException(SpringBatchMessage.JEMS016E); } else if (source.getName() == null) { // if name is missing, it uses the same string // used to define the resource source.setName(source.getResource()); } // gets the RMi object to get resources CommonResourcer resourcer = InitiatorManager.getCommonResourcer(); // lookups by RMI for the database Resource res = resourcer.lookup(JobId.VALUE, source.getResource()); if (!batchSM.checkResource(res)) { throw new SpringBatchException(SpringBatchMessage.JEMS017E, res.toString()); } // all properties create all StringRefAddrs necessary Map<String, ResourceProperty> properties = res.getProperties(); // scans all properteis set by JCL for (Property property : source.getProperties()) { if (property.isCustom()) { if (res.getCustomProperties() == null) { res.setCustomProperties(new HashMap<String, String>()); } if (!res.getCustomProperties().containsKey(property.getName())) { res.getCustomProperties().put(property.getName(), property.getValue()); } else { throw new SpringBatchException(SpringBatchMessage.JEMS018E, property.getName(), res); } } else { // if a key is defined FINAL, throw an exception for (ResourceProperty resProperty : properties.values()) { if (resProperty.getName().equalsIgnoreCase(property.getName()) && !resProperty.isOverride()) { throw new SpringBatchException(SpringBatchMessage.JEMS018E, property.getName(), res); } } ResourcePropertiesUtil.addProperty(res, property.getName(), property.getValue()); } } // creates a JNDI reference Reference ref = getReference(resourcer, res, source, dataDescriptionImplList); // loads all properties into RefAddr for (ResourceProperty property : properties.values()) { ref.add(new StringRefAddr(property.getName(), replaceProperties(property.getValue()))); } // loads custom properties in a string format if (res.getCustomProperties() != null && !res.getCustomProperties().isEmpty()) { // loads all entries and substitute variables for (Entry<String, String> entry : res.getCustomProperties().entrySet()) { String value = replaceProperties(entry.getValue()); entry.setValue(value); } // adds to reference ref.add(new StringRefAddr(CommonKeys.RESOURCE_CUSTOM_PROPERTIES, res.getCustomPropertiesString())); } // binds the object with format {type]/[name] LogAppl.getInstance().emit(SpringBatchMessage.JEMS024I, res); ic.rebind(source.getName(), ref); } // check if I have resources which must be locked if (!dataDescriptionImplList.isEmpty()) { // binds all data description impl to JNDI context for (DataDescriptionImpl ddImpl : dataDescriptionImplList) { // create reference for JNDI access Reference reference = new DataStreamReference(); // load GDG information, solving the real name of relative // position GDGManager.load(ddImpl); // serialize data description object in XML format XStream xstream = new XStream(); String xml = xstream.toXML(ddImpl); // add string xml reference reference.add(new StringRefAddr(StringRefAddrKeys.DATASTREAMS_KEY, xml)); LogAppl.getInstance().emit(SpringBatchMessage.JEMS023I, ddImpl); // bind resource using data description name ic.rebind(ddImpl.getName(), reference); } } // execute business logic // executes the java class defined in JCL // setting the boolean to TRUE SetFields.applyByAnnotation(this); isExecutionStarted = true; batchSM.setInternalAction(false); status = this.run(stepContribution, chunkContext); } catch (NamingException e) { isAbended = true; throw new SpringBatchException(SpringBatchMessage.JEMS043E, e); } catch (RemoteException e) { isAbended = true; throw new SpringBatchException(SpringBatchMessage.JEMS045E, e, this.getClass().getName(), e.getMessage()); } catch (IOException e) { isAbended = true; throw new SpringBatchException(SpringBatchMessage.JEMS044E, e, e.getMessage()); } catch (Exception e) { isAbended = true; throw new SpringBatchException(SpringBatchMessage.JEMS045E, e, this.getClass().getName(), e.getMessage()); } finally { batchSM.setInternalAction(true); if (!dataDescriptionImplList.isEmpty()) { StringBuilder exceptions = new StringBuilder(); // scans data descriptions for (DataDescriptionImpl ddImpl : dataDescriptionImplList) { try { // commit the GDG index in the root // if an exception, write on standard output of job // only if execution started if (isExecutionStarted) { GDGManager.store(ddImpl); } } catch (IOException e) { // ignore LogAppl.getInstance().ignore(e.getMessage(), e); LogAppl.getInstance().emit(SpringBatchMessage.JEMS025E, e.getMessage()); if (exceptions.length() == 0) { exceptions.append(e.getMessage()); } else { exceptions.append(e.getMessage()).append("\n"); } } // unbinds all data sources try { ic.unbind(ddImpl.getName()); } catch (NamingException e) { // ignore LogAppl.getInstance().ignore(e.getMessage(), e); LogAppl.getInstance().emit(SpringBatchMessage.JEMS047E, e.getMessage()); } if (exceptions.length() > 0 && !isAbended) { LogAppl.getInstance().emit(SpringBatchMessage.JEMS025E, StringUtils.center("ATTENTION", 40, "-")); LogAppl.getInstance().emit(SpringBatchMessage.JEMS025E, exceptions.toString()); } } } for (DataSource source : dataSourceList) { if (source.getName() != null) { // unbinds all resources try { ic.unbind(source.getName()); } catch (NamingException e) { // ignore LogAppl.getInstance().ignore(e.getMessage(), e); LogAppl.getInstance().emit(SpringBatchMessage.JEMS047E, e.getMessage()); } } } batchSM.setInternalAction(false); } return status; }
From source file:org.springframework.batch.core.jsr.configuration.support.BatchPropertyBeanPostProcessor.java
private String getBeanPropertyName(String beanName) { StepContext stepContext = StepSynchronizationManager.getContext(); if (stepContext != null) { String stepName = stepContext.getStepName(); String jobName = stepContext.getStepExecution().getJobExecution().getJobInstance().getJobName(); return jobName + "." + stepName + "." + beanName.substring("scopedTarget.".length()); }/*from ww w . j a v a 2 s . c o m*/ return beanName; }
From source file:org.springframework.batch.core.jsr.launch.support.BatchPropertyBeanPostProcessor.java
private Properties getArtifactProperties(String artifactName) { String originalArtifactName = artifactName; if (originalArtifactName.startsWith(SCOPED_TARGET_BEAN_PREFIX)) { originalArtifactName = artifactName.substring(SCOPED_TARGET_BEAN_PREFIX.length()); }//from www . j a va2 s .c o m StepContext stepContext = StepSynchronizationManager.getContext(); if (stepContext != null) { return batchPropertyContext.getStepArtifactProperties(stepContext.getStepName(), originalArtifactName); } return batchPropertyContext.getArtifactProperties(originalArtifactName); }