Example usage for org.springframework.transaction.support TransactionCallback TransactionCallback

List of usage examples for org.springframework.transaction.support TransactionCallback TransactionCallback

Introduction

In this page you can find the example usage for org.springframework.transaction.support TransactionCallback TransactionCallback.

Prototype

TransactionCallback

Source Link

Usage

From source file:org.ms123.common.workflow.TaskScriptExecutor.java

public void execute(String namespace, String processDefinitionKey, String pid, String script, final Map addVars,
        VariableScope variableScope, String hint, DataLayer dataLayer, WorkflowService ws) {
    if (script == null) {
        return;//w w w  . j a  v a 2 s . com
    }
    final TaskContext tc = new TaskContext();
    tc.setCategory(namespace);
    tc.setProcessDefinitionKey(processDefinitionKey);
    tc.setHint(hint);
    tc.setPid(pid);
    tc.setScript(script);
    tc.setExecution(variableScope);
    m_dataLayer = dataLayer;
    m_workflowService = ws;

    if (m_ownTransaction) {
        TransactionTemplate tt = getTransactionService().getTransactionTemplate(true);
        tt.execute(new TransactionCallback<Object>() {
            public Object doInTransaction(TransactionStatus paramTransactionStatus) {
                _execute(tc, addVars);
                return null;
            }
        });
    } else {
        _execute(tc, addVars);
    }
}

From source file:org.obiba.opal.core.service.ProjectsServiceImpl.java

/**
 * Create DatasourceFactory and add it to MagmaEngine
 *
 * @param project//from   w w  w  .j av a2  s  .  c o m
 * @return
 */
@NotNull
private DatasourceFactory registerDatasource(@NotNull final Project project) {
    return transactionTemplate.execute(new TransactionCallback<DatasourceFactory>() {
        @Override
        public DatasourceFactory doInTransaction(TransactionStatus status) {
            DatasourceFactory dataSourceFactory = null;
            if (project.hasDatabase()) {
                Database database = databaseRegistry.getDatabase(project.getDatabase());
                dataSourceFactory = databaseRegistry.createDataSourceFactory(project.getName(), database);
            } else {
                dataSourceFactory = new NullDatasourceFactory();
                dataSourceFactory.setName(project.getName());
            }
            MagmaEngine.get().addDatasource(dataSourceFactory);
            return dataSourceFactory;
        }
    });
}

From source file:org.ohdsi.webapi.cohortdefinition.GenerateCohortTasklet.java

@Override
public RepeatStatus execute(final StepContribution contribution, final ChunkContext chunkContext)
        throws Exception {
    Date startTime = Calendar.getInstance().getTime();

    DefaultTransactionDefinition initTx = new DefaultTransactionDefinition();
    initTx.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
    TransactionStatus initStatus = this.transactionTemplate.getTransactionManager().getTransaction(initTx);
    CohortDefinition df = this.cohortDefinitionRepository.findOne(this.task.getCohortDefinition().getId());
    CohortGenerationInfo info = df.getGenerationInfo();
    if (info == null) {
        info = new CohortGenerationInfo().setCohortDefinition(df);
        df.setGenerationInfo(info);//from   www.j  av  a 2 s .com
    }

    info.setIsValid(false);
    info.setStartTime(startTime);
    info.setStatus(GenerationStatus.RUNNING);
    df = this.cohortDefinitionRepository.save(df);
    this.transactionTemplate.getTransactionManager().commit(initStatus);

    info = df.getGenerationInfo();

    try {
        final int[] ret = this.transactionTemplate.execute(new TransactionCallback<int[]>() {

            @Override
            public int[] doInTransaction(final TransactionStatus status) {
                return doTask();
            }
        });
        log.debug("Update count: " + ret.length);
        info.setIsValid(true);
    } catch (final TransactionException e) {
        info.setIsValid(false);
        log.error(e.getMessage(), e);
        throw e;//FAIL job status
    } finally {
        DefaultTransactionDefinition completeTx = new DefaultTransactionDefinition();
        completeTx.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
        TransactionStatus completeStatus = this.transactionTemplate.getTransactionManager()
                .getTransaction(completeTx);
        Date endTime = Calendar.getInstance().getTime();
        info.setExecutionDuration(new Integer((int) (endTime.getTime() - startTime.getTime())));
        info.setStatus(GenerationStatus.COMPLETE);
        this.cohortDefinitionRepository.save(df);
        this.transactionTemplate.getTransactionManager().commit(completeStatus);
    }

    return RepeatStatus.FINISHED;
}

From source file:org.ohdsi.webapi.ircalc.PerformAnalysisTasklet.java

