[ 
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:

{code}
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(root1);
            Files.list(root1).forEach(System.out::println);

            System.out.println("---- test2.zip ----");
            Path root2 = fs2.getRootDirectories().iterator().next();
            Path sub2 = root2.resolve("/");
            System.out.println(sub2);
            Files.list(root2).forEach(System.out::println);
        }
    }
}
{code}

This prints:

{noformat}
---- test1.zip ----
/
/first layer/
/test.gif
---- test2.zip ----
/
/test.zip
/test.doc
{noformat}

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
(v6.3.4#6332)

Reply via email to