Author: bpoussin Date: 2010-11-18 19:54:15 +0100 (Thu, 18 Nov 2010) New Revision: 487 Url: http://nuiton.org/repositories/revision/wikitty/487 Log: Evolution #1071: Create and use new WikittyServiceInMemoryJdbcSolr for transaction - add WikittyServiceInMemoryJdbcSolr - permit to use it in WikittyServiceTransaction by configuration - add RAMDirectoryFactory nomaly in SolR source because it's appear only in 4.0 (in dev currently) but we used 1.4.1 - change solrconfig.xml (2x we must not forgot file test version) to add support to change DirectoryFactory Added: trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/services/ trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/services/WikittyServiceInMemoryJdbcSolr.java trunk/wikitty-jdbc-impl/src/test/java/org/nuiton/wikitty/services/ trunk/wikitty-jdbc-impl/src/test/java/org/nuiton/wikitty/services/WikittyServiceInMemoryJdbcSolrTest.java trunk/wikitty-solr-impl/src/main/java/org/nuiton/wikitty/solr/RAMDirectoryFactory.java Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyConfig.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceFactory.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/addons/WikittyImportExportService.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/addons/importexport/ImportTask.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceTransaction.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyTransaction.java trunk/wikitty-api/src/test/java/org/nuiton/wikitty/services/WikittyServiceTransactionTest.java trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyStorageJDBC.java trunk/wikitty-solr-impl/src/main/resources/solrconfig.xml trunk/wikitty-solr-impl/src/test/resources/solrconfig.xml Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyConfig.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyConfig.java 2010-11-18 12:16:22 UTC (rev 486) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyConfig.java 2010-11-18 18:54:15 UTC (rev 487) @@ -61,14 +61,14 @@ } } - // REMOVE IT poussin 20101118, bad constructor. It not initialize correctly config -// /** -// * Create WikittyConfig and load particular configuration filename -// * @param configFilename -// */ -// public WikittyConfig(String configFilename) { -// setDefaultOption(Option.WIKITTY_CONFIG_FILE.getKey(), configFilename); -// } + /** + * Create WikittyConfig and load particular configuration filename + * @param configFilename + */ + public WikittyConfig(String configFilename) { + this(); + setDefaultOption(Option.WIKITTY_CONFIG_FILE.getKey(), configFilename); + } /** * Create WikittyConfig and use props as default value @@ -138,15 +138,15 @@ WIKITTY_STORAGE_JDBC_XADATASOURCE_H2_URL( "wikitty.storage.jdbc.xadatasource.org.h2.jdbcx.JdbcDataSource.URL", _("JDBC xadatasource property h2 url"), - "jdbc:h2:file:./target/data/db", String.class, false, false), + "${"+WIKITTY_STORAGE_JDBC_URL.getKey() + "}", String.class, false, false), WIKITTY_STORAGE_JDBC_XADATASOURCE_H2_USER( "wikitty.storage.jdbc.xadatasource.org.h2.jdbcx.JdbcDataSource.user", _("JDBC xadatasource property h2 username"), - "sa", String.class, false, false), + "${"+WIKITTY_STORAGE_JDBC_LOGIN.getKey() + "}", String.class, false, false), WIKITTY_STORAGE_JDBC_XADATASOURCE_H2_PASSWORD( "wikitty.storage.jdbc.xadatasource.org.h2.jdbcx.JdbcDataSource.password", _("JDBC xadatasource property h2 password"), - "", String.class, false, false), + "${"+WIKITTY_STORAGE_JDBC_PASSWORD.getKey() + "}", String.class, false, false), /* Solr config name are used directly in solr config file. If * you change it, change too in module @@ -157,7 +157,9 @@ "./target/data/solr", File.class, false, false), WIKITTY_SEARCHENGINE_SOLR_DIRECTORY_FACTORY( "wikitty.searchengine.solr.directory.factory", - _("SolR storage type possible value: solr.StandardDirectoryFactory, solr.RAMDirectoryFactory"), + _("SolR storage type possible value: solr.StandardDirectoryFactory" + + " or org.nuiton.wikitty.solr.RAMDirectoryFactory" + + " (or when solr 4.0 will be used org.apache.solr.core.RAMDirectoryFactory)"), "solr.StandardDirectoryFactory", String.class, false, false), @@ -184,6 +186,14 @@ + "org.nuiton.wikitty.jdbc.WikittyStorageJDBC," + "org.nuiton.wikitty.solr.WikittySearchEnginSolr", String.class, false, false), + WIKITTY_TRANSACTION_WIKITTYSERVICE_COMPONENTS( + "wikitty.transaction.WikittyService.components", + _("WikittyService to use for transaction (must be in memory)" + + "ex: org.nuiton.wikitty.services.WikittyServiceInMemory" + + " or org.nuiton.wikitty.services.WikittyServiceInMemoryJdbcSolr)"), + WikittyServiceInMemory.class.getName(), String.class, false, false), + + WIKITTY_SERVER_CONFIG( "wikitty.service.server.config", _("Jetty server configuration file name"), Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceFactory.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceFactory.java 2010-11-18 12:16:22 UTC (rev 486) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceFactory.java 2010-11-18 18:54:15 UTC (rev 487) @@ -40,9 +40,22 @@ * @return */ static public WikittyService buildWikittyService(ApplicationConfig config) { + String prefix = "wikitty."; + WikittyService result = buildWikittyService(config, prefix); + return result; + } + + static public WikittyService buildWikittyServiceTransaction(ApplicationConfig config) { + String prefix = "wikitty.transaction."; + WikittyService result = buildWikittyService(config, prefix); + return result; + } + + static public WikittyService buildWikittyService( + ApplicationConfig config, String prefix) { WikittyService result = null; - List<Class> layers = getComponents(config, WikittyService.class); + List<Class> layers = getComponents(config, prefix, WikittyService.class); MutablePicoContainer pico = new TransientPicoContainer(); pico.addComponent(config); @@ -51,7 +64,7 @@ // on cree un container specifique pour l'instanciate de cette objet // avec tous les composants dont il a besoin - MutablePicoContainer childPico = getChildContainer(config, pico, clazz); + MutablePicoContainer childPico = getChildContainer(config, pico, prefix, clazz); result = childPico.getComponent(clazz); pico.removeComponent(WikittyService.class); @@ -86,8 +99,9 @@ * @return */ static protected MutablePicoContainer getChildContainer( - ApplicationConfig config, MutablePicoContainer parent, Class clazz) { - List<Class> comps = getComponents(config, clazz); + ApplicationConfig config, MutablePicoContainer parent, + String prefix, Class clazz) { + List<Class> comps = getComponents(config, prefix, clazz); MutablePicoContainer result = makeChildContainer(parent, comps); return result; } @@ -105,10 +119,10 @@ * @param clazz * @return la liste de classe trouvee ou null si la cle n'existe pas */ - static protected List<Class> getComponents(ApplicationConfig config, Class clazz) { + static protected List<Class> getComponents(ApplicationConfig config, String prefix, Class clazz) { List<Class> result = null; - String key = "wikitty." + clazz.getSimpleName() + ".components"; + String key = prefix + clazz.getSimpleName() + ".components"; String componentsString = config.getOption(key); if (componentsString != null) { Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/addons/WikittyImportExportService.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/addons/WikittyImportExportService.java 2010-11-18 12:16:22 UTC (rev 486) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/addons/WikittyImportExportService.java 2010-11-18 18:54:15 UTC (rev 487) @@ -80,6 +80,7 @@ } }; + ApplicationConfig config = null; /** directory path where export asynchronous file are stored */ protected String exportDirectory = "/tmp/"; /** url used by client to retrieve export file when job is ended */ @@ -97,6 +98,7 @@ public WikittyImportExportService( ApplicationConfig config, String securityToken, WikittyService ws) { + this.config = config; this.securityToken = securityToken; this.ws = ws; @@ -125,7 +127,7 @@ public void syncImport(FORMAT format, String s) { Reader reader = new StringReader(s); - ImportTask task = new ImportTask(securityToken, ws, format, reader); + ImportTask task = new ImportTask(securityToken, config, ws, format, reader); task.run(); } @@ -133,7 +135,7 @@ try { URL url = new URL(uri); Reader reader = new InputStreamReader(url.openStream()); - ImportTask task = new ImportTask(securityToken, ws, format, reader); + ImportTask task = new ImportTask(securityToken, config, ws, format, reader); task.run(); } catch (Exception eee) { throw new WikittyException(String.format( @@ -145,7 +147,7 @@ try { URL url = new URL(uri); Reader reader = new InputStreamReader(url.openStream()); - ImportTask task = new ImportTask(securityToken, ws, format, reader); + ImportTask task = new ImportTask(securityToken, config, ws, format, reader); FutureTask<String> future = new FutureTask<String>(task, null); importExportExecutor.submit(future); Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/addons/importexport/ImportTask.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/addons/importexport/ImportTask.java 2010-11-18 12:16:22 UTC (rev 486) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/addons/importexport/ImportTask.java 2010-11-18 18:54:15 UTC (rev 487) @@ -27,6 +27,7 @@ import java.io.Reader; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.util.ApplicationConfig; import org.nuiton.wikitty.WikittyException; import org.nuiton.wikitty.WikittyService; import org.nuiton.wikitty.addons.WikittyImportExportService.FORMAT; @@ -37,15 +38,17 @@ /** to use log facility, just put in your code: log.info(\"...\"); */ static private Log log = LogFactory.getLog(ImportTask.class); + protected ApplicationConfig config; protected WikittyService ws; protected FORMAT format; protected Reader reader; protected ImportExportMethod importerExporter; protected String securityToken; - public ImportTask(String securityToken, + public ImportTask(String securityToken, ApplicationConfig config, WikittyService ws, FORMAT format, Reader reader) { super(); + this.config = config; this.securityToken = securityToken; this.ws = ws; this.format = format; @@ -54,7 +57,7 @@ @Override public void run() { - WikittyServiceTransaction tx = new WikittyServiceTransaction(null, ws); + WikittyServiceTransaction tx = new WikittyServiceTransaction(config, ws); // TODO poussin 20101029 rendre configurable le l'auto commit '1000' pour l'import tx.setAutoCommit(1000); try { Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceTransaction.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceTransaction.java 2010-11-18 12:16:22 UTC (rev 486) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceTransaction.java 2010-11-18 18:54:15 UTC (rev 487) @@ -20,6 +20,7 @@ import org.nuiton.wikitty.entities.Wikitty; import org.nuiton.wikitty.entities.WikittyExtension; import org.nuiton.wikitty.WikittyService; +import org.nuiton.wikitty.WikittyServiceFactory; import org.nuiton.wikitty.WikittyTree; import org.nuiton.wikitty.entities.WikittyTreeNode; @@ -49,11 +50,10 @@ public WikittyServiceTransaction(ApplicationConfig config, WikittyService ws) { this.ws = ws; - // create new WikittyServiceInMemory not configured with default config - // this WikittyServiceInMemory must be only in memory - // FIXME poussin 20101118 use configuration to retrive transaction - // in memory implementation to used. Default must be h2+solr in memory mode - this.tx = new WikittyServiceInMemory(null); + // use WikittyService in Memory + // use configuration to retrive transaction in memory implementation + // you must used WikittyServiceInMemoryJdbcSolr implementation + this.tx = WikittyServiceFactory.buildWikittyServiceTransaction(config); events = new LinkedList<WikittyEvent>(); } Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyTransaction.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyTransaction.java 2010-11-18 12:16:22 UTC (rev 486) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyTransaction.java 2010-11-18 18:54:15 UTC (rev 487) @@ -44,29 +44,10 @@ /** permet d'attacher n'importe quoi a une transaction */ protected Map<Object, Object> tagValues; - /** cache static utilise par le WikittyServiceCached */ - transient protected WikittyCache cache = null; - public WikittyTransaction() { tagValues = new HashMap<Object, Object>(); } - /** - * FIXME poussin 20101027 a supprimer lorsque WikittyServiceTransaction - * aura ete implante - * - * Visibilite 'default' car est uilise par WikittyServiceCached qui est dans - * le meme package et a priori seulement lui en a besoin - * - * @return - */ - WikittyCache getCache() { - if (cache == null) { - cache = new WikittyCache(false); - } - return cache; - } - public Object getTagValue(Object tag) { return tagValues.get(tag); } Modified: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/services/WikittyServiceTransactionTest.java =================================================================== --- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/services/WikittyServiceTransactionTest.java 2010-11-18 12:16:22 UTC (rev 486) +++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/services/WikittyServiceTransactionTest.java 2010-11-18 18:54:15 UTC (rev 487) @@ -1,14 +1,12 @@ package org.nuiton.wikitty.services; import org.nuiton.wikitty.entities.Wikitty; -import org.nuiton.wikitty.services.WikittyServiceEnhanced; -import org.nuiton.wikitty.services.WikittyServiceTransaction; -import org.nuiton.wikitty.services.WikittyServiceInMemory; import java.util.Collections; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.junit.Assert; import org.junit.Test; +import org.nuiton.util.ApplicationConfig; import org.nuiton.wikitty.WikittyConfig; import org.nuiton.wikitty.entities.WikittyLabel; import org.nuiton.wikitty.entities.WikittyLabelImpl; @@ -26,12 +24,14 @@ /** to use log facility, just put in your code: log.info(\"...\"); */ static private Log log = LogFactory.getLog(WikittyServiceTransactionTest.class); - public WikittyServiceTransactionTest() { + protected ApplicationConfig getConfig() { + WikittyConfig result = new WikittyConfig(); + return result; } @Test public void testTransaction() throws Exception { - WikittyConfig config = new WikittyConfig(); + ApplicationConfig config = getConfig(); WikittyServiceInMemory ws = new WikittyServiceInMemory(config); WikittyServiceTransaction tx = new WikittyServiceTransaction(config, ws); Modified: trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyStorageJDBC.java =================================================================== --- trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyStorageJDBC.java 2010-11-18 12:16:22 UTC (rev 486) +++ trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyStorageJDBC.java 2010-11-18 18:54:15 UTC (rev 487) @@ -203,9 +203,8 @@ } else if (WikittyUtil.versionGreaterThan(requestedVersion, actualVersion)) { //requested version is newer newVersion = requestedVersion; } else { //requested version is obsolete -// FIXME poussin 20101118 pourquoi lorsqu'on -// demande un force il peut y avoir un "Wikitty is obsolete" ce qui ne permet -// pas de rejouer plusieurs fois les events pour les besoins du slave :( +// FIXME poussin 20101118 pourquoi lorsqu'on demande un force il peut y avoir un "Wikitty is obsolete" +// ce qui ne permet pas de rejouer plusieurs fois les events pour les besoins du slave :( throw new WikittyObsoleteException(String.format( "Your wikitty '%s' is obsolete (saving: '%s'; existing: '%s')", wikitty.getId(), requestedVersion, actualVersion)); } Added: trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/services/WikittyServiceInMemoryJdbcSolr.java =================================================================== --- trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/services/WikittyServiceInMemoryJdbcSolr.java (rev 0) +++ trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/services/WikittyServiceInMemoryJdbcSolr.java 2010-11-18 18:54:15 UTC (rev 487) @@ -0,0 +1,49 @@ +package org.nuiton.wikitty.services; + + +import java.util.UUID; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.util.ApplicationConfig; +import org.nuiton.wikitty.WikittyConfig; +import org.nuiton.wikitty.jdbc.WikittyExtensionStorageJDBC; +import org.nuiton.wikitty.jdbc.WikittyStorageJDBC; +import org.nuiton.wikitty.solr.WikittySearchEnginSolr; + +/** + * In memory implementation that use in memory h2 and in memory solr + * + * @author poussin + * @version $Revision$ + * + * Last update: $Date$ + * by : $Author$ + */ +public class WikittyServiceInMemoryJdbcSolr extends WikittyServiceImpl { + + /** to use log facility, just put in your code: log.info(\"...\"); */ + static private Log log = LogFactory.getLog(WikittyServiceInMemoryJdbcSolr.class); + + public WikittyServiceInMemoryJdbcSolr() { + super(null, null, null); + + // we use unique db name (this permit to use simultaneously many + // WikittyServiceInMemoryJdbcSolr) + String dbName = UUID.randomUUID().toString(); + ApplicationConfig config = new WikittyConfig(); + config.setOption(WikittyConfig.Option. + WIKITTY_STORAGE_JDBC_URL.getKey(), + "jdbc:h2:mem:" + dbName); + config.setOption(WikittyConfig.Option. + WIKITTY_SEARCHENGINE_SOLR_DIRECTORY_FACTORY.getKey(), + "org.nuiton.wikitty.solr.RAMDirectoryFactory"); + // others defaults value in config normaly is correct + // - WIKITTY_STORAGE_JDBC* + // - WIKITTY_STORAGE_JDBC_XADATASOURCE* + + extensionStorage = new WikittyExtensionStorageJDBC(config); + wikittyStorage = new WikittyStorageJDBC(config, extensionStorage); + searchEngin = new WikittySearchEnginSolr(config, extensionStorage); + } + +} Added: trunk/wikitty-jdbc-impl/src/test/java/org/nuiton/wikitty/services/WikittyServiceInMemoryJdbcSolrTest.java =================================================================== --- trunk/wikitty-jdbc-impl/src/test/java/org/nuiton/wikitty/services/WikittyServiceInMemoryJdbcSolrTest.java (rev 0) +++ trunk/wikitty-jdbc-impl/src/test/java/org/nuiton/wikitty/services/WikittyServiceInMemoryJdbcSolrTest.java 2010-11-18 18:54:15 UTC (rev 487) @@ -0,0 +1,31 @@ +package org.nuiton.wikitty.services; + + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.util.ApplicationConfig; +import org.nuiton.wikitty.WikittyConfig; + +/** + * + * @author poussin + * @version $Revision$ + * + * Last update: $Date$ + * by : $Author$ + */ +public class WikittyServiceInMemoryJdbcSolrTest extends WikittyServiceTransactionTest { + + /** to use log facility, just put in your code: log.info(\"...\"); */ + static private Log log = LogFactory.getLog(WikittyServiceInMemoryJdbcSolrTest.class); + + @Override + protected ApplicationConfig getConfig() { + ApplicationConfig result = super.getConfig(); + result.setOption(WikittyConfig.Option. + WIKITTY_TRANSACTION_WIKITTYSERVICE_COMPONENTS.getKey(), + WikittyServiceInMemoryJdbcSolr.class.getName()); + return result; + } + +} Added: trunk/wikitty-solr-impl/src/main/java/org/nuiton/wikitty/solr/RAMDirectoryFactory.java =================================================================== --- trunk/wikitty-solr-impl/src/main/java/org/nuiton/wikitty/solr/RAMDirectoryFactory.java (rev 0) +++ trunk/wikitty-solr-impl/src/main/java/org/nuiton/wikitty/solr/RAMDirectoryFactory.java 2010-11-18 18:54:15 UTC (rev 487) @@ -0,0 +1,119 @@ +/** + * 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.nuiton.wikitty.solr; + +import java.io.File; +import java.util.HashMap; +import java.util.Map; + +import org.apache.solr.core.StandardDirectoryFactory; +import java.io.IOException; +import java.util.concurrent.atomic.AtomicInteger; + +import org.apache.lucene.store.Directory; +import org.apache.lucene.store.RAMDirectory; + +/** + * Directory provider for using lucene RAMDirectory + * + * Only exists in version 4.0 of solr, but we used 1.4.1. Remove this class + * when solr 4.0 will be used + */ +public class RAMDirectoryFactory extends StandardDirectoryFactory { + + private static Map<String, RefCntRamDirectory> directories = new HashMap<String, RefCntRamDirectory>(); + + @Override + public Directory open(String path) throws IOException { + synchronized (RAMDirectoryFactory.class) { + RefCntRamDirectory directory = directories.get(path); + if (directory == null || !directory.isOpen()) { + directory = (RefCntRamDirectory) openNew(path); + directories.put(path, directory); + } else { + directory.incRef(); + } + + return directory; + } + } + + public boolean exists(String path) { + synchronized (RAMDirectoryFactory.class) { + RefCntRamDirectory directory = directories.get(path); + if (directory == null || !directory.isOpen()) { + return false; + } else { + return true; + } + } + } + + /** + * Non-public for unit-test access only. Do not use directly + */ + Directory openNew(String path) throws IOException { + Directory directory; + File dirFile = new File(path); + boolean indexExists = dirFile.canRead(); + if (indexExists) { + Directory dir = super.open(path); + directory = new RefCntRamDirectory(dir); + } else { + directory = new RefCntRamDirectory(); + } + return directory; + } + + static public class RefCntRamDirectory extends RAMDirectory { + + private final AtomicInteger refCount = new AtomicInteger(); + + public RefCntRamDirectory() { + super(); + refCount.set(1); + } + + public RefCntRamDirectory(Directory dir) throws IOException { + this(); + Directory.copy(dir, this, false); +// for (String file : dir.listAll()) { +// dir.copy(this, file, file); +// } + } + + public void incRef() { + ensureOpen(); + refCount.incrementAndGet(); + } + + public void decRef() { + ensureOpen(); + if (refCount.getAndDecrement() == 1) { + super.close(); + } + } + + public final synchronized void close() { + decRef(); + } + + public boolean isOpen() { + return isOpen; + } + } +} Modified: trunk/wikitty-solr-impl/src/main/resources/solrconfig.xml =================================================================== --- trunk/wikitty-solr-impl/src/main/resources/solrconfig.xml 2010-11-18 12:16:22 UTC (rev 486) +++ trunk/wikitty-solr-impl/src/main/resources/solrconfig.xml 2010-11-18 18:54:15 UTC (rev 487) @@ -24,23 +24,6 @@ #L% --> -<!-- - 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. ---> - <config> <!-- Set this to 'false' if you want solr to continue working after it has encountered an severe configuration error. In a production environment, Modified: trunk/wikitty-solr-impl/src/test/resources/solrconfig.xml =================================================================== --- trunk/wikitty-solr-impl/src/test/resources/solrconfig.xml 2010-11-18 12:16:22 UTC (rev 486) +++ trunk/wikitty-solr-impl/src/test/resources/solrconfig.xml 2010-11-18 18:54:15 UTC (rev 487) @@ -31,9 +31,18 @@ <!-- Used to specify an alternate directory to hold all index data other than the default ./data under the Solr home. If replication is in use, this should match the replication configuration. --> - <dataDir>${solr.data.dir:./target/tests-temp-dir/solr/data}</dataDir> + <dataDir>${wikitty.searchengine.solr.directory.data:./solr/data}</dataDir> + <!-- The DirectoryFactory to use for indexes. + solr.StandardDirectoryFactory, the default, is filesystem based. + solr.RAMDirectoryFactory is memory based, not persistent, and doesn't work with replication. + A prefix of "solr." for class names is an alias that + causes solr to search appropriate packages, including + org.apache.solr.(search|update|request|core|analysis) + --> + <directoryFactory name="DirectoryFactory" class="${wikitty.searchengine.solr.directory.factory:solr.StandardDirectoryFactory}"/> + <indexDefaults> <!-- Values here affect all index writers and act as a default unless overridden. --> <useCompoundFile>false</useCompoundFile>