[hibernate-commits] Hibernate SVN: r13945 - in search/trunk/src/java/org/hibernate/search: store and 1 other directory.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Tue Aug 21 14:01:54 EDT 2007


Author: epbernard
Date: 2007-08-21 14:01:54 -0400 (Tue, 21 Aug 2007)
New Revision: 13945

Modified:
   search/trunk/src/java/org/hibernate/search/impl/SearchFactoryImpl.java
   search/trunk/src/java/org/hibernate/search/store/DirectoryProvider.java
   search/trunk/src/java/org/hibernate/search/store/DirectoryProviderFactory.java
   search/trunk/src/java/org/hibernate/search/store/FSDirectoryProvider.java
   search/trunk/src/java/org/hibernate/search/store/FSMasterDirectoryProvider.java
   search/trunk/src/java/org/hibernate/search/store/FSSlaveDirectoryProvider.java
   search/trunk/src/java/org/hibernate/search/store/RAMDirectoryProvider.java
Log:
HSEARCH-107 introduce a start() method for DirectoryProviders

Modified: search/trunk/src/java/org/hibernate/search/impl/SearchFactoryImpl.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/impl/SearchFactoryImpl.java	2007-08-21 00:25:25 UTC (rev 13944)
+++ search/trunk/src/java/org/hibernate/search/impl/SearchFactoryImpl.java	2007-08-21 18:01:54 UTC (rev 13945)
@@ -271,6 +271,7 @@
 				}
 			}
 		}
+		factory.startDirectoryProviders();
 	}
 
 	/**

Modified: search/trunk/src/java/org/hibernate/search/store/DirectoryProvider.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/store/DirectoryProvider.java	2007-08-21 00:25:25 UTC (rev 13944)
+++ search/trunk/src/java/org/hibernate/search/store/DirectoryProvider.java	2007-08-21 18:01:54 UTC (rev 13945)
@@ -20,11 +20,19 @@
  */
 public interface DirectoryProvider<TDirectory extends Directory> {
 	/**
-	 * get the information to initialize the directory and build its hashCode
+	 * get the information to initialize the directory and build its hashCode/equals method
 	 */
 	void initialize(String directoryProviderName, Properties properties, SearchFactoryImplementor searchFactoryImplementor);
 
 	/**
+	 * Executed after initialize, this method set up the heavy process of starting up the DirectoryProvider
+	 * IO processing as well as backgroup processing are expected to be set up here
+	 *
+	 * TODO stop() method, for now use finalize() 
+	 */
+	void start();
+
+	/**
 	 * Returns an initialized Lucene Directory. This method call <b>must</b> be threadsafe
 	 */
 	TDirectory getDirectory();

Modified: search/trunk/src/java/org/hibernate/search/store/DirectoryProviderFactory.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/store/DirectoryProviderFactory.java	2007-08-21 00:25:25 UTC (rev 13944)
+++ search/trunk/src/java/org/hibernate/search/store/DirectoryProviderFactory.java	2007-08-21 18:01:54 UTC (rev 13945)
@@ -118,6 +118,12 @@
 		return new DirectoryProviders( shardingStrategy, providers );
 	}
 
