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:com.thoughtworks.go.server.service.ScheduledPipelineLoaderIntegrationTest.java

private Pipeline createAndLoadModifyOneFilePipeline(PipelineConfig pipelineConfig) {
    MaterialConfigs expandedConfigs = materialExpansionService
            .expandMaterialConfigsForScheduling(pipelineConfig.materialConfigs());
    MaterialRevisions materialRevisions = ModificationsMother
            .modifyOneFile(new MaterialConfigConverter().toMaterials(expandedConfigs));
    Pipeline building = PipelineMother.buildingWithRevisions(pipelineConfig, materialRevisions);
    Pipeline pipeline = dbHelper.savePipelineWithMaterials(building);
    final long jobId = pipeline.getStages().get(0).getJobInstances().get(0).getId();
    return (Pipeline) transactionTemplate.execute(new TransactionCallback() {
        public Object doInTransaction(TransactionStatus status) {
            return loader.pipelineWithPasswordAwareBuildCauseByBuildId(jobId);
        }//from  w w w .  j a  v a 2 s .  co m
    });
}

From source file:org.wallride.service.PageService.java

@CacheEvict(value = WallRideCacheConfiguration.PAGE_CACHE, allEntries = true)
@Transactional(propagation = Propagation.NOT_SUPPORTED)
public List<Page> bulkDeletePage(PageBulkDeleteRequest bulkDeleteRequest, BindingResult result) {
    List<Page> pages = new ArrayList<>();
    for (long id : bulkDeleteRequest.getIds()) {
        final PageDeleteRequest deleteRequest = new PageDeleteRequest.Builder().id(id)
                .language(bulkDeleteRequest.getLanguage()).build();

        final BeanPropertyBindingResult r = new BeanPropertyBindingResult(deleteRequest, "request");
        r.setMessageCodesResolver(messageCodesResolver);

        TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager);
        transactionTemplate.setPropagationBehavior(TransactionTemplate.PROPAGATION_REQUIRES_NEW);
        Page page = null;//ww  w  .j av  a2 s  . c o  m
        try {
            page = transactionTemplate.execute(new TransactionCallback<Page>() {
                public Page doInTransaction(TransactionStatus status) {
                    try {
                        return deletePage(deleteRequest, r);
                    } catch (BindException e) {
                        throw new RuntimeException(e);
                    }
                }
            });
            pages.add(page);
        } catch (Exception e) {
            logger.debug("Errors: {}", r);
            result.addAllErrors(r);
        }
    }
    return pages;
}

From source file:dao.DashboardDAO.java

public static ObjectNode getPagedConfidentialDatasetsByManagerId(String managerId, String platform, int page,
        int size) {

    DataSourceTransactionManager tm = new DataSourceTransactionManager(getJdbcTemplate().getDataSource());
    TransactionTemplate txTemplate = new TransactionTemplate(tm);

    return txTemplate.execute(new TransactionCallback<ObjectNode>() {

        public ObjectNode doInTransaction(TransactionStatus status) {
            List<Map<String, Object>> rows = new ArrayList<>(size);
            long count = getPagedDashboardDatasets(managerId, GET_CONFIDENTIAL_DATASETS_FILTER_PLATFORM,
                    platform, null, page, size, rows);

            List<DashboardDataset> datasets = new ArrayList<>();
            for (Map row : rows) {
                DashboardDataset dashboardDataset = new DashboardDataset();
                dashboardDataset.datasetId = (Long) row.get("dataset_id");
                dashboardDataset.datasetName = (String) row.get("name");
                dashboardDataset.ownerId = (String) row.get("owner_id");
                if (dashboardDataset.datasetId != null && dashboardDataset.datasetId > 0) {
                    dashboardDataset.fields = getJdbcTemplate().queryForList(
                            GET_CONFIDENTIAL_FIELDS_BY_DATASET_ID, String.class, dashboardDataset.datasetId);
                }/*from w  w w.ja  va  2s. c om*/
                datasets.add(dashboardDataset);
            }

            ObjectNode resultNode = Json.newObject();
            resultNode.put("status", "ok");
            resultNode.put("count", count);
            resultNode.put("page", page);
            resultNode.put("itemsPerPage", size);
            resultNode.put("totalPages", (int) Math.ceil(count / ((double) size)));
            resultNode.set("datasets", Json.toJson(datasets));
            return resultNode;
        }
    });
}

