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

Qiheng He commented on DERBY-7108:
----------------------------------

- While investigating https://issues.apache.org/jira/browse/DERBY-7165 , I also 
ran unit tests for Embedded Derby under GraalVM Native Image. I also saw the 
problem described in the current issue. But to be honest, considering the 
closed world assumption of GraalVM Native Image, dynamic class loaders are 
unlikely to be implemented in the future. Feel free to test 
https://github.com/linghengqian/derby-network-server-jdk22-test on *Ubuntu 
22.04.4* with *SDKMAN!* .

{code:bash}
sdk install java 22.0.2-graalce
sdk use java 22.0.2-graalce
sudo apt-get install build-essential zlib1g-dev -y
git clone g...@github.com:linghengqian/derby-network-server-jdk22-test.git
cd ./derby-network-server-jdk22-test/
git reset --hard 0c94685ea74d87a73fca9401a6cb1c909d9f74c9
./mvnw -PgenerateMetadata -DskipNativeTests -e -T1C clean test 
native:metadata-copy
./mvnw -PnativeTestInJunit -T1C -e clean test
{code}

- Obviously I get the Error Log.

{code:bash}
JUnit Platform on Native Image - report
----------------------------------------

14:04:19.511 [main] DEBUG com.zaxxer.hikari.HikariConfig - Driver class 
org.apache.derby.jdbc.EmbeddedDriver not found in Thread context class loader 
jdk.internal.loader.ClassLoaders$AppClassLoader@e580929, trying classloader 
jdk.internal.loader.ClassLoaders$AppClassLoader@e580929
14:04:19.511 [main] ERROR com.zaxxer.hikari.HikariConfig - Failed to load 
driver class org.apache.derby.jdbc.EmbeddedDriver from HikariConfig class 
classloader jdk.internal.loader.ClassLoaders$AppClassLoader@e580929
com.lingh.DerbyTest > testDerbyNetworkServer() SKIPPED: void 
com.lingh.DerbyTest.testDerbyNetworkServer() is @Disabled

com.lingh.DerbyTest > testEmbeddedDerby() FAILED


Failures (1):
  JUnit Jupiter:DerbyTest:testEmbeddedDerby()
    MethodSource [className = 'com.lingh.DerbyTest', methodName = 
'testEmbeddedDerby', methodParameterTypes = '']
    => org.opentest4j.AssertionFailedError: Unexpected exception thrown: 
java.lang.RuntimeException: Failed to load driver class 
org.apache.derby.jdbc.EmbeddedDriver in either of HikariConfig class loader or 
Thread context classloader
       
org.junit.jupiter.api.AssertionFailureBuilder.build(AssertionFailureBuilder.java:152)
       
org.junit.jupiter.api.AssertDoesNotThrow.createAssertionFailedError(AssertDoesNotThrow.java:84)
       
org.junit.jupiter.api.AssertDoesNotThrow.assertDoesNotThrow(AssertDoesNotThrow.java:53)
       
org.junit.jupiter.api.AssertDoesNotThrow.assertDoesNotThrow(AssertDoesNotThrow.java:36)
       org.junit.jupiter.api.Assertions.assertDoesNotThrow(Assertions.java:3168)
       [...]
     Caused by: java.lang.RuntimeException: Failed to load driver class 
org.apache.derby.jdbc.EmbeddedDriver in either of HikariConfig class loader or 
Thread context classloader
       com.zaxxer.hikari.HikariConfig.setDriverClassName(HikariConfig.java:494)
       com.lingh.DerbyTest.lambda$testEmbeddedDerby$0(DerbyTest.java:24)
       
org.junit.jupiter.api.AssertDoesNotThrow.assertDoesNotThrow(AssertDoesNotThrow.java:49)
       [...]

Test run finished after 5 ms
[         2 containers found      ]
[         0 containers skipped    ]
[         2 containers started    ]
[         0 containers aborted    ]
[         2 containers successful ]
[         0 containers failed     ]
[         2 tests found           ]
[         1 tests skipped         ]
[         1 tests started         ]
[         0 tests aborted         ]
[         0 tests successful      ]
[         1 tests failed          ]


{code}
- Maybe there is nothing to be done about the current issue unless the relevant 
logic is refactored to avoid using dynamic class loaders.

> Make derby graalvm friendly
> ---------------------------
>
>                 Key: DERBY-7108
>                 URL: https://issues.apache.org/jira/browse/DERBY-7108
>             Project: Derby
>          Issue Type: Task
>    Affects Versions: 10.16.1.1
>            Reporter: Romain Manni-Bucau
>            Priority: Major
>         Attachments: outs.zip
>
>
> Hi,
> It would be neat to be able to use derby embedded with graalvm.
> Some work started at [https://github.com/apache/geronimo-arthur/tree/openjpa] 
> (see [https://www.mail-archive.com/dev@geronimo.apache.org/msg97748.html)] 
> but I faced some weird issue about derby context.
> Wonder how derby community considers graalvm (h2 for example explicitly said 
> it will never care about it and is happy with having broken graal support in 
> a minor version which is their choice but also means there is no point 
> integrating it since work can be to redo for each minor).
> If you are interested I'm happy to collaborate if needed to try to make it 
> supported through arthur or native native-image configuration (can sit in the 
> derby jar to work OOTB too).
> Side note: if it helps we can chat on asf slack.
> Romain



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to