Skip to content

Commit

Permalink
added shaded driver profile
Browse files Browse the repository at this point in the history
  • Loading branch information
rashtao committed Jun 5, 2024
1 parent 669d441 commit 9614a5b
Show file tree
Hide file tree
Showing 10 changed files with 139 additions and 29 deletions.
17 changes: 14 additions & 3 deletions .github/workflows/maven.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,28 +8,39 @@ jobs:
timeout-minutes: 10
runs-on: ubuntu-latest

strategy:
fail-fast: false
matrix:
shaded:
- 'true'
- 'false'

steps:
- uses: actions/checkout@v2
- uses: graalvm/setup-graalvm@v1
with:
java-version: '22.0.1'
java-version: '21.0.2'
distribution: 'graalvm-community'
cache: 'maven'
native-image-job-reports: 'true'
github-token: ${{ secrets.GITHUB_TOKEN }}
- name: Info
run: mvn -version
- name: Deps tree
run: mvn dependency:tree -Dshaded=${{matrix.shaded}}
- name: Start Database
run: ./docker/start_db.sh
env:
SSL: true
- name: test
run: mvn test
- name: package-native
run: mvn package -Dpackaging=native-image
run: mvn -Dpackaging=native-image -Dshaded=${{matrix.shaded}} package
- name: start-native
run: ./target/demo &
- name: wait
run: sleep 1
- name: test-version
run: curl -v --fail http://localhost:8080/version
- name: test-version
- name: test-serde
run: curl -v --fail http://localhost:8080/order
17 changes: 16 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ Example application using ArangoDB Java driver integrated with:
Start a local database:

```shell script
./docker/start_db.sh
SSL=true ./docker/start_db.sh
```

