------------------------------------------------------------------------
BUILD SUCCESS
------------------------------------------------------------------------
Total time: 2.000 s
Finished at: 2024-09-22T19:51:43+10:00
------------------------------------------------------------------------
Deploying on Apache Tomcat or TomEE
profile mode: false
debug mode: true
force redeploy: true
Checking data source definitions for missing JDBC drivers...
Stopping Tomcat process...
Waiting for Tomcat...
Stopping of Tomcat failed.
Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.3:war (default-war)
You need to remove the type parameter R from Resource, because you're not using it anywhere (except in the self-referential type bound on R itself). You must leave it on your Manager class, because you actually use it there.
Don't use integers for IDs.
Don't expose fields. Sub-classes may access private fields though protected accessors.
What Java version are you on?
Don't do database stuff from constructors. Constructors must be lightweight. Let factory methods retrieve properties from a database and make the constructor accept the properties you want to set.
Instead of returning defensive copies from methods, return unmodifiable views
What is a TTException?
Return an Optional from methods instead of null
Use upper type bounds when accepting a collection from which to retrieve elements.
Thing's generic type parameter T is unused. Remove it.
You have public and protected members in a package private class.
Your constructors are redundant.
ConcreteThingManager's name can be shortened to Manager, because ConcreteThing already provides a separate namespace for it.
ConcreteThingManager's class header doesn't do what you think it does. Instead of using the class ConcreteThing, you introduced a new type variable named ConcreteThing.
Just using the word singleton should send shivers up your spine