Class CloseableResource<T>
java.lang.Object
org.apache.beam.runners.portability.CloseableResource<T>
- All Implemented Interfaces:
AutoCloseable
An
AutoCloseable
that wraps a resource that needs to be cleaned up but does not implement
AutoCloseable
itself.
Recipients of a CloseableResource
are in general responsible for cleanup. Ownership
can be transferred from one context to another via transfer()
. Transferring relinquishes
ownership from the original resource. This allows resources to be safely constructed and
transferred within a try-with-resources block. For example:
try (CloseableResource<Foo> resource = CloseableResource.of(...)) { // Do something
with resource. ... // Then transfer ownership to some consumer.
resourceConsumer(resource.transfer()); }
Not thread-safe.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic class
An exception that wraps errors thrown while a resource is being closed.static interface
A function that knows how to clean up after a resource. -
Method Summary
Modifier and TypeMethodDescriptionvoid
close()
Closes the underlying resource.get()
Gets the underlying resource.static <T> CloseableResource
<T> of
(T resource, CloseableResource.Closer<T> closer) Creates aCloseableResource
with the given resource and closer.transfer()
Returns a newCloseableResource
that owns the underlying resource and relinquishes ownership from thisCloseableResource
.
-
Method Details
-
of
Creates aCloseableResource
with the given resource and closer. -
get
Gets the underlying resource. -
transfer
Returns a newCloseableResource
that owns the underlying resource and relinquishes ownership from thisCloseableResource
.close()
on the original instance becomes a no-op. -
close
Closes the underlying resource. The closer will only be executed on the first call.- Specified by:
close
in interfaceAutoCloseable
- Throws:
CloseableResource.CloseException
- wrapping any exceptions thrown while closing
-