From 1f1ef9a50557c36f4c62bec3bdca81fad5ee9d5d Mon Sep 17 00:00:00 2001 From: Michel Tucek Date: Sun, 2 Jul 2023 22:05:22 +0200 Subject: [PATCH 1/3] Update Java Binding documentation --- src/bindings/jna/README.md | 4 +- src/bindings/jna/libelektra/README.md | 149 ++++++++++++++++++ .../jna/libelektra/exception-hierarchy.png | Bin 0 -> 40463 bytes .../jna/libelektra/exception-hierarchy.pu | 38 +++++ .../jna/libelektra/key-type-hierarchy.png | Bin 0 -> 20149 bytes .../jna/libelektra/key-type-hierarchy.pu | 26 +++ .../runtime-exception-hierarchy.png | Bin 0 -> 21596 bytes .../libelektra/runtime-exception-hierarchy.pu | 25 +++ 8 files changed, 241 insertions(+), 1 deletion(-) create mode 100644 src/bindings/jna/libelektra/README.md create mode 100644 src/bindings/jna/libelektra/exception-hierarchy.png create mode 100644 src/bindings/jna/libelektra/exception-hierarchy.pu create mode 100644 src/bindings/jna/libelektra/key-type-hierarchy.png create mode 100644 src/bindings/jna/libelektra/key-type-hierarchy.pu create mode 100644 src/bindings/jna/libelektra/runtime-exception-hierarchy.png create mode 100644 src/bindings/jna/libelektra/runtime-exception-hierarchy.pu diff --git a/src/bindings/jna/README.md b/src/bindings/jna/README.md index 79195c50139..8045e4a645c 100644 --- a/src/bindings/jna/README.md +++ b/src/bindings/jna/README.md @@ -9,7 +9,9 @@ A Java binding using JNA. This binding requires Elektra to be installed on the system to work. -In preparation for introducing a more high level dynamic proxy based API, the JNA binding is currently structured as Gradle mulit-project setup with just one `java-library` project. +In preparation for introducing a more high level dynamic proxy based API, the JNA binding is currently structured as Gradle multi-project setup. + +To read more about the thinking behind the current implementation, [click here](./libelektra/README.md). You can run the `HelloElekra` example by executing: diff --git a/src/bindings/jna/libelektra/README.md b/src/bindings/jna/libelektra/README.md new file mode 100644 index 00000000000..7d6209f58d8 --- /dev/null +++ b/src/bindings/jna/libelektra/README.md @@ -0,0 +1,149 @@ +# About Elektra's Java Binding + +Whenever a software initiative opens itself up by providing native support for another ecosystem, there are many aspects to consider. +Obviously, proper implementation in the target ecosystem's programming language is essential, but there are other aspects to consider, such as adhering to the ecosystem's established dependency management system, and providing documentation in a format that developers will expect. + +In order to translate the existing Elektra's C API well, some key design decisions had to be made. +In particular, we had to address the following: + +- Proper object-oriented representation of Elektra's entities + +- Correct error propagation + +- Transparent handling of native resources + +- Integration into Elektra's build and Continous Integration (CI) pipelines - including the following key aspects: + + - Automated tests + + - Publish release artefacts to established dependency repositories + + - Installation of Java dependencies together with Elektra + +- Documentation of the Java API without replicating the documentation of the underlying C API + +To strike a balance between compatibility and the use of language features, Java 11 has been set as the target for compatibility. + +## Java API + +The Java binding must bridge the conceptual and technical gap between the native Elektra API and provide an experience that transparently hides native resource management as well as conceptual differences between the C and Java paradigms. + +### Modelling Elektra's Entities for a Java Audience + +Elektra's main entities are the key database, keysets and keys. +As simple as this sounds, there are some aspects of these underlying concepts that can benefit from leveraging the particular concepts of Java's object-oriented representation. + +The following design objectives had been identified and implemented: + +- API functions that only return read-only keys must be modelled to provide no write functionality to the underlying native key resources. + This primarily affects meta-keys, which by definition are read-only and cannot contain binary data. + +- Key and key set representations must leverage common Java interfaces. + To facilitate this, `Key` implements `Iterable` for accessing its meta-keys while `KeySet` extends `AbstractSet` and implements `NavigableSet`. + + ![Overview `KeySet` and `Key` type hierarchy](key-type-hierarchy.png) + +- Access to Elektra's key database needs to implement the convenient interface `AutoClosable` to further enhance the transparency of the underlying native resource. + +- Common modern design paradigms like fluent interfaces, support of `Optional` and `Stream` interoperability are provided to enable seamless integration of existing state-of-the art Java code. + +### Error Propagation + +Elektra's C API uses two mechanisms to communicate warning and error information. +One is by populating a key object provided by the caller of a function and the other is by specifically defined return values. + +To accommodate these two mechanics in the Java binding, the following main strategies are employed: + +- `Optional` return values are used instead of throwing an error whenever a function might not return a requested object. + +- An exception hierarchy is modelled to represent Elektra's error codes. + The binding automatically translates error information provided by Elektra's C API into appropriate exceptions. + + A particular problem we encountered when implementing this feature was that initially we did not immediately extract all available error information from the respective error keys provided by Elektra when creating an exception object. This led to native resources that had already been deallocated being accessed when an exception was later evaluated. + + ![`Exception` hierarchy](exception-hierarchy.png) + + ![`RuntimeException` hierarchy](runtime-exception-hierarchy.png) + +## Native Reference Handling + +In C, memory allocation is done manually using functions such as `malloc` and `free`, while in Java memory management is done automatically by garbage collection. +C allows direct manipulation of pointers, while Java uses references without direct access to memory addresses. +C is prone to memory-related errors such as leaks and invalid memory accesses, while Java's automatic memory management reduces such risks. +Overall, C offers more control over memory, but requires manual memory management, while Java abstracts away the associated complexities. + +To bridge the gap between Java's automatic memory recovery mechanisms and C's explicit way of managing memory, reference counters and cleaner implementations must be used to enable the Java Virtual Machine (JVM) garbage collector to properly clean up native resources. + +In order for native resource allocation to work correctly with bindings such as the Java binding, Elektra's support for key and key set reference counting had to be extended. +Whenever a native resource is represented by a non-native object, the resource's reference counter is incremented. +When the non-native representation object is destroyed, the counter is decremented and an attempt is made to delete the native resource. +Only if the reference count is zero will the native resource actually be deallocated. +In Elektra's Java binding, this is facilitated by a `Cleaner` implementation to allow the garbage collector to correctly clean up native resources. +Special care has been taken to correctly initialise Java representations of native resources when passed to a Java-based Elektra plugin. + +Getting the reference counter implementation and the garbage collector interaction right proved to be a significant challenge. +This was especially true when Java plugin support was implemented. + +There are a few important things to keep in mind when working with native resources: + + - Reference counting support from the C API is required. + + - Never depend on when the garbage collector is called. + + - Never rely on native resources in exceptions, as their evaluation may be out of scope. + +## Plugin Support + +Support for writing Elektra plugins in Java has been extended. +To avoid problems with the Java Native Interface (JNI) used by Elektra to communicate with Java plugins, and to allow multiple Java plugins to be used simultaneously, Elektra's `process' plugin had to be modified. + +## Build Tooling + +Elektra's build tooling is based on CMake, so building and publishing Java assets is not a native feature. +Some preliminary work had already been done to create a Java binding based on the Maven build tooling. +A flexible and future-proof build setup for Java-related assets was one of the first decisions to be made. + +The following criteria have been established for any candidate to be seriously considered: + +- Existing dependencies must be supported by the chosen build system. + +- An established system with a supportive community would be a great advantage. + +- Build performance should not be adversely affected. + +- Integration with existing build infrastructure is no more complicated than before. + +- The benefits of the transition outweigh the potential costs, making it a worthwhile investment. + +- Ease of use, community support and flexibility were the most important factors to consider. + +- The fact that Maven does not provide native support for Kotlin, which is becoming increasingly popular with developers in the Java Virtual Machine (JVM) environment, was also an important factor to consider. + +- Either we have the necessary expertise and resources to make a successful transition or the new build system should be easy and intuitive for the development team to use. + +After considering the obvious candidates (Ant, CMake, Maven and Gradle), we confidently chose Gradle as the build tool for the Java binding, paving the way for a future Kotlin binding. + +To briefly address the eliminated candidates: + +- Ant is a popular build tool that uses XML files to define build processes. +It is flexible and can be used for a variety of languages, but it can be more verbose and less user-friendly than other build tools. + +- CMake is a build tool with limited support for Java. + It is popular for C/C++ projects and can be extensively customised, but it can be more difficult to use than other build tools and is not as flexible for multi-language projects. + As Elektra is a C-based software initiative, this system would have had the advantage of being already in use. + +- Due to its declarative nature, Maven is not particularly flexible. + However, it has been the de-facto standard for Java projects for a long time, and caters to the standard dependency management system used in the Java world. + +The main reasons for this decision were: + +- Gradle is the modern alternative to Maven, using the same dependency management infrastructure. + +- It also opens up new opportunities for the growth of Elektra's Java bindings and other Java-based language bindings. + +### CI Integration and Release Asset Publishing + +Dependencies for Gradle and Java had to be included in the plethora of different CI test build environments. +Some exceptions to testing for unsupported features for some Mac OS builds (e.g. `gopts`) had to be made, making the build scripts a little more complicated. + +Publishing assets to the sonatype repository is done using Gradle's `maven-publish` and `signing` plugins. \ No newline at end of file diff --git a/src/bindings/jna/libelektra/exception-hierarchy.png b/src/bindings/jna/libelektra/exception-hierarchy.png new file mode 100644 index 0000000000000000000000000000000000000000..f64c4ac76a46de34261244e2514bdfe1be522909 GIT binary patch literal 40463 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 literal 0 HcmV?d00001 diff --git a/src/bindings/jna/libelektra/exception-hierarchy.pu b/src/bindings/jna/libelektra/exception-hierarchy.pu new file mode 100644 index 00000000000..3378d4496ce --- /dev/null +++ b/src/bindings/jna/libelektra/exception-hierarchy.pu @@ -0,0 +1,38 @@ +@startuml + +hide members + +class Exception +abstract KDBException { + static KDBException getMappedException(Key errorKey) +} +class ConflictingStateException +class PermanentException +abstract LogicalException +class InterfaceException +class InstallationException +class InternalException +class ResourceException +class OutOfMemoryException +class PluginMisbehaviorException +class SemanticValidationException +abstract ValidationException +class SyntacticValidationException + +show KDBException methods + +Exception <-- KDBException +KDBException <-- ConflictingStateException +KDBException <-- PermanentException +KDBException <-- ValidationException +PermanentException <-- InstallationException +PermanentException <-- LogicalException +PermanentException <-- ResourceException +ValidationException <-- SemanticValidationException +ValidationException <-- SyntacticValidationException +LogicalException <-- InterfaceException +LogicalException <-- InternalException +LogicalException <-- PluginMisbehaviorException +ResourceException <-- OutOfMemoryException + +@enduml \ No newline at end of file diff --git a/src/bindings/jna/libelektra/key-type-hierarchy.png b/src/bindings/jna/libelektra/key-type-hierarchy.png new file mode 100644 index 0000000000000000000000000000000000000000..8ed0e343d579d278799551235bea43a536d670ea GIT binary patch literal 20149 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 My85}Sb4q9e0CF|r2><{9 literal 0 HcmV?d00001 diff --git a/src/bindings/jna/libelektra/key-type-hierarchy.pu b/src/bindings/jna/libelektra/key-type-hierarchy.pu new file mode 100644 index 00000000000..1d83263636f --- /dev/null +++ b/src/bindings/jna/libelektra/key-type-hierarchy.pu @@ -0,0 +1,26 @@ +@startuml + +hide members + +interface Comparable +interface Iterable +class ReadableKey +class Key { + Optional getMeta(String metaName) + Iterator iterator() +} + +interface NavigableSet +abstract AbstractSet +class KeySet + +show Key methods + +Comparable <.. ReadableKey +ReadableKey <-- Key +Iterable <.. Key + +AbstractSet <-- KeySet +NavigableSet <.. KeySet + +@enduml \ No newline at end of file diff --git a/src/bindings/jna/libelektra/runtime-exception-hierarchy.png b/src/bindings/jna/libelektra/runtime-exception-hierarchy.png new file mode 100644 index 0000000000000000000000000000000000000000..04ddfa18473d939c5a1ae4aefca5deadca1d9721 GIT binary patch literal 21596 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 Date: Tue, 11 Jul 2023 12:18:54 +0200 Subject: [PATCH 2/3] fixed styling --- src/bindings/jna/libelektra/README.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/bindings/jna/libelektra/README.md b/src/bindings/jna/libelektra/README.md index 7d6209f58d8..10ff58246c8 100644 --- a/src/bindings/jna/libelektra/README.md +++ b/src/bindings/jna/libelektra/README.md @@ -22,7 +22,7 @@ In particular, we had to address the following: - Documentation of the Java API without replicating the documentation of the underlying C API -To strike a balance between compatibility and the use of language features, Java 11 has been set as the target for compatibility. +To strike a balance between compatibility and the use of language features, Java 11 has been set as the target for compatibility. ## Java API @@ -40,7 +40,7 @@ The following design objectives had been identified and implemented: - Key and key set representations must leverage common Java interfaces. To facilitate this, `Key` implements `Iterable` for accessing its meta-keys while `KeySet` extends `AbstractSet` and implements `NavigableSet`. - + ![Overview `KeySet` and `Key` type hierarchy](key-type-hierarchy.png) - Access to Elektra's key database needs to implement the convenient interface `AutoClosable` to further enhance the transparency of the underlying native resource. @@ -86,11 +86,11 @@ This was especially true when Java plugin support was implemented. There are a few important things to keep in mind when working with native resources: - - Reference counting support from the C API is required. +- Reference counting support from the C API is required. - - Never depend on when the garbage collector is called. +- Never depend on when the garbage collector is called. - - Never rely on native resources in exceptions, as their evaluation may be out of scope. +- Never rely on native resources in exceptions, as their evaluation may be out of scope. ## Plugin Support @@ -126,7 +126,7 @@ After considering the obvious candidates (Ant, CMake, Maven and Gradle), we conf To briefly address the eliminated candidates: - Ant is a popular build tool that uses XML files to define build processes. -It is flexible and can be used for a variety of languages, but it can be more verbose and less user-friendly than other build tools. + It is flexible and can be used for a variety of languages, but it can be more verbose and less user-friendly than other build tools. - CMake is a build tool with limited support for Java. It is popular for C/C++ projects and can be extensively customised, but it can be more difficult to use than other build tools and is not as flexible for multi-language projects. @@ -137,13 +137,13 @@ It is flexible and can be used for a variety of languages, but it can be more ve The main reasons for this decision were: -- Gradle is the modern alternative to Maven, using the same dependency management infrastructure. +- Gradle is the modern alternative to Maven, using the same dependency management infrastructure. -- It also opens up new opportunities for the growth of Elektra's Java bindings and other Java-based language bindings. +- It also opens up new opportunities for the growth of Elektra's Java bindings and other Java-based language bindings. ### CI Integration and Release Asset Publishing Dependencies for Gradle and Java had to be included in the plethora of different CI test build environments. Some exceptions to testing for unsupported features for some Mac OS builds (e.g. `gopts`) had to be made, making the build scripts a little more complicated. -Publishing assets to the sonatype repository is done using Gradle's `maven-publish` and `signing` plugins. \ No newline at end of file +Publishing assets to the sonatype repository is done using Gradle's `maven-publish` and `signing` plugins. From 4c345f5d53b80d9a739367624171255c25e28463 Mon Sep 17 00:00:00 2001 From: Michel Tucek Date: Tue, 11 Jul 2023 18:23:37 +0200 Subject: [PATCH 3/3] added news entry --- doc/news/_preparation_next_release.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/doc/news/_preparation_next_release.md b/doc/news/_preparation_next_release.md index db96da5dcc9..5b3b2b228c4 100644 --- a/doc/news/_preparation_next_release.md +++ b/doc/news/_preparation_next_release.md @@ -250,11 +250,9 @@ This section keeps you up-to-date with the multi-language support provided by El - Add overloads for `Key::isBelow`, `Key::isBelowOrSame` and `Key::isDirectBelow` that accept a string as the key name _(Maximilian Irlinger @atmaxinger)_ - Include the header `cstdint` in `key.hpp`. It is needed for an enum of type `std::uint8_t` _(Florian Lindner @flo91)_ -### <> +### Java -- <> -- <> -- <> +- Added documentation about the design of the binding. _(Michael Tucek @tucek)_ ### Python