[ann] Bootique 2.0.M1 released

64 views
Skip to first unread message

Andrus Adamchik

unread,
Sep 5, 2020, 2:58:43 AM9/5/20
to Bootique User Group
Exciting news - the first 2.0 milestone of Bootique is released. We seriously debated making it a Beta, as all the new features are pretty solid already. Though in the end decided to start with a "milestone" to give users a chance to try it and provide us feedback before we freeze the API. As the numbering implies, this is a major new release with major new features:

1. Guice is out, bootique-di is in. We switched to our own Dependency Injection engine, as Guice is barely supported and causes constant trouble with newer JDK upgrades. bootique-di is much faster, lighter, and has no external dependencies (so no more conflicting Guava libs). Conceptually the new DI engine is very close to Guice, so migration is straightforward [1].

2. Comprehensive new test suite built atop of JUnit 5 [2]. While Bootique JUnit4 APIs (that are still available) weren't bad at all, JUnit5 and its advanced test lifecycle took this to the next level. There are 3 simple annotations (@BQTest, @BQTestTool and @BQApp) that enable declarative startup of tested apps and various test "tools". And there are three "scopes" for apps and tools - test class, test method and global. "Global" is Bootique's own invention not explicitly present in JUnit 5 that allows to share expensive resources between multiple test classes. Built-in tools can manage in-memory or real DBs (on Docker), expose client API for the test webapps, provide assertions API for database data and web requests, and support dynamic ports for test resources. All this is pretty well documented [2,3,4].

3. New modules and integrations. Both top-level (MyBatis, Simplejavamail), as well as modules within the existing projects (JUnit 5 related, Cayenne 4.2, Jersey Bean Validation)

4. OpenAPI/Swagger. The 1.x version of bootique-swagger was experimental and barely usable. The new version is fully reworked, based on OpenAPI 3. It supports multitenancy and declarative URL mapping for both API specs and API docs, as well as merging specs from multiple sources. Really easy to embed in the apps.

5. Most modules are upgraded to the latest versions of third-party libraries they are integrating with.

6. Finally, there are smaller improvements everywhere that make day-to-day development more fun and productive.

