HI Ignasi,
Thanks for your reply.
Ionel
On 02/15/2017 03:30 PM, Ignasi Barrera wrote:
You should try to keep the context open as long as possible, and reuse it when
needed.
A context itself does not hold any connection to external services. It just provides the container for the IoC framework used in jclouds
(Guice), and the different ExecutorService instances jclouds uses to perform async oeprations. creating the context creates all those
resourecs, and closing it releases them all, so you'd better open the context (it is meant to be thread-safe), and leave it open as long
as it makes sense, and try to reuse it where possible.
On 15 February 2017 at 15:23, GARDAIS Ionel <ionel.gard...@tech-advantage.com
<mailto:ionel.gard...@tech-advantage.com>> wrote:
Hi,
We are using JClouds on a server-side application.
That is, it is supposed to be long-lived, compared to a end-user
application that could be closed after several minutes/hours of use.
public byte[] getFile(String basePath, String containerName, String
blobPath) {
log.debug("load File in basePath: {}, containerName: {},
blobPath:{}", basePath, containerName, basePath);
Properties properties = new java.util.Properties();
properties.setProperty(FilesystemConstants.PROPERTY_BASEDIR, basePath);
BlobStoreContext context =
ContextBuilder.newBuilder("filesystem").overrides(properties)
.buildView(BlobStoreContext.class);
BlobStore blobStore = context.getBlobStore();
byte[] bFile = new byte[0];
Blob blob = blobStore.getBlob(containerName, blobPath);
if (null != blob) {
log.debug("Blob headers : {}", blob.getAllHeaders());
log.debug("Blob metadata : {}", blob.getMetadata());
try {
bFile = IOUtils.toByteArray(blob.getPayload().openStream());
} catch (IOException e) {
log.warn("Error reading file to input stream.", e);
}
} else {
log.warn("Blob at {}/{} does not exist.", containerName,
blobPath);
}
context.close();
return bFile;
}
The base directory is global for the whole application.
I wonder if the context and the blobstore should then be stored in a
singleton a retrieved when needed, instead of being instantiated
every time ?
(thus saving few milliseconds of works).
How long a context should remain open ?
How often should it be closed ?
Also, when using putBlob(), is the payload flushed directly or when the
context is closed ?
Thanks,
Ionel
--
TECH'advantage SA - 1 rue Isabey 92500 RUEIL MALMAISON
Capital EUR 219 300,00 - RCS Nanterre B 408 832 301 - TVA FR 09 408 832
301 00027
--
Ionel GARDAIS
Tech'Advantage CIO - IT Team manager
--
TECH'advantage SA - 1 rue Isabey 92500 RUEIL MALMAISON
Capital EUR 219 300,00 - RCS Nanterre B 408 832 301 - TVA FR 09 408 832 301
00027