From source file:org.jspresso.hrsample.backend.JspressoUnitOfWorkTest.java

/**
 * Test uninitialized reference properties merge on commit. See bug #1023.
 *//*from  w ww .  j  a  va  2  s .  com*/
@Test
public void testUnititializedPropertiesMerge() {
    final HibernateBackendController hbc = (HibernateBackendController) getBackendController();

    EnhancedDetachedCriteria departmentCriteria = EnhancedDetachedCriteria.forClass(Department.class);
    List<Department> departments = hbc.findByCriteria(departmentCriteria, EMergeMode.MERGE_KEEP,
            Department.class);
    final Department department = departments.get(0);
    final Company existingCompany = (Company) department.straightGetProperty(Department.COMPANY);
    assertFalse("Company property is already initialized", Hibernate.isInitialized(existingCompany));

    Serializable newCompanyId = hbc.getTransactionTemplate().execute(new TransactionCallback<Serializable>() {

        @Override
        public Serializable doInTransaction(TransactionStatus status) {
            Department departmentClone = hbc.cloneInUnitOfWork(department);
            Company newCompany = hbc.getEntityFactory().createEntityInstance(Company.class);
            newCompany.setName("NewCompany");
            departmentClone.setCompany(newCompany);
            return newCompany.getId();
        }
    });
    assertEquals("New company reference is not correctly merged", newCompanyId,
            department.getCompany().getId());
    assertEquals("New company name is not correctly merged", "NewCompany", department.getCompany().getName());

    hbc.getTransactionTemplate().execute(new TransactionCallbackWithoutResult() {

        @Override
        public void doInTransactionWithoutResult(TransactionStatus status) {
            List<IEntity> clonedEntities = hbc
                    .cloneInUnitOfWork(Arrays.asList((IEntity) existingCompany, department));
            Company existingCompanyClone = (Company) clonedEntities.get(0);
            assertFalse("Company clone is already initialized", Hibernate.isInitialized(existingCompanyClone));
            Department departmentClone = (Department) clonedEntities.get(1);
            departmentClone.setCompany(existingCompanyClone);
        }
    });
    assertEquals("New company reference is not correctly merged", existingCompany.getId(),
            department.getCompany().getId());

    final Department otherDepartment = departments.get(1);
    Department deptFromUow = hbc.getTransactionTemplate().execute(new TransactionCallback<Department>() {

        @Override
        public Department doInTransaction(TransactionStatus status) {
            Department d = hbc.findById(otherDepartment.getId(), null, Department.class);
            return d;
        }
    });
    assertFalse("Department Company property from UOW is initialized",
            Hibernate.isInitialized(deptFromUow.straightGetProperty(Department.COMPANY)));
    hbc.merge(deptFromUow, EMergeMode.MERGE_EAGER);
}

From source file:org.openvpms.component.business.service.archetype.ArchetypeServiceActTestCase.java

/**
 * Creates two acts, act1 and act2 with a relationship between them.
 * In a transaction, deletes act2 and associates act1 with act3.
 *///from w  w w . ja v  a  2 s  .com
