You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by ju...@apache.org on 2009/09/18 17:43:58 UTC
svn commit: r816678 - in /jackrabbit/trunk/jackrabbit-core/src:
main/java/org/apache/jackrabbit/core/
main/java/org/apache/jackrabbit/core/config/
main/java/org/apache/jackrabbit/core/query/
main/java/org/apache/jackrabbit/core/query/lucene/ test/java/...
Author: jukka
Date: Fri Sep 18 15:43:57 2009
New Revision: 816678
URL: http://svn.apache.org/viewvc?rev=816678&view=rev
Log:
JCR-1438: Replace Config classes with factories
Replace SearchConfig with a QueryHandlerFactory.
Added:
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/QueryHandlerFactory.java (with props)
Modified:
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SearchManager.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/config/RepositoryConfig.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/config/RepositoryConfigurationParser.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/config/WorkspaceConfig.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/AbstractQueryHandler.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/QueryHandler.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/QueryHandlerContext.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SearchIndex.java
jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/config/WorkspaceConfigTest.java
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java?rev=816678&r1=816677&r2=816678&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java Fri Sep 18 15:43:57 2009
@@ -665,9 +665,9 @@
private SearchManager getSystemSearchManager(String wspName)
throws RepositoryException {
if (systemSearchMgr == null) {
- if (repConfig.getSearchConfig() != null) {
+ if (repConfig.isSearchEnabled()) {
systemSearchMgr = new SearchManager(
- repConfig.getSearchConfig(), nsReg, ntReg,
+ repConfig, nsReg, ntReg,
getWorkspaceInfo(wspName).itemStateMgr,
vMgr.getPersistenceManager(), SYSTEM_ROOT_NODE_ID,
null, null, executor);
@@ -1833,13 +1833,9 @@
synchronized (this) {
if (searchMgr == null) {
- if (config.getSearchConfig() == null) {
- // no search index configured
- return null;
- }
// search manager is lazily instantiated in order to avoid
// 'chicken & egg' bootstrap problems
- searchMgr = new SearchManager(config.getSearchConfig(),
+ searchMgr = new SearchManager(config,
nsReg, ntReg, itemStateMgr, persistMgr, rootNodeId,
getSystemSearchManager(getName()),
SYSTEM_ROOT_NODE_ID, executor);
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SearchManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SearchManager.java?rev=816678&r1=816677&r2=816678&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SearchManager.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SearchManager.java Fri Sep 18 15:43:57 2009
@@ -37,7 +37,6 @@
import org.apache.jackrabbit.core.config.SearchConfig;
import org.apache.jackrabbit.core.fs.FileSystem;
-import org.apache.jackrabbit.core.fs.FileSystemException;
import org.apache.jackrabbit.core.id.NodeId;
import org.apache.jackrabbit.core.nodetype.NodeTypeRegistry;
import org.apache.jackrabbit.core.observation.EventImpl;
@@ -46,6 +45,7 @@
import org.apache.jackrabbit.core.query.AbstractQueryImpl;
import org.apache.jackrabbit.core.query.QueryHandler;
import org.apache.jackrabbit.core.query.QueryHandlerContext;
+import org.apache.jackrabbit.core.query.QueryHandlerFactory;
import org.apache.jackrabbit.core.query.QueryObjectModelImpl;
import org.apache.jackrabbit.core.state.ItemStateException;
import org.apache.jackrabbit.core.state.NodeState;
@@ -85,36 +85,11 @@
public static final String NS_XS_URI = "http://www.w3.org/2001/XMLSchema";
/**
- * The search configuration.
- */
- private final SearchConfig config;
-
- /**
- * The node type registry.
- */
- private final NodeTypeRegistry ntReg;
-
- /**
* The shared item state manager instance for the workspace.
*/
private final SharedItemStateManager itemMgr;
/**
- * The underlying persistence manager.
- */
- private final PersistenceManager pm;
-
- /**
- * Storage for search index
- */
- private final FileSystem fs;
-
- /**
- * The root node for this search manager.
- */
- private final NodeId rootNodeId;
-
- /**
* QueryHandler where query execution is delegated to
*/
private QueryHandler handler;
@@ -131,22 +106,11 @@
private final NamespaceRegistryImpl nsReg;
/**
- * ID of the node that should be excluded from indexing or <code>null</code>
- * if no node should be excluded.
- */
- private final NodeId excludedNodeId;
-
- /**
* Path that will be excluded from indexing.
*/
private Path excludePath;
/**
- * Background task executor.
- */
- private final Executor executor;
-
- /**
* Creates a new <code>SearchManager</code>.
*
* @param config the search configuration.
@@ -162,7 +126,7 @@
* excluded from indexing.
* @throws RepositoryException if the search manager cannot be initialized
*/
- public SearchManager(SearchConfig config,
+ public SearchManager(QueryHandlerFactory qhf,
final NamespaceRegistryImpl nsReg,
NodeTypeRegistry ntReg,
SharedItemStateManager itemMgr,
@@ -171,16 +135,9 @@
SearchManager parentMgr,
NodeId excludedNodeId,
Executor executor) throws RepositoryException {
- this.fs = config.getFileSystem();
- this.config = config;
- this.ntReg = ntReg;
this.nsReg = nsReg;
this.itemMgr = itemMgr;
- this.pm = pm;
- this.rootNodeId = rootNodeId;
this.parentHandler = (parentMgr != null) ? parentMgr.handler : null;
- this.excludedNodeId = excludedNodeId;
- this.executor = executor;
// register namespaces
safeRegisterNamespace(NS_XS_PREFIX, NS_XS_URI);
@@ -213,7 +170,9 @@
}
// initialize query handler
- initializeQueryHandler();
+ this.handler = qhf.getQueryHandler(new QueryHandlerContext(
+ itemMgr, pm, rootNodeId, ntReg, nsReg,
+ parentHandler, excludedNodeId, executor));
}
/**
@@ -260,14 +219,8 @@
public void close() {
try {
shutdownQueryHandler();
-
- if (fs != null) {
- fs.close();
- }
} catch (IOException e) {
log.error("Exception closing QueryHandler.", e);
- } catch (FileSystemException e) {
- log.error("Exception closing FileSystem.", e);
}
}
@@ -505,24 +458,6 @@
//------------------------< internal >--------------------------------------
/**
- * Initializes the query handler.
- *
- * @throws RepositoryException if the query handler cannot be initialized.
- */
- private void initializeQueryHandler() throws RepositoryException {
- // initialize query handler
- try {
- handler = (QueryHandler) config.newInstance();
- QueryHandlerContext context = new QueryHandlerContext(
- fs, itemMgr, pm, rootNodeId, ntReg, nsReg,
- parentHandler, excludedNodeId, executor);
- handler.init(context);
- } catch (Exception e) {
- throw new RepositoryException(e.getMessage(), e);
- }
- }
-
- /**
* Shuts down the query handler. If the query handler is already shut down
* this method does nothing.
*
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/config/RepositoryConfig.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/config/RepositoryConfig.java?rev=816678&r1=816677&r2=816678&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/config/RepositoryConfig.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/config/RepositoryConfig.java Fri Sep 18 15:43:57 2009
@@ -24,6 +24,9 @@
import org.apache.jackrabbit.core.fs.FileSystemException;
import org.apache.jackrabbit.core.fs.FileSystemFactory;
import org.apache.jackrabbit.core.fs.FileSystemPathUtil;
+import org.apache.jackrabbit.core.query.QueryHandler;
+import org.apache.jackrabbit.core.query.QueryHandlerContext;
+import org.apache.jackrabbit.core.query.QueryHandlerFactory;
import org.apache.jackrabbit.core.util.RepositoryLockMechanism;
import org.apache.jackrabbit.core.util.RepositoryLockMechanismFactory;
import org.slf4j.Logger;
@@ -69,7 +72,8 @@
* addition the workspace configuration object keeps track of all configured
* workspaces.
*/
-public class RepositoryConfig implements FileSystemFactory, DataStoreFactory {
+public class RepositoryConfig
+ implements FileSystemFactory, DataStoreFactory, QueryHandlerFactory {
/** the default logger */
private static Logger log = LoggerFactory.getLogger(RepositoryConfig.class);
@@ -325,9 +329,9 @@
private final VersioningConfig vc;
/**
- * Optional search configuration for system search manager.
+ * Query handler factory, or <code>null</code> if not configured.
*/
- private final SearchConfig sc;
+ private final QueryHandlerFactory qhf;
/**
* Optional cluster configuration.
@@ -356,7 +360,7 @@
* @param workspaceMaxIdleTime maximum workspace idle time in seconds
* @param template workspace configuration template
* @param vc versioning configuration
- * @param sc search configuration for system search manager.
+ * @param qhf query handler factory for the system search manager
* @param cc optional cluster configuration
* @param dsf data store factory
* @param parser configuration parser
@@ -365,7 +369,7 @@
String home, SecurityConfig sec, FileSystemFactory fsf,
String workspaceDirectory, String workspaceConfigDirectory,
String defaultWorkspace, int workspaceMaxIdleTime,
- Element template, VersioningConfig vc, SearchConfig sc,
+ Element template, VersioningConfig vc, QueryHandlerFactory qhf,
ClusterConfig cc, DataStoreFactory dsf,
RepositoryLockMechanismFactory rlf,
RepositoryConfigurationParser parser) {
@@ -379,7 +383,7 @@
this.defaultWorkspace = defaultWorkspace;
this.template = template;
this.vc = vc;
- this.sc = sc;
+ this.qhf = qhf;
this.cc = cc;
this.dsf = dsf;
this.rlf = rlf;
@@ -878,13 +882,28 @@
}
/**
- * Returns the system search index configuration. Returns
- * <code>null</code> if no search index has been configured.
+ * Checks whether search configuration is present.
*
- * @return search index configuration, or <code>null</code>
+ * @return <code>true</code> if search is configured,
+ * <code>false</code> otherwise
*/
- public SearchConfig getSearchConfig() {
- return sc;
+ public boolean isSearchEnabled() {
+ return qhf != null;
+ }
+
+ /**
+ * Returns the initialized query handler, or <code>null</code> if one
+ * has not been configured.
+ *
+ * @return initialized query handler, or <code>null</code>
+ */
+ public QueryHandler getQueryHandler(QueryHandlerContext context)
+ throws RepositoryException {
+ if (qhf != null) {
+ return qhf.getQueryHandler(context);
+ } else {
+ return null;
+ }
}
/**
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/config/RepositoryConfigurationParser.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/config/RepositoryConfigurationParser.java?rev=816678&r1=816677&r2=816678&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/config/RepositoryConfigurationParser.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/config/RepositoryConfigurationParser.java Fri Sep 18 15:43:57 2009
@@ -27,6 +27,9 @@
import org.apache.jackrabbit.core.journal.Journal;
import org.apache.jackrabbit.core.journal.JournalException;
import org.apache.jackrabbit.core.journal.JournalFactory;
+import org.apache.jackrabbit.core.query.QueryHandler;
+import org.apache.jackrabbit.core.query.QueryHandlerContext;
+import org.apache.jackrabbit.core.query.QueryHandlerFactory;
import org.apache.jackrabbit.core.state.DefaultISMLocking;
import org.apache.jackrabbit.core.state.ISMLocking;
import org.apache.jackrabbit.core.state.ISMLockingFactory;
@@ -275,8 +278,8 @@
// Versioning configuration
VersioningConfig vc = parseVersioningConfig(root);
- // Optional search configuration
- SearchConfig sc = parseSearchConfig(root);
+ // Query handler implementation
+ QueryHandlerFactory qhf = getQueryHandlerFactory(root);
// Optional journal configuration
ClusterConfig cc = parseClusterConfig(root, new File(home));
@@ -288,7 +291,7 @@
return new RepositoryConfig(home, securityConfig, fsf,
workspaceDirectory, workspaceConfigDirectory, defaultWorkspace,
- maxIdleTime, template, vc, sc, cc, dsf, rlf, this);
+ maxIdleTime, template, vc, qhf, cc, dsf, rlf, this);
}
/**
@@ -483,8 +486,8 @@
// Persistence manager implementation
PersistenceManagerConfig pmc = tmpParser.parsePersistenceManagerConfig(root);
- // Search implementation (optional)
- SearchConfig sc = tmpParser.parseSearchConfig(root);
+ // Query handler implementation
+ QueryHandlerFactory qhf = tmpParser.getQueryHandlerFactory(root);
// Item state manager locking configuration (optional)
ISMLockingFactory ismLockingFactory =
@@ -494,7 +497,7 @@
WorkspaceSecurityConfig workspaceSecurityConfig = tmpParser.parseWorkspaceSecurityConfig(root);
return new WorkspaceConfig(
- home, name, clustered, fsf, pmc, sc,
+ home, name, clustered, fsf, pmc, qhf,
ismLockingFactory, workspaceSecurityConfig);
}
@@ -522,32 +525,43 @@
* However some implementations may require a FileSystem.
*
* @param parent parent of the <code>SearchIndex</code> element
- * @return search configuration, or <code>null</code>
- * @throws ConfigurationException if the configuration is broken
+ * @return query handler factory
*/
- protected SearchConfig parseSearchConfig(Element parent)
- throws ConfigurationException {
+ protected QueryHandlerFactory getQueryHandlerFactory(final Element parent) {
NodeList children = parent.getChildNodes();
for (int i = 0; i < children.getLength(); i++) {
- Node child = children.item(i);
+ final Node child = children.item(i);
if (child.getNodeType() == Node.ELEMENT_NODE
&& SEARCH_INDEX_ELEMENT.equals(child.getNodeName())) {
- Element element = (Element) child;
-
- // Search implementation class
- String className = getAttribute(
- element, CLASS_ATTRIBUTE, DEFAULT_QUERY_HANDLER);
-
- // Search parameters
- Properties parameters = parseParameters(element);
-
- // Optional file system implementation
- FileSystemFactory fsf = null;
- if (getElement(element, FILE_SYSTEM_ELEMENT, false) != null) {
- fsf = getFileSystemFactory(element, FILE_SYSTEM_ELEMENT);
- }
+ return new QueryHandlerFactory() {
+ public QueryHandler getQueryHandler(QueryHandlerContext context)
+ throws RepositoryException {
+ Element element = (Element) child;
+
+ // Optional file system implementation
+ FileSystem fs = null;
+ if (getElement(element, FILE_SYSTEM_ELEMENT, false) != null) {
+ fs = getFileSystemFactory(
+ element, FILE_SYSTEM_ELEMENT).getFileSystem();
+ }
- return new SearchConfig(className, parameters, fsf);
+ // Search implementation class
+ String className = getAttribute(
+ element, CLASS_ATTRIBUTE, DEFAULT_QUERY_HANDLER);
+ BeanConfig config = new BeanConfig(
+ className, parseParameters(element));
+
+ QueryHandler handler =
+ (QueryHandler) config.newInstance();
+ try {
+ handler.init(fs, context);
+ return handler;
+ } catch (IOException e) {
+ throw new RepositoryException(
+ "Unable to initialize query handler: " + handler, e);
+ }
+ }
+ };
}
}
return null;
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/config/WorkspaceConfig.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/config/WorkspaceConfig.java?rev=816678&r1=816677&r2=816678&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/config/WorkspaceConfig.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/config/WorkspaceConfig.java Fri Sep 18 15:43:57 2009
@@ -20,6 +20,9 @@
import org.apache.jackrabbit.core.fs.FileSystem;
import org.apache.jackrabbit.core.fs.FileSystemFactory;
+import org.apache.jackrabbit.core.query.QueryHandler;
+import org.apache.jackrabbit.core.query.QueryHandlerContext;
+import org.apache.jackrabbit.core.query.QueryHandlerFactory;
import org.apache.jackrabbit.core.state.ISMLocking;
import org.apache.jackrabbit.core.state.ISMLockingFactory;
@@ -32,7 +35,8 @@
* the item state manager locking configuration. The search index and the item
* state manager locking and the security config are optional parts.
*/
-public class WorkspaceConfig implements FileSystemFactory, ISMLockingFactory {
+public class WorkspaceConfig
+ implements FileSystemFactory, ISMLockingFactory, QueryHandlerFactory {
/**
* Workspace home directory.
@@ -60,9 +64,9 @@
private PersistenceManagerConfig pmc;
/**
- * Workspace search index configuration. Can be <code>null</code>.
+ * Query handler factory, or <code>null</code> if search is not configured.
*/
- private SearchConfig sc;
+ private QueryHandlerFactory qhf;
/**
* The item state manager locking factory.
@@ -82,20 +86,21 @@
* @param clustered
* @param fsf file system factory
* @param pmc persistence manager configuration
- * @param sc search index configuration
+ * @param qhf query handler factory, or <code>null</code> if not configured
* @param ismLockingFactory the item state manager locking factory
* @param workspaceSecurityConfig the workspace specific security configuration.
*/
public WorkspaceConfig(String home, String name, boolean clustered,
FileSystemFactory fsf, PersistenceManagerConfig pmc,
- SearchConfig sc, ISMLockingFactory ismLockingFactory,
+ QueryHandlerFactory qhf,
+ ISMLockingFactory ismLockingFactory,
WorkspaceSecurityConfig workspaceSecurityConfig) {
this.home = home;
this.name = name;
this.clustered = clustered;
this.fsf = fsf;
this.pmc = pmc;
- this.sc = sc;
+ this.qhf = qhf;
this.ismLockingFactory = ismLockingFactory;
this.workspaceSecurityConfig = workspaceSecurityConfig;
}
@@ -158,13 +163,28 @@
}
/**
- * Returns the workspace search index configuration. Returns
- * <code>null</code> if a search index has not been configured.
+ * Checks whether search configuration is present.
*
- * @return search index configuration, or <code>null</code>
+ * @return <code>true</code> if search is configured,
+ * <code>false</code> otherwise
+ */
+ public boolean isSearchEnabled() {
+ return qhf != null;
+ }
+
+ /**
+ * Returns an initialized query handler, or <code>null</code> if one
+ * was not configured.
+ *
+ * @return initialized query handler, or <code>null</code>
*/
- public SearchConfig getSearchConfig() {
- return sc;
+ public QueryHandler getQueryHandler(QueryHandlerContext context)
+ throws RepositoryException {
+ if (qhf != null) {
+ return qhf.getQueryHandler(context);
+ } else {
+ return null;
+ }
}
/**
* @return workspace-specific security settings.
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/AbstractQueryHandler.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/AbstractQueryHandler.java?rev=816678&r1=816677&r2=816678&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/AbstractQueryHandler.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/AbstractQueryHandler.java Fri Sep 18 15:43:57 2009
@@ -16,6 +16,9 @@
*/
package org.apache.jackrabbit.core.query;
+import org.apache.commons.io.IOExceptionWithCause;
+import org.apache.jackrabbit.core.fs.FileSystem;
+import org.apache.jackrabbit.core.fs.FileSystemException;
import org.apache.jackrabbit.core.id.NodeId;
import org.apache.jackrabbit.core.state.NodeState;
import org.slf4j.Logger;
@@ -36,6 +39,11 @@
private static final Logger log = LoggerFactory.getLogger(AbstractQueryHandler.class);
/**
+ * Search index file system, or <code>null</code>
+ */
+ protected FileSystem fs;
+
+ /**
* The context for this query handler.
*/
private QueryHandlerContext context;
@@ -60,13 +68,27 @@
* Initializes this query handler by setting all properties in this class
* with appropriate parameter values.
*
+ * @param fs search index file system, or <code>null</code>
* @param context the context for this query handler.
*/
- public final void init(QueryHandlerContext context) throws IOException {
+ public final void init(FileSystem fs, QueryHandlerContext context)
+ throws IOException {
+ this.fs = fs;
this.context = context;
doInit();
}
+ public void close() throws IOException {
+ if (fs != null) {
+ try {
+ fs.close();
+ } catch (FileSystemException e) {
+ throw new IOExceptionWithCause(
+ "Unable to close search index file system: " + fs, e);
+ }
+ }
+ }
+
/**
* This method must be implemented by concrete sub classes and will be
* called from {@link #init}.
@@ -172,5 +194,5 @@
public String getIdleTime() {
return idleTime;
}
-
+
}
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/QueryHandler.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/QueryHandler.java?rev=816678&r1=816677&r2=816678&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/QueryHandler.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/QueryHandler.java Fri Sep 18 15:43:57 2009
@@ -18,6 +18,7 @@
import org.apache.jackrabbit.core.ItemManager;
import org.apache.jackrabbit.core.SessionImpl;
+import org.apache.jackrabbit.core.fs.FileSystem;
import org.apache.jackrabbit.core.id.NodeId;
import org.apache.jackrabbit.core.state.NodeState;
import org.apache.jackrabbit.spi.commons.query.qom.QueryObjectModelTree;
@@ -39,11 +40,16 @@
/**
* Initializes this query handler. This method is called after the
* <code>QueryHandler</code> is instantiated.
+ * <p>
+ * If a file system has been configured (i.e. the fs argument is not
+ * <code>null</code>), then the query handler is expected to close
+ * the given file system when the {@link #close()} method is called.
*
+ * @param fs the configured search index file system, or <code>null</code>
* @param context the context for this query handler.
* @throws IOException if an error occurs during initialization.
*/
- void init(QueryHandlerContext context) throws IOException;
+ void init(FileSystem fs, QueryHandlerContext context) throws IOException;
/**
* Returns the query handler context that passed in {@link
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/QueryHandlerContext.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/QueryHandlerContext.java?rev=816678&r1=816677&r2=816678&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/QueryHandlerContext.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/QueryHandlerContext.java Fri Sep 18 15:43:57 2009
@@ -18,15 +18,14 @@
import java.util.concurrent.Executor;
-import org.apache.jackrabbit.core.fs.FileSystem;
+import org.apache.jackrabbit.core.CachingHierarchyManager;
+import org.apache.jackrabbit.core.HierarchyManager;
+import org.apache.jackrabbit.core.NamespaceRegistryImpl;
+import org.apache.jackrabbit.core.id.NodeId;
import org.apache.jackrabbit.core.nodetype.NodeTypeRegistry;
+import org.apache.jackrabbit.core.persistence.PersistenceManager;
import org.apache.jackrabbit.core.state.ItemStateManager;
import org.apache.jackrabbit.core.state.SharedItemStateManager;
-import org.apache.jackrabbit.core.id.NodeId;
-import org.apache.jackrabbit.core.NamespaceRegistryImpl;
-import org.apache.jackrabbit.core.HierarchyManager;
-import org.apache.jackrabbit.core.CachingHierarchyManager;
-import org.apache.jackrabbit.core.persistence.PersistenceManager;
/**
* Acts as an argument for the {@link QueryHandler} to keep the interface
@@ -36,11 +35,6 @@
public class QueryHandlerContext {
/**
- * A <code>FileSystem</code> to store the search index
- */
- private final FileSystem fs;
-
- /**
* The persistent <code>ItemStateManager</code>
*/
private final SharedItemStateManager stateMgr;
@@ -93,10 +87,6 @@
/**
* Creates a new context instance.
*
- * @param fs a {@link FileSystem} this <code>QueryHandler</code>
- * may use to store its index. If no
- * <code>FileSystem</code> has been configured
- * <code>fs</code> is <code>null</code>.
* @param stateMgr provides persistent item states.
* @param pm the underlying persistence manager.
* @param rootId the id of the root node.
@@ -109,8 +99,7 @@
* excluded from indexing.
* @param executor background task executor
*/
- public QueryHandlerContext(FileSystem fs,
- SharedItemStateManager stateMgr,
+ public QueryHandlerContext(SharedItemStateManager stateMgr,
PersistenceManager pm,
NodeId rootId,
NodeTypeRegistry ntRegistry,
@@ -118,7 +107,6 @@
QueryHandler parentHandler,
NodeId excludedNodeId,
Executor executor) {
- this.fs = fs;
this.stateMgr = stateMgr;
this.hmgr = new CachingHierarchyManager(rootId, stateMgr);
this.stateMgr.addListener(hmgr);
@@ -162,18 +150,6 @@
}
/**
- * Returns the {@link FileSystem} instance this <code>QueryHandler</code>
- * may use to store its index. If no <code>FileSystem</code> has been
- * configured this method returns <code>null</code>.
- *
- * @return the <code>FileSystem</code> instance for this
- * <code>QueryHandler</code>.
- */
- public FileSystem getFileSystem() {
- return fs;
- }
-
- /**
* Returns the id of the root node.
* @return the idof the root node.
*/
Added: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/QueryHandlerFactory.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/QueryHandlerFactory.java?rev=816678&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/QueryHandlerFactory.java (added)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/QueryHandlerFactory.java Fri Sep 18 15:43:57 2009
@@ -0,0 +1,26 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.core.query;
+
+import javax.jcr.RepositoryException;
+
+public interface QueryHandlerFactory {
+
+ QueryHandler getQueryHandler(QueryHandlerContext context)
+ throws RepositoryException;
+
+}
Propchange: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/QueryHandlerFactory.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SearchIndex.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SearchIndex.java?rev=816678&r1=816677&r2=816678&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SearchIndex.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SearchIndex.java Fri Sep 18 15:43:57 2009
@@ -768,7 +768,7 @@
* Closes this <code>QueryHandler</code> and frees resources attached
* to this handler.
*/
- public void close() {
+ public void close() throws IOException {
if (synonymProviderConfigFs != null) {
try {
synonymProviderConfigFs.close();
@@ -781,6 +781,7 @@
}
index.close();
getContext().destroy();
+ super.close();
closed = true;
log.info("Index closed: " + path);
}
@@ -1229,7 +1230,6 @@
"Invalid synonymProviderConfigPath: "
+ synonymProviderConfigPath);
}
- FileSystem fs = getContext().getFileSystem();
if (fs == null) {
fs = new LocalFileSystem();
int lastSeparator = synonymProviderConfigPath.lastIndexOf(
Modified: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/config/WorkspaceConfigTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/config/WorkspaceConfigTest.java?rev=816678&r1=816677&r2=816678&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/config/WorkspaceConfigTest.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/config/WorkspaceConfigTest.java Fri Sep 18 15:43:57 2009
@@ -58,15 +58,7 @@
pmc.getClassName());
assertTrue(pmc.getParameters().isEmpty());
- SearchConfig sc = config.getSearchConfig();
- assertEquals(
- "org.apache.jackrabbit.core.query.lucene.SearchIndex",
- sc.getClassName());
- assertEquals(4, sc.getParameters().size());
- assertEquals("true", sc.getParameters().getProperty("useCompoundFile"));
- assertEquals("1000", sc.getParameters().getProperty("minMergeDocs"));
- assertEquals("10000", sc.getParameters().getProperty("maxMergeDocs"));
- assertEquals("10", sc.getParameters().getProperty("mergeFactor"));
+ assertTrue(config.isSearchEnabled());
WorkspaceSecurityConfig ws = config.getSecurityConfig();
if (ws != null) {