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