Update of /var/cvs/src/org/mmbase/storage/implementation/database In directory james.mmbase.org:/tmp/cvs-serv6818/implementation/database
Modified Files: DatabaseStorageManager.java DatabaseStorageManagerFactory.java GenericDataSource.java Log Message: MMB-1614 See also: http://cvs.mmbase.org/viewcvs/src/org/mmbase/storage/implementation/database See also: http://www.mmbase.org/jira/browse/MMB-1614 Index: DatabaseStorageManager.java =================================================================== RCS file: /var/cvs/src/org/mmbase/storage/implementation/database/DatabaseStorageManager.java,v retrieving revision 1.190 retrieving revision 1.191 diff -u -b -r1.190 -r1.191 --- DatabaseStorageManager.java 19 Mar 2008 11:52:51 -0000 1.190 +++ DatabaseStorageManager.java 21 Mar 2008 13:44:23 -0000 1.191 @@ -32,7 +32,7 @@ * * @author Pierre van Rooden * @since MMBase-1.7 - * @version $Id: DatabaseStorageManager.java,v 1.190 2008/03/19 11:52:51 pierre Exp $ + * @version $Id: DatabaseStorageManager.java,v 1.191 2008/03/21 13:44:23 michiel Exp $ */ public class DatabaseStorageManager implements StorageManager { @@ -681,7 +681,7 @@ * @return The File where to store or read the binary data */ protected File getBinaryFile(MMObjectNode node, String fieldName) { - String basePath = factory.getBinaryFileBasePath(); + File basePath = factory.getBinaryFileBasePath(); StringBuilder pathBuffer = new StringBuilder(); int number = node.getNumber() / 1000; while (number > 0) { @@ -710,8 +710,15 @@ else { builderName = node.getBuilder().getFullTableName(); } + String canon; + try { + canon = basePath.getCanonicalPath(); + } catch (Exception e) { + log.warn(e); + canon = basePath.toString(); + } - pathBuffer.insert(0, basePath + factory.getDatabaseName() + File.separator + builderName); + pathBuffer.insert(0, canon + File.separator + factory.getDatabaseName() + File.separator + builderName); return new File(pathBuffer.toString(), "" + node.getNumber() + '.' + fieldName); } @@ -721,7 +728,7 @@ */ private File getLegacyBinaryFile(MMObjectNode node, String fieldName) { // the same basePath, so you so need to set that up right. - String basePath = factory.getBinaryFileBasePath(); + File basePath = factory.getBinaryFileBasePath(); File f = new File(basePath, node.getBuilder().getTableName() + File.separator + node.getNumber() + '.' + fieldName); if (f.exists()) { // 1.6 storage or 'support' blobdatadir @@ -732,7 +739,7 @@ } } - f = new File(basePath + File.separator + factory.getCatalog() + File.separator + node.getBuilder().getFullTableName() + File.separator + node.getNumber() + '.' + fieldName); + f = new File(basePath, factory.getCatalog() + File.separator + node.getBuilder().getFullTableName() + File.separator + node.getNumber() + '.' + fieldName); if (f.exists()) { // 1.7.0.rc1 blob data dir if (!f.canRead()) { log.warn("Found '" + f + "' but it cannot be read"); Index: DatabaseStorageManagerFactory.java =================================================================== RCS file: /var/cvs/src/org/mmbase/storage/implementation/database/DatabaseStorageManagerFactory.java,v retrieving revision 1.49 retrieving revision 1.50 diff -u -b -r1.49 -r1.50 --- DatabaseStorageManagerFactory.java 22 Feb 2008 12:27:48 -0000 1.49 +++ DatabaseStorageManagerFactory.java 21 Mar 2008 13:44:23 -0000 1.50 @@ -12,6 +12,7 @@ import java.sql.*; import java.util.StringTokenizer; + import javax.naming.*; import javax.sql.DataSource; import java.io.*; @@ -41,7 +42,7 @@ * * @author Pierre van Rooden * @since MMBase-1.7 - * @version $Id: DatabaseStorageManagerFactory.java,v 1.49 2008/02/22 12:27:48 michiel Exp $ + * @version $Id: DatabaseStorageManagerFactory.java,v 1.50 2008/03/21 13:44:23 michiel Exp $ */ public class DatabaseStorageManagerFactory extends StorageManagerFactory<DatabaseStorageManager> { @@ -95,11 +96,11 @@ protected boolean supportsTransactions = false; - private static final String BASE_PATH_UNSET = "UNSET"; + private static final File BASE_PATH_UNSET = new File("UNSET"); /** * Used by #getBinaryFileBasePath */ - private String basePath = BASE_PATH_UNSET; + private File basePath = BASE_PATH_UNSET; public double getVersion() { return 0.1; @@ -152,7 +153,7 @@ * @param binaryFileBasePath For some datasource a file base path may be needed (some configurations of hsql). It can be <code>null</code> during bootstrap. In lookup.xml an alternative URL may be configured then which does not need the file base path. * @since MMBase-1.8 */ - protected DataSource createDataSource(String binaryFileBasePath) { + protected DataSource createDataSource(File binaryFileBasePath) { DataSource ds = null; // get the Datasource for the database to use // the datasource uri (i.e. 'jdbc/xa/MMBase' ) @@ -356,7 +357,7 @@ /** * As [EMAIL PROTECTED] #getBinaryFileBasePath(boolean)} with <code>true</code> */ - public String getBinaryFileBasePath() { + protected File getBinaryFileBasePath() { return getBinaryFileBasePath(true); } @@ -365,19 +366,19 @@ * @param check If the path is only perhaps needed, you may want to provide 'false' here. * @since MMBase-1.8.1 */ - public String getBinaryFileBasePath(boolean check) { + protected File getBinaryFileBasePath(boolean check) { if (basePath == BASE_PATH_UNSET) { - basePath = (String) getAttribute(Attributes.BINARY_FILE_PATH); - if (basePath == null || basePath.equals("")) { - basePath = getDataDir(); + String path = (String) getAttribute(Attributes.BINARY_FILE_PATH); + if (path == null || path.equals("")) { + basePath = mmbase.getDataDir(); } else { - MessageFormat mf = new MessageFormat(basePath); - java.io.File baseFile = new java.io.File(mf.format(getDataDir())); + MessageFormat mf = new MessageFormat(path); + java.io.File baseFile = new java.io.File(mf.format(mmbase.getDataDir())); if (! baseFile.isAbsolute()) { ServletContext sc = MMBaseContext.getServletContext(); String absolute = sc != null ? sc.getRealPath("/") + File.separator : null; if (absolute == null) absolute = System.getProperty("user.dir") + File.separator; - basePath = absolute + basePath; + basePath = new File(absolute + basePath); } } if (basePath == null) { @@ -386,16 +387,7 @@ } else { log.service("Binary file base path " + basePath); } - File baseDir = new File(basePath); - try { - basePath = baseDir.getCanonicalPath(); if (check) checkBinaryFileBasePath(basePath); - } catch (IOException ioe) { - log.error(ioe); - } - if (! basePath.endsWith(File.separator)) { - basePath += File.separator; - } } return basePath; } @@ -405,13 +397,12 @@ * @param basePath a Directory name * @since MMBase-1.8.1 */ - public static boolean checkBinaryFileBasePath(String basePath) { - File baseDir = new File(basePath); + public static boolean checkBinaryFileBasePath(File baseDir) { if (! baseDir.mkdirs() && ! baseDir.exists()) { - log.error("Cannot create the binary file path " + basePath); + log.error("Cannot create the binary file path " + baseDir); } if (! baseDir.canWrite()) { - log.error("Cannot write in the binary file path " + basePath); + log.error("Cannot write in the binary file path " + baseDir); return false; } else { return true; Index: GenericDataSource.java =================================================================== RCS file: /var/cvs/src/org/mmbase/storage/implementation/database/GenericDataSource.java,v retrieving revision 1.16 retrieving revision 1.17 diff -u -b -r1.16 -r1.17 --- GenericDataSource.java 22 Feb 2008 12:27:48 -0000 1.16 +++ GenericDataSource.java 21 Mar 2008 13:44:23 -0000 1.17 @@ -11,6 +11,7 @@ import java.sql.*; +import java.io.File; import javax.sql.DataSource; import java.lang.reflect.*; @@ -32,7 +33,7 @@ * @author Pierre van Rooden * @author Michiel Meeuwissen * @since MMBase-1.7 - * @version $Id: GenericDataSource.java,v 1.16 2008/02/22 12:27:48 michiel Exp $ + * @version $Id: GenericDataSource.java,v 1.17 2008/03/21 13:44:23 michiel Exp $ */ public final class GenericDataSource implements DataSource { private static final Logger log = Logging.getLoggerInstance(GenericDataSource.class); @@ -42,7 +43,7 @@ private java.io.PrintWriter printWriter = null; - final private String dataDir; + final private File dataDir; final private boolean meta; private boolean basePathOk = false; @@ -54,13 +55,13 @@ * @param A Datadir (as a string ending in a /) which may be used in some URL's (most noticably those of HSQLDB). Can be <code>null</code> if not used. * @throws StorageInaccessibleException if the JDBC module used in creating the datasource is inaccessible */ - GenericDataSource(MMBase mmbase, String dataDir) throws StorageInaccessibleException { + GenericDataSource(MMBase mmbase, File dataDir) throws StorageInaccessibleException { jdbc = Module.getModule(JDBC.class); if (jdbc == null) { throw new StorageInaccessibleException("Cannot load Datasource or JDBC Module"); } jdbc.startModule(); - this.dataDir = dataDir == null ? "" : dataDir; + this.dataDir = dataDir; meta = false; } /** @@ -209,7 +210,15 @@ } } String url = jdbc.makeUrl(); - String newUrl = url.replaceAll("\\$DATADIR", dataDir); + String data; + try { + data = dataDir.getCanonicalPath(); + } catch (Exception e) { + log.error(e + " Falling back to " + dataDir); + data = dataDir.toString(); + + } + String newUrl = url.replaceAll("\\$DATADIR", data + File.separator); if ((!basePathOk) && (! newUrl.equals(url))) { basePathOk = DatabaseStorageManagerFactory.checkBinaryFileBasePath(dataDir); } _______________________________________________ Cvs mailing list Cvs@lists.mmbase.org http://lists.mmbase.org/mailman/listinfo/cvs