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

Richard N. Hillegas commented on DERBY-7097:
--------------------------------------------

Hi Daniel,

I am afraid that I don't understand your last comment about the Derby 
libraries. I only see the client driver mentioned by 
https://db.apache.org/derby/docs/10.15/getstart/rgslib46043.html.

Note that derbytools.jar is only needed for embedded usage if you fault in your 
driver via Class.forName("org.apache.derby.jdbc.EmbeddedDriver"), as the 
original documentation recommended back in the 1990s. Java 5 and 6 introduced 
driver autoloading. You do not need derbytools.jar for embedded usage if you 
fault in your driver via a DataSource or via DriverManager.getConnection(). You 
only need derby.jar and derbyshared.jar. The following program shows this:

{noformat}
import java.sql.*;

public class Z
{
    public static void main(String... args) throws Exception
    {
        Connection conn = 
DriverManager.getConnection("jdbc:derby:memory:db;create=true");
        conn.prepareStatement("create table t(a int)").execute();
        conn.prepareStatement("insert into t values (1), (2), (3)").execute();

        try (PreparedStatement ps = conn.prepareStatement("select * from t"))
        {
            try (ResultSet rs = ps.executeQuery())
            {
                while (rs.next())
                {
                    println(rs.getString(1));
                }
            }
        }
    }

    private static void println(String text) { System.out.println(text); }
}
{noformat}

When I run that program thusly...

{noformat}
#!/bin/bash

derbyJarDir=/Users/rhillegas/sw/z/db-derby-10.15.2.0-bin/lib

export 
CLASSPATH=/Users/rhillegas/src:$derbyJarDir/derby.jar:$derbyJarDir/derbyshared.jar

echo $CLASSPATH

java Z
{noformat}

...I see the following output:

{noformat}
/Users/rhillegas/src:/Users/rhillegas/sw/z/db-derby-10.15.2.0-bin/lib/derby.jar:/Users/rhillegas/sw/z/db-derby-10.15.2.0-bin/lib/derbyshared.jar
1
2
3
{noformat}


> Update documentation to allow users to properly use EmbeddedDriver
> ------------------------------------------------------------------
>
>                 Key: DERBY-7097
>                 URL: https://issues.apache.org/jira/browse/DERBY-7097
>             Project: Derby
>          Issue Type: Bug
>          Components: Documentation
>    Affects Versions: 10.15.2.0
>            Reporter: Daniel Le Berre
>            Priority: Major
>         Attachments: derby-7097-01-aa-jpms-related-website-changes.diff, 
> derby-7097-01-ab-jpms-related-website-changes.diff, 
> derby-7097-02-aa-releaseSummary.diff
>
>
> In earlier version of Derby, and as reported in the documentation, the 
> EmbeddedDriver class was in derby.jar.
> As such, it was quite easy to deploy a webapp with an embedded derby 
> database: it was sufficient to just add a derby.jar file to the project 
> library.
> In current releases of derby (10.15.2.0), the EmbeddedDriver class is no 
> longer in the derby.jar file but in the derbytools.jar file.
> ```
> $ for i in `ls *.jar`; do echo $i ; jar tf $i | grep Driver ; done
>  derby.jar
>  org/apache/derby/iapi/jdbc/AutoloadedDriver$1.class
>  org/apache/derby/iapi/jdbc/AutoloadedDriver.class
>  org/apache/derby/iapi/jdbc/Driver42.class
>  org/apache/derby/iapi/jdbc/InternalDriver$1.class
>  org/apache/derby/iapi/jdbc/InternalDriver$2.class
>  org/apache/derby/iapi/jdbc/InternalDriver$3.class
>  org/apache/derby/iapi/jdbc/InternalDriver$4.class
>  org/apache/derby/iapi/jdbc/InternalDriver$5.class
>  org/apache/derby/iapi/jdbc/InternalDriver$DaemonThreadFactory.class
>  org/apache/derby/iapi/jdbc/InternalDriver$LoginCallable.class
>  org/apache/derby/iapi/jdbc/InternalDriver.class
>  META-INF/services/java.sql.Driver
>  derbyLocale_cs.jar
>  derbyLocale_de_DE.jar
>  derbyLocale_es.jar
>  derbyLocale_fr.jar
>  derbyLocale_hu.jar
>  derbyLocale_it.jar
>  derbyLocale_ja_JP.jar
>  derbyLocale_ko_KR.jar
>  derbyLocale_pl.jar
>  derbyLocale_pt_BR.jar
>  derbyLocale_ru.jar
>  derbyLocale_zh_CN.jar
>  derbyLocale_zh_TW.jar
>  derbyclient.jar
>  org/apache/derby/client/ClientAutoloadedDriver.class
>  META-INF/services/java.sql.Driver
>  derbynet.jar
>  derbyoptionaltools.jar
>  derbyrun.jar
>  derbyshared.jar
>  derbytools.jar
>  org/apache/derby/jdbc/ClientDriver.class
>  org/apache/derby/jdbc/ClientDriver40.class
>  org/apache/derby/jdbc/EmbeddedDriver.class
> ```
> As such, most of the tutorials found on the internet about "how to use derby 
> in embedded mode" are just wrong because they simply mention derby.jar as a 
> dependency.
> Worst, derby own documentation is not up to date: as such, I had no way to 
> understand why new releases of this tool that I have been using for more than 
> a decade in the classroom suddenly did not work anymore.
> The explanation is finally simple: I just wonder how such impacting decision 
> could be done without proper documentation.
> I am also surprised to be the first one reporting this, since the problem 
> exists since at least a year.
> There are two possible fix to this issue:
>  * move back the EmbeddedDriver class to derby.jar (my favorite option I 
> would say), but I guess there is a good reason for moving those classes to 
> derbytools.jar
>  * update the documentation on Derby's web site, with a quite visible alert 
> about this change.
>  
> I have been a pretty happy user of derby for years, and will certainly be in 
> the future. Thanks for that great tool. However, that breaking change has 
> been particularly annoying, which is the reason of that bug report.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to