We recently released Kill Bill version 0.24. We’re using this blog post to discuss the more notable changes for Kill Bill 0.24:
- Support for Java 11
- Group subscriptions on specific invoices
- Longer billing periods
- Specify
DateTime
for subscriptions - Replaced Guava dependencies
- Changed usage amount to
BigDecimal
You can see the complete 0.24 release notes on GitHub.
About the Kill Bill Release Trains
As a reminder, Kill Bill has two release trains:
- The latest release with an even minor number (e.g., 0.22.x) is stable and APIs are backward compatible.
- Odd-numbered minor release numbers (0.17.x, 0.19.x, 0.21.x, etc.) are for developing new features.
For those who are worried or perplexed that we haven’t released a version 1.0 or above, please note that we don’t (yet?) follow Semantic Versioning conventions.
Moving from Java 8 to 11
We have officially dropped support for JDK 8 (LTS). The current target build is now JDK 11 (LTS). For 0.24.x, we will provide best effort support for JDK 17 (LTS) as well. You can find more information about our tech stack changes in this blog post.
The Java blog has a great post on Java and LTS (long-term support) and why it’s so important for Kill Bill users.
Group Subscriptions on Specific Invoices
Before 0.24, all subscriptions for a single account would generate one invoice. With the new subscription grouping feature, we provide APIs to manage the subscription groups and associate subscriptions with such groups.
As a result, each invoice run (whether triggered through the APIs or from system notification) would generate up to N invoices, one for each active subscription group.
To use this new feature, you’ll need to implement an invoice plugin and use the new API InvoicePluginApi#getInvoiceGrouping
. For details, see this issue on GitHub.
Longer Billing Periods
With Kill Bill, the frequency with which Kill Bill invoices the account for one or more subscriptions is the billing period. Before 0.24, you could define any of the following billing periods:
- DAILY
- WEEKLY
- BIWEEKLY
- THIRTY_DAYS
- MONTHLY
- QUARTERLY
- BIANNUAL
- ANNUAL
- BIENNIAL
- NO_BILLING_PERIOD
We have now added support for the following billing periods:
- TRIENNIAL (every three years)
- SESQUIENNIAL (every 18 months)
- THIRTY_ONE_DAYS
The issue that tracked this change is here.
Specify DateTime
in Addition to Date
This change allows you to use DateTime
(instead of just Date
) when creating or changing a subscription via the subscription API.
Catalog versions are based on their effectiveDate
, which is datetime. Using the new DateTime
for subscription creation/management lets you be more precise as to which catalog version the system should use.
The issue that tracked this change is here.
Replaced Guava Dependencies
We began coding Kill Bill before there were Java-fluent APIs, so back then we used Guava to perform operations like filtering, sorting, and merging on data structures. With 0.24, we have replaced these dependencies throughout the Kill Bill ecosystem with Java-fluent APIs. The details are here.
Changed Usage Amount to BigDecimal
This change applies to those who use Kill Bill to bill for usage amounts. Before 0.24, our usage models defined passing the “amount” of units as a long
, as shown in RolledUpUnit#amount and UsageRecord#amount. We have changed both to be BigDecimal
.
This change came about after a user detected an issue and reported it on the mailing-list (again demonstrating the power of open-source software). It also makes sense in order to accommodate use cases that define a high granularity unit (e.g. GBytes instead of MBytes or even KBytes), such as for invoice presentation.
For more information, check it out here.
As always with a new release…
Lastly, for those of you still on 0.22.x release (or earlier!), we encourage you to upgrade to benefit from all this work. You’ll need to allocate time to run regression tests matching your own scenarios and verify that things work as expected. We also recommend you export your production data into a test environment with the 0.24.x release, where you can then move the clock forward (day by day) and verify correct behavior.
We’d love your feedback on what we’ve done here. Feel free to reach-out on the Kill Bill mailing-list!