@Override public void upgrade() { LOG.info("Updating metadata from version 6 to 7"); List<String> sqls = Arrays.asList( "ALTER TABLE attributes ADD COLUMN visibleExpression TEXT", "ALTER TABLE attributes ADD COLUMN validationExpression TEXT"); sqls.forEach( sql -> { try { LOG.info(sql); jdbcTemplate.execute(sql); } catch (DataAccessException e) { LOG.error(e.getMessage()); } }); LOG.info("Create bare mysql repository collection for the metadata..."); DataServiceImpl dataService = new DataServiceImpl(); // Get the undecorated repos MysqlRepositoryCollection undecoratedMySQL = new MysqlRepositoryCollection() { @Override protected MysqlRepository createMysqlRepository() { return new MysqlRepository( dataService, dataSource, new AsyncJdbcTemplate(new JdbcTemplate(dataSource))); } @Override public boolean hasRepository(String name) { throw new UnsupportedOperationException(); } }; MetaDataService metaData = new MetaDataServiceImpl(dataService); RunAsSystemProxy.runAsSystem(() -> metaData.setDefaultBackend(undecoratedMySQL)); searchService.delete(AttributeMetaDataMetaData.ENTITY_NAME); searchService.createMappings(AttributeMetaDataMetaData.INSTANCE); searchService.rebuildIndex( undecoratedMySQL.getRepository(AttributeMetaDataMetaData.ENTITY_NAME), AttributeMetaDataMetaData.INSTANCE); }
public void bootstrap() { if (!searchService.hasMapping(AttributeMetadata.ATTRIBUTE_META_DATA)) { LOG.debug( "No index for Attribute found, asuming missing index, schedule (re)index for all entities"); metaDataService .getRepositories() .forEach(repo -> indexActionRegisterService.register(repo.getName(), null)); LOG.debug("Done scheduling (re)index jobs for all entities"); } else { LOG.debug("Index for Attribute found, index is present, no (re)index needed"); List<IndexJobExecution> failedIndexJobs = dataService .findAll( IndexJobExecutionMeta.INDEX_JOB_EXECUTION, new QueryImpl<IndexJobExecution>().eq(JobExecutionMetaData.STATUS, FAILED), IndexJobExecution.class) .collect(Collectors.toList()); failedIndexJobs.forEach(job -> registerNewIndexActionForDirtyJobs(job)); } }