@Override
public RepeatStatus execute(final StepContribution contribution, final ChunkContext chunkContext)
        throws Exception {
    Date startTime = Calendar.getInstance().getTime();
    Map<String, Object> jobParams = chunkContext.getStepContext().getJobParameters();
    Integer analysisId = Integer.valueOf(jobParams.get("analysis_id").toString());
    Integer sourceId = Integer.valueOf(jobParams.get("source_id").toString());
    boolean isValid = false;
    String statusMessage = "OK";

    DefaultTransactionDefinition requresNewTx = new DefaultTransactionDefinition();
    requresNewTx.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);

    TransactionStatus initStatus = this.transactionTemplate.getTransactionManager()
            .getTransaction(requresNewTx);
    IncidenceRateAnalysis analysis = this.incidenceRateAnalysisRepository.findOne(analysisId);

    ExecutionInfo analysisInfo = findExecutionInfoBySourceId(analysis.getExecutionInfoList(), sourceId);
    analysisInfo.setIsValid(false);/*  w ww . ja  v a2s. co  m*/
    analysisInfo.setStartTime(startTime);
    analysisInfo.setStatus(GenerationStatus.RUNNING);

    this.incidenceRateAnalysisRepository.save(analysis);
    this.transactionTemplate.getTransactionManager().commit(initStatus);

    try {
        final int[] ret = this.transactionTemplate.execute(new TransactionCallback<int[]>() {

            @Override
            public int[] doInTransaction(final TransactionStatus status) {
                return doTask(chunkContext);
            }
        });
        log.debug("Update count: " + ret.length);
        isValid = true;
    } catch (final Exception e) {
        isValid = false;
        statusMessage = e.getMessage();
        log.error(e.getMessage(), e);
        throw e;//FAIL job status
    } finally {
        TransactionStatus completeStatus = this.transactionTemplate.getTransactionManager()
                .getTransaction(requresNewTx);
        Date endTime = Calendar.getInstance().getTime();
        analysis = this.incidenceRateAnalysisRepository.findOne(analysisId);

        analysisInfo = findExecutionInfoBySourceId(analysis.getExecutionInfoList(), sourceId);
        analysisInfo.setIsValid(isValid);
        analysisInfo.setExecutionDuration((int) (endTime.getTime() - startTime.getTime()));
        analysisInfo.setStatus(GenerationStatus.COMPLETE);
        analysisInfo
                .setMessage(statusMessage.substring(0, Math.min(MAX_MESSAGE_LENGTH, statusMessage.length())));

        this.incidenceRateAnalysisRepository.save(analysis);
        this.transactionTemplate.getTransactionManager().commit(completeStatus);
    }

    return RepeatStatus.FINISHED;
}

From source file:org.openiam.provision.service.DefaultProvisioningService.java

private ProvisionUserResponse addUser(final ProvisionUser pUser, final IdmAuditLog auditLog) {
    final List<ProvisionDataContainer> dataList = new LinkedList<ProvisionDataContainer>();

    ProvisionUserResponse res = new ProvisionUserResponse();
    res.setStatus(ResponseStatus.FAILURE);
    try {//  ww w. j a  va2 s  .  c  om

        final TransactionTemplate transactionTemplate = new TransactionTemplate(platformTransactionManager);
        transactionTemplate.setPropagationBehavior(TransactionTemplate.PROPAGATION_REQUIRED);
        res = transactionTemplate.execute(new TransactionCallback<ProvisionUserResponse>() {
            @Override
            public ProvisionUserResponse doInTransaction(TransactionStatus status) {
                IdmAuditLog idmAuditLog = new IdmAuditLog();

                idmAuditLog.setRequestorUserId(pUser.getRequestorUserId());
                idmAuditLog.setRequestorPrincipal(pUser.getRequestorLogin());
                idmAuditLog.setAction(AuditAction.CREATE_USER.value());
                idmAuditLog.setAuditDescription("Provisioning add user: " + pUser.getId()
                        + " with first/last name: " + pUser.getFirstName() + "/" + pUser.getLastName());

                if (auditLog != null) {
                    auditLog.addChild(idmAuditLog);
                    idmAuditLog.addParent(auditLog);
                    idmAuditLog = auditLogService.save(idmAuditLog);
                }
                idmAuditLog = auditLogService.save(idmAuditLog);

                ProvisionUserResponse tmpRes = addModifyUser(pUser, true, dataList, idmAuditLog);

                idmAuditLog = auditLogService.save(idmAuditLog);
                return tmpRes;
            }
        });

        if (res.isSuccess()) {
            provQueueService.enqueue(dataList);
        }
    } catch (Throwable t) {
        log.error("Can't add user", t);
    }
    return res;
}

From source file:org.openiam.provision.service.DefaultProvisioningService.java