Enjoy! (and don't forget to provide us feedback)

Andrus


[1] https://bootique.io/docs/latest/migrate-from-guice/
[2] https://bootique.io/docs/latest/bootique-docs/#_part_iii_testing
[3] https://bootique.io/docs/latest/bootique-jdbc-docs/#jdbc-testing
[4] https://bootique.io/docs/latest/bootique-jetty-docs/#jetty-testing
[5] https://github.com/bootique/bootique-swagger/blob/master/README.md
[6] full release notes:

bootique
* #267 Support specifying config key for "-H"
* #269 Migrate from Guice to Bootique DI.
* #271 bootique-test integration with junit5
* #276 Job parameters mapped as declared vars not showin in help
* #280 BQRuntimeDaemon hides exceptions thrown in runtime
* #282 Can't create "default" command via a method with @Provides
* #284 Update to bootique-modules-parent 2.0
* #286 Update to bootique-modules-parent 2.0.1
* #287 bootique-test-junit5: manage static BQRuntime fields
* #288 Ambiguous "Bootique.module(..)" methods
* #289 "Bootique.extend(binder).addPostConfig()" extension for unit tests
* #291 JUnit 5: Scope management with "@BQTestTool" annotation
* #293 @BQApp must support the same lifecycles as @BQTestTool

bootique-agrest
* #42 Remove support for old "bootique-linkrest"
* #43 Upgrade to agrest 3.4
* #45 Upgrade to Agrest 3.5
* #46 Upgrade to Agrest 3.6

bootique-cayenne
* #68 "maps" config must be a dictionary, not a list for extensibility
* #78 Support for JUnit 5
* #79 Support for Cayenne 4.2
* #80 Redesign JUnit 5 tests - CayenneTester
* #81 CayenneTester - support for commit counter
* #82 Upgrade to the final version of Cayenne 4.1

bootique-curator
* #15 Update curator and remove old zookeeper dependency.
* #17 Upgrade to Curator to 5.1.0

bootique-di (new)
* #32 Support chained bindings

bootique-jdbc
* #95 Support for JUnit 5
* #96 DbTester - a JUnit 5 extension to bootstrap test databases, provide integration w/Testcontainers
* #97 DbTester support for Liquibase
* #98 DbTester: support for custom init function
* #99 DbTester: database reusable between test classes
* #101 Split jdbc-junit5 into Derby and Testcontainers-specific modules
* #102 TcDbTester: support for explicit container instance

bootique-jersey
* #47 Set<Package> bound in JerseyModule must be qualified with annotation
* #48 Combine bootique-jersey with bootique-jersey-client in one project
* #49 Upgrade to Jersey 2.30.1
* #50 Integrate 'jersey-bean-validation'
* #51 Resources with dynamically defined paths
* #52 Configurable JSON serialization
* #53 bootique-jersey-jackson: Support java.time serialization

bootique-jetty
* #95 Safer default value for ServerFactory.maxThreads
* #96 Support "classpath:" URLs for "resourceBase" of static servlets
* #97 "bootique-jetty-junit5" - a test module for Jetty
* #98 "any" port - selecting port dynamically
* #99 SSL context factory class should be changed to comply with recent versions of Jetty
* #102 Upgrade to Jetty 9.4.31.v20200723

bootique-job
* #79 a few triggers for the same job with different set of parameters
* #82 Removing API deprecated prior to 1.0

bootique-jooq
* #10 Upgrade to the latest OSS version of Jooq - 3.13.3

bootique-kafka
* #28 Remove kafka-client 0.8
* #29 Upgrade Kafka client libs from 2.0.0 to 2.4.0

bootique-linkmove
* #42 Upgrade to LM 2.11
* #43 Upgrade to LinkMove 2.12

bootique-liquibase
* #31 snakeyaml version conflict with Jackson
* #32 upgrade to liquibase 3.9.0

bootique-logback
* #49 Upgrade Logback from v1.1.9 to 1.2.3
* #50 Logback "filters" in Bootique configurations

bootique-mvc
* #20 Upgrade Mustache to 0.9.6

bootique-mybatis (new)
* #1 Injectable SqlSessionFactory instance
* #2 Allow registering TypeHandlers via MyBatisModuleExtender

bootique-rabbitmq
* #1 Migrate "bootique-rabbitmq-client" to "bootique-rabbitmq"
* #2 More straightforward channel access
* #3 Upgrade to the latest amqp-client
* #5 bootique-rabbitmq-junit5
* #6 Preserve connection defaults when not set explicitly

bootique-shiro
* #23 Upgrade to Shiro 1.4.2 to address a security vulnerability
* #24 Upgrade Shiro to 1.5.0
* #26 Upgrade to Shiro 1.5.3
* #27 Allow configuration-free start

bootique-simplejavamail (new)

bootique-swagger
* #16 Support for OpenAPI 3.0.x
* #17 Configurable Swagger UI servlet mapping
* #18 Change default mapping for UI servlet from /swagger to /swagger-ui
* #21 Swagger UI multitenancy
* #22 Controllable mapping for "swagger-ui-static"
* #23 "bootique-swagger" - allow to map spec URL via config
* #24 Remove support for Swagger 2.0 spec and "bootique-swagger" module
* #25 Upgrade UI to swagger-ui 3.25.1

bootique-tapestry
* #20 Upgrade "bootique-tapestry55" to the final 5.5.0 version
* #22 Allow configuration-free start

Ari Maniatis

unread,
May 21, 2021, 2:54:20 AM5/21/21
to Bootique User Group
On Saturday, September 5, 2020 at 4:58:43 PM UTC+10 Andrus Adamchik wrote:
2. Comprehensive new test suite built atop of JUnit 5 [2]. While Bootique JUnit4 APIs (that are still available) weren't bad at all, JUnit5 and its advanced test lifecycle took this to the next level. There are 3 simple annotations (@BQTest, @BQTestTool and @BQApp) that enable declarative startup of tested apps and various test "tools". And there are three "scopes" for apps and tools - test class, test method and global. "Global" is Bootique's own invention not explicitly present in JUnit 5 that allows to share expensive resources between multiple test classes. Built-in tools can manage in-memory or real DBs (on Docker), expose client API for the test webapps, provide assertions API for database data and web requests, and support dynamic ports for test resources. All this is pretty well documented [2,3,4].

 How does the bootique global scope relate to junit5's own global object store? Its not well known about, but there is a store you can use in extensions to store database state or other expensive resources.


Ari

Andrus Adamchik

unread,
May 21, 2021, 3:17:53 AM5/21/21
to Bootique User Group
Reply all
Reply to author
Forward
0 new messages