## test
Expand All @@ -19,6 +19,12 @@ Start a local database:
mvn test
```

## test shaded

```shell script
mvn test -Dshaded
```

## native image

```shell script
Expand All @@ -27,3 +33,12 @@ mvn package -Dpackaging=native-image
curl -X GET http://localhost:8080/version
curl -X GET http://localhost:8080/order
```

## native image shaded

```shell script
mvn package -Dpackaging=native-image -Dshaded
./target/demo
curl -X GET http://localhost:8080/version
curl -X GET http://localhost:8080/order
```
39 changes: 34 additions & 5 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
<micronaut.runtime>netty</micronaut.runtime>
<exec.mainClass>com.example.ApplicationKt</exec.mainClass>
<kotlinVersion>1.9.23</kotlinVersion>
<adb.version>7.7.0-SNAPSHOT</adb.version>
</properties>

<repositories>
Expand All @@ -32,11 +33,6 @@
</repositories>

<dependencies>
<dependency>
<groupId>com.arangodb</groupId>
<artifactId>arangodb-java-driver</artifactId>
<version>7.7.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>io.micronaut</groupId>
<artifactId>micronaut-http-server-netty</artifactId>
Expand Down Expand Up @@ -296,4 +292,37 @@
</plugins>
</build>

<profiles>
<profile>
<id>plain</id>
<activation>
<property>
<name>!shaded</name>
</property>
</activation>
<dependencies>
<dependency>
<groupId>com.arangodb</groupId>
<artifactId>arangodb-java-driver</artifactId>
<version>${adb.version}</version>
</dependency>
</dependencies>
</profile>
<profile>
<id>shaded</id>
<activation>
<property>
<name>shaded</name>
</property>
</activation>
<dependencies>
<dependency>
<groupId>com.arangodb</groupId>
<artifactId>arangodb-java-driver-shaded</artifactId>
<version>${adb.version}</version>
</dependency>
</dependencies>
</profile>
</profiles>

</project>
19 changes: 19 additions & 0 deletions src/main/kotlin/com/example/ArangoConfig.kt
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.example


import com.arangodb.Protocol
import com.arangodb.config.ArangoConfigProperties
import com.arangodb.config.HostDescription
import io.micronaut.context.annotation.ConfigurationProperties
Expand All @@ -10,6 +11,16 @@ import java.util.*
class ArangoConfig {
var hosts: Optional<List<String>> = Optional.empty()
var password: Optional<String> = Optional.empty()
var protocol: Optional<Protocol> = Optional.empty()
var useSsl: Optional<Boolean> = Optional.empty()
var ssl: SslConfig = SslConfig()

@ConfigurationProperties("ssl")
class SslConfig {
lateinit var trustStoreFile: String
lateinit var trustStorePassword: String
lateinit var trustStoreType: String
}
}

class ArangoConfigAdapter(private val config: ArangoConfig) : ArangoConfigProperties {
Expand All @@ -20,4 +31,12 @@ class ArangoConfigAdapter(private val config: ArangoConfig) : ArangoConfigProper
override fun getPassword(): Optional<String> {
return config.password
}

override fun getProtocol(): Optional<Protocol> {
return config.protocol
}

override fun getUseSsl(): Optional<Boolean> {
return config.useSsl
}
}
44 changes: 44 additions & 0 deletions src/main/kotlin/com/example/ArangoProvider.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package com.example

import com.arangodb.ArangoDB
import com.arangodb.serde.ArangoSerde
import io.micronaut.context.annotation.Factory
import io.micronaut.serde.ObjectMapper
import jakarta.inject.Singleton
import java.security.KeyStore
import javax.net.ssl.SSLContext
import javax.net.ssl.TrustManagerFactory

@Factory
class ArangoProvider {
@Singleton
fun arangoDB(config: ArangoConfig, mapper: ObjectMapper): ArangoDB = ArangoDB.Builder()
.loadProperties(ArangoConfigAdapter(config))
.sslContext(createSslContext(config))

// ArangoSerde implementation based on Micronaut serialization
.serde(object : ArangoSerde {
override fun serialize(value: Any?): ByteArray {
return mapper.writeValueAsBytes(value)
}

override fun <T : Any?> deserialize(content: ByteArray, clazz: Class<T>): T? {
return mapper.readValue(content, clazz)
}
})
.build()


private fun createSslContext(config: ArangoConfig): SSLContext {
val ks = KeyStore.getInstance(config.ssl.trustStoreType)
ks.load(
Thread.currentThread().contextClassLoader.getResourceAsStream(config.ssl.trustStoreFile),
config.ssl.trustStorePassword.toCharArray()
)
val tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm())
tmf.init(ks)
val sc = SSLContext.getInstance("TLS")
sc.init(null, tmf.trustManagers, null)
return sc
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import io.micronaut.serde.annotation.SerdeImport

@Controller("/")
@SerdeImport(ArangoDBVersion::class)
class HelloController(private val svc: ArangoService) {
class ArangoResource(private val svc: ArangoService) {

@Get("/version")
@Produces(MediaType.APPLICATION_JSON)
Expand Down
19 changes: 1 addition & 18 deletions src/main/kotlin/com/example/ArangoService.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,28 +2,11 @@ package com.example

import com.arangodb.ArangoDB
import com.arangodb.entity.ArangoDBVersion
import com.arangodb.serde.ArangoSerde
import io.micronaut.serde.ObjectMapper
import jakarta.inject.Singleton
import java.util.*

@Singleton
class ArangoService(config: ArangoConfig, mapper: ObjectMapper) {

private val adb: ArangoDB = ArangoDB.Builder()
.loadProperties(ArangoConfigAdapter(config))

// ArangoSerde implementation based on Micronaut serialization
.serde(object : ArangoSerde {
override fun serialize(value: Any?): ByteArray {
return mapper.writeValueAsBytes(value)
}

override fun <T : Any?> deserialize(content: ByteArray, clazz: Class<T>): T? {
return mapper.readValue(content, clazz)
}
})
.build()
class ArangoService(private val adb: ArangoDB) {

fun getVersion(): ArangoDBVersion {
return adb.version
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
Args=\
--initialize-at-build-time=\
com.example,\
ch.qos.logback,\
org.slf4j
Binary file not shown.
6 changes: 5 additions & 1 deletion src/main/resources/application.properties
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
micronaut.application.name=demo

adb.hosts=127.0.0.1:8529
adb.hosts=localhost:8529
adb.password=test
adb.useSsl=true
adb.ssl.trustStoreFile=META-INF/resources/adb.truststore
adb.ssl.trustStorePassword=12345678
adb.ssl.trustStoreType=pkcs12

0 comments on commit 9614a5b

Please sign in to comment.