diff --git a/integrations/cdi/hibernate-cdi/src/main/resources/META-INF/native-image/io.helidon.integrations.cdi/helidon-integrations-cdi-hibernate/reflect-config.json b/integrations/cdi/hibernate-cdi/src/main/resources/META-INF/native-image/io.helidon.integrations.cdi/helidon-integrations-cdi-hibernate/reflect-config.json index 43d0fdf81ba..826742f0e0e 100644 --- a/integrations/cdi/hibernate-cdi/src/main/resources/META-INF/native-image/io.helidon.integrations.cdi/helidon-integrations-cdi-hibernate/reflect-config.json +++ b/integrations/cdi/hibernate-cdi/src/main/resources/META-INF/native-image/io.helidon.integrations.cdi/helidon-integrations-cdi-hibernate/reflect-config.json @@ -59,6 +59,14 @@ } ] }, + { + "name": "org.hibernate.boot.model.relational.ColumnOrderingStrategyStandard", + "methods": [ + { + "name" : "" + } + ] + }, { "name": "org.hibernate.cache.internal.DisabledCaching", "allPublicMethods": true @@ -351,5 +359,417 @@ ] } ] + }, + { + "name": "org.hibernate.dialect.CockroachDialect", + "methods": [ + { + "name": "", + "parameterTypes": [ + "org.hibernate.engine.jdbc.dialect.spi.DialectResolutionInfo" + ] + } + ] + }, + { + "name": "org.hibernate.dialect.DB2400Dialect", + "methods": [ + { + "name": "", + "parameterTypes": [ + "org.hibernate.engine.jdbc.dialect.spi.DialectResolutionInfo" + ] + } + ] + }, + { + "name": "org.hibernate.dialect.DB2Dialect", + "methods": [ + { + "name": "", + "parameterTypes": [ + "org.hibernate.engine.jdbc.dialect.spi.DialectResolutionInfo" + ] + } + ] + }, + { + "name": "org.hibernate.dialect.DB2iDialect", + "methods": [ + { + "name": "", + "parameterTypes": [ + "org.hibernate.engine.jdbc.dialect.spi.DialectResolutionInfo" + ] + } + ] + }, + { + "name": "org.hibernate.dialect.DB2zDialect", + "methods": [ + { + "name": "", + "parameterTypes": [ + "org.hibernate.engine.jdbc.dialect.spi.DialectResolutionInfo" + ] + } + ] + }, + { + "name": "org.hibernate.dialect.DerbyDialect", + "methods": [ + { + "name": "", + "parameterTypes": [ + "org.hibernate.engine.jdbc.dialect.spi.DialectResolutionInfo" + ] + } + ] + }, + { + "name": "org.hibernate.dialect.H2Dialect", + "methods": [ + { + "name": "", + "parameterTypes": [ + "org.hibernate.engine.jdbc.dialect.spi.DialectResolutionInfo" + ] + } + ] + }, + { + "name": "org.hibernate.dialect.HANAColumnStoreDialect", + "methods": [ + { + "name": "", + "parameterTypes": [ + "org.hibernate.engine.jdbc.dialect.spi.DialectResolutionInfo" + ] + } + ] + }, + { + "name": "org.hibernate.dialect.HANARowStoreDialect", + "methods": [ + { + "name": "", + "parameterTypes": [ + "org.hibernate.engine.jdbc.dialect.spi.DialectResolutionInfo" + ] + } + ] + }, + { + "name": "org.hibernate.dialect.HSQLDialect", + "methods": [ + { + "name": "", + "parameterTypes": [ + "org.hibernate.engine.jdbc.dialect.spi.DialectResolutionInfo" + ] + } + ] + }, + { + "name": "org.hibernate.dialect.MariaDBDialect", + "methods": [ + { + "name": "", + "parameterTypes": [ + "org.hibernate.engine.jdbc.dialect.spi.DialectResolutionInfo" + ] + } + ] + }, + { + "name": "org.hibernate.dialect.MySQLDialect", + "methods": [ + { + "name": "", + "parameterTypes": [ + "org.hibernate.engine.jdbc.dialect.spi.DialectResolutionInfo" + ] + } + ] + }, + { + "name": "org.hibernate.dialect.OracleDialect", + "methods": [ + { + "name": "", + "parameterTypes": [ + "org.hibernate.engine.jdbc.dialect.spi.DialectResolutionInfo" + ] + } + ] + }, + { + "name": "org.hibernate.dialect.PostgresPlusDialect", + "methods": [ + { + "name": "", + "parameterTypes": [ + "org.hibernate.engine.jdbc.dialect.spi.DialectResolutionInfo" + ] + } + ] + }, + { + "name": "org.hibernate.dialect.PostgreSQLDialect", + "methods": [ + { + "name": "", + "parameterTypes": [ + "org.hibernate.engine.jdbc.dialect.spi.DialectResolutionInfo" + ] + } + ] + }, + { + "name": "org.hibernate.dialect.SpannerDialect", + "methods": [ + { + "name": "", + "parameterTypes": [ + "org.hibernate.engine.jdbc.dialect.spi.DialectResolutionInfo" + ] + } + ] + }, + { + "name": "org.hibernate.dialect.SQLServerDialect", + "methods": [ + { + "name": "", + "parameterTypes": [ + "org.hibernate.engine.jdbc.dialect.spi.DialectResolutionInfo" + ] + } + ] + }, + { + "name": "org.hibernate.dialect.SybaseASEDialect", + "methods": [ + { + "name": "", + "parameterTypes": [ + "org.hibernate.engine.jdbc.dialect.spi.DialectResolutionInfo" + ] + } + ] + }, + { + "name": "org.hibernate.dialect.SybaseDialect", + "methods": [ + { + "name": "", + "parameterTypes": [ + "org.hibernate.engine.jdbc.dialect.spi.DialectResolutionInfo" + ] + } + ] + }, + { + "name": "org.hibernate.dialect.TiDBDialect", + "methods": [ + { + "name": "", + "parameterTypes": [ + "org.hibernate.engine.jdbc.dialect.spi.DialectResolutionInfo" + ] + } + ] + }, + { + "name": "org.hibernate.dialect.CockroachDialect", + "methods": [ + { + "name": "" + } + ] + }, + { + "name": "org.hibernate.dialect.DB2400Dialect", + "methods": [ + { + "name": "" + } + ] + }, + { + "name": "org.hibernate.dialect.DB2Dialect", + "methods": [ + { + "name": "" + } + ] + }, + { + "name": "org.hibernate.dialect.DB2iDialect", + "methods": [ + { + "name": "" + } + ] + }, + { + "name": "org.hibernate.dialect.DB2zDialect", + "methods": [ + { + "name": "" + } + ] + }, + { + "name": "org.hibernate.dialect.DerbyDialect", + "methods": [ + { + "name": "" + } + ] + }, + { + "name": "org.hibernate.dialect.H2Dialect", + "methods": [ + { + "name": "" + } + ] + }, + { + "name": "org.hibernate.dialect.HANAColumnStoreDialect", + "methods": [ + { + "name": "" + } + ] + }, + { + "name": "org.hibernate.dialect.HANARowStoreDialect", + "methods": [ + { + "name": "" + } + ] + }, + { + "name": "org.hibernate.dialect.HSQLDialect", + "methods": [ + { + "name": "" + } + ] + }, + { + "name": "org.hibernate.dialect.MariaDBDialect", + "methods": [ + { + "name": "" + } + ] + }, + { + "name": "org.hibernate.dialect.MySQLDialect", + "methods": [ + { + "name": "" + } + ] + }, + { + "name": "org.hibernate.dialect.OracleDialect", + "methods": [ + { + "name": "" + } + ] + }, + { + "name": "org.hibernate.dialect.PostgresPlusDialect", + "methods": [ + { + "name": "" + } + ] + }, + { + "name": "org.hibernate.dialect.PostgreSQLDialect", + "methods": [ + { + "name": "" + } + ] + }, + { + "name": "org.hibernate.dialect.SpannerDialect", + "methods": [ + { + "name": "" + } + ] + }, + { + "name": "org.hibernate.dialect.SQLServerDialect", + "methods": [ + { + "name": "" + } + ] + }, + { + "name": "org.hibernate.dialect.SybaseASEDialect", + "methods": [ + { + "name": "" + } + ] + }, + { + "name": "org.hibernate.dialect.SybaseDialect", + "methods": [ + { + "name": "" + } + ] + }, + { + "name": "org.hibernate.dialect.TiDBDialect", + "methods": [ + { + "name": "" + } + ] + }, + { + "name": "org.hibernate.dialect.OracleArrayJdbcTypeConstructor", + "methods": [ + { + "name": "" + } + ] + }, + { + "name": "org.hibernate.dialect.OracleNestedTableJdbcTypeConstructor", + "methods": [ + { + "name": "" + } + ] + }, + { + "name": "org.hibernate.dialect.OracleStructJdbcType", + "methods": [ + { + "name": "" + } + ] + }, + { + "name": "com.arjuna.ats.internal.arjuna.utils.SocketProcessId", + "methods": [ + { + "name": "" + } + ] } -] \ No newline at end of file +] diff --git a/tests/integration/native-image/mp-2/README.md b/tests/integration/native-image/mp-2/README.md index cae0e88fb07..2ca98b112ad 100644 --- a/tests/integration/native-image/mp-2/README.md +++ b/tests/integration/native-image/mp-2/README.md @@ -1,39 +1,25 @@ -#GraalVM native image integration test MP-2 +# GraalVM native image integration test MP-2 _____ -This is a manual (for the time being) test of integration with native-image. +## Build -To run this test: - -```shell script -export GRAALVM_HOME=${path.to.graal.with.native-image} +```shell mvn clean package -Pnative-image -./target/helidon-tests-native-image-mp-2 ``` -Requires at least GraalVM 23.1.0 - -This test validates that JPA integration (using Hibernate) and JTA -integration work in native image. - -This test requires a running oracle database on `jdbc:oracle:thin:@localhost:1521/XE` - username `system`, password `oracle` (or modify `microprofile-config.properties` to match your DB) -with the following table and data: +## Run -```sql -CREATE TABLE GREETING (FIRSTPART VARCHAR2(100), SECONDPART VARCHAR2(100), PRIMARY KEY (FIRSTPART)) -INSERT INTO GREETING (FIRSTPART, SECONDPART) VALUES ('Jack', 'The Ripper') +Start the database: +```shell +docker run -it --rm \ + -name oracledb \ + -e ORACLE_PWD=oracle \ + -v $PWD/init.sql:/opt/oracle/scripts/startup/init.sql \ + -p 1521:1521 \ + container-registry.oracle.com/database/express:latest ``` -Once the test is done against Oracle DB database, switch to h2: - -Make sure the table exists and contains expected data: -```sql -CREATE TABLE GREETING (FIRSTPART VARCHAR NOT NULL, SECONDPART VARCHAR NOT NULL, PRIMARY KEY (FIRSTPART)) -INSERT INTO GREETING (FIRSTPART, SECONDPART) VALUES ('Jack', 'The Ripper') +Run the application: +```shell +./target/helidon-tests-native-image-mp-2 ``` - - -1. Comment out `ojdbc` and uncomment `h2` in `pom.xml` -2. Comment out `org.hibernate.dialect.Oracle10gDialect"` and uncomment `org.hibernate.dialect.H2Dialect` in `persistence.xml` -3. Comment out all oracle driver properties and uncomment all h2 driver properties in `microprofile-config.properties` diff --git a/tests/integration/native-image/mp-2/init.sql b/tests/integration/native-image/mp-2/init.sql new file mode 100644 index 00000000000..63855a70fad --- /dev/null +++ b/tests/integration/native-image/mp-2/init.sql @@ -0,0 +1,2 @@ +CREATE TABLE SYSTEM.GREETING (FIRSTPART VARCHAR2(100), SECONDPART VARCHAR2(100), PRIMARY KEY (FIRSTPART)); +INSERT INTO SYSTEM.GREETING (FIRSTPART, SECONDPART) VALUES ('Jack', 'The Ripper'); diff --git a/tests/integration/native-image/mp-2/pom.xml b/tests/integration/native-image/mp-2/pom.xml index eccfe5b2689..6ad69a95eab 100644 --- a/tests/integration/native-image/mp-2/pom.xml +++ b/tests/integration/native-image/mp-2/pom.xml @@ -96,16 +96,19 @@ helidon-integrations-cdi-jpa runtime - - - - - io.helidon.integrations.db ojdbc runtime + + io.helidon.logging + helidon-logging-jul + + + org.slf4j + slf4j-jdk14 + org.junit.jupiter diff --git a/tests/integration/native-image/mp-2/src/main/java/io/helidon/tests/integration/nativeimage/mp2/Mp2Main.java b/tests/integration/native-image/mp-2/src/main/java/io/helidon/tests/integration/nativeimage/mp2/Mp2Main.java index e4f2df6ed91..f7a4f1fab32 100644 --- a/tests/integration/native-image/mp-2/src/main/java/io/helidon/tests/integration/nativeimage/mp2/Mp2Main.java +++ b/tests/integration/native-image/mp-2/src/main/java/io/helidon/tests/integration/nativeimage/mp2/Mp2Main.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020, 2023 Oracle and/or its affiliates. + * Copyright (c) 2020, 2024 Oracle and/or its affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,7 +16,7 @@ package io.helidon.tests.integration.nativeimage.mp2; import io.helidon.common.Errors; -import io.helidon.microprofile.cdi.Main; +import io.helidon.microprofile.server.Server; import jakarta.ws.rs.client.Client; import jakarta.ws.rs.client.ClientBuilder; @@ -41,27 +41,39 @@ private Mp2Main() { * @param args command line arguments. */ public static void main(final String[] args) { - // start CDI - Main.main(args); + Server server = Server.create().start(); + boolean failed = false; long now = System.currentTimeMillis(); - test(); + try { + test(server.port()); + } catch (Exception e) { + e.printStackTrace(System.out); + failed = true; + } long time = System.currentTimeMillis() - now; System.out.println("Tests finished in " + time + " millis"); - } - private static void test() { - Client client = ClientBuilder.newClient(); - WebTarget target = client.target("http://localhost:8087"); + server.stop(); + + if (failed) { + System.exit(-1); + } + } - Errors.Collector collector = Errors.collector(); + private static void test(int port) { + WebTarget target; + try (Client client = ClientBuilder.newClient()) { + target = client.target("http://localhost:" + port); + Errors.Collector collector = Errors.collector(); - // testing all modules - validateJaxrs(collector, target); - validateDb(collector, target); + // testing all modules + validateJaxrs(collector, target); + validateDb(collector, target); - collector.collect() - .checkValid(); + collector.collect() + .checkValid(); + } } private static void validateJaxrs(Errors.Collector collector, WebTarget target) { diff --git a/tests/integration/native-image/mp-2/src/main/resources/hibernate.properties b/tests/integration/native-image/mp-2/src/main/resources/hibernate.properties deleted file mode 100644 index 5d0d4b0e120..00000000000 --- a/tests/integration/native-image/mp-2/src/main/resources/hibernate.properties +++ /dev/null @@ -1,20 +0,0 @@ -# -# Copyright (c) 2020 Oracle and/or its affiliates. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -# Byte code for JPA must be generated at compile time. -# This is a limitation of native image -hibernate.bytecode.provider=none -