You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by st...@apache.org on 2004/10/15 19:01:13 UTC
svn commit: rev 54857 - in incubator/jackrabbit/trunk/src: conf java/org/apache/jackrabbit/core java/org/apache/jackrabbit/core/config java/org/apache/jackrabbit/core/jndi java/org/apache/jackrabbit/core/state java/org/apache/jackrabbit/core/state/xml test/org/apache/jackrabbit/test
Author: stefan
Date: Fri Oct 15 10:01:13 2004
New Revision: 54857
Removed:
incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/DynamicWorkspaceDef.java
incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/RepositoryFactory.java
incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/StableWorkspaceDef.java
incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/WorkspaceDef.java
Modified:
incubator/jackrabbit/trunk/src/conf/repository.xml
incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/ItemImpl.java
incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/RepositoryImpl.java
incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/SessionImpl.java
incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/SystemSession.java
incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/Test.java
incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/WorkspaceImpl.java
incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/config/RepositoryConfig.java
incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/config/WorkspaceConfig.java
incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/jndi/BindableRepository.java
incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/state/PersistenceManager.java
incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/state/xml/XMLPersistenceManager.java
incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/JackrabbitRepositoryStub.java
Log:
changed configuration layout and bootstrapping of repository:
- added jndi support
- workspace configuration is now separated from repository config
Modified: incubator/jackrabbit/trunk/src/conf/repository.xml
==============================================================================
--- incubator/jackrabbit/trunk/src/conf/repository.xml (original)
+++ incubator/jackrabbit/trunk/src/conf/repository.xml Fri Oct 15 10:01:13 2004
@@ -18,14 +18,19 @@
-->
<Workspace name="${wsp.name}">
<!--
- virtual file system of the workspace
+ virtual file system of the workspace:
+ class: FQN of class implementing FileSystem interface
-->
<FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
<param name="path" value="${wsp.home}"/>
</FileSystem>
+ <!--
+ persistence of the workspace:
+ class: FQN of class implementing PersistenceManager interface
+ -->
<PersistenceManager class="org.apache.jackrabbit.core.state.xml.XMLPersistenceManager">
<!-- <param name="someParam" value="someValue"/> -->
</PersistenceManager>
- <SearchIndex path="${wsp.home}/index"/>
+ <SearchIndex path="/index"/>
</Workspace>
</Repository>
Modified: incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/ItemImpl.java
==============================================================================
--- incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/ItemImpl.java (original)
+++ incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/ItemImpl.java Fri Oct 15 10:01:13 2004
@@ -1224,6 +1224,9 @@
* @see Item#isSame(Item)
*/
public boolean isSame(Item otherItem) {
+ if (this == otherItem) {
+ return true;
+ }
if (otherItem instanceof ItemImpl) {
ItemImpl other = (ItemImpl) otherItem;
return id.equals(other.id);
Modified: incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/RepositoryImpl.java
==============================================================================
--- incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/RepositoryImpl.java (original)
+++ incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/RepositoryImpl.java Fri Oct 15 10:01:13 2004
@@ -15,14 +15,18 @@
*/
package org.apache.jackrabbit.core;
-import org.apache.commons.collections.BeanMap;
+import org.apache.jackrabbit.core.config.RepositoryConfig;
+import org.apache.jackrabbit.core.config.WorkspaceConfig;
import org.apache.jackrabbit.core.fs.BasedFileSystem;
import org.apache.jackrabbit.core.fs.FileSystem;
import org.apache.jackrabbit.core.fs.FileSystemException;
import org.apache.jackrabbit.core.fs.FileSystemResource;
import org.apache.jackrabbit.core.nodetype.NodeTypeRegistry;
import org.apache.jackrabbit.core.observation.ObservationManagerFactory;
-import org.apache.jackrabbit.core.state.*;
+import org.apache.jackrabbit.core.state.ItemStateException;
+import org.apache.jackrabbit.core.state.ItemStateProvider;
+import org.apache.jackrabbit.core.state.PersistentItemStateManager;
+import org.apache.jackrabbit.core.state.ReferenceManager;
import org.apache.jackrabbit.core.util.uuid.UUID;
import org.apache.jackrabbit.core.version.VersionManager;
import org.apache.log4j.Logger;
@@ -44,9 +48,10 @@
private static Logger log = Logger.getLogger(RepositoryImpl.class);
- private static final String DEFAULT_WORKSPACE_NAME = "default";
-
- private static final String VERSION_WORKSPACE_NAME = "default";
+ /**
+ * hardcoded uuid of the repository root node
+ */
+ private static final String ROOT_NODE_UUID = "ac3b5c25-613d-4798-8494-ffbcca9c5c6c";
private static final String ANONYMOUS_USER = "anonymous";
@@ -77,6 +82,8 @@
private final NodeTypeRegistry ntReg;
private final VersionManager vMgr;
+ // configuration of the repository
+ private final RepositoryConfig repConfig;
// the master filesystem
private final FileSystem repStore;
// sub file system where the repository stores meta data such as uuid of root node, etc.
@@ -84,8 +91,8 @@
// sub file system where the repository stores versions
private final FileSystem versionStore;
- // map of workspace names and workspace definitions
- private final HashMap wspDefs = new HashMap();
+ // map of workspace names and workspace configurations
+ private final HashMap wspConfigs = new HashMap();
// map of workspace names and workspace item state managers
// (might be shared among multiple workspace instances representing
@@ -111,13 +118,14 @@
private long propsCount = 0;
/**
- * Package private constructor.
+ * private constructor
*
- * @param repStore
- * @param swda
+ * @param repConfig
*/
- RepositoryImpl(FileSystem repStore, StableWorkspaceDef[] swda) throws RepositoryException {
+ private RepositoryImpl(RepositoryConfig repConfig) throws RepositoryException {
+ this.repConfig = repConfig;
// setup file systems
+ repStore = repConfig.getFileSystem();
String fsRootPath = "/meta";
try {
if (!repStore.exists(fsRootPath) || !repStore.isFolder(fsRootPath)) {
@@ -128,7 +136,6 @@
log.error(msg, fse);
throw new RepositoryException(msg, fse);
}
- this.repStore = repStore;
metaDataStore = new BasedFileSystem(repStore, fsRootPath);
fsRootPath = "/versions";
@@ -175,7 +182,14 @@
// ignore
}
}
- rootNodeUUID = new UUID(new String(chars)).toString();
+ /**
+ * use hard-coded uuid for root node rather than generating
+ * a different uuid per repository instance; using a
+ * hard-coded uuid makes it easier to copy/move entire
+ * workspaces from one repository instance to another.
+ */
+ //rootNodeUUID = new UUID(new String(chars)).toString();
+ rootNodeUUID = ROOT_NODE_UUID;
} catch (Exception e) {
String msg = "failed to load persisted repository state";
@@ -225,30 +239,10 @@
}
// workspaces
- for (int i = 0; i < swda.length; i++) {
- StableWorkspaceDef swd = swda[i];
- if (wspDefs.containsKey(swd.getName())) {
- String msg = "workspace '" + swd.getName() + "' already defined";
- log.error(msg);
- throw new RepositoryException(msg);
- }
- wspDefs.put(swd.getName(), swd);
- DynamicWorkspaceDef[] dwda = swd.getDynWorkspaces();
- for (int j = 0; j < dwda.length; j++) {
- DynamicWorkspaceDef dwd = dwda[j];
- if (wspDefs.containsKey(dwd.getName())) {
- String msg = "workspace '" + dwd.getName() + "' already defined";
- log.error(msg);
- throw new RepositoryException(msg);
- }
- wspDefs.put(dwd.getName(), dwd);
- }
- }
- WorkspaceDef wd = (WorkspaceDef) wspDefs.get(DEFAULT_WORKSPACE_NAME);
- if (wd == null || wd.isDynamic()) {
- String msg = "mandatory stable workspace 'default' not defined";
- log.error(msg);
- throw new RepositoryException(msg);
+ Iterator iter = repConfig.getWorkspaceConfigs().iterator();
+ while (iter.hasNext()) {
+ WorkspaceConfig config = (WorkspaceConfig) iter.next();
+ wspConfigs.put(config.getName(), config);
}
nsReg = new NamespaceRegistryImpl(new BasedFileSystem(repStore, "/namespaces"));
@@ -265,7 +259,7 @@
*/
// check system root node of system workspace
- SessionImpl sysSession = getSystemSession(DEFAULT_WORKSPACE_NAME);
+ SessionImpl sysSession = getSystemSession(repConfig.getDefaultWorkspaceName());
NodeImpl rootNode = (NodeImpl) sysSession.getRootNode();
if (!rootNode.hasNode(SYSTEM_ROOT_NAME)) {
rootNode.addNode(SYSTEM_ROOT_NAME, NodeTypeRegistry.NT_UNSTRUCTURED);
@@ -274,11 +268,11 @@
// init version manager
// todo: as soon as dynamic workspaces are available, base on system ws
- SessionImpl verSession = getSystemSession(VERSION_WORKSPACE_NAME);
+ SessionImpl verSession = getSystemSession(repConfig.getDefaultWorkspaceName());
NodeImpl vRootNode = (NodeImpl) verSession.getRootNode();
try {
if (!vRootNode.hasNode(SYSTEM_ROOT_NAME)) {
- verSession.getWorkspace().clone(DEFAULT_WORKSPACE_NAME,
+ verSession.getWorkspace().clone(repConfig.getDefaultWorkspaceName(),
SYSTEM_ROOT_NAME.toJCRName(verSession.getNamespaceResolver()),
SYSTEM_ROOT_NAME.toJCRName(verSession.getNamespaceResolver()));
}
@@ -295,9 +289,9 @@
// get the system session for every defined workspace and
// register as an event listener
- Iterator iter = wspDefs.values().iterator();
+ iter = wspConfigs.values().iterator();
while (iter.hasNext()) {
- String wspName = ((WorkspaceDef) iter.next()).getName();
+ String wspName = ((WorkspaceConfig) iter.next()).getName();
Session s = getSystemSession(wspName);
s.getWorkspace().getObservationManager().addEventListener(this,
EventType.CHILD_NODE_ADDED | EventType.CHILD_NODE_REMOVED
@@ -317,6 +311,24 @@
}
}
+ /**
+ * Creates a new <code>RepositoryImpl</code> instance.
+ * <p/>
+ * todo prevent multiple instantiation from same configuration as this could lead to data corruption/loss
+ *
+ * @param config the configuration of the repository
+ * @return a new <code>RepositoryImpl</code> instance
+ * @throws RepositoryException If an error occurs
+ */
+ public static RepositoryImpl create(RepositoryConfig config)
+ throws RepositoryException {
+ return new RepositoryImpl(config);
+ }
+
+ RepositoryConfig getConfig() {
+ return repConfig;
+ }
+
NamespaceRegistryImpl getNamespaceRegistry() {
return nsReg;
}
@@ -335,35 +347,21 @@
synchronized PersistentItemStateManager getWorkspaceStateManager(String workspaceName)
throws NoSuchWorkspaceException, RepositoryException {
- WorkspaceDef wd = (WorkspaceDef) wspDefs.get(workspaceName);
- if (wd == null) {
+ WorkspaceConfig wspConfig = (WorkspaceConfig) wspConfigs.get(workspaceName);
+ if (wspConfig == null) {
throw new NoSuchWorkspaceException(workspaceName);
}
// get/create per named workspace (i.e. per physical storage) item state manager
PersistentItemStateManager stateMgr =
(PersistentItemStateManager) wspStateMgrs.get(workspaceName);
if (stateMgr == null) {
- if (wd.isDynamic()) {
-/*
- // create dynamic (i.e. transparent) state manager backed
- // by a 'master' state manager
- DynamicWorkspaceDef dwd = (DynamicWorkspaceDef) wd;
- StableWorkspaceDef swd = (StableWorkspaceDef) wspDefs.get(dwd.getStableWorkspace());
- stateMgr = new TransparentItemStateManager(dwd.getFS(), getWorkspaceStateManager(swd));
-*/
- // @todo implement dynamic workspace support
- throw new RepositoryException("dynamic workspaces are not supported");
- } else {
- // create stable (i.e. opaque) state manager
- StableWorkspaceDef swd = (StableWorkspaceDef) wd;
- PersistenceManager persistMgr = createPersistenceManager(swd);
- try {
- stateMgr = new PersistentItemStateManager(persistMgr, rootNodeUUID, ntReg);
- } catch (ItemStateException ise) {
- String msg = "failed to instantiate the persistent state manager";
- log.error(msg, ise);
- throw new RepositoryException(msg, ise);
- }
+ // create state manager
+ try {
+ stateMgr = new PersistentItemStateManager(wspConfig.getPersistenceManager(), rootNodeUUID, ntReg);
+ } catch (ItemStateException ise) {
+ String msg = "failed to instantiate the persistent state manager";
+ log.error(msg, ise);
+ throw new RepositoryException(msg, ise);
}
wspStateMgrs.put(workspaceName, stateMgr);
}
@@ -372,8 +370,8 @@
synchronized ReferenceManager getWorkspaceReferenceManager(String workspaceName)
throws NoSuchWorkspaceException, RepositoryException {
- WorkspaceDef wd = (WorkspaceDef) wspDefs.get(workspaceName);
- if (wd == null) {
+ WorkspaceConfig wspConfig = (WorkspaceConfig) wspConfigs.get(workspaceName);
+ if (wspConfig == null) {
throw new NoSuchWorkspaceException(workspaceName);
}
ReferenceManager refMgr
@@ -381,7 +379,7 @@
if (refMgr == null) {
// create reference mgr that uses the perstistence mgr configured
// in the workspace definition
- refMgr = new ReferenceManager(createPersistenceManager(wd));
+ refMgr = new ReferenceManager(wspConfig.getPersistenceManager());
wspRefMgrs.put(workspaceName, refMgr);
}
return refMgr;
@@ -389,7 +387,7 @@
synchronized ObservationManagerFactory getObservationManagerFactory(String workspaceName)
throws NoSuchWorkspaceException {
- if (!wspDefs.containsKey(workspaceName)) {
+ if (!wspConfigs.containsKey(workspaceName)) {
throw new NoSuchWorkspaceException(workspaceName);
}
ObservationManagerFactory obsMgr
@@ -416,19 +414,19 @@
*/
synchronized SearchManager getSearchManager(String workspaceName)
throws NoSuchWorkspaceException, RepositoryException {
+ WorkspaceConfig wspConfig = (WorkspaceConfig) wspConfigs.get(workspaceName);
SearchManager searchMgr
= (SearchManager) wspSearchMgrs.get(workspaceName);
if (searchMgr == null) {
try {
- StableWorkspaceDef wspDef = (StableWorkspaceDef) wspDefs.get(workspaceName);
- if (wspDef.getSearchIndexPath() == null) {
+ if (wspConfig.getSearchIndexDir() == null) {
// no search index location configured
return null;
}
ItemStateProvider stateProvider = getWorkspaceStateManager(workspaceName);
SystemSession s = getSystemSession(workspaceName);
searchMgr = new SearchManager(stateProvider, s.hierMgr, s,
- wspDef.getWorkspaceStore(), wspDef.getSearchIndexPath());
+ wspConfig.getFileSystem(), wspConfig.getSearchIndexDir());
} catch (IOException e) {
throw new RepositoryException("Exception opening search index.", e);
}
@@ -439,46 +437,20 @@
synchronized SystemSession getSystemSession(String workspaceName)
throws NoSuchWorkspaceException, RepositoryException {
+ WorkspaceConfig wspConfig = (WorkspaceConfig) wspConfigs.get(workspaceName);
+ if (wspConfig == null) {
+ throw new NoSuchWorkspaceException(workspaceName);
+ }
SystemSession systemSession
= (SystemSession) wspSystemSessions.get(workspaceName);
if (systemSession == null) {
- systemSession = new SystemSession(this, workspaceName);
+ systemSession = new SystemSession(this, wspConfig);
wspSystemSessions.put(workspaceName, systemSession);
}
return systemSession;
}
/**
- * @param wspDef
- * @return
- * @throws RepositoryException
- */
- private PersistenceManager createPersistenceManager(WorkspaceDef wspDef) throws RepositoryException {
- PersistenceManager persistMgr;
- String className = wspDef.getPersistenceManagerClass();
- try {
- // Create the persistence manager object
- Class c = Class.forName(className);
- persistMgr = (PersistenceManager) c.newInstance();
- // set the properties of the persistence manager object from the
- // param hashmap
- BeanMap bm = new BeanMap(persistMgr);
- HashMap params = wspDef.getPersistenceManagerParams();
- Iterator iter = params.keySet().iterator();
- while (iter.hasNext()) {
- Object name = iter.next();
- Object value = params.get(name);
- bm.put(name, value);
- }
- persistMgr.init(wspDef);
- } catch (Exception e) {
- log.error("Cannot instantiate implementing class " + className, e);
- throw new RepositoryException("Cannot instantiate implementing class " + className, e);
- }
- return persistMgr;
- }
-
- /**
* Shuts down this repository
*/
protected void shutdown() {
@@ -598,19 +570,20 @@
public Session login(Credentials credentials, String workspaceName)
throws LoginException, NoSuchWorkspaceException, RepositoryException {
if (workspaceName == null) {
- workspaceName = DEFAULT_WORKSPACE_NAME;
+ workspaceName = repConfig.getDefaultWorkspaceName();
}
- if (!wspDefs.containsKey(workspaceName)) {
+ WorkspaceConfig wspConfig = (WorkspaceConfig) wspConfigs.get(workspaceName);
+ if (wspConfig == null) {
throw new NoSuchWorkspaceException(workspaceName);
}
if (credentials == null) {
// anonymous login
- return new SessionImpl(this, ANONYMOUS_CREDENTIALS, workspaceName);
+ return new SessionImpl(this, ANONYMOUS_CREDENTIALS, wspConfig);
} else if (credentials instanceof SimpleCredentials) {
// username/password credentials
// @todo implement authentication/authorization
- return new SessionImpl(this, credentials, workspaceName);
+ return new SessionImpl(this, credentials, wspConfig);
} else {
String msg = "login failed: incompatible credentials";
log.error(msg);
Modified: incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/SessionImpl.java
==============================================================================
--- incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/SessionImpl.java (original)
+++ incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/SessionImpl.java Fri Oct 15 10:01:13 2004
@@ -19,6 +19,7 @@
import org.apache.jackrabbit.core.state.NodeState;
import org.apache.jackrabbit.core.state.SessionItemStateManager;
import org.apache.jackrabbit.core.xml.ImportHandler;
+import org.apache.jackrabbit.core.config.WorkspaceConfig;
import org.apache.log4j.Logger;
import org.xml.sax.ContentHandler;
import org.xml.sax.InputSource;
@@ -98,9 +99,9 @@
*
* @param rep
* @param credentials
- * @param wspName
+ * @param wspConfig
*/
- SessionImpl(RepositoryImpl rep, Credentials credentials, String wspName)
+ SessionImpl(RepositoryImpl rep, Credentials credentials, WorkspaceConfig wspConfig)
throws RepositoryException {
this.rep = rep;
@@ -125,7 +126,8 @@
nsMappings = new TransientNamespaceMappings(rep.getNamespaceRegistry());
ntMgr = new NodeTypeManagerImpl(rep.getNodeTypeRegistry(), getNamespaceResolver());
- wsp = new WorkspaceImpl(wspName, rep.getWorkspaceStateManager(wspName),
+ String wspName = wspConfig.getName();
+ wsp = new WorkspaceImpl(wspConfig, rep.getWorkspaceStateManager(wspName),
rep.getWorkspaceReferenceManager(wspName), rep, this);
itemStateMgr = new SessionItemStateManager(rep.getRootNodeUUID(), wsp.getPersistentStateManager(), getNamespaceResolver());
hierMgr = itemStateMgr.getHierarchyMgr();
@@ -138,9 +140,9 @@
*
* @param rep
* @param userId
- * @param wspName
+ * @param wspConfig
*/
- protected SessionImpl(RepositoryImpl rep, String userId, String wspName)
+ protected SessionImpl(RepositoryImpl rep, String userId, WorkspaceConfig wspConfig)
throws RepositoryException {
this.rep = rep;
@@ -149,7 +151,8 @@
nsMappings = new TransientNamespaceMappings(rep.getNamespaceRegistry());
ntMgr = new NodeTypeManagerImpl(rep.getNodeTypeRegistry(), getNamespaceResolver());
- wsp = new WorkspaceImpl(wspName, rep.getWorkspaceStateManager(wspName),
+ String wspName = wspConfig.getName();
+ wsp = new WorkspaceImpl(wspConfig, rep.getWorkspaceStateManager(wspName),
rep.getWorkspaceReferenceManager(wspName), rep, this);
itemStateMgr = new SessionItemStateManager(rep.getRootNodeUUID(), wsp.getPersistentStateManager(), getNamespaceResolver());
hierMgr = itemStateMgr.getHierarchyMgr();
Modified: incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/SystemSession.java
==============================================================================
--- incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/SystemSession.java (original)
+++ incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/SystemSession.java Fri Oct 15 10:01:13 2004
@@ -15,6 +15,7 @@
*/
package org.apache.jackrabbit.core;
+import org.apache.jackrabbit.core.config.WorkspaceConfig;
import org.apache.log4j.Logger;
import javax.jcr.PathNotFoundException;
@@ -33,11 +34,11 @@
* Package private constructor.
*
* @param rep
- * @param wspName
+ * @param wspConfig
*/
- SystemSession(RepositoryImpl rep, String wspName)
+ SystemSession(RepositoryImpl rep, WorkspaceConfig wspConfig)
throws RepositoryException {
- super(rep, SYSTEM_USER_ID, wspName);
+ super(rep, SYSTEM_USER_ID, wspConfig);
accessMgr = new SystemAccessManqager();
}
Modified: incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/Test.java
==============================================================================
--- incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/Test.java (original)
+++ incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/Test.java Fri Oct 15 10:01:13 2004
@@ -28,7 +28,6 @@
import javax.jcr.util.TraversingItemVisitor;
import javax.naming.InitialContext;
import javax.naming.Context;
-import javax.naming.Reference;
import java.io.*;
import java.util.*;
@@ -37,42 +36,38 @@
private static final String LOG_CONFIG_FILE_NAME = "log4j.properties";
public static void main(String[] args) throws Exception {
- // location of config.xml & log4j.properties
+ // config dir: location of repository.xml & log4j.properties
String configDir = System.getProperty("config.dir");
if (configDir == null) {
// fallback to cwd
configDir = System.getProperty("user.dir");
}
PropertyConfigurator.configure(configDir + "/" + LOG_CONFIG_FILE_NAME);
- String configFile = configDir + "/" + RepositoryFactory.DEFAULT_CONFIG_FILE;
+ String configFile = configDir + "/" + RepositoryConfig.CONFIG_FILE_NAME;
- // repository factory home dir
- String factoryHomeDir = System.getProperty("repository.factory.home");
- if (factoryHomeDir == null) {
+ // repository home dir
+ String repHomeDir = System.getProperty("repository.home");
+ if (repHomeDir == null) {
// fallback to cwd
- factoryHomeDir = System.getProperty("user.dir");
+ repHomeDir = System.getProperty("user.dir");
}
-/*
- RepositoryConfig repConf = RepositoryConfig.create(configDir + "/" + "repository.xml", factoryHomeDir);
- Collection wspConfigs = repConf.getWorkspaceConfigs();
-*/
+
+ RepositoryConfig repConf = RepositoryConfig.create(configDir + "/" + "repository.xml", repHomeDir);
+ Repository r = RepositoryImpl.create(repConf);
/*
// Set up the environment for creating the initial context
Hashtable env = new Hashtable();
//env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.fscontext.RefFSContextFactory");
//env.put(Context.PROVIDER_URL, "file:./jndi");
- //env.put(Context.INITIAL_CONTEXT_FACTORY, "com.ervacon.xnam.XMLInitialContextFactory");
- //env.put(Context.PROVIDER_URL, "d:/temp/jndi.xml");
+ env.put(Context.INITIAL_CONTEXT_FACTORY, "com.ervacon.xnam.XMLInitialContextFactory");
+ env.put(Context.PROVIDER_URL, "d:/temp/jndi.xml");
- env.put(Context.INITIAL_CONTEXT_FACTORY, "org.codehaus.spice.jndikit.memory.StaticMemoryInitialContextFactory");
+ //env.put(Context.INITIAL_CONTEXT_FACTORY, "org.codehaus.spice.jndikit.memory.StaticMemoryInitialContextFactory");
InitialContext ctx = new InitialContext(env);
- RegistryHelper.registerRepository(ctx, "blah", configFile, factoryHomeDir, true);
- Repository repo1 = (Repository) ctx.lookup("blah");
- Repository repo2 = (Repository) ctx.lookup("blah");
+ RegistryHelper.registerRepository(ctx, "repo", configFile, repHomeDir, true);
+ Repository r = (Repository) ctx.lookup("repo");
*/
- RepositoryFactory rf = RepositoryFactory.create(configFile, factoryHomeDir);
- Repository r = rf.getRepository("localfs");
Session session = r.login(new SimpleCredentials("anonymous", "".toCharArray()), null);
Workspace wsp = session.getWorkspace();
@@ -93,12 +88,13 @@
String dvExportFilePath = "d:/temp/dv_export0.xml";
String importTargetName = "sandbox";
- wsp.exportSysView("/", new FileOutputStream(svExportFilePath), true, false);
- wsp.exportDocView("/", new FileOutputStream(dvExportFilePath), true, false);
+ //wsp.exportSysView("/", new FileOutputStream(svExportFilePath), true, false);
+ //wsp.exportDocView("/", new FileOutputStream(dvExportFilePath), true, false);
if (!root.hasNode(importTargetName)) {
root.addNode(importTargetName, "nt:unstructured");
}
- FileInputStream fin = new FileInputStream(svExportFilePath);
+ //FileInputStream fin = new FileInputStream(svExportFilePath);
+ FileInputStream fin = new FileInputStream("d:/temp/test.xml");
session.importXML("/" + importTargetName, fin);
session.save();
*/
@@ -140,7 +136,7 @@
root.addNode("blu", "nt:folder");
root.addNode("blu");
- Properties repProps = ((RepositoryImpl) r).getProperties();
+ Properties repProps = r.getProperties();
System.out.println("repository properties:");
System.out.println(repProps);
@@ -274,11 +270,11 @@
//wsp.exportSysView("/", new FileOutputStream("d:/temp/sv_export1.xml"), false, false);
wsp.exportDocView("/", new FileOutputStream("d:/temp/dv_export1.xml"), false, false);
- repProps = ((RepositoryImpl) r).getProperties();
+ repProps = r.getProperties();
System.out.println("repository properties:");
System.out.println(repProps);
- ((RepositoryImpl) r).shutdown();
+ //((RepositoryImpl) r).shutdown();
}
public static void importNode(File file, Node parent) throws Exception {
Modified: incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/WorkspaceImpl.java
==============================================================================
--- incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/WorkspaceImpl.java (original)
+++ incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/WorkspaceImpl.java Fri Oct 15 10:01:13 2004
@@ -15,6 +15,7 @@
*/
package org.apache.jackrabbit.core;
+import org.apache.jackrabbit.core.config.WorkspaceConfig;
import org.apache.jackrabbit.core.nodetype.*;
import org.apache.jackrabbit.core.search.QueryManagerImpl;
import org.apache.jackrabbit.core.state.*;
@@ -53,9 +54,9 @@
private static Logger log = Logger.getLogger(WorkspaceImpl.class);
/**
- * The name of this <code>Workspace</code>
+ * The configuration of this <code>Workspace</code>
*/
- protected final String wspName;
+ protected final WorkspaceConfig wspConfig;
/**
* The repository that created this workspace instance
@@ -99,14 +100,14 @@
/**
* Package private constructor.
*
- * @param wspName
+ * @param wspConfig
* @param persistentStateMgr
* @param rep
* @param session
*/
- WorkspaceImpl(String wspName, PersistentItemStateManager persistentStateMgr,
+ WorkspaceImpl(WorkspaceConfig wspConfig, PersistentItemStateManager persistentStateMgr,
ReferenceManager refMgr, RepositoryImpl rep, SessionImpl session) {
- this.wspName = wspName;
+ this.wspConfig = wspConfig;
this.rep = rep;
this.persistentStateMgr = persistentStateMgr;
this.refMgr = refMgr;
@@ -134,7 +135,7 @@
* @throws RepositoryException
*/
void dump(PrintStream ps) throws RepositoryException {
- ps.println("Workspace: " + wspName + " (" + this + ")");
+ ps.println("Workspace: " + wspConfig.getName() + " (" + this + ")");
ps.println();
persistentStateMgr.dump(ps);
}
@@ -654,7 +655,7 @@
* @see Workspace#getName
*/
public String getName() {
- return wspName;
+ return wspConfig.getName();
}
/**
@@ -865,7 +866,7 @@
throws UnsupportedRepositoryOperationException, RepositoryException {
if (obsMgr == null) {
try {
- obsMgr = rep.getObservationManagerFactory(wspName).createObservationManager(session, session.getItemManager());
+ obsMgr = rep.getObservationManagerFactory(wspConfig.getName()).createObservationManager(session, session.getItemManager());
} catch (NoSuchWorkspaceException nswe) {
// should never get here
String msg = "internal error: failed to instantiate observation manager";
@@ -882,7 +883,7 @@
public QueryManager getQueryManager() throws RepositoryException {
if (queryManager == null) {
try {
- SearchManager searchManager = rep.getSearchManager(wspName);
+ SearchManager searchManager = rep.getSearchManager(wspConfig.getName());
if (searchManager == null) {
throw new UnsupportedOperationException("No search manager configured for this workspace.");
}
Modified: incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/config/RepositoryConfig.java
==============================================================================
--- incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/config/RepositoryConfig.java (original)
+++ incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/config/RepositoryConfig.java Fri Oct 15 10:01:13 2004
@@ -157,6 +157,12 @@
if (wspConfigs.isEmpty()) {
// create initial default workspace
createWorkspaceConfig(defaultWspName);
+ } else {
+ if (!wspConfigs.containsKey(defaultWspName)) {
+ String msg = "no configuration found for default workspace: " + defaultWspName;
+ log.error(msg);
+ throw new RepositoryException(msg);
+ }
}
}
Modified: incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/config/WorkspaceConfig.java
==============================================================================
--- incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/config/WorkspaceConfig.java (original)
+++ incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/config/WorkspaceConfig.java Fri Oct 15 10:01:13 2004
@@ -149,8 +149,7 @@
Object value = params.get(name);
bm.put(name, value);
}
- // @todo fix PersistenceManager initialization
- //persistMgr.init(this);
+ persistMgr.init(this);
} catch (Exception e) {
log.error("Cannot instantiate implementing class " + className, e);
throw new RepositoryException("Cannot instantiate implementing class " + className, e);
Modified: incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/jndi/BindableRepository.java
==============================================================================
--- incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/jndi/BindableRepository.java (original)
+++ incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/jndi/BindableRepository.java Fri Oct 15 10:01:13 2004
@@ -16,6 +16,7 @@
package org.apache.jackrabbit.core.jndi;
import org.apache.jackrabbit.core.config.RepositoryConfig;
+import org.apache.jackrabbit.core.RepositoryImpl;
import javax.jcr.*;
import javax.naming.NamingException;
@@ -70,8 +71,7 @@
private void init() throws RepositoryException {
RepositoryConfig config = RepositoryConfig.create(configFilePath, repHomeDir);
- // @todo fix repository instantiation
- //delegatee = new RepositoryImpl(config);
+ delegatee = RepositoryImpl.create(config);
}
//-----------------------------------------------------------< Repository >
Modified: incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/state/PersistenceManager.java
==============================================================================
--- incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/state/PersistenceManager.java (original)
+++ incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/state/PersistenceManager.java Fri Oct 15 10:01:13 2004
@@ -16,7 +16,7 @@
package org.apache.jackrabbit.core.state;
import org.apache.jackrabbit.core.QName;
-import org.apache.jackrabbit.core.WorkspaceDef;
+import org.apache.jackrabbit.core.config.WorkspaceConfig;
/**
* <code>PersistenceManager</code> ...
@@ -24,10 +24,10 @@
public interface PersistenceManager {
/**
- * @param wspDef
+ * @param wspConfig
* @throws Exception
*/
- public void init(WorkspaceDef wspDef) throws Exception;
+ public void init(WorkspaceConfig wspConfig) throws Exception;
/**
* @param uuid
Modified: incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/state/xml/XMLPersistenceManager.java
==============================================================================
--- incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/state/xml/XMLPersistenceManager.java (original)
+++ incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/state/xml/XMLPersistenceManager.java Fri Oct 15 10:01:13 2004
@@ -16,10 +16,10 @@
package org.apache.jackrabbit.core.state.xml;
import org.apache.jackrabbit.core.*;
+import org.apache.jackrabbit.core.config.WorkspaceConfig;
+import org.apache.jackrabbit.core.fs.*;
import org.apache.jackrabbit.core.fs.FileSystem;
-import org.apache.jackrabbit.core.fs.FileSystemException;
-import org.apache.jackrabbit.core.fs.FileSystemPathUtil;
-import org.apache.jackrabbit.core.fs.FileSystemResource;
+import org.apache.jackrabbit.core.fs.local.LocalFileSystem;
import org.apache.jackrabbit.core.nodetype.NodeDefId;
import org.apache.jackrabbit.core.nodetype.PropDefId;
import org.apache.jackrabbit.core.state.*;
@@ -361,13 +361,21 @@
/**
* @see PersistenceManager#init
*/
- public void init(WorkspaceDef wspDef) throws Exception {
- itemStateStore = wspDef.getWorkspaceStore();
- if (wspDef.getBlobStore() != null) {
- blobStore = wspDef.getBlobStore();
- } else {
- blobStore = itemStateStore;
- }
+ public void init(WorkspaceConfig wspConfig) throws Exception {
+ FileSystem wspFS = wspConfig.getFileSystem();
+ itemStateStore = new BasedFileSystem(wspFS, "/data");
+
+ //blobStore = new BasedFileSystem(wspFS, "/blobs");
+ /**
+ * store blob's in local file system in a sub directory
+ * of the workspace home directory
+ * todo make blob store configurable
+ */
+ LocalFileSystem blobFS = new LocalFileSystem();
+ blobFS.setPath(wspConfig.getHomeDir() + "/blobs");
+ blobFS.init();
+ blobStore = blobFS;
+
initialized = true;
}
Modified: incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/JackrabbitRepositoryStub.java
==============================================================================
--- incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/JackrabbitRepositoryStub.java (original)
+++ incubator/jackrabbit/trunk/src/test/org/apache/jackrabbit/test/JackrabbitRepositoryStub.java Fri Oct 15 10:01:13 2004
@@ -15,10 +15,14 @@
*/
package org.apache.jackrabbit.test;
-import org.apache.jackrabbit.core.RepositoryFactory;
+import org.apache.jackrabbit.core.jndi.RegistryHelper;
+import org.apache.jackrabbit.core.config.RepositoryConfig;
+import org.apache.jackrabbit.core.RepositoryImpl;
import javax.jcr.Repository;
import javax.jcr.RepositoryException;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
import java.util.Properties;
/**
@@ -27,19 +31,24 @@
public class JackrabbitRepositoryStub extends RepositoryStub {
/**
- * Property for the repositry name
+ * Property for the repository name (used for jndi lookup)
*/
public static final String PROP_REPOSITORY_NAME = "org.apache.jackrabbit.repository.name";
- public static final String PROP_REPOSITRY_HOME = "org.apache.jackrabbit.repository.home";
+ /**
+ * Property for the repository configuration file (used for repository instantiation)
+ */
+ public static final String PROP_REPOSITORY_CONFIG = "org.apache.jackrabbit.repository.config";
+ /**
+ * Property for the repository home directory (used for repository instantiation)
+ */
+ public static final String PROP_REPOSITORY_HOME = "org.apache.jackrabbit.repository.home";
/**
* The repository instance
*/
private Repository repository;
- private RepositoryFactory factory;
-
/**
* Constructor as required by the JCR TCK.
*
@@ -52,7 +61,7 @@
/**
* Returns the configured <code>Repository</code> instance.
* <br>
- * The default repository name is 'localfs'.
+ * The default repository name is 'repo'.
*
* @return the configured <code>Repository</code> instance.
* @throws RepositoryStubException if an error occurs while
@@ -61,15 +70,25 @@
public synchronized Repository getRepository() throws RepositoryStubException {
if (repository == null) {
try {
- String repName = environment.getProperty(PROP_REPOSITORY_NAME, "localfs");
- String repHome = environment.getProperty(PROP_REPOSITRY_HOME);
- factory = RepositoryFactory.create(repHome + "/config.xml", repHome);
- repository = factory.getRepository(repName);
+ String repName = environment.getProperty(PROP_REPOSITORY_NAME, "repo");
+ String repConfig = environment.getProperty(PROP_REPOSITORY_CONFIG);
+ String repHome = environment.getProperty(PROP_REPOSITORY_HOME);
+/*
+ RepositoryConfig repConf = RepositoryConfig.create(repConfig, repHome);
+ repository = RepositoryImpl.create(repConf);
+*/
+ InitialContext ctx = new InitialContext();
+ RegistryHelper.registerRepository(ctx, "repo", repConfig, repHome, true);
+ repository = (Repository) ctx.lookup("repo");
+/*
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
- factory.shutdown();
+ repository.shutdown();
}
});
+*/
+ } catch (NamingException e) {
+ throw new RepositoryStubException(e.toString());
} catch (RepositoryException e) {
throw new RepositoryStubException(e.toString());
}