private ProvisionUserResponse modifyUser(final ProvisionUser pUser, final IdmAuditLog auditLog) {
    final List<ProvisionDataContainer> dataList = new LinkedList<ProvisionDataContainer>();
    TransactionTemplate transactionTemplate = new TransactionTemplate(platformTransactionManager);

    ProvisionUserResponse res = new ProvisionUserResponse();
    res.setStatus(ResponseStatus.SUCCESS);

    try {//from w w  w . j a  v  a 2s .c  om
        res = transactionTemplate.execute(new TransactionCallback<ProvisionUserResponse>() {
            @Override
            public ProvisionUserResponse doInTransaction(TransactionStatus status) {
                IdmAuditLog idmAuditLog = new IdmAuditLog();
                idmAuditLog.setRequestorUserId(pUser.getRequestorUserId());
                idmAuditLog.setRequestorPrincipal(pUser.getRequestorLogin());
                idmAuditLog.setAction(AuditAction.MODIFY_USER.value());
                LoginEntity loginEntity = loginManager.getByUserIdManagedSys(pUser.getId(),
                        sysConfiguration.getDefaultManagedSysId());
                idmAuditLog.setTargetUser(pUser.getId(), loginEntity.getLogin());
                idmAuditLog.setAuditDescription("Provisioning modify user: " + pUser.getId()
                        + " with primary identity: " + loginEntity);
                if (auditLog != null) {
                    auditLog.addChild(idmAuditLog);
                    idmAuditLog.addParent(auditLog);
                    auditLogService.save(auditLog);
                }
                idmAuditLog = auditLogService.save(idmAuditLog);
                ProvisionUserResponse tmpRes = addModifyUser(pUser, false, dataList, idmAuditLog);
                idmAuditLog = auditLogService.save(idmAuditLog);
                return tmpRes;
            }
        });

        if (res.isSuccess()) {
            provQueueService.enqueue(dataList);

        }
    } catch (Throwable t) {
        t.printStackTrace();
    }
    return res;
}

From source file:org.openkoala.koala.monitor.extend.BaseSchedulerBean.java

/**
 * ??<br>/*ww w .  j  a  v  a 2  s.co m*/
 * generate by: vakin jiang
 *                    at 2012-2-13
 * @param runing
 */
@Transactional
protected void updateExecutable(final boolean runing) {
    transactionTemplate.execute(new TransactionCallback<Object>() {
        @Override
        public Object doInTransaction(TransactionStatus status) {
            String hql = "";
            Object[] params = null;
            if (runing) {
                hql = "update SchedulerConfg set running = ?,lastBeginRunTime = ? where triggerName = ?";
                params = new Object[] { true, new Date(), triggerName };
            } else {
                hql = "update SchedulerConfg set running = ? where triggerName = ?";
                params = new Object[] { false, triggerName };
            }
            repository.createJpqlQuery(hql).setParameters(Arrays.asList(params)).executeUpdate();
            return null;
        }
    });
}

From source file:org.openkoala.koala.monitor.extend.BaseSchedulerBean.java

public void onStart() {
    if (StringUtils.isBlank(triggerName))
        return;/*w  w  w .  j  a va 2  s .  co m*/
    transactionTemplate.execute(new TransactionCallback<Object>() {
        @Override
        public Object doInTransaction(TransactionStatus status) {
            SchedulerConfg scheduler = getRepository().get(SchedulerConfg.class, triggerName);
            if (scheduler == null) {
                scheduler = new SchedulerConfg(triggerName, schedulerName, cronExpression);
            }
            scheduler.setRunning(false);
            getRepository().save(scheduler);
            return null;
        }
    });

    logger.info("?" + schedulerName + "[{}]OK", triggerName);
}

From source file:org.opennms.netmgt.dao.NodeDaoIT.java

public OnmsNode getNodeHierarchy(final int nodeId) {
    return m_transTemplate.execute(new TransactionCallback<OnmsNode>() {

        @Override//from  w  ww  .j  av a 2 s. com
        public OnmsNode doInTransaction(TransactionStatus status) {
            return getNodeDao().getHierarchy(nodeId);
        }

    });
}

From source file:org.opennms.netmgt.poller.MonitorTester.java

