- Updated dependencies
- Updated
testcontainers-seleniumto v2- Files are now recorded BY DEFAULT as
.mkv(was.mp4)
- Files are now recorded BY DEFAULT as
- Improve customizability of
BrowserTCIFactoryby introducingcreateDefaultRecordingContainer - Updated dependencies
jacoco- Improved logging and error handling
- Fix typo in BOM
- New module:
jacoco- Support recording Code Coverage files and extracting them from the corresponding containers
- See the documentation of the module for more details
- Deprecated
SeleniumRecordingExtension- Use
SeleniumRecorderandFileSystemFriendlyNameinstead
- Use
- Updated dependencies
EntityManagerController- Now always checks if the EntityManager is already closed
- This was changed because the Jakarta EE does not specify how an already closed EntityManager should behave
- for example Hibernate doesn't care when you call call close multiple times as it checks for that while EclipseLink does not and crashes
- This was changed because the Jakarta EE does not specify how an already closed EntityManager should behave
- Removed
closeEntityManagerOnCleanupWithoutCheck
- Now always checks if the EntityManager is already closed
- Updated dependencies
EntityManagerController- Make it possible to configure
closeEntityManagerOnCleanupWithoutCheck
- Make it possible to configure
- Fix doubled values for
ContainerMemory
- Fixated OIDC Server Mock version to latest minor (
1.2) to prevent possible future random test failures - Updated demo / integration tests framework
- Updated to Spring Boot 4.x
- Updated to Spring 7.x
- Updated to Hibernate 7.x
- Updated to Jakarta Persistence 3.2.0
db-jdbc- Deprecated
PersistenceConfigurationCompatusejakarta.persistence.PersistenceConfigurationinstead
- Deprecated
db-jdbc-spring-orm- Adopt and replace
MutablePersistenceUnitInfowithSpringPersistenceUnitInfo
- Adopt and replace
- Demo's are not fully working because the underlying framework is not available for Spring Boot 4.x yet
- Updated dependencies
- Selenium
- Hide download popup by default in Firefox so that UI is not blocked
- Use default framerate (15FPS)
- Updated dependencies
- Updated dependencies
- Updated dependencies
- Updated dependencies
- Update to Testcontainers v2
- Updated dependencies
- Updated dependencies
selenium- Moved warmUp code to correct factory
- Warmup will try to download/pre-pull the recording container image if required (as long as
recordingMode != SKIP) - Behavior can be customized with method
withPullVideoRecordingContainerOnWarmUp
LazyNetwork: Use explicitly definedExecutorService- Updated dependencies
- Readd missing whitespace in
TCITracer
- ExecutorService creation is now controlled centrally (
ExecutorServiceCreator)- All created ExecutorServices now use
VirtualThreads on Java 21+
- All created ExecutorServices now use
- Use explicitly defined
ExecutorService- wherever possible- Context:
CompletableFuture#runAsync,CompletableFuture#supplyAsyncandparallelStreamuse Java's common pool.
However calling these methods is usually done (in TCI) for I/O tasks.
This might exhaust the common pool thus negatively impacting performance.
It was therefore decided to use dedicated pools instead. - Stored in
TCIExecutorServiceHolder - Utilizes a
CachedThreadPool(for Java<21)- On Java21+ it uses
VirtualThreads for better scaling
- On Java21+ it uses
- Context:
- Other minor improvements
- Add missing timeout when pulling
SeleniumRecordingContainer - Removed uses of
String.replaceAll("<Regex>", "")and compiled pattern instead only once
- Add missing timeout when pulling
- Updated dependencies
db-jdbc-spring-*- Added
DynamicPersistenceClassFinder- Contains pre-defined methods for adding entities like
withSearchForPersistenceClasses - Supersedes
DynamicClassFinder
- Contains pre-defined methods for adding entities like
- JAR file urls are no longer added automatically for scanning
- It's recommended to use
DynamicPersistenceClassFinderas this is roughly 5-10x faster compared to Hibernate's JAR url scanning - If you still require the default scanning use
.withAddJarFileUrls(true)
- It's recommended to use
- Added
- Updated dependencies
- Fix
AnnotatedClassFinderreturning the annotation and not the annotated class #373 - Removed deprecated
CachedEntityAnnotatedClassNameFinder
- Use timeout in
SafeNamedContainerStarter#tryCleanupContainerAfterStartFailto prevent app/thread hang #370
- Improved overall error handling and logging when unexpected errors occur during the start of infra
- Improved retrying in
BaseTCIFactory. Now unexpected problems that require a retry are logged/reported.BaseTCIFactory#setGetNewTryCountwas renamed tosetGetNewTryCount
- Added timeout for
PreStartableTCIFactory#makeExposedPortsFix- defaults to
90s
- defaults to
WaitableJDBCContainerincrease default timeout (overall timeout was30s, now at least60s)- This also now scales with the
cpuSlownessFactor
- This also now scales with the
- Log when a commited image is being snapshoted and report lock changes
- Improved retrying in
- Updated dependencies
- Fixed random "recursive update during ServiceLoading" exception #342
oidc-server-mock- Improved extensibility by creating abstract base classes
- Modularized
db-jdbc-ormintodb-jdbc,db-jdbc-spring-ormanddb-jdbc-spring-orm-hibernate#330- Packages might be slightly different
- In case of doubt migrate to
db-jdbc-spring-orm-hibernate
- Deprecated
CachedEntityAnnotatedClassNameFinderuseDynamicClassFinderinstead
oidc-server-mock- Split
addUserinto better customizable methods
- Split
oidc-server-mock- Make it easier to define extend from
OIDCTCIFactory
- Make it easier to define extend from
- Updated
org.springframeworkto latest version
- Use
ConcurrentHashMapinstead ofCollections.synchronizedMap(new HashMap<>())to preventConcurrentModificationin recursivecomputeIfAbsentcalls
- Improve default leak detection stop timeout
- Leak-Detection: Automatically wait until infra is stopped #308
- This should no longer require you to manually implement a
LeakDetectionAsyncReaperandREAP_CFS
- This should no longer require you to manually implement a
- Made it possible to configure default leak-detection with environment variables and properties
- Updated dependencies
- Selenium (Docker) 4.34+: Correctly detect and replace cdp/bidiUrl (was
127.0.0.1, nowlocalhost) - Updated dependencies
CommitedImageSnapshotManagerwaitForFirstSnapshot- Waits for the first snapshot to be created
- Significantly reduces resource usage and prevents bottlenecks in most use cases
- Enabled by default
commitedImagePrefix- Let's you control the prefix of the commited/snapshotted image
- Default value:
commited-cache
- Minor performance improvements
- Made some constants public
- Should fix that the bom is not being deployed (likely central-publishing-maven-plugin bug)
- Fix bom using incorrect groupId
- Various fixes regarding the release workflow
Warning
This release contains breaking changes
- ⚠ Renamed
tci-basetotci - ⚠ Moved maven coordinates
software.xdev:tci-basetosoftware.xdev.tci:base - Added common modules, like selenium, db-jdbc-orm, mockserver, ... #208
- Updated demo accordingly
- Added
EnvironmentPerformancewhich currently trackscpuSlownessFactor - Refactoring and code cleanup
- [PreStart] Make it possible to "snapshot" containers and use these snapshots to speed up subsequent containers
- Recommended for containers that highly depend on storage (e.g. databases)
- Example: MariaDB startup time with database migration
- Without snapshot: ~10s
- With snapshot: ~5s (~50% faster)
- Example: MariaDB startup time with database migration
- Implementations:
docker container commit- Only snapshots storage - no in-memory data, processes, etc.
- Volumes are not snapshoted due to limitations in Docker
- Other implementation like CRIU may be available in the future once Docker adds support for them
- Recommended for containers that highly depend on storage (e.g. databases)
- Migrated deployment to Sonatype Maven Central Portal #155
- Update docs
- Fix
ContainerMemory#M8Gbeing the same asContainerMemory#M4G
- Added
ContainerMemoryutility class as it's needed in most projects - Updated dependencies
- Port fixation
- can now be disabled
- now also respects non-TCP ports (e.g. UDP)
- acquires free ports in batches (previously each port was acquired individually)
- [Demo] Explicit database dialect is no longer required for connection-less start
- Updated dependencies
- [Demo] Use SSE to minimize code
- Updated dependencies
- Fix
ConcurrentModificationExceptiondue to missing synchronized blocks - Don't warmUp already warmed up factories again on coordinator level
- Correctly register factories to
GlobalPreStartCoordinator - Document
warmUp - Updated dependencies
- Fix unlikely modification error "Accept exceeded fixed size of ..." during warm-up
- Updated dependencies
- Make it possible to disable agents
- Improved D&D (docs and demo)
Initial release