/** * Gets the low-level SQL Repository of the given name. * * @param repositoryName the repository name * @return the repository * @since 5.9.5 */ public RepositoryManagement getRepository(String repositoryName) { RepositoryService repositoryService = Framework.getService(RepositoryService.class); org.nuxeo.ecm.core.model.Repository repository = repositoryService.getRepository(repositoryName); if (repository == null) { throw new RuntimeException("Unknown repository: " + repositoryName); } if (repository instanceof org.nuxeo.ecm.core.storage.sql.Repository) { // (JCA) ConnectionFactoryImpl already implements Repository return (org.nuxeo.ecm.core.storage.sql.Repository) repository; } else { throw new RuntimeException("Unknown repository class: " + repository.getClass().getName()); } }
@Override public String probeState() { List<String> repositoryNames = Framework.getService(RepositoryService.class).getRepositoryNames(); if (repositoryNames.stream().map(this::probeRepository).anyMatch(isEqual(MIGRATION_STATE_LIFECYCLE))) { return MIGRATION_STATE_LIFECYCLE; } return MIGRATION_STATE_PROPERTY; }
@Override public void afterStart(ComponentManager mgr, boolean isResume) { initRepositories(); // call all RepositoryInitializationHandler }
/** * Initializes all the repositories. Requires an active transaction. * * @since 9.3 */ protected void doInitRepositories() { // give up if no handler configured RepositoryInitializationHandler handler = RepositoryInitializationHandler.getInstance(); if (handler == null) { return; } // invoke handlers for (String name : getRepositoryNames()) { initializeRepository(handler, name); } }
/** * Creates all the repositories. Requires an active transaction. * * @since 9.3 */ protected void doCreateRepositories() { repositories.clear(); for (String repositoryName : getRepositoryNames()) { RepositoryFactory factory = getFactory(repositoryName); if (factory == null) { continue; } Repository repository = (Repository) factory.call(); repositories.put(repositoryName, repository); } }
@Override public BinaryManagerStatus garbageCollectBinaries(boolean delete) { List<BinaryGarbageCollector> gcs = getGarbageCollectors(); // start gc long start = System.currentTimeMillis(); for (BinaryGarbageCollector gc : gcs) { gc.start(); } // in all repositories, mark referenced binaries // the marking itself will call back into the appropriate gc's mark method RepositoryService repositoryService = Framework.getService(RepositoryService.class); for (String repositoryName : repositoryService.getRepositoryNames()) { Repository repository = repositoryService.getRepository(repositoryName); repository.markReferencedBinaries(); } // stop gc BinaryManagerStatus globalStatus = new BinaryManagerStatus(); for (BinaryGarbageCollector gc : gcs) { gc.stop(delete); BinaryManagerStatus status = gc.getStatus(); globalStatus.numBinaries += status.numBinaries; globalStatus.sizeBinaries += status.sizeBinaries; globalStatus.numBinariesGC += status.numBinariesGC; globalStatus.sizeBinariesGC += status.sizeBinariesGC; } globalStatus.gcDuration = System.currentTimeMillis() - start; return globalStatus; }
@Override public int getApplicationStartedOrder() { RepositoryService component = (RepositoryService) Framework.getRuntime() .getComponent( "org.nuxeo.ecm.core.repository.RepositoryServiceComponent"); return component.getApplicationStartedOrder() / 2; }
@Override public String probeState() { List<String> repositoryNames = Framework.getService(RepositoryService.class).getRepositoryNames(); if (repositoryNames.stream().map(this::probeRepository).anyMatch(isEqual(MIGRATION_STATE_RELATIONS))) { return MIGRATION_STATE_RELATIONS; } return MIGRATION_STATE_FACETS; }
protected void initFulltextConfiguration() { RepositoryService repositoryService = Framework.getService(RepositoryService.class); Repository repository = repositoryService.getRepository(repositoryName); fulltextConfiguration = repository.getFulltextConfiguration(); }
protected void initializeSession(FeaturesRunner runner) { if (cleaned) { // reinitialize repositories content RepositoryService repositoryService = Framework.getService(RepositoryService.class); repositoryService.initRepositories(); cleaned = false; } CoreScope.INSTANCE.enter(); createCoreSession(); if (repositoryInit != null) { repositoryInit.populate(session); session.save(); waitForAsyncCompletion(); } // save current root acp DocumentModel root = session.getRootDocument(); rootAcp = root.getACP(); }
@Override public String probeState() { List<String> repositoryNames = Framework.getService(RepositoryService.class).getRepositoryNames(); if (repositoryNames.stream().map(this::probeRepository).anyMatch(isEqual(MIGRATION_STATE_RELATION))) { return MIGRATION_STATE_RELATION; } return MIGRATION_STATE_PROPERTY; }
/** * Creates the session. It will be destroyed by calling {@link #destroy}. */ protected SessionInfo createSession() { RepositoryService repositoryService = Framework.getService(RepositoryService.class); Repository repository = repositoryService.getRepository(repositoryName); if (repository == null) { throw new LocalException("No such repository: " + repositoryName); } Session session = repository.getSession(); TransactionHelper.registerSynchronization(this); SessionInfo si = new SessionInfo(session); sessionHolder.set(si); allSessions.add(si); if (log.isDebugEnabled()) { log.debug("Adding thread " + Thread.currentThread().getName() + " for CoreSession: " + sessionId); } return si; }
@Override public void run(String step, MigrationContext migrationContext) { if (!MIGRATION_STEP_RELATION_TO_PROPERTY.equals(step)) { throw new NuxeoException("Unknown migration step: " + step); } this.migrationContext = migrationContext; reportProgress("Initializing", 0, -1); // unknown List<String> repositoryNames = Framework.getService(RepositoryService.class).getRepositoryNames(); try { repositoryNames.forEach(this::migrateRepository); } catch (MigrationShutdownException e) { return; } }
@Override public void run(String step, MigrationContext migrationContext) { if (!MIGRATION_STEP_RELATIONS_TO_FACETS.equals(step)) { throw new NuxeoException("Unknown migration step: " + step); } this.migrationContext = migrationContext; reportProgress("Initializing", 0, -1); // unknown List<String> repositoryNames = Framework.getService(RepositoryService.class).getRepositoryNames(); try { repositoryNames.forEach(this::migrateRepository); } catch (MigrationShutdownException e) { return; } }
@Override public void run(String step, MigrationContext migrationContext) { if (!MIGRATION_STEP_LIFECYCLE_TO_PROPERTY.equals(step)) { throw new NuxeoException("Unknown migration step: " + step); } this.migrationContext = migrationContext; reportProgress("Initializing", 0, -1); // unknown List<String> repositoryNames = Framework.getService(RepositoryService.class).getRepositoryNames(); try { repositoryNames.forEach(this::migrateRepository); reportProgress("Done", 1, 1); } catch (MigrationShutdownException e) { return; } }
/** * Removes the orphan versions. * <p> * A version stays referenced, and therefore is not removed, if any proxy points to a version in the version history * of any live document, or in the case of tree snapshot if there is a snapshot containing a version in the version * history of any live document. * * @param commitSize the maximum number of orphan versions to delete in one transaction * @return the number of orphan versions deleted * @since 9.1 */ public long cleanupOrphanVersions(long commitSize) { RepositoryService repositoryService = Framework.getService(RepositoryService.class); if (repositoryService == null) { // not initialized return 0; } List<String> repositoryNames = repositoryService.getRepositoryNames(); AtomicLong count = new AtomicLong(); for (String repositoryName : repositoryNames) { TransactionHelper.runInTransaction(() -> { CoreInstance.doPrivileged(repositoryName, (CoreSession session) -> { count.addAndGet(doCleanupOrphanVersions(session, commitSize)); }); }); } return count.get(); }