@Test
public void testActReplacementInTxn() {
    final Act act1 = createSimpleAct("act1", "IN_PROGRESS");
    final Act act2 = createSimpleAct("act2", "IN_PROGRESS");
    final Act act3 = createSimpleAct("act3", "IN_PROGRESS");

    // create a relationship from act1 -> act2
    final ActRelationship relAct1Act2 = addRelationship(act1, act2, "act1->act2");

    save(Arrays.asList(act1, act2));
    template.execute(new TransactionCallback<Object>() {
        public Object doInTransaction(TransactionStatus status) {
            remove(act2);
            Act reloaded = reload(act1);

            // relationship should be removed
            assertFalse(reloaded.getActRelationships().contains(relAct1Act2));

            // add a new relationship
            addRelationship(reloaded, act3, "act1->act3");
            save(reloaded);
            save(act3);
            return null;
        }
    });

    Act reloaded = reload(act1);
    ActBean relBean = new ActBean(reloaded);
    assertTrue(relBean.getActs().contains(act3));
}

From source file:dao.SearchDAO.java

public static ObjectNode getPagedDatasetByKeyword(String category, String keyword, String source, int page,
        int size) {
    List<Dataset> pagedDatasets = new ArrayList<Dataset>();
    final JdbcTemplate jdbcTemplate = getJdbcTemplate();
    javax.sql.DataSource ds = jdbcTemplate.getDataSource();
    DataSourceTransactionManager tm = new DataSourceTransactionManager(ds);

    TransactionTemplate txTemplate = new TransactionTemplate(tm);

    ObjectNode result;// ww w .j  a  v  a  2 s.  c om
    result = txTemplate.execute(new TransactionCallback<ObjectNode>() {
        public ObjectNode doInTransaction(TransactionStatus status) {
            List<Map<String, Object>> rows = null;
            if (StringUtils.isBlank(source) || source.toLowerCase().equalsIgnoreCase("all")) {
                String query = SEARCH_DATASET_WITH_PAGINATION.replace("$keyword", keyword);
                rows = jdbcTemplate.queryForList(query, (page - 1) * size, size);
            } else {
                String query = SEARCH_DATASET_BY_SOURCE_WITH_PAGINATION.replace("$keyword", keyword);
                rows = jdbcTemplate.queryForList(query, source, (page - 1) * size, size);
            }

            for (Map row : rows) {

                Dataset ds = new Dataset();
                ds.id = (Long) row.get(DatasetRowMapper.DATASET_ID_COLUMN);
                ds.name = (String) row.get(DatasetRowMapper.DATASET_NAME_COLUMN);
                ds.source = (String) row.get(DatasetRowMapper.DATASET_SOURCE_COLUMN);
                ds.urn = (String) row.get(DatasetRowMapper.DATASET_URN_COLUMN);
                ds.schema = (String) row.get(DatasetRowMapper.DATASET_SCHEMA_COLUMN);
                pagedDatasets.add(ds);
            }
            long count = 0;
            try {
                count = jdbcTemplate.queryForObject("SELECT FOUND_ROWS()", Long.class);
            } catch (EmptyResultDataAccessException e) {
                Logger.error("Exception = " + e.getMessage());
            }

            ObjectNode resultNode = Json.newObject();
            resultNode.put("count", count);
            resultNode.put("page", page);
            resultNode.put("category", category);
            resultNode.put("source", source);
            resultNode.put("itemsPerPage", size);
            resultNode.put("totalPages", (int) Math.ceil(count / ((double) size)));
            resultNode.set("data", Json.toJson(pagedDatasets));

            return resultNode;
        }
    });

    return result;
}

From source file:org.jspresso.hrsample.backend.JspressoModelTest.java

/**
 * Test translated name./* w w  w  .j  a  v a  2 s .c om*/
 */
