-
Notifications
You must be signed in to change notification settings - Fork 1.5k
[#TODO] connection and pool improvements #1657
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
[#TODO] connection and pool improvements #1657
Conversation
… resource management
…ence activemq-pool tests use default broker name causing BrokerRegistry collisions Missing waitUntilStopped() after broker.stop() in tests
…ent and prevent task execution on closed connections
|
I need to think through impacts of making PooledConnectionFactory AutoCloseable. It usually is more of an init/destroy or start/stop lifecycle since it is long lived for the lifetime of the JVM. Adding AutoCloseable may lead to a lot of users getting WARN from IDE |
|
When using the resource adapter inside an app server for example (Apache TomEE), the connection pool might be created and destroyed multiple times without restart the entire server (deploy / undeploy). It delegates to stop(). For tests it's convenient to avoid leaking a connection factory from one test to the other or having to cope with try/catch. It's not the end of the world. I can revert that and rework all the tests. I don't think it harms though. |
…EvictsFromPoolTest
|
ok to merge @mattrpav |
|
@cshannon thoughts on adding AutoCloseable to PooledConnectionFactory in a patch release? I think this will make IDEs bark at users' existing code and create false negatives. Most things today (Camel routes, etc) use start()/stop() and not a try-with-resources. edit: Another option would be to create a sub-class (ie AutoPooledConnectionFactory) that extends the existing class and adds only the close() method. |
I guess it could cause some warnings to be thrown etc. in an IDE but it shouldn't break anyone's code or have any real other effects so I don't really think it's a big deal to add it. It also wouldn't hurt to just add it in 6.3.0 (ie not backport to a patch release). I guess it depends on how useful it is to add it for fixing tests and backports. I don't really think we need a subclass because adding the interface on the existing class won't actually cause any issues. |
|
It's backward compatible and won't break for sure. Let me know what you prefer. |
I would prefer to keep it as it is backwards compatible and provides a lot of benefits and there is no risk of breaking anything. Adding another subclass doesn't make sense to me as someone would now have to know to use it. |
|
I think we could consider |
|
Hear my out on this point though-- AutoCloseable isn't just another interface tagged to a class. Static code scanners and bug finders look for code patterns to and generate reports that drive approval for pull requests. While not as impactful as 'Serializable' it is in this category of more 'special' interfaces. The standard/default use case for PooledConnectionFactory is to not use a try-with-resources. Feels like adding this is for the test use case vs the primary coded use case. Feels like if we add AutoCloseable we'll make a worse Developer Experience for the standard use case. |
Thinking about it more that makes sense as it's a pooled factory so users really wouldn't ever be closing it immediately with try-with-resources. I can't really think of a use case where you'd use a pooled factory and immediately close it with try-with-resources as if you were going to do that you'd just use a normal connection. For the analysis part I was mostly thinking of it from an IDE issue (which isn't that big of a deal but a little annoying) but the static analysis issue of builds breaking with things like spot bugs is certainly a problem and would produce annoying false negatives. I guess based on that we should leave it off and go back to try/finally. I'm not really in favor of a subclass unless there is a real use case, or another option is we just add a subclass only in the testing package for unit tests because it doesn't seem beneficial to add autocloseable if there is no use case for a real application. |
…on and improve resource management in tests
|
I removed the AutoClosable if that's the consensus. |

No description provided.