Releases: Dockbox-OSS/Hartshorn
Release 0.6.1
Re-configures staging to include root module, and simplifies relation between root and parent modules
Release 0.6.0
What's Changed
- #1029 Dependency upgrades November 2023 by @GuusLieben in #1032
- #1023 Updated implementation for ComponentPopulator by @GuusLieben in #1028
- #1034 Deprecate
Attempt
for removal by @GuusLieben in #1035 - #1036 Dependency upgrade December 2023 by @GuusLieben in #1037
- #1038 Process deprecations for 0.6.0 by @GuusLieben in #1039
- #1042 Extend component qualifiers by @GuusLieben in #1043
- #1051 Configure capacity for supported collections by @GuusLieben in #1052
- #1054 Replace name-based identifier with qualifiers in dependency declarations by @GuusLieben in #1055
- #1050 Standardize Maven plugin versions, include staging POM in publications by @GuusLieben in #1056
- #1046 Component stereotype for binding configurations by @GuusLieben in #1053
- #1057 Token registry graph-based lexer by @GuusLieben in #1058
- #748 Add missing Javadoc documentation by @GuusLieben in #1041
- #1066 Improve classpath scanning performance by @GuusLieben in #1067
- #1065 Allow access to
InjectionPoint
from providers by @GuusLieben in #1068 - #1047 Revise integrated logging by @GuusLieben in #1069
- #1044 Rename Hartshorn Discovery to Hartshorn SPI by @GuusLieben in #1070
- #1071 Restructure component providers and registries by @GuusLieben in #1072
- #1073 Simplify GitHub issue templates by @GuusLieben in #1074
- #1075 Read-only views of context types by @GuusLieben in #1079
- #1076 Binding stereotypes, #1077 Priority definitions, #1078 Correctly store singletons by @GuusLieben in #1080
- #1082 Remove unsupported 'commands' module by @GuusLieben in #1083
- #1060 Documentation for Hartshorn Core, follow-up markers for remaining documentation by @GuusLieben in #1084
- #1081 Remove Jakarta annotations in favor of dedicated annotations by @GuusLieben in #1086
- #1085 Provide configurer for standard application setup by @GuusLieben in #1087
- #1093 Update GPG key for JAR signing by @GuusLieben in #1094
- #1111 Automate dependency version upgrades. Update dependencies for 0.6.0 by @GuusLieben in #1112
- Release candidate 0.6.0 (RC1) by @GuusLieben in #1110
Full Changelog: 0.5.0...0.6.0
Release 0.5.0
Foreword
Release 0.5.0 marks a full year of development, which has introduced many new stabilizing features to the core of the Hartshorn framework. Various modules have been deprecated due to technical debt from mistakes made in early development. These modules will be re-developed over time, once sufficient specifications have been defined, and additional improvements have been made to ensure the stability of Hartshorn Core.
What's Changed
- #850 Separate Hartshorn Data into JPA and Config modules by @GuusLieben in #865
- #873 Add context configuring component processor by @GuusLieben in #874
- #879 Follow-up CVE-2021-37533, remove static analysis of CF qualifiers by @GuusLieben in #880
- #851 Refactor JPA implementation and named query support by @GuusLieben in #876
- #877 Application reporting API by @GuusLieben in #878
- #882 Rename
@Provider
to@Binds
, clean up class-bindings by @GuusLieben in #883 - #881 Dynamic scope support for component binding and providing by @GuusLieben in #884
- #877 Update system reporter tests by @GuusLieben in #885
- #839 Target Java 17-19 in CI builds, retaining source at Java 17 by @GuusLieben in #886
- #853 Allow specifying lockmode on JPA repository queries by @GuusLieben in #894
- #890 Delete
lombok.config
by @GuusLieben in #896 - Update #891 contributing guidelines and #889 codestyle by @GuusLieben in #897
- #823 Add verification utility for JavaDocs by @GuusLieben in #908
- #909 Improve accessibility of Gradle build configurations by @GuusLieben in #910
- #911 Add isRecord to TypeView by @GuusLieben in #912
- #887 Improve accessibility of context lookups by @GuusLieben in #913
- #917 Re-usable resource lookups with dynamically determined strategies by @GuusLieben in #918
- #925 Use file reference instead of string representation for
copyArtifacts
source and target by @GuusLieben in #926 - #921 MethodStub for proxy methods without interceptors by @GuusLieben in #927
- #924 Stricter component creation checks by @GuusLieben in #928
- #892 Update license HEADER.txt for 2023 by @GuusLieben in #893
- #780 Handle ambiguous method definitions and calls by @GuusLieben in #929
- #919 Test harness definitions to enforce API stability across implementations by @GuusLieben in #920
- #935 Decouple introspection and test harness integration by @GuusLieben in #938
- #939 Add
@IgnoreProperty
with standard introspector to add API level attribute ignore marker by @GuusLieben in #941 - #940 Separate translation key generation from component processor by @GuusLieben in #942
- #934 Restructure core modules for enhanced test harness integration and reusability by @GuusLieben in #943
- #901 Improve Core code coverage by @GuusLieben in #906
- #895 Check and enforce code coverage for all modules by @GuusLieben in #898
- #923 Update project introduction and build instructions by @GuusLieben in #944
- #934 Organize tests after architecture changes by @GuusLieben in #945
- #946 Object converter API to replace transformer utilities by @GuusLieben in #947
- #931 Rename shortened keywords, add markers for reserved token types by @GuusLieben in #948
- #950 Resolve incorrect implementation of Closeable in ApplicationContext by @GuusLieben in #952
- #958 Update Introspection API to support sealed classes, #959 update modifier introspection by @GuusLieben in #953
- #960 Rename beans to static components by @GuusLieben in #961
- #962 Expand Option standard API by @GuusLieben in #964
- #963 Remove redundant package check by @GuusLieben in #965
- #966 Code cleanup before RC23.1 by @GuusLieben in #968
- #969 Separate concerns for proxy advisor configuration, tracking, and execution by @GuusLieben in #970
- #977 Fast-track deprecation of proof-of-concept modules by @GuusLieben in #978
- #971 Remove field injectors, #973 Dependency graph rewrite, #974 Factory assisted injection deprecation, and #975 Explicit post processing methods by @GuusLieben in #976
- #983 Application bootstrap customizers by @GuusLieben in #980
- #987 cyclic non concrete lookup by @GuusLieben in #988
- #985 Migrate build system to Maven by @GuusLieben in #989
- #981 Update project to Java 21, #982 Update CI to Java 21 by @GuusLieben in #997
- #995 Define codestyle, contribution guidelines, code of conduct, issue/pr templates by @GuusLieben in #996
- #930 Separate HSL interpreter implementations by @GuusLieben in #951
- #1006 Clarify incomplete deprecation notices by @GuusLieben in #1008
- #1004 Decode URLs obtained from URLClassLoader before resolving to files by @GuusLieben in #1005
- Release candidate 0.5.0 by @GuusLieben in #994
- #1010 Disable deprecated fields and executables members of Populate in favor of Populate.Type arguments by @GuusLieben in #1011
- #998 Track lost references during cyclic binding dependency validation by @GuusLieben in #1009
- #1012 Include all root directories when scanning virtual filesystems by @GuusLieben in #1013
- #1015 Use SPI as backing implementation for Discovery Service by @GuusLieben in #1016
- #1017 Scope keys to replace plain types by @GuusLieben in #1018
- #1024 Update documentation about Git branch and commit guidelines by @GuusLieben in #1026
- #999 Allow injecting lower priority binding of self type by @GuusLieben in #1022
- #1020 Collection components for component composition by @GuusLieben in #1025
- Release candidate 0.5.0 (RC2) by @GuusLieben in #1027
Full Changelog: 0.4.13...0.5.0
Release 0.4.13
Dependency updates
- SLF4J was reverted from version
1.7.36
to version2.0.0
- Scala version
2.0.0
was added - Groovy version
4.0.2
was added - Reflections version
0.10.2
was removed
All changes
- #812 Verify JVM language compatibility by @GuusLieben in #813
- #812 JVM Language support - injection validation by @GuusLieben in #814
- #815 Allow creation of concrete proxies of types with non-default constructor(s) by @GuusLieben in #816
- #817 Replace static utility class
AnnotationHelper
withAnnotationLookup
by @GuusLieben in #818 - #819 Introspection API, #820 Startup configuration refactoring, and #821 Remove
@Activator
annotation by @GuusLieben in #822 - #837 Deprecate CGlib proxying by @GuusLieben in #838
- #834 Enforce type checking on method interceptors by @GuusLieben in #835
- #833 Deprecate explicit preconditions for component pre- and post processors by @GuusLieben in #836
- #830 Allow getting beans by
Key
value by @GuusLieben in #841 - #844 Resolve CVE-2022-42889 through transitive dependency of Checker Framework by @GuusLieben in #845
- #825 Component locating and loading overhaul, isolated test environments by @GuusLieben in #843
- #846 Refactor
Result
API for internal optimization by @GuusLieben in #847 - #852 Improve phase logging of processor registration by @GuusLieben in #856
- #849 Add missing
Class
overload for proxy delegate lookup by @GuusLieben in #854 - #857 Support error-type specific error handling for
Attempt
instances by @GuusLieben in #858 - #848 Enforce explicit use of
never
value for cache expirations by @GuusLieben in #855 - #824 22.5 Deprecation notices by @GuusLieben in #859
- #832 Restructure HSL statement parsers by @GuusLieben in #860
- #861 Follow-up CVE-2022-42920 (Apache BCEL) by @GuusLieben in #862
- Release candidate 22.5 by @GuusLieben in #863
Full Changelog: 22.4...22.5
Release 0.4.12
Preview: Hartshorn Scripting Language (HSL)
See #771 for complete details.
When first implementing the condition matcher API for (among others) providers, an important question arose; how do we handle complex single-use requirements? Any condition requires two things: a RequiresCondition stereotype, and a Condition implementation. While this is useful for common conditions, such as RequiresClass and RequiresActivator, this is not preferable for specific conditions which may only appear once or twice throughout an application.
A solution which can be seen across other frameworks is the use of scripting- and/or expression language solutions. This allows the use of expressions/scripting inside a condition, which evaluates a specific custom expression. Which would allow for near endless flexibility for end-users.
HSL is a custom interpreted language which integrates with Hartshorn to allow us to offer dynamic conditions to end-users. The syntax is inspired by Java, with minor influences from JavaScript.
Dependency updates
- SLF4J was updated from version
1.7.36
to version2.0.0
- Javassist was updated from version
3.28.0-GA
to version3.29.1-GA
- JUnit Jupiter was updated from version
5.8.2
to version5.9.0
- Mockito was updated from version
4.5.1
to version4.7.0
- Test Containers was updated from version
1.17.2
to version1.17.3
- Hibernate was updated from version
6.0.2.Final
to version6.1.2.Final
- MySQL Connector was updated from version
8.0.29
to version8.0.30
- PostgreSQL was updated from version
42.3.6
to version42.5.0
- MariaDB Client was updated from version
3.0.5
to version3.0.7
- Derby was updated from version
10.14.2.0
to version10.16.1.1
- Microsoft SQL Server was updated from version
10.2.1.jre17
to version11.2.0.jre17
- Jakarta Servlet API was updated from version
5.0.0
to version6.0.0
- Jetty was updated from version
11.0.9
to version11.0.11
- Caffeine was updated from version
3.1.0
to version3.1.1
All changes
- #747 Component creation and provision condition matching by @GuusLieben in #752
- #751 Add priority support to binding functions by @GuusLieben in #753
- #743 Caffeine cache support by @GuusLieben in #754
- #755 Standardize proxy management implementation and CGLIB support by @GuusLieben in #758
- #766 Improved data source handling for database connections by @GuusLieben in #768
- #767 Deprecate
@ComponentBinding
and provider improvements by @GuusLieben in #769 - #668 Update license headers for Gradle configurations by @GuusLieben in #773
- #772 Separate data and web dependency concerns by @GuusLieben in #774
- #770 Hartshorn Scripting Language (HSL) with condition support by @GuusLieben in #771
- #775 Replace use of generic exceptions with specific descriptive exception types by @GuusLieben in #781
- #783 Replace virtual class init method with explicit constructor by @GuusLieben in #784
- #756 Allow manual transaction management for services by @GuusLieben in #787
- #777 Composite classes/instances and
final
constraints by @GuusLieben in #788 - #782 Inline class properties and strong typing support by @GuusLieben in #791
- #789 Range shorthand expression by @GuusLieben in #792
- #790 Add context object for function parameters by @GuusLieben in #793
- #794 Property type hints and Jackson object mapper configurator by @GuusLieben in #795
- #797 Support static bean components by @GuusLieben in #798
- #799 Add
@PostConstruct
support for managed components by @GuusLieben in #800 - #801 Kotlin DSL and common version catalog by @GuusLieben in #802
- #796 Restructure internal MultiMap and TypeMap collections by @GuusLieben in #803
- #804 Condition matching for event listeners by @GuusLieben in #806
- #805 Condition matching for commands by @GuusLieben in #807
- Release candidate 22.4 by @GuusLieben in #808
Full Changelog: 22.3.1...22.4
Release 0.4.11.1
Minor bugfix release 0.4.11.1
What's Changed
- #759 Fix potential NPE on filesystem configuration lookup by @GuusLieben in #760
- #761 and #762 Fix proxy delegation issues by @GuusLieben in #763
- Release candidate 22.3.1 by @GuusLieben in #764
Full Changelog: 22.3...22.3.1
Release 0.4.11
What's Changed
- #712 Delombok all sources by @GuusLieben in #713
- #714 Refactor/future proof Core package structure by @GuusLieben in #715
- #716 Implement DSL style binding by @GuusLieben in #719
- #510 / #717 Restrict instance population to components and add manual component locating by @GuusLieben in #720
- #722 OS and JDK matrix for CI unit testing by @GuusLieben in #723
- #724 Support per class lifecycle in test suite by @GuusLieben in #725
- #726 Fix lambda proxying in different classloader by @GuusLieben in #727
- #718 Remove property descriptors from TypeContext by @GuusLieben in #728
- #717 Migrate instance population to post processor by @GuusLieben in #729
- #730 Allow for complex type deserialization in configuration provider by @GuusLieben in #731
- #734 Update source JDK to 17 by @GuusLieben in #735
- #732 Declare component processors in activator, instead of requiring classpath scanning by @GuusLieben in #737
- #738
Exceptional
API revision by @GuusLieben in #739 - #733 Add support for configuration objects by @GuusLieben in #740
- #741 Improve application startup requirements by @GuusLieben in #742
- #745 Migrate to Jakarta EE namespace by @GuusLieben in #749
Full Changelog: 22.2...22.3
Release 0.4.10
What's Changed
- #651 Add default
org.slf4j.Logger
binding toApplicationLogger
provided logger. See #652 - #649 Don't attempt to access types from closed module(s). See #653
- #639 Add
permitProcessing
to component stereotype. See #654 - #640 Don't process non-explicit components. See #655
- #658 Finalize deprecating for release 22.1. See #659
- #657 Add test suite as separate module. See #660
- #662 Resolve components being processed twice on partial prefixes. See #663
- #661 Add field-support to
@Provider
. See #664 - #667 Deprecate Tasks API. See #669
- #670 Deprecate
HartshornUtils#emptyMap
. See #671 - #672 Rename ambiguous
ServiceMethodPostProcessor
andServiceAnnotatedMethodPostProcessor
. See #673 - #674 Update CLI pattern for readability. See #675
- #666 Lazy-loading components and add required service activators to internal services. See #676
- #668 Switch license to Apache 2.0. See #677
- #680 Ensure
ApplicationFactory
modifiers are accessible during unit tests. See #682 - #681 Clean up ordered processing in
HartshornApplicationContext
. See #683 - #678 Implement
Closeable
inApplicationContext
. See #684 - #679 Replace explicit
Thread
creation with managed service executor and refactorCommandListener
. See #685 - #687 Allow custom integer-based processor orders and internal separation of default application context. See #688
- #689 Merge Hartshorn Config into Hartshorn Data. See #690
- #691 Add support for wildcards with explicit upper bounds. See #692
- #693 Add support for non-required factory validation. See #695
- #694 Add activator filter to MVC initializer in HTTP Webserver initializer. See #696
- #697 Service-based static
@Provider
binding and component binding migration. See #698 - #700 Cleanup and deprecation notices for
HartshornUtils
and usages. See #701 - #699 Component activation filtering and type presence checks. See #702
- #703 (HEP) Updated dynamic object proxy API proposal. See #704
- #665 Use proxy instance for non-abstract concrete methods. See #706
- #707 Add missing implementation for
StandardDelegatingApplicationContext
#singleton(Key, S)
. See #709 - #650 Automatic configuration filetype detection and #656 configuration fallback sources. See #710
- #508 Remove packaged examples. See #711
Full Changelog: 22.1...22.2
Release 0.4.9
What's Changed
- #496 Add
@RequestParam
rule support to read query parameters fromHttpServletRequest
when populating servlet handle arguments. See #499 - #497 Include default values when looking up annotation attribute hierarchy. See #498
- #494 Resolve asynchronous access to thread-locked Scanner object in CommandCLI. See #495
- #500 Remove
FileManager
and update fileroot usages. See #501 - #516 Add
onExit
state observable. See #517 - #509 Hartshorn Web MVC API and default FreeMarker implementation. See #513
- #512 Allow serving static content through
HttpWebServer
. See #515 - #514 Remove redundant inspection suppressions. See #518
- #507 Final
Key
framework support removal. See #511 - #519 Return persisted entity when updating or saving through
JpaRepository
. See #523 - #520 Validate
PersistenceConnection
before opening session inHibernateJpaRepository
. See #524 - #521 Correctly pass exceptions in delegated methods. See #526
- #531 Add
#equals
toAnnotatedElementContext
to compare underlying reflected element directly for all contexts. See #533 - #532 Include inherited protected methods in
TypeContext#methods
, keep#declaredMethods
for type-declared methods. See #534 - #535 Use annotation type instead of instance class for annotation cache. See #536
- #529 QoL changes to
TypeContext
and associated contexts. See #530 - #538 Remove static cache in component locator in favor of global state. See #544
- #541 Remove duplicate activator check for processed components. See #543
- #540 Resolve duplicate field injection when field is annotated with both
@Inject
and@Enable
. See #547 - #539 Migrate
Log4J
usage toLogback
. See #545 - #537 Use correct activator for
HttpWebServerInitializer
and specify presence of MVC activator for MVC servlets. See #546 - #522 Correctly pass exceptions when handling servlets. See #525
- #528 Change default flush mode to always be active for
@Query
methods. See #549 - #527 Add support for Hibernate proxies. See #550
- #551 Resolve non-blocking command CLI in async mode. See #552
- #542 Defer instance proxies for non-components and resolve lost exceptions through type provisions. See #548
- #570 Configuration based remotes for
JpaRepository
instances. See #571 - #572 Microsoft SQL Server remote configuration for Data API. See #573
- #574 Add type-erasure based 'unchecked' exception rethrowing. See #575
- #576 Remove
Except
in favor of application-specificExceptionHandler
. See #578 - #577 Remove
Bindings
utility class in favor of direct implementations. See #579 - #580 Annotation support for test suite. See #581
- #582 Component pre- and post processors to replace
ComponentProcessor
andComponentModifier
. See #583 - #586 Replace processor storage with concurrent
CustomMultiMap
inHartshornApplicationContext
. See #589 - #588 Remove duplicated
prefixes
argument. See #590 - #592 Allow reflecting on
TypeContext
s and addisTypeContext
rule. See #593 - #594 Resolve invocation of default methods in service proxies. See #595
- #597 Add validated static invokers to
MethodContext
s. See #598 - #596 Allow modification of
ApplicationFactory
during test initialization. See #600 - #601 Allow modifying method invoker and access level. See #602
- #599 Validate that components are registered when requested. See #603
- #605 Add support for inline default values and collection specifications to
@Value
based configuration postprocessor. See #606 - #607 Resolve direct use of Jackson data formats. See #608
- #609 Resolve duplicate binding of overly specific packages when broader package is bound. See #610
- #611 Filter synthetic bridge methods when looking up methods in
TypeContext
s. See #612 - #613 Unify
Modifier
,LogLevelModifier
,MetaProviderModifier
, andDefaultModifiers
. See #614 - #615 Resolve
StackOverflowError
on circular dependencies and add support for private invokers. See #616 - #617 Add component-level proxy permission and global validated proxy processor. See #618
- #619 Add support for setter/method injection. See #620
- #553 QoL issues by @pumbas600 in #554
- #621 Do not overwrite redefined annotations in
TypeContext
annotation validation. See #626 - #627 Resolve factory bindings not respecting correct binding priorities. See #629
- #628 Expose declaring parent through executable element context. See #630
- #625 Allow obtaining annotated annotations on a given element. See #631
- #622 Disable automatic
KeyGen
activation. See #632 - #624 Provide binding
Key
instead ofTypeContext
to component processors. See #633 - RC Dependency check. See #634
- #635 Resolve
#equals
failing on native proxy objects. See #637 - #636 Recursively look for parameterized types in
TypeContext#contextsFromParameterizedType
. See #638 - #623 Phased proxy method callbacks. See #645
- #644 Restructure application factories and permit custom prefix context. See #646
- #643 Transform
@Binds
into utility component stereotype. See #647 - #584 Improve documentation on source classes. See #604
Full Changelog: 21.9...22.1
Release 0.4.8
Release revision 0.4.8
Changelog:
- Merge strictly bound core modules #445
- Generate module.pom artifacts instead of module-pom.xml #446
- Remove pre-packaged JavaDocs #447
- Subject permission API deprecation #448
- Fix minor issues #454
- Resolve usage of deprecated ObjectMapper configuration #455
- Rename ambiguous types #456
- Proxy-based implementation delegator for JpaRepository-based services #459
- Add scanPackages to
@ServiceActivator
#460 - Native QL and JPQL query integration #461
- Restructure Language definitions into separate contract #462
- Introduce delegate accessors with associated service modifiers, and allow low-level use of ProxyHandler #464
- Translation bundles and i18n API redesign #465
- Include
@Named
when constructing hierarchy Keys inside HartshornApplicationContext #469 - Resolve incorrect application/json content-type, will now resolve based on mapping format or write as text/plain #470
- Common parameter loader for shared and extensible parameter processing logic #474
- Deprecate Attribute and AttributeHolder for removal #475
- Implement service-based factory type provision #476
- Finalize Attribute and AttributeHolder deprecation #478
- JPA Pagination support #479
- Remove duplicate command method presence validation #482
- Resolve invalid log level WARN at CommandDefinitionContextImpl #483
- Add isArray and elementType methods to TypeContext #485
- Suppress continuous quality JAVA-W0243 on ternary operators #487
- Application factory to replace bootstrapping #488
- Automatic activation of component- processors and modifiers #491
- Binding priority overrides for
@Binds
and@Provider
#492