@Test
public void testPropertyTranslation() {
    final HibernateBackendController hbc = (HibernateBackendController) getBackendController();
    Serializable cityId = hbc.getTransactionTemplate().execute(new TransactionCallback<Serializable>() {
        @Override
        public Serializable doInTransaction(TransactionStatus status) {
            City c = hbc.getEntityFactory().createEntityInstance(City.class);
            c.setNameRaw("raw");
            c.setName("test");
            hbc.registerForUpdate(c);
            return c.getId();
        }
    });
    final City c = hbc.findById(cityId, EMergeMode.MERGE_KEEP, City.class);
    assertEquals("A message translation should have been created", 1, c.getPropertyTranslations().size());
    hbc.getTransactionTemplate().execute(new TransactionCallbackWithoutResult() {
        @Override
        protected void doInTransactionWithoutResult(TransactionStatus status) {
            City cClone = hbc.cloneInUnitOfWork(c);
            cClone.setName("modified");
        }
    });
    hbc.reload(c);
    assertEquals("The message translation should have been updated", "modified", c.getName());
}

From source file:dao.DatasetsDAO.java

public static ObjectNode getPagedDatasets(String urn, Integer page, Integer size, String user) {
    ObjectNode result = Json.newObject();

    Integer userId = UserDAO.getUserIDByUserName(user);

    javax.sql.DataSource ds = getJdbcTemplate().getDataSource();
    DataSourceTransactionManager tm = new DataSourceTransactionManager(ds);
    TransactionTemplate txTemplate = new TransactionTemplate(tm);
    final Integer id = userId;

    result = txTemplate.execute(new TransactionCallback<ObjectNode>() {
        public ObjectNode doInTransaction(TransactionStatus status) {

            ObjectNode resultNode = Json.newObject();
            List<Dataset> pagedDatasets = new ArrayList<Dataset>();
            List<Map<String, Object>> rows = null;
            if (id != null && id > 0) {
                if (StringUtils.isBlank(urn)) {
                    rows = getJdbcTemplate().queryForList(SELECT_PAGED_DATASET_BY_CURRENT_USER,
                            (page - 1) * size, size, id, id);
                } else {
                    rows = getJdbcTemplate().queryForList(SELECT_PAGED_DATASET_BY_URN_CURRENT_USER, urn + "%",
                            (page - 1) * size, size, id, id);
                }//  w w  w  .  jav a 2 s. c om
            } else {
                if (StringUtils.isBlank(urn)) {
                    rows = getJdbcTemplate().queryForList(SELECT_PAGED_DATASET, (page - 1) * size, size);
                } else {
                    rows = getJdbcTemplate().queryForList(SELECT_PAGED_DATASET_BY_URN, urn + "%",
                            (page - 1) * size, size);
                }

            }

            long count = 0;
            try {

                if (StringUtils.isBlank(urn)) {
                    count = getJdbcTemplate().queryForObject(GET_PAGED_DATASET_COUNT, Long.class);
                } else {
                    count = getJdbcTemplate().queryForObject(GET_PAGED_DATASET_COUNT_BY_URN, Long.class,
                            urn + "%");
                }
            } catch (EmptyResultDataAccessException e) {
                Logger.error("Exception = " + e.getMessage());
            }

            for (Map row : rows) {

                Dataset ds = new Dataset();
                Timestamp modified = (Timestamp) row.get(DatasetWithUserRowMapper.DATASET_MODIFIED_TIME_COLUMN);
                ds.id = (Long) row.get(DatasetWithUserRowMapper.DATASET_ID_COLUMN);
                ds.name = (String) row.get(DatasetWithUserRowMapper.DATASET_NAME_COLUMN);
                ds.source = (String) row.get(DatasetWithUserRowMapper.DATASET_SOURCE_COLUMN);
                ds.urn = (String) row.get(DatasetWithUserRowMapper.DATASET_URN_COLUMN);
                ds.schema = (String) row.get(DatasetWithUserRowMapper.DATASET_SCHEMA_COLUMN);
                String strOwner = (String) row.get(DatasetWithUserRowMapper.DATASET_OWNER_ID_COLUMN);
                String strOwnerName = (String) row.get(DatasetWithUserRowMapper.DATASET_OWNER_NAME_COLUMN);
                Long sourceModifiedTime = (Long) row
                        .get(DatasetWithUserRowMapper.DATASET_SOURCE_MODIFIED_TIME_COLUMN);
                String properties = (String) row.get(DatasetWithUserRowMapper.DATASET_PROPERTIES_COLUMN);
                try {
                    if (StringUtils.isNotBlank(properties)) {
                        ds.properties = Json.parse(properties);
                    }
                } catch (Exception e) {
                    Logger.error(e.getMessage());
                }

                if (modified != null && sourceModifiedTime != null && sourceModifiedTime > 0) {
                    ds.modified = modified;
                    ds.formatedModified = modified.toString();
                }

                String[] owners = null;
                if (StringUtils.isNotBlank(strOwner)) {
                    owners = strOwner.split(",");
                }
                String[] ownerNames = null;
                if (StringUtils.isNotBlank(strOwnerName)) {
                    ownerNames = strOwnerName.split(",");
                }
                ds.owners = new ArrayList<User>();
                if (owners != null && ownerNames != null) {
                    if (owners.length == ownerNames.length) {
                        for (int i = 0; i < owners.length; i++) {
                            User datasetOwner = new User();
                            datasetOwner.userName = owners[i];
                            if (datasetOwner.userName.equalsIgnoreCase(user)) {
                                ds.isOwned = true;
                            }
                            if (StringUtils.isBlank(ownerNames[i]) || ownerNames[i].equalsIgnoreCase("*")) {
                                datasetOwner.name = owners[i];
                            } else {
                                datasetOwner.name = ownerNames[i];
                            }
                            ds.owners.add(datasetOwner);
                        }
                    } else {
                        Logger.error("getPagedDatasets get wrong owner and names. Dataset ID: "
                                + Long.toString(ds.id) + " Owner: " + owners + " Owner names: " + ownerNames);
                    }
                }

                Integer favoriteId = (Integer) row.get(DatasetWithUserRowMapper.FAVORITE_DATASET_ID_COLUMN);
                Long watchId = (Long) row.get(DatasetWithUserRowMapper.DATASET_WATCH_ID_COLUMN);

                Long schemaHistoryRecordCount = 0L;
                try {
                    schemaHistoryRecordCount = getJdbcTemplate().queryForObject(CHECK_SCHEMA_HISTORY,
                            Long.class, ds.id);
                } catch (EmptyResultDataAccessException e) {
                    Logger.error("Exception = " + e.getMessage());
                }

                if (StringUtils.isNotBlank(ds.urn)) {
                    if (ds.urn.substring(0, 4).equalsIgnoreCase(DatasetRowMapper.HDFS_PREFIX)) {
                        ds.hdfsBrowserLink = Play.application().configuration().getString(HDFS_BROWSER_URL_KEY)
                                + ds.urn.substring(DatasetRowMapper.HDFS_URN_PREFIX_LEN);
                    }
                }
                if (favoriteId != null && favoriteId > 0) {
                    ds.isFavorite = true;
                } else {
                    ds.isFavorite = false;
                }
                if (watchId != null && watchId > 0) {
                    ds.watchId = watchId;
                    ds.isWatched = true;
                } else {
                    ds.isWatched = false;
                    ds.watchId = 0L;
                }
                if (schemaHistoryRecordCount != null && schemaHistoryRecordCount > 0) {
                    ds.hasSchemaHistory = true;
                } else {
                    ds.hasSchemaHistory = false;
                }
                pagedDatasets.add(ds);
            }

            resultNode.put("count", count);
            resultNode.put("page", page);
            resultNode.put("itemsPerPage", size);
            resultNode.put("totalPages", (int) Math.ceil(count / ((double) size)));
            resultNode.set("datasets", Json.toJson(pagedDatasets));
            return resultNode;
        }
    });
    return result;
}