public static void main(String[] args) {
    Options options = new Options();
    Option oI = new Option("i", "ipaddress", true, "IP Address to test [required]");
    oI.setRequired(true);/* w ww  . j  a v a 2 s . c om*/
    options.addOption(oI);
    Option oS = new Option("s", "service", true, "Service name [required]");
    oS.setRequired(true);
    options.addOption(oS);
    options.addOption("P", "package", true, "Poller Package");
    options.addOption("p", "param", true, "Service parameter ~ key=value");
    options.addOption("c", "class", true, "Monitor Class");

    CommandLineParser parser = new PosixParser();
    CommandLine cmd = null;

    try {
        cmd = parser.parse(options, args);
    } catch (ParseException e) {
        new HelpFormatter().printHelp(80, CMD_SYNTAX, String.format("ERROR: %s%n", e.getMessage()), options,
                null);
        System.exit(1);
    }

    initialize();

    final String packageName = cmd.getOptionValue('P');
    final String monitorClass = cmd.getOptionValue('c');
    final String ipAddress = cmd.getOptionValue('i');
    final String serviceName = cmd.getOptionValue('s');

    Map<String, Object> parameters = new HashMap<String, Object>();
    if (cmd.hasOption('p')) {
        for (String parm : cmd.getOptionValues('p')) {
            String[] data = parm.split("=");
            if (data.length == 2 && data[0] != null && data[1] != null) {
                parameters.put(data[0], data[1]);
            }
        }
    }

    final InetAddress addr = InetAddressUtils.addr(ipAddress);
    if (addr == null) {
        throw new IllegalStateException("Error getting InetAddress object for " + ipAddress);
    }

    final IpInterfaceDao dao = BeanUtils.getBean("daoContext", "ipInterfaceDao", IpInterfaceDao.class);
    final TransactionTemplate tt = BeanUtils.getBean("daoContext", "transactionTemplate",
            TransactionTemplate.class);
    MonitoredService monSvc = tt.execute(new TransactionCallback<MonitoredService>() {
        @Override
        public MonitoredService doInTransaction(TransactionStatus status) {
            final List<OnmsIpInterface> ips = dao.findByIpAddress(ipAddress);
            if (ips == null || ips.size() == 0) {
                System.err.printf("Error: Can't find the IP address %s on the database\n", ipAddress);
                return null;
            }
            if (ips.size() > 1) {
                System.out.printf(
                        "Warning: there are several IP interface objects associated with the IP address %s (picking the first one)\n",
                        ipAddress);
            }
            OnmsNode n = ips.get(0).getNode();
            return new SimpleMonitoredService(addr, n.getId(), n.getLabel(), serviceName);
        }
    });
    if (monSvc == null) {
        System.exit(1);
    }

    try {
        PollerConfigFactory.init();
    } catch (Exception e) {
        System.err.printf("Error: Can't initialize poller-configuration.xml. %s%n", e.getMessage());
        System.exit(1);
    }
    PollerConfig config = PollerConfigFactory.getInstance();

    System.out.printf("Checking service %s on IP %s%n", serviceName, ipAddress);

    org.opennms.netmgt.config.poller.Package pkg = packageName == null
            ? config.getFirstLocalPackageMatch(ipAddress)
            : config.getPackage(packageName);
    if (pkg == null) {
        System.err.printf("Error: Package %s doesn't exist%n", packageName);
        System.exit(1);
    }
    System.out.printf("Package: %s%n", pkg.getName());

    Service svc = config.getServiceInPackage(serviceName, pkg);
    if (svc == null) {
        System.err.printf("Error: Service %s not defined on package %s%n", serviceName, packageName);
        System.exit(1);
    }

    ServiceMonitor monitor = null;
    if (monitorClass == null) {
        monitor = config.getServiceMonitor(serviceName);
        if (monitor == null) {
            System.err.printf("Error: Service %s doesn't have a monitor class defined%n", serviceName);
            System.exit(1);
        }
    } else {
        try {
            final Class<? extends ServiceMonitor> mc = Class.forName(monitorClass)
                    .asSubclass(ServiceMonitor.class);
            monitor = mc.newInstance();
        } catch (Exception e) {
            System.err.printf("Error: Can't instantiate %s because %s%n", monitorClass, e.getMessage());
            System.exit(1);
        }
    }
    System.out.printf("Monitor: %s%n", monitor.getClass().getName());

    if (config.isPolledLocally(ipAddress, serviceName)) {
        for (Parameter p : svc.getParameters()) {
            if (!parameters.containsKey(p.getKey())) {
                String value = p.getValue();
                if (value == null) {
                    try {
                        value = JaxbUtils.marshal(p.getAnyObject());
                    } catch (Exception e) {
                    }
                }
                parameters.put(p.getKey(), value);
            }
        }
        for (Entry<String, Object> e : parameters.entrySet()) {
            System.out.printf("Parameter %s : %s%n", e.getKey(), e.getValue());
        }
        try {
            PollStatus status = monitor.poll(monSvc, parameters);
            System.out.printf("Available ? %s (status %s[%s])%n", status.isAvailable(), status.getStatusName(),
                    status.getStatusCode());
            if (status.isAvailable()) {
                System.out.printf("Response time: %s%n", status.getResponseTime());
            } else {
                if (status.getReason() != null) {
                    System.out.printf("Reason: %s%n", status.getReason());
                }
            }
        } catch (Exception e) {
            System.err.println("Error: Can't execute the monitor. " + e.getMessage());
            System.exit(1);
        }
    } else {
        System.err.printf("Error: Polling is not enabled for service %s using IP %s%n", serviceName, ipAddress);
    }

    System.exit(0);
}