db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Trejkaz (JIRA)" <j...@apache.org>
Subject [jira] [Comment Edited] (DERBY-6912) Allow loading a database from a Path instead of a String file path
Date Fri, 30 Sep 2016 03:35:20 GMT

    [ https://issues.apache.org/jira/browse/DERBY-6912?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15534888#comment-15534888

Trejkaz edited comment on DERBY-6912 at 9/30/16 3:35 AM:

Correct, there is no way to turn a String obtained from toString() back into a Path.

As an example:

import java.nio.file.FileSystem;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class PathDemo
    public static void main(String[] args) throws Exception
        try (FileSystem fs1 = FileSystems.newFileSystem(Paths.get("/Data/test1.zip"), PathDemo.class.getClassLoader());
             FileSystem fs2 = FileSystems.newFileSystem(Paths.get("/Data/test2.zip"), PathDemo.class.getClassLoader()))
            System.out.println("---- test1.zip ----");
            Path root1 = fs1.getRootDirectories().iterator().next();

            System.out.println("---- test2.zip ----");
            Path root2 = fs2.getRootDirectories().iterator().next();
            Path sub2 = root2.resolve("/");

This prints:

---- test1.zip ----
/first layer/
---- test2.zip ----

i.e., toString() returns the same value for two paths which are different.

was (Author: trejkaz):
Correct, there is no way to turn a String obtained from toString() back into a Path.

> Allow loading a database from a Path instead of a String file path
> ------------------------------------------------------------------
>                 Key: DERBY-6912
>                 URL: https://issues.apache.org/jira/browse/DERBY-6912
>             Project: Derby
>          Issue Type: Improvement
>            Reporter: Trejkaz
> Java 7 added the new filesystem abstraction (Path) API.
> Our data is made up of a collection of multiple other databases. Other components of
our data, such as Lucene, already use the new Path API in the current released versions, so
it's now only Derby holding us up.
> I can make an alternative DirStorageFactory7, DirFile7, DirRandomAccessFile7 which all
use Path to do their work, instead of File. This turns out to be fairly easy, in fact.
> The blocker is currently that Derby currently forces us to provide the path to the database
as a string. This comes down to EmbeddedDataSourceInterface forcing me to pass a string for
pretty much everything. For instance, the database "name" usually becomes the file path, but
that's a string.
> {code}
>     void setDatabaseName(String name);
>     String getDatabaseName();
> {code}
> Even if I wanted to work around it by making a custom protocol, ignoring the name and
then using the connection attributes, the connection attributes were done as a string as well:
> {code}
>     void setConnectionAttributes(String attributes);
>     String getConnectionAttributes();
> {code}
> It would have been nice if this were a Map so that I could put other objects inside it.
> As far as other workarounds go, I can't extend EmbedPooledConnection, so I can't usefully
extend InternalDriver, so I can't usefully extend EmbeddedConnectionPoolDataSource myself.
If there is any other possibility which I have missed, I'd be interested to know.
> Really what I would like is a way to pass the Path directly to EmbeddedConnectionPoolDataSource.

This message was sent by Atlassian JIRA

View raw message