From source file:com.devnexus.ting.core.service.impl.BusinessServiceImpl.java

@Override
public CfpSubmission saveAndNotifyCfpSubmission(final CfpSubmission cfpSubmission) {
    final BusinessService businessService = this;
    final CfpSubmission savedCfpSubmission = transactionTemplate
            .execute(new TransactionCallback<CfpSubmission>() {
                public CfpSubmission doInTransaction(TransactionStatus status) {
                    return businessService.saveCfpSubmission(cfpSubmission);
                }/*w w  w  .  j  a v  a 2 s. c o m*/
            });

    if (mailSettings.isEmailEnabled()) {
        mailChannel.send(MessageBuilder.withPayload(cfpSubmission).build());
    }

    return savedCfpSubmission;
}

From source file:dao.DashboardDAO.java

public static ObjectNode getPagedDescriptionDatasetsByManagerId(String managerId, String platform, int option,
        int page, int size) {

    DataSourceTransactionManager tm = new DataSourceTransactionManager(getJdbcTemplate().getDataSource());
    TransactionTemplate txTemplate = new TransactionTemplate(tm);

    return txTemplate.execute(new TransactionCallback<ObjectNode>() {

        public ObjectNode doInTransaction(TransactionStatus status) {
            Boolean isDatasetLevel = true;
            String description;//from www .  j a  v  a  2  s  .c o m

            final String datasetQuery;
            switch (option) {
            case 1:
                datasetQuery = GET_DATASETS_WITH_DESCRIPTION_FILTER_PLATFORM;
                description = "has dataset level description";
                break;
            case 2:
                datasetQuery = GET_DATASETS_WITHOUT_DESCRIPTION_FILTER_PLATFORM;
                description = "no dataset level description";
                break;
            case 3:
                datasetQuery = GET_DATASETS_WITH_FULL_FIELD_DESCRIPTION_FILTER_PLATFORM;
                description = "all fields have description";
                isDatasetLevel = false;
                break;
            case 4:
                datasetQuery = GET_DATASETS_WITH_ANY_FIELD_DESCRIPTION_FILTER_PLATFORM;
                description = "has field description";
                isDatasetLevel = false;
                break;
            case 5:
                datasetQuery = GET_DATASETS_WITH_NO_FIELD_DESCRIPTION_FILTER_PLATFORM;
                description = "no field description";
                isDatasetLevel = false;
                break;
            case 6:
                datasetQuery = GET_ALL_DATASETS_BY_ID_FILTER_PLATFORM;
                description = "";
                break;
            default:
                datasetQuery = GET_ALL_DATASETS_BY_ID_FILTER_PLATFORM;
                description = "";
            }

            List<Map<String, Object>> rows = new ArrayList<>(size);
            long count = getPagedDashboardDatasets(managerId, datasetQuery, platform, null, page, size, rows);

            List<DashboardDataset> datasets = new ArrayList<>();
            for (Map row : rows) {
                DashboardDataset dashboardDataset = new DashboardDataset();
                dashboardDataset.datasetId = (Long) row.get("dataset_id");
                dashboardDataset.datasetName = (String) row.get("name");
                dashboardDataset.ownerId = (String) row.get("owner_id");
                if (dashboardDataset.datasetId != null && dashboardDataset.datasetId > 0) {
                    if (isDatasetLevel) {
                        dashboardDataset.fields = getJdbcTemplate().queryForList(GET_DATASET_LEVEL_COMMENTS,
                                String.class, dashboardDataset.datasetId);
                    } else {
                        dashboardDataset.fields = getJdbcTemplate().queryForList(GET_FIELDS_WITH_DESCRIPTION,
                                String.class, dashboardDataset.datasetId);
                    }
                }
                datasets.add(dashboardDataset);
            }

            ObjectNode resultNode = Json.newObject();
            resultNode.put("status", "ok");
            resultNode.put("count", count);
            resultNode.put("page", page);
            resultNode.put("description", description);
            resultNode.put("itemsPerPage", size);
            resultNode.put("isDatasetLevel", isDatasetLevel);
            resultNode.put("totalPages", (int) Math.ceil(count / ((double) size)));
            resultNode.set("datasets", Json.toJson(datasets));
            return resultNode;
        }
    });
}