Skip to content

Exonum Java 0.7.0

Pre-release
Pre-release

Choose a tag to compare

@atrykush atrykush released this 18 Jul 10:25
· 614 commits to master since this release

Exonum Java 0.7.0 brings support of Exonum TestKit, massive performance improvements,
and various other fixes and improvements. It is based on Exonum 0.11.

If you are upgrading an existing Java service, consult the migration guide.

Added

  • A new exonum-testkit module that allows to emulate blockchain network and test transaction
    execution in the synchronous environment (that is, without consensus algorithm and network
    operation involved).
    Main component of this module is TestKit which allows recreating behavior of a single full
    node (a validator or an auditor) in an emulated Exonum blockchain network.
    For more information and examples see documentation.
    (#819, #833, #859, #913, #989)
  • Verification of native library compatibility when it is first loaded, to detect
    possible mismatch between an installed exonum-java application and the version
    used in a service project. (#882)
  • Block#isEmpty()
  • RawTransaction#fromMessage(TransactionMessage), which is mostly useful in tests,
    where you might have a message but need it as a RawTransaction in some assertions.

Changed

  • Improved the throughput of transaction processing twofold. Java services on Exonum Java 0.7.0
    handle transactions about 15–20% slower than equivalent Rust ones, according to our system
    benchmarks. (#917, #996)
  • BinaryTransactionMessage#toString to include some fields in human-readable
    format instead of the whole message in binary form.
  • Node#submitTransaction to throw unchecked TransactionSubmissionException instead
    of checked InternalServerError.
  • Moved all packages inside com.exonum.binding to com.exonum.binding.core package.
    That was required to give each module a unique root package to prevent 'split-packages'
    problem. The migration guide has a regexp to update the service automatically.
  • Replaced redundant TypeAdapterFactory in 'common' module with a single
    CommonTypeAdapterFactory. BlockTypeAdapterFactory is renamed to CoreTypeAdapterFactory.
    JsonSerializer#json and JsonSerializer#builder register CommonTypeAdapterFactory
    by default. CoreTypeAdapterFactory must be registered explicitly if needed. (#971)
  • Exonum Java App now uses static linkage for RocksDB on Mac OS. Installed RocksDB
    is no more necessary to run the App. (#1011)

Fixed

  • The default Transaction#info implementation causing an error on transaction
    request. It is modified to return an empty object by default (no info in content.debug field
    of the response to transaction). (#904)
  • Allow to override root package in the template project generated with
    the exonum-java-binding-service-archetype. It remains equal to 'groupId' property
    by default, but can be overridden with 'package' property.
  • Application packaging issue that might have resulted in several versions of Java artifacts
    on the application classpath. (#968)