mirror of
https://gitee.com/pnoker/iot-dc3.git
synced 2026-10-31 02:01:51 +08:00
feat(native): onboard the database and messaging driver batch
Batch 2 joins the native line: mysql, postgresql, sqlserver, oracle, redis and kafka - database dialects and messaging clients, all pure Java. DriverNativeRuntimeHints gains the four JDBC dialect driver constructors (string-based TypeReferences; each class exists only on its own driver's classpath and native-image ignores hints for absent classes). Same generated shape as the previous batches: targets, matrix entries, compose blocks and per-driver agent snapshots. Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
@@ -319,6 +319,9 @@ jobs:
|
||||
# Batch 1a — pure-Java protocol stacks (no JNI dependencies).
|
||||
# Batch 1b — pure-Java protocol SDKs (iec61850 GOOSE raw-ethernet
|
||||
# paths remain untested on native; validated in TCP mode only).
|
||||
# Batch 2 — database and messaging clients (JDBC dialects, redis,
|
||||
# kafka); JDBC driver constructors registered in
|
||||
# DriverNativeRuntimeHints.
|
||||
# Later batches append here; the target name and the
|
||||
# NATIVE_SERVICE build arg are the same value by construction.
|
||||
- dc3-driver-virtual
|
||||
@@ -341,6 +344,12 @@ jobs:
|
||||
- dc3-driver-opc-ua
|
||||
- dc3-driver-lwm2m
|
||||
- dc3-driver-iec61850
|
||||
- dc3-driver-mysql
|
||||
- dc3-driver-postgresql
|
||||
- dc3-driver-sqlserver
|
||||
- dc3-driver-oracle
|
||||
- dc3-driver-redis
|
||||
- dc3-driver-kafka
|
||||
env:
|
||||
SERVICE: ${{ matrix.service }}
|
||||
steps:
|
||||
|
||||
+78
@@ -1232,3 +1232,81 @@ VOLUME /dc3-driver/dc3-driver-iec61850/dc3/logs
|
||||
RUN mkdir -p /dc3-driver/dc3-driver-iec61850/dc3/data/driver/iec61850
|
||||
VOLUME /dc3-driver/dc3-driver-iec61850/dc3/data
|
||||
ENTRYPOINT ["/usr/share/dc3/entrypoint-native.sh"]
|
||||
|
||||
# ---------- dc3-driver-mysql-native ----------
|
||||
# Requires --build-arg NATIVE_SERVICE=dc3-driver-mysql.
|
||||
FROM native-runtime-base AS dc3-driver-mysql-native
|
||||
ENV SERVER_NAME=dc3-driver-mysql
|
||||
ENV APP_BIN=./dc3-driver-mysql
|
||||
WORKDIR /dc3-driver/dc3-driver-mysql
|
||||
RUN mkdir -p /dc3-driver/dc3-driver-mysql/dc3/logs/driver/mysql
|
||||
COPY --from=driver-native-builder /build/dc3-driver/dc3-driver-mysql/target/dc3-driver-mysql ./
|
||||
VOLUME /dc3-driver/dc3-driver-mysql/dc3/logs
|
||||
RUN mkdir -p /dc3-driver/dc3-driver-mysql/dc3/data/driver/mysql
|
||||
VOLUME /dc3-driver/dc3-driver-mysql/dc3/data
|
||||
ENTRYPOINT ["/usr/share/dc3/entrypoint-native.sh"]
|
||||
|
||||
# ---------- dc3-driver-postgresql-native ----------
|
||||
# Requires --build-arg NATIVE_SERVICE=dc3-driver-postgresql.
|
||||
FROM native-runtime-base AS dc3-driver-postgresql-native
|
||||
ENV SERVER_NAME=dc3-driver-postgresql
|
||||
ENV APP_BIN=./dc3-driver-postgresql
|
||||
WORKDIR /dc3-driver/dc3-driver-postgresql
|
||||
RUN mkdir -p /dc3-driver/dc3-driver-postgresql/dc3/logs/driver/postgresql
|
||||
COPY --from=driver-native-builder /build/dc3-driver/dc3-driver-postgresql/target/dc3-driver-postgresql ./
|
||||
VOLUME /dc3-driver/dc3-driver-postgresql/dc3/logs
|
||||
RUN mkdir -p /dc3-driver/dc3-driver-postgresql/dc3/data/driver/postgresql
|
||||
VOLUME /dc3-driver/dc3-driver-postgresql/dc3/data
|
||||
ENTRYPOINT ["/usr/share/dc3/entrypoint-native.sh"]
|
||||
|
||||
# ---------- dc3-driver-sqlserver-native ----------
|
||||
# Requires --build-arg NATIVE_SERVICE=dc3-driver-sqlserver.
|
||||
FROM native-runtime-base AS dc3-driver-sqlserver-native
|
||||
ENV SERVER_NAME=dc3-driver-sqlserver
|
||||
ENV APP_BIN=./dc3-driver-sqlserver
|
||||
WORKDIR /dc3-driver/dc3-driver-sqlserver
|
||||
RUN mkdir -p /dc3-driver/dc3-driver-sqlserver/dc3/logs/driver/sqlserver
|
||||
COPY --from=driver-native-builder /build/dc3-driver/dc3-driver-sqlserver/target/dc3-driver-sqlserver ./
|
||||
VOLUME /dc3-driver/dc3-driver-sqlserver/dc3/logs
|
||||
RUN mkdir -p /dc3-driver/dc3-driver-sqlserver/dc3/data/driver/sqlserver
|
||||
VOLUME /dc3-driver/dc3-driver-sqlserver/dc3/data
|
||||
ENTRYPOINT ["/usr/share/dc3/entrypoint-native.sh"]
|
||||
|
||||
# ---------- dc3-driver-oracle-native ----------
|
||||
# Requires --build-arg NATIVE_SERVICE=dc3-driver-oracle.
|
||||
FROM native-runtime-base AS dc3-driver-oracle-native
|
||||
ENV SERVER_NAME=dc3-driver-oracle
|
||||
ENV APP_BIN=./dc3-driver-oracle
|
||||
WORKDIR /dc3-driver/dc3-driver-oracle
|
||||
RUN mkdir -p /dc3-driver/dc3-driver-oracle/dc3/logs/driver/oracle
|
||||
COPY --from=driver-native-builder /build/dc3-driver/dc3-driver-oracle/target/dc3-driver-oracle ./
|
||||
VOLUME /dc3-driver/dc3-driver-oracle/dc3/logs
|
||||
RUN mkdir -p /dc3-driver/dc3-driver-oracle/dc3/data/driver/oracle
|
||||
VOLUME /dc3-driver/dc3-driver-oracle/dc3/data
|
||||
ENTRYPOINT ["/usr/share/dc3/entrypoint-native.sh"]
|
||||
|
||||
# ---------- dc3-driver-redis-native ----------
|
||||
# Requires --build-arg NATIVE_SERVICE=dc3-driver-redis.
|
||||
FROM native-runtime-base AS dc3-driver-redis-native
|
||||
ENV SERVER_NAME=dc3-driver-redis
|
||||
ENV APP_BIN=./dc3-driver-redis
|
||||
WORKDIR /dc3-driver/dc3-driver-redis
|
||||
RUN mkdir -p /dc3-driver/dc3-driver-redis/dc3/logs/driver/redis
|
||||
COPY --from=driver-native-builder /build/dc3-driver/dc3-driver-redis/target/dc3-driver-redis ./
|
||||
VOLUME /dc3-driver/dc3-driver-redis/dc3/logs
|
||||
RUN mkdir -p /dc3-driver/dc3-driver-redis/dc3/data/driver/redis
|
||||
VOLUME /dc3-driver/dc3-driver-redis/dc3/data
|
||||
ENTRYPOINT ["/usr/share/dc3/entrypoint-native.sh"]
|
||||
|
||||
# ---------- dc3-driver-kafka-native ----------
|
||||
# Requires --build-arg NATIVE_SERVICE=dc3-driver-kafka.
|
||||
FROM native-runtime-base AS dc3-driver-kafka-native
|
||||
ENV SERVER_NAME=dc3-driver-kafka
|
||||
ENV APP_BIN=./dc3-driver-kafka
|
||||
WORKDIR /dc3-driver/dc3-driver-kafka
|
||||
RUN mkdir -p /dc3-driver/dc3-driver-kafka/dc3/logs/driver/kafka
|
||||
COPY --from=driver-native-builder /build/dc3-driver/dc3-driver-kafka/target/dc3-driver-kafka ./
|
||||
VOLUME /dc3-driver/dc3-driver-kafka/dc3/logs
|
||||
RUN mkdir -p /dc3-driver/dc3-driver-kafka/dc3/data/driver/kafka
|
||||
VOLUME /dc3-driver/dc3-driver-kafka/dc3/data
|
||||
ENTRYPOINT ["/usr/share/dc3/entrypoint-native.sh"]
|
||||
|
||||
+21
@@ -321,6 +321,18 @@ public class DriverNativeRuntimeHints implements RuntimeHintsRegistrar {
|
||||
"io.github.pnoker.common.driver.receiver.rabbit.PointCommandReceiver"
|
||||
};
|
||||
|
||||
/**
|
||||
* JDBC dialect drivers of the database driver batch, instantiated
|
||||
* reflectively by DriverManager / HikariCP. String-based references:
|
||||
* each class exists only on its own driver's classpath.
|
||||
*/
|
||||
private static final String[] JDBC_DRIVER_CLASSES = {
|
||||
"com.mysql.cj.jdbc.Driver",
|
||||
"org.postgresql.Driver",
|
||||
"com.microsoft.sqlserver.jdbc.SQLServerDriver",
|
||||
"oracle.jdbc.driver.OracleDriver"
|
||||
};
|
||||
|
||||
@Override
|
||||
public void registerHints(RuntimeHints hints, ClassLoader classLoader) {
|
||||
// Driver profile defaults shipped inside this SDK jar; without the
|
||||
@@ -376,6 +388,15 @@ public class DriverNativeRuntimeHints implements RuntimeHintsRegistrar {
|
||||
// drivers through this ServiceLoader descriptor.
|
||||
hints.resources().registerPattern("META-INF/services/java.sql.Driver");
|
||||
|
||||
// JDBC driver batch (mysql / postgresql / sqlserver / oracle): the
|
||||
// dialect drivers are instantiated reflectively by DriverManager /
|
||||
// HikariCP. String-based TypeReferences - the classes only exist on
|
||||
// the JDBC drivers' classpaths, and hints for absent classes are
|
||||
// ignored by native-image.
|
||||
for (String name : JDBC_DRIVER_CLASSES) {
|
||||
hints.reflection().registerType(TypeReference.of(name), MemberCategory.INVOKE_PUBLIC_CONSTRUCTORS);
|
||||
}
|
||||
|
||||
for (String name : CAFFEINE_POLICY_CLASSES) {
|
||||
hints.reflection()
|
||||
.registerType(
|
||||
|
||||
+5241
File diff suppressed because it is too large
Load Diff
+5150
File diff suppressed because it is too large
Load Diff
+5150
File diff suppressed because it is too large
Load Diff
+5150
File diff suppressed because it is too large
Load Diff
+5425
File diff suppressed because it is too large
Load Diff
+5150
File diff suppressed because it is too large
Load Diff
@@ -790,6 +790,161 @@ services:
|
||||
dc3net:
|
||||
aliases:
|
||||
- dc3-driver-iec61850
|
||||
mysql:
|
||||
profiles: [ "native-drivers" ]
|
||||
build:
|
||||
context: ..
|
||||
dockerfile: Dockerfile
|
||||
target: dc3-driver-mysql-native
|
||||
args:
|
||||
NATIVE_SERVICE: dc3-driver-mysql
|
||||
image: ${DC3_IMAGE_REGISTRY:-pnoker}/dc3-driver-mysql:${DC3_IMAGE_TAG:-2026.9}-native
|
||||
restart: always
|
||||
depends_on:
|
||||
manager:
|
||||
condition: service_healthy
|
||||
environment:
|
||||
<<: *app-runtime-env
|
||||
container_name: dc3-driver-mysql
|
||||
hostname: dc3-driver-mysql
|
||||
volumes:
|
||||
- logs:/dc3-driver/dc3-driver-mysql/dc3/logs
|
||||
- driver_data:/dc3-driver/dc3-driver-mysql/dc3/data
|
||||
logging: *default-logging
|
||||
networks:
|
||||
dc3net:
|
||||
aliases:
|
||||
- dc3-driver-mysql
|
||||
|
||||
postgresql:
|
||||
profiles: [ "native-drivers" ]
|
||||
build:
|
||||
context: ..
|
||||
dockerfile: Dockerfile
|
||||
target: dc3-driver-postgresql-native
|
||||
args:
|
||||
NATIVE_SERVICE: dc3-driver-postgresql
|
||||
image: ${DC3_IMAGE_REGISTRY:-pnoker}/dc3-driver-postgresql:${DC3_IMAGE_TAG:-2026.9}-native
|
||||
restart: always
|
||||
depends_on:
|
||||
manager:
|
||||
condition: service_healthy
|
||||
environment:
|
||||
<<: *app-runtime-env
|
||||
container_name: dc3-driver-postgresql
|
||||
hostname: dc3-driver-postgresql
|
||||
volumes:
|
||||
- logs:/dc3-driver/dc3-driver-postgresql/dc3/logs
|
||||
- driver_data:/dc3-driver/dc3-driver-postgresql/dc3/data
|
||||
logging: *default-logging
|
||||
networks:
|
||||
dc3net:
|
||||
aliases:
|
||||
- dc3-driver-postgresql
|
||||
|
||||
sqlserver:
|
||||
profiles: [ "native-drivers" ]
|
||||
build:
|
||||
context: ..
|
||||
dockerfile: Dockerfile
|
||||
target: dc3-driver-sqlserver-native
|
||||
args:
|
||||
NATIVE_SERVICE: dc3-driver-sqlserver
|
||||
image: ${DC3_IMAGE_REGISTRY:-pnoker}/dc3-driver-sqlserver:${DC3_IMAGE_TAG:-2026.9}-native
|
||||
restart: always
|
||||
depends_on:
|
||||
manager:
|
||||
condition: service_healthy
|
||||
environment:
|
||||
<<: *app-runtime-env
|
||||
container_name: dc3-driver-sqlserver
|
||||
hostname: dc3-driver-sqlserver
|
||||
volumes:
|
||||
- logs:/dc3-driver/dc3-driver-sqlserver/dc3/logs
|
||||
- driver_data:/dc3-driver/dc3-driver-sqlserver/dc3/data
|
||||
logging: *default-logging
|
||||
networks:
|
||||
dc3net:
|
||||
aliases:
|
||||
- dc3-driver-sqlserver
|
||||
|
||||
oracle:
|
||||
profiles: [ "native-drivers" ]
|
||||
build:
|
||||
context: ..
|
||||
dockerfile: Dockerfile
|
||||
target: dc3-driver-oracle-native
|
||||
args:
|
||||
NATIVE_SERVICE: dc3-driver-oracle
|
||||
image: ${DC3_IMAGE_REGISTRY:-pnoker}/dc3-driver-oracle:${DC3_IMAGE_TAG:-2026.9}-native
|
||||
restart: always
|
||||
depends_on:
|
||||
manager:
|
||||
condition: service_healthy
|
||||
environment:
|
||||
<<: *app-runtime-env
|
||||
container_name: dc3-driver-oracle
|
||||
hostname: dc3-driver-oracle
|
||||
volumes:
|
||||
- logs:/dc3-driver/dc3-driver-oracle/dc3/logs
|
||||
- driver_data:/dc3-driver/dc3-driver-oracle/dc3/data
|
||||
logging: *default-logging
|
||||
networks:
|
||||
dc3net:
|
||||
aliases:
|
||||
- dc3-driver-oracle
|
||||
|
||||
redis:
|
||||
profiles: [ "native-drivers" ]
|
||||
build:
|
||||
context: ..
|
||||
dockerfile: Dockerfile
|
||||
target: dc3-driver-redis-native
|
||||
args:
|
||||
NATIVE_SERVICE: dc3-driver-redis
|
||||
image: ${DC3_IMAGE_REGISTRY:-pnoker}/dc3-driver-redis:${DC3_IMAGE_TAG:-2026.9}-native
|
||||
restart: always
|
||||
depends_on:
|
||||
manager:
|
||||
condition: service_healthy
|
||||
environment:
|
||||
<<: *app-runtime-env
|
||||
container_name: dc3-driver-redis
|
||||
hostname: dc3-driver-redis
|
||||
volumes:
|
||||
- logs:/dc3-driver/dc3-driver-redis/dc3/logs
|
||||
- driver_data:/dc3-driver/dc3-driver-redis/dc3/data
|
||||
logging: *default-logging
|
||||
networks:
|
||||
dc3net:
|
||||
aliases:
|
||||
- dc3-driver-redis
|
||||
|
||||
kafka:
|
||||
profiles: [ "native-drivers" ]
|
||||
build:
|
||||
context: ..
|
||||
dockerfile: Dockerfile
|
||||
target: dc3-driver-kafka-native
|
||||
args:
|
||||
NATIVE_SERVICE: dc3-driver-kafka
|
||||
image: ${DC3_IMAGE_REGISTRY:-pnoker}/dc3-driver-kafka:${DC3_IMAGE_TAG:-2026.9}-native
|
||||
restart: always
|
||||
depends_on:
|
||||
manager:
|
||||
condition: service_healthy
|
||||
environment:
|
||||
<<: *app-runtime-env
|
||||
container_name: dc3-driver-kafka
|
||||
hostname: dc3-driver-kafka
|
||||
volumes:
|
||||
- logs:/dc3-driver/dc3-driver-kafka/dc3/logs
|
||||
- driver_data:/dc3-driver/dc3-driver-kafka/dc3/data
|
||||
logging: *default-logging
|
||||
networks:
|
||||
dc3net:
|
||||
aliases:
|
||||
- dc3-driver-kafka
|
||||
|
||||
volumes:
|
||||
logs:
|
||||
|
||||
Reference in New Issue
Block a user