X-Git-Url: https://git.wpitchoune.net/gitweb/?p=pnews.git;a=blobdiff_plain;f=war%2Fsrc%2Fmain%2Fjava%2Fpnews%2Fservlet%2FArticleStore.java;h=b0f2e687cd526f23d8006a2674b907df82ed2738;hp=0b40cc3e2cbe81680527139de3c5d84aafb2219b;hb=bdbb917350f994d72d57881a0c057db3392a4733;hpb=c40db3e6a741e7353f6c15e58e6c4224b63fe630 diff --git a/war/src/main/java/pnews/servlet/ArticleStore.java b/war/src/main/java/pnews/servlet/ArticleStore.java index 0b40cc3..b0f2e68 100644 --- a/war/src/main/java/pnews/servlet/ArticleStore.java +++ b/war/src/main/java/pnews/servlet/ArticleStore.java @@ -1,22 +1,34 @@ package pnews.servlet; import java.lang.ref.WeakReference; +import java.util.ArrayList; import java.util.HashMap; +import java.util.logging.Logger; import pnews.Article; public class ArticleStore { public final static ArticleStore singleton = new ArticleStore(); private final HashMap> articles = new HashMap<>(); + private final static Logger LOG = Logger.getLogger(ArticleStore.class.getName()); public Article get(String link) { WeakReference
ref; + Article result; synchronized (articles) { ref = articles.get(link); - if (ref == null) + if (ref == null) { return null; - return ref.get(); + } + + result = ref.get(); + if (result == null) { + LOG.info("Article has been released from memory: " + link); + articles.remove(link); + } + + return result; } } @@ -28,9 +40,33 @@ public class ArticleStore { if (result == null) { result = factory.create(); articles.put(link, new WeakReference<>(result)); + LOG.info("Article has been added: " + result.link); } return result; } } + + public long size() { + synchronized (this) { + return articles.size(); + } + } + + public Article[] getArticles() { + ArrayList
result; + Article a; + + synchronized (articles) { + result = new ArrayList<>(articles.size()); + + for (WeakReference
r: articles.values()) { + a = r.get(); + if (a != null) + result.add(a); + } + + return result.toArray(new Article[] {}); + } + } }