+	public void startDirectoryProviders() {
+		for ( DirectoryProvider provider : providers ) {
+			provider.start();
+		}
+	}
+
 	private DirectoryProvider<?> createDirectoryProvider(String directoryProviderName, Properties indexProps, SearchFactoryImplementor searchFactoryImplementor) {
 		String className = indexProps.getProperty( "directory_provider" );
 		if ( StringHelper.isEmpty( className ) ) {

Modified: search/trunk/src/java/org/hibernate/search/store/FSDirectoryProvider.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/store/FSDirectoryProvider.java	2007-08-21 00:25:25 UTC (rev 13944)
+++ search/trunk/src/java/org/hibernate/search/store/FSDirectoryProvider.java	2007-08-21 18:01:54 UTC (rev 13945)
@@ -30,6 +30,7 @@
 			boolean create = !indexDir.exists();
 			indexName = indexDir.getCanonicalPath();
 			directory = FSDirectory.getDirectory( indexName );
+			//this is cheap so it's not done in start()
 			if ( create ) {
 				IndexWriter iw = new IndexWriter( directory, new StandardAnalyzer(), create );
 				iw.close();
@@ -40,6 +41,10 @@
 		}
 	}
 
+	public void start() {
+		//all the process is done in initialize
+	}
+
 	public FSDirectory getDirectory() {
 		return directory;
 	}

Modified: search/trunk/src/java/org/hibernate/search/store/FSMasterDirectoryProvider.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/store/FSMasterDirectoryProvider.java	2007-08-21 00:25:25 UTC (rev 13944)
+++ search/trunk/src/java/org/hibernate/search/store/FSMasterDirectoryProvider.java	2007-08-21 18:01:54 UTC (rev 13945)
@@ -39,31 +39,49 @@
 	private Timer timer;
 	private SearchFactoryImplementor searchFactory;
 
+	//variables needed between initialize and start
+	private String source;
+	private File indexDir;
+	private String directoryProviderName;
+	private Properties properties;
+
+
 	public void initialize(String directoryProviderName, Properties properties, SearchFactoryImplementor searchFactoryImplementor) {
+		this.properties = properties;
+		this.directoryProviderName = directoryProviderName;
 		//source guessing
-		String source = DirectoryProviderHelper.getSourceDirectory( "sourceBase", "source", directoryProviderName, properties );
+		source = DirectoryProviderHelper.getSourceDirectory( "sourceBase", "source", directoryProviderName, properties );
 		if ( source == null)
 			throw new IllegalStateException("FSMasterDirectoryProvider requires a viable source directory");
 		log.debug( "Source directory: " + source );
-		File indexDir = DirectoryProviderHelper.determineIndexDir( directoryProviderName, properties );
+		indexDir = DirectoryProviderHelper.determineIndexDir( directoryProviderName, properties );
 		log.debug( "Index directory: " + indexDir );
-		String refreshPeriod = properties.getProperty( "refresh", "3600" );
-		long period = Long.parseLong( refreshPeriod );
-		log.debug("Refresh period " + period + " seconds");
-		period *= 1000; //per second
 		try {
 			boolean create = !indexDir.exists();
-			indexName = indexDir.getCanonicalPath();
 			if (create) {
 				log.debug( "Index directory '" + indexName + "' will be initialized");
 				indexDir.mkdir();
 			}
+			indexName = indexDir.getCanonicalPath();
 			directory = FSDirectory.getDirectory( indexName);
 			if ( create ) {
 				IndexWriter iw = new IndexWriter( directory, new StandardAnalyzer(), create );
 				iw.close();
 			}
+		}
+		catch (IOException e) {
+			throw new HibernateException( "Unable to initialize index: " + directoryProviderName, e );
+		}
+		this.searchFactory = searchFactoryImplementor;
+	}
 
+	public void start() {
+		//source guessing
+		String refreshPeriod = properties.getProperty( "refresh", "3600" );
+		long period = Long.parseLong( refreshPeriod );
+		log.debug("Refresh period " + period + " seconds");
+		period *= 1000; //per second
+		try {
 			//copy to source
 			if ( new File( source, "current1").exists() ) {
 				current = 2;
@@ -90,7 +108,6 @@
 		timer = new Timer(true); //daemon thread, the copy algorithm is robust
 		TimerTask task = new FSMasterDirectoryProvider.TriggerTask(indexName, source, this );
 		timer.scheduleAtFixedRate( task, period, period );
-		this.searchFactory = searchFactoryImplementor;
 	}
 
 	public FSDirectory getDirectory() {

Modified: search/trunk/src/java/org/hibernate/search/store/FSSlaveDirectoryProvider.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/store/FSSlaveDirectoryProvider.java	2007-08-21 00:25:25 UTC (rev 13944)
+++ search/trunk/src/java/org/hibernate/search/store/FSSlaveDirectoryProvider.java	2007-08-21 18:01:54 UTC (rev 13945)
@@ -39,21 +39,25 @@
 	private String indexName;
 	private Timer timer;
 
+	//variables needed between initialize and start
+	private String source;
+	private File indexDir;
+	private String directoryProviderName;
+	private Properties properties;
+
 	public void initialize(String directoryProviderName, Properties properties, SearchFactoryImplementor searchFactoryImplementor) {
+		this.properties = properties;
+		this.directoryProviderName = directoryProviderName;
 		//source guessing
-		String source = DirectoryProviderHelper.getSourceDirectory( "sourceBase", "source", directoryProviderName, properties );
+		source = DirectoryProviderHelper.getSourceDirectory( "sourceBase", "source", directoryProviderName, properties );
 		if (source == null)
 			throw new IllegalStateException("FSSlaveDirectoryProvider requires a viable source directory");
 		if ( ! new File(source, "current1").exists() && ! new File(source, "current2").exists() ) {
 			throw new IllegalStateException("No current marker in source directory");
 		}
 		log.debug( "Source directory: " + source );
-		File indexDir = DirectoryProviderHelper.determineIndexDir( directoryProviderName, properties );
+		indexDir = DirectoryProviderHelper.determineIndexDir( directoryProviderName, properties );
 		log.debug( "Index directory: " + indexDir.getPath() );
-		String refreshPeriod = properties.getProperty( "refresh", "3600" );
-		long period = Long.parseLong( refreshPeriod );
-		log.debug("Refresh period " + period + " seconds");
-		period *= 1000; //per second
 		try {
 			boolean create = !indexDir.exists();
 			indexName = indexDir.getCanonicalPath();
@@ -61,7 +65,21 @@
 				indexDir.mkdir();
 				log.debug("Initializing index directory " + indexName);
 			}
+		}
+		catch (IOException e) {
+			throw new HibernateException( "Unable to initialize index: " + directoryProviderName, e );
+		}
+	}
 
+	public void start() {
+		//source guessing
+		String refreshPeriod = properties.getProperty( "refresh", "3600" );
+		long period = Long.parseLong( refreshPeriod );
+		log.debug("Refresh period " + period + " seconds");
+		period *= 1000; //per second
+		try {
+			boolean create;
+
 			File subDir = new File( indexName, "1" );
 			create = ! subDir.exists();
 			directory1 = FSDirectory.getDirectory( subDir.getCanonicalPath());

Modified: search/trunk/src/java/org/hibernate/search/store/RAMDirectoryProvider.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/store/RAMDirectoryProvider.java	2007-08-21 00:25:25 UTC (rev 13944)
+++ search/trunk/src/java/org/hibernate/search/store/RAMDirectoryProvider.java	2007-08-21 18:01:54 UTC (rev 13945)
@@ -23,6 +23,9 @@
 
 	public void initialize(String directoryProviderName, Properties properties, SearchFactoryImplementor searchFactoryImplementor) {
 		indexName = directoryProviderName;
+	}
+
+	public void start() {
 		directory = new RAMDirectory();
 		try {
 			IndexWriter iw = new IndexWriter( directory, new StandardAnalyzer(), true );
@@ -33,6 +36,7 @@
 		}
 	}
 
+
 	public RAMDirectory getDirectory() {
 		return directory;
 	}




More information about the hibernate-commits mailing list