public void addRepository(RepositoryDefinition repositoryDefinition) { this.repositories.put(repositoryDefinition.getName(), repositoryDefinition); }
public void addRepositoryDefinition(RepositoryDefinition repositoryDefinition) { repositoryDefinitions.put(repositoryDefinition.getName(), repositoryDefinition); }
@Inject public BaseVersionManager(SystemContext systemContext, RepositoryManager repositoryManager, CopyUtil copyUtil) { this.systemContext = systemContext; this.repositoryManager = repositoryManager; this.copyUtil = copyUtil; for (RepositoryDefinition repositoryDefinition : repositoryManager.getRepositoryDefinitions()) { String repositoryId = repositoryDefinition.getName(); String workspaceName = repositoryId + "-" + RepositoryConstants.VERSION_STORE; if (repositoryManager.getWorkspaceMapping(workspaceName) != null) { versionWorkspaces.add(workspaceName); } else { throw new RuntimeException(String.format("Something went wrong, version workspace for repository %s does not exist.", repositoryId)); } } }
/** * @return InputStream of node type definition file */ private InputStream getNodeTypeDefinition(String configuration) { InputStream xml; if (StringUtils.isNotEmpty(configuration)) { // 1: try to load the configured file from the classpath xml = getClass().getResourceAsStream(configuration); if (xml != null) { log.info("Custom node types registered using {}", configuration); return xml; } // 2: try to load it from the file system File nodeTypeDefinition = new File(fileSystemHelper.getAbsoluteFileSystemPath(configuration)); if (nodeTypeDefinition.exists()) { try { return new FileInputStream(nodeTypeDefinition); } catch (FileNotFoundException e) { // should never happen log.error("File not found: {}", configuration); } } // 3: defaults to standard nodetypes log.error("Unable to find node type definition: {} for repository {}", configuration, this.repositoryMapping.getName()); } // initialize default magnolia nodetypes xml = getClass().getResourceAsStream(MGNL_NODETYPES); return xml; }
private void registerNameSpacesAndNodeTypes(String physicalWorkspaceName, RepositoryDefinition repositoryDefinition, Provider provider) { try { Session session = provider.getSystemSession(physicalWorkspaceName); try { provider.registerNamespace(RepositoryConstants.NAMESPACE_PREFIX, RepositoryConstants.NAMESPACE_URI, session.getWorkspace()); provider.registerNodeTypes(); } finally { session.logout(); } } catch (RepositoryException e) { log.error("Failed to initialize workspace {} in repository {}", physicalWorkspaceName, repositoryDefinition.getName(), e); } }
@Override public void shutdown() { log.info("Shutting down JCR"); for (RepositoryDefinition repositoryDefinition : workspaceMapping.getRepositoryDefinitions()) { Provider provider = workspaceMapping.getRepositoryProvider(repositoryDefinition.getName()); provider.shutdownRepository(); } workspaceMapping.clearAll(); }
@Override public void loadRepository(RepositoryDefinition definition) throws RepositoryNotInitializedException, InstantiationException, IllegalAccessException, ClassNotFoundException { log.info("Loading JCR {}", definition.getName()); // create also mgnlVersion and mgnlSystem for each repository. Set<String> workspaces = new LinkedHashSet<>(definition.getWorkspaces()); workspaces.addAll(Arrays.asList(RepositoryConstants.SYSTEM, RepositoryConstants.VERSION_STORE)); definition.getWorkspaces().clear(); definition.getWorkspaces().addAll(workspaces); Class<? extends Provider> providerClass = Classes.getClassFactory().forName(definition.getProvider()); Provider provider = Components.getComponentProvider().newInstance(providerClass); provider.init(definition); Repository repository = provider.getUnderlyingRepository(); workspaceMapping.setRepository(definition.getName(), repository); workspaceMapping.setRepositoryProvider(definition.getName(), provider); if (definition.isLoadOnStartup()) { for (String workspaceId : workspaces) { registerNameSpacesAndNodeTypes(workspaceId, definition, provider); } } }
} catch (InvocationTargetException ite) { if (ite.getTargetException() instanceof NoSuchNodeTypeException) { log.info("Registering nodetype {} on repository {}", ntname, repositoryMapping.getName());
repositoryName = repositoryMapping.getName();
String repoName = repoDefinition.getName(); Provider provider = workspaceMapping.getRepositoryProvider(repoName); Session session = provider.getSystemSession("default");
@Test public void repositoryIsClusteredAndClusterMaster() throws Exception { // GIVEN MagnoliaConfigurationProperties properties = mock(MagnoliaConfigurationProperties.class); given(properties.getProperty(MagnoliaConfigurationProperties.MAGNOLIA_REPOSITORIES_CLUSTER_CONFIG)).willReturn("website"); given(properties.getBooleanProperty(MagnoliaConfigurationProperties.MAGNOLIA_REPOSITORIES_CLUSTER_MASTER)).willReturn(true); given(properties.hasProperty(MagnoliaConfigurationProperties.MAGNOLIA_REPOSITORIES_CLUSTER_MASTER)).willReturn(true); WorkspaceMapping workspaceMapping = new WorkspaceMapping(); RepositoryDefinition repositoryDefinition = mock(RepositoryDefinition.class); Map<String, String> definitionMap = newHashMap(); definitionMap.put("website", "website"); definitionMap.put("null-mgnlVersion", "mgnlVersion"); given(repositoryDefinition.getName()).willReturn("magnolia"); given(repositoryDefinition.getParameters()).willReturn(definitionMap); given(repositoryDefinition.getWorkspaces()).willReturn(newArrayList("website", "mgnlVersion")); workspaceMapping.addRepositoryDefinition(repositoryDefinition); workspaceMapping.addWorkspaceMapping(new WorkspaceMappingDefinition("magnolia-mgnlVersion", "magnolia", "mgnlVersion")); workspaceMapping.addWorkspaceMapping(new WorkspaceMappingDefinition("website", "magnolia", "website")); DefaultRepositoryManager repositoryManager = new DefaultRepositoryManager(properties, workspaceMapping); ComponentsTestUtil.setInstance(RepositoryManager.class, repositoryManager); // WHEN ModuleManagerImpl moduleManager = new TestModuleManagerImpl(moduleVersionHandlers, context, moduleDefinitionReader, moduleRegistry, repositoryManager); moduleManager.applyDeltas(moduleDefinition, newArrayList(delta), context); // THEN assertThat(websiteSession.hasPendingChanges(), is(false)); }
assertEquals("magnolia", magnolia.getName()); assertEquals("provider-class", magnolia.getProvider()); assertTrue(magnolia.isLoadOnStartup()); assertEquals("anotherRepository", anotherRepository.getName()); assertEquals("another-provider-class", anotherRepository.getProvider()); assertFalse(anotherRepository.isLoadOnStartup()); assertEquals("repositoryWithoutWorkspaces", repositoryWithoutWorkspaces.getName()); assertEquals("third-provider-class", repositoryWithoutWorkspaces.getProvider()); assertFalse(repositoryWithoutWorkspaces.isLoadOnStartup());