{"id":60,"date":"2012-02-24T14:15:57","date_gmt":"2012-02-24T13:15:57","guid":{"rendered":"http:\/\/www.flamingpenguin.co.uk\/blog\/?p=60"},"modified":"2012-02-24T14:15:57","modified_gmt":"2012-02-24T13:15:57","slug":"apache-vfs-files-cache-implemented-using-guava-cachebuilder","status":"publish","type":"post","link":"https:\/\/www.flamingpenguin.co.uk\/blog\/2012\/02\/24\/apache-vfs-files-cache-implemented-using-guava-cachebuilder\/","title":{"rendered":"Apache VFS Files Cache implemented using Guava CacheBuilder"},"content":{"rendered":"<pre lang=\"java\">\r\nimport com.google.common.cache.Cache;\r\nimport com.google.common.cache.CacheBuilder;\r\nimport com.google.common.cache.CacheLoader;\r\nimport com.google.common.cache.LoadingCache;\r\n\r\nimport java.util.concurrent.TimeUnit;\r\n\r\nimport org.apache.commons.vfs2.FileName;\r\nimport org.apache.commons.vfs2.FileObject;\r\nimport org.apache.commons.vfs2.FileSystem;\r\nimport org.apache.commons.vfs2.cache.AbstractFilesCache;\r\n\r\nclass GuavaFilesCache extends AbstractFilesCache\r\n{\r\n   static class CacheOfFilesystem\r\n   {\r\n      private final Cache<FileName, FileObject> files = CacheBuilder.newBuilder()\r\n               .concurrencyLevel(4)\r\n               .maximumSize(10000)\r\n               .expireAfterWrite(10, TimeUnit.MINUTES)\r\n               .build();\r\n\r\n      public FileObject getFile(final FileName name)\r\n      {\r\n         return files.getIfPresent(name);\r\n      }\r\n\r\n      public void putFile(final FileObject file)\r\n      {\r\n         files.put(file.getName(), file);\r\n      }\r\n\r\n      public boolean putFileIfAbsent(final FileObject file)\r\n      {\r\n         return files.asMap().putIfAbsent(file.getName(), file) == null;\r\n      }\r\n\r\n      public void removeFile(final FileName name)\r\n      {\r\n         files.invalidate(name);\r\n      }\r\n   }\r\n\r\n   private final LoadingCache<FileSystem, CacheOfFilesystem> filesystems = CacheBuilder.newBuilder()\r\n         .concurrencyLevel(4)\r\n         .maximumSize(10000)\r\n         .expireAfterWrite(10, TimeUnit.MINUTES)\r\n         .build(new CacheLoader<FileSystem, CacheOfFilesystem>(){\r\n            @Override\r\n            public CacheOfFilesystem load(@SuppressWarnings(\"unused\") final FileSystem key) throws Exception\r\n            {\r\n               return new CacheOfFilesystem();\r\n            }});\r\n\r\n   @Override\r\n   public void putFile(final FileObject file)\r\n   {\r\n      filesystems.getUnchecked(file.getFileSystem()).putFile(file);\r\n   }\r\n\r\n   @Override\r\n   public boolean putFileIfAbsent(final FileObject file)\r\n   {\r\n      return filesystems.getUnchecked(file.getFileSystem()).putFileIfAbsent(file);\r\n   }\r\n\r\n   @Override\r\n   public FileObject getFile(final FileSystem filesystem, final FileName name)\r\n   {\r\n      return filesystems.getUnchecked(filesystem).getFile(name);\r\n   }\r\n\r\n   @Override\r\n   public void clear(final FileSystem filesystem)\r\n   {\r\n      filesystems.invalidate(filesystem);\r\n   }\r\n\r\n   @Override\r\n   public void removeFile(final FileSystem filesystem, final FileName name)\r\n   {\r\n      filesystems.getUnchecked(filesystem).removeFile(name);\r\n   }\r\n}\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; import java.util.concurrent.TimeUnit; import org.apache.commons.vfs2.FileName; import org.apache.commons.vfs2.FileObject; import org.apache.commons.vfs2.FileSystem; import org.apache.commons.vfs2.cache.AbstractFilesCache; class GuavaFilesCache extends AbstractFilesCache { static class CacheOfFilesystem { private final Cache files = CacheBuilder.newBuilder() .concurrencyLevel(4) .maximumSize(10000) .expireAfterWrite(10, TimeUnit.MINUTES) .build(); public FileObject &hellip; <a href=\"https:\/\/www.flamingpenguin.co.uk\/blog\/2012\/02\/24\/apache-vfs-files-cache-implemented-using-guava-cachebuilder\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[],"class_list":["post-60","post","type-post","status-publish","format-standard","hentry","category-java"],"_links":{"self":[{"href":"https:\/\/www.flamingpenguin.co.uk\/blog\/wp-json\/wp\/v2\/posts\/60","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.flamingpenguin.co.uk\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.flamingpenguin.co.uk\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.flamingpenguin.co.uk\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.flamingpenguin.co.uk\/blog\/wp-json\/wp\/v2\/comments?post=60"}],"version-history":[{"count":0,"href":"https:\/\/www.flamingpenguin.co.uk\/blog\/wp-json\/wp\/v2\/posts\/60\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.flamingpenguin.co.uk\/blog\/wp-json\/wp\/v2\/media?parent=60"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.flamingpenguin.co.uk\/blog\/wp-json\/wp\/v2\/categories?post=60"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.flamingpenguin.co.uk\/blog\/wp-json\/wp\/v2\/tags?post=60"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}