I get UnsupportedClassVersionErrorin each case. Here's what that looks like:

   testDirectlyToDerby(com.imatsolutions.database.ApacheDerbyTest)
   java.lang.UnsupportedClassVersionError:
   *org/apache/derby/impl/jdbc/EmbedConnection* has been compiled by a
   more recent version of the Java Runtime (class file version 53.0),
   this version of the Java Runtime only recognizes class file versions
   up to 52.0
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:756)
        at
   java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:264)
        at
   
com.imatsolutions.database.ApacheDerbyTest.testDirectlyToDerby(ApacheDerbyTest.java:78)

   java.lang.UnsupportedClassVersionError:
   *org/apache/derby/shared/common/util/ArrayUtil* has been compiled by
   a more recent version of the Java Runtime (class file version 53.0),
   this version of the Java Runtime only recognizes class file versions
   up to 52.0
        ...

   java.lang.UnsupportedClassVersionError:
   *org/apache/derby/jdbc/BasicEmbeddedDataSource40* has been compiled
   by a more recent version of the Java Runtime (class file version
   53.0), this version of the Java Runtime only recognizes class file
   versions up to 52.0
        ...

Just in case there is an older version of Derby in there somewhere, command-line Maven reports:

   [echoproperties]
   
maven.dependency.org.apache.derby.derby.jar.path=/home/russ/.m2/repository/org/apache/derby/derby/10.15.2.0/derby-10.15.2.0.jar
   [echoproperties]
   
maven.dependency.org.apache.derby.derbyshared.jar.path=/home/russ/.m2/repository/org/apache/derby/derbyshared/10.15.2.0/derbyshared-10.15.2.0.jar
   [echoproperties]
   
maven.dependency.org.apache.derby.derbytools.jar.path=/home/russ/.m2/repository/org/apache/derby/derbytools/10.15.2.0/derbytools-10.15.2.0.jar
   .
   .
   .
   [echoproperties]
   
org.apache.derby\:derby\:jar=/home/russ/.m2/repository/org/apache/derby/derby/10.15.2.0/derby-10.15.2.0.jar
   [echoproperties]
   
org.apache.derby\:derbyshared\:jar=/home/russ/.m2/repository/org/apache/derby/derbyshared/10.15.2.0/derbyshared-10.15.2.0.jar
   [echoproperties]
   
org.apache.derby\:derbytools\:jar=/home/russ/.m2/repository/org/apache/derby/derbytools/10.15.2.0/derbytools-10.15.2.0.jar

All of this works in IntelliJ IDEA, which itself reports this and doesn't get UnsupportedClassVersionErrorwhen I run this unit test:

   - External Libraries
      > Maven: org.apache.derby:derby:10.15.2.0
      > Maven: org.apache.derby:derbyshared:10.15.2.0
      > Maven: org.apache.derby:derbytools:10.15.2.0

Again, thanks for looking at this.

On 6/26/20 6:46 AM, Rick Hillegas wrote:
1) Do you have a stack trace showing what class can't be resolved?

2) What happens if you do a Class.forName() on the following classes, which live, respectively, in derby.jar, derbyshared.jar, and derbytools.jar:

org.apache.derby.impl.jdbc.EmbedConnection
org.apache.derby.shared.common.util.ArrayUtil
org.apache.derby.jdbc.BasicEmbeddedDataSource40

Thanks,
-Rick

On 6/25/20 4:20 PM, Russell Bateman wrote:
Oops. I spoke too soon. I still had my JUnit tests @Ignore'd. It doesn't work yet. I still get "no suitable driver." I added derbytools too, but that made no difference. Further thoughts?


On 6/25/20 5:01 PM, Russell Bateman wrote:
Thank you; that's very kind. It now works. (I'm not using DataSources for now.) I greatly appreciate your help.

Best regards,
Russ

On 6/25/20 4:48 PM, Rick Hillegas wrote:
The 10.15 family of releases introduced a JPMS modularization of Derby. That re-factored the code a bit. You will need to add derbyshared.jar to the classpath and build dependencies. If you are using DataSources, then you will also need to add derbytools.jar. Please see the detailed release note for DERBY-6945 on the 10.15.1.3 download page: http://db.apache.org/derby/releases/release-10.15.1.3.html

Hope this helps,
-Rick

On 6/25/20 1:28 PM, Russell Bateman wrote:
I have very recent code that works in a JUnit test case.

   @Test
   public void test()
   {
      final String DATABASE = "jdbc:derby:memory:sampledb;create=true";
      final String USERNAME = "sa";
      final String PASSWORD = "sa";

      final String CREATE_TABLE = "CREATE TABLE names ( oid INT
   GENERATED ALWAYS AS IDENTITY, name VARCHAR( 20 ) )";
      final String INSERT_NAME1 = "INSERT INTO names ( name ) VALUES (
   'Jack' )";
      final String QUERY        = "SELECT oid, name FROM names";

      Connection connection = null;

      try
      {
        connection = DriverManager.getConnection( DATABASE, USERNAME,
   PASSWORD );

        Statement statement = connection.createStatement();
        ...

In /pom.xml/, I have the following:

   <dependency>
      <groupId>org.apache.derby</groupId>
      <artifactId>*derby*</artifactId>
      <version>10.15.2.0</version>
      <scope>test</scope>
   </dependency>

I only want to use Derby _in-memory_ backing some unit test cases that need a database (not requiring a running server or dæmon, etc.). It all works perfectly inside IntelliJ IDEA.

However, when I build from the command line (mvn clean package), I see this and can find no solution:

   java.sql.SQLException: No suitable driver found for
   jdbc:derby:memory:sampledb;create=true
        at java.sql.DriverManager.getConnection(DriverManager.java:689)         at java.sql.DriverManager.getConnection(DriverManager.java:247)
        at
com.imatsolutions.database.ApacheDerbyTest.testDirectlyToDerby(ApacheDerbyTest.java:78)

In /pom.xml/, I have tried adding the following, and I have tried many other solutions, some of which are supposed to be obsolete ( Class.for(...), DriverManager.registerDriver( ... ), etc. ), but cannot find a happy solution.

   <dependency>
      <groupId>org.apache.derby</groupId>
      <artifactId>*derbyclient*</artifactId>
      <version>10.15.2.0</version>
      <scope>test</scope>
   </dependency>

Any comment would be welcome.

Thanks.








Reply via email to