diff --git a/model-view-presenter/src/main/java/com/iluwatar/model/view/presenter/FileLoader.java b/model-view-presenter/src/main/java/com/iluwatar/model/view/presenter/FileLoader.java index c9b023925..01af677ae 100644 --- a/model-view-presenter/src/main/java/com/iluwatar/model/view/presenter/FileLoader.java +++ b/model-view-presenter/src/main/java/com/iluwatar/model/view/presenter/FileLoader.java @@ -48,8 +48,7 @@ public class FileLoader { * Loads the data of the file specified. */ public String loadData() { - try { - BufferedReader br = new BufferedReader(new FileReader(new File(this.fileName))); + try (BufferedReader br = new BufferedReader(new FileReader(new File(this.fileName)))) { StringBuilder sb = new StringBuilder(); String line; @@ -58,7 +57,6 @@ public class FileLoader { } this.loaded = true; - br.close(); return sb.toString(); } catch (Exception e) { diff --git a/queue-load-leveling/src/main/java/com/iluwatar/queue/load/leveling/ServiceExecutor.java b/queue-load-leveling/src/main/java/com/iluwatar/queue/load/leveling/ServiceExecutor.java index 63dbec69f..2b423ffaf 100644 --- a/queue-load-leveling/src/main/java/com/iluwatar/queue/load/leveling/ServiceExecutor.java +++ b/queue-load-leveling/src/main/java/com/iluwatar/queue/load/leveling/ServiceExecutor.java @@ -35,27 +35,27 @@ import org.slf4j.LoggerFactory; public class ServiceExecutor implements Runnable { private static final Logger LOGGER = LoggerFactory.getLogger(App.class); - + private final MessageQueue msgQueue; public ServiceExecutor(MessageQueue msgQueue) { this.msgQueue = msgQueue; } - + /** * The ServiceExecutor thread will retrieve each message and process it. */ public void run() { try { - while (true) { + while (!Thread.currentThread().isInterrupted()) { Message msg = msgQueue.retrieveMsg(); - + if (null != msg) { LOGGER.info(msg.toString() + " is served."); } else { LOGGER.info("Service Executor: Waiting for Messages to serve .. "); } - + Thread.sleep(1000); } } catch (InterruptedException ie) { diff --git a/service-layer/src/main/java/com/iluwatar/servicelayer/common/DaoBaseImpl.java b/service-layer/src/main/java/com/iluwatar/servicelayer/common/DaoBaseImpl.java index 70feb1a00..401c4170c 100644 --- a/service-layer/src/main/java/com/iluwatar/servicelayer/common/DaoBaseImpl.java +++ b/service-layer/src/main/java/com/iluwatar/servicelayer/common/DaoBaseImpl.java @@ -27,6 +27,7 @@ import java.util.List; import org.hibernate.Criteria; import org.hibernate.Session; +import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.criterion.Restrictions; @@ -45,13 +46,17 @@ public abstract class DaoBaseImpl implements Dao { protected Class persistentClass = (Class) ((ParameterizedType) getClass() .getGenericSuperclass()).getActualTypeArguments()[0]; - protected Session getSession() { - return HibernateUtil.getSessionFactory().openSession(); + /* + * Making this getSessionFactory() instead of getSession() so that it is the responsibility + * of the caller to open as well as close the session (prevents potential resource leak). + */ + protected SessionFactory getSessionFactory() { + return HibernateUtil.getSessionFactory(); } @Override public E find(Long id) { - Session session = getSession(); + Session session = getSessionFactory().openSession(); Transaction tx = null; E result = null; try { @@ -73,7 +78,7 @@ public abstract class DaoBaseImpl implements Dao { @Override public void persist(E entity) { - Session session = getSession(); + Session session = getSessionFactory().openSession(); Transaction tx = null; try { tx = session.beginTransaction(); @@ -91,7 +96,7 @@ public abstract class DaoBaseImpl implements Dao { @Override public E merge(E entity) { - Session session = getSession(); + Session session = getSessionFactory().openSession(); Transaction tx = null; E result = null; try { @@ -111,7 +116,7 @@ public abstract class DaoBaseImpl implements Dao { @Override public void delete(E entity) { - Session session = getSession(); + Session session = getSessionFactory().openSession(); Transaction tx = null; try { tx = session.beginTransaction(); @@ -129,7 +134,7 @@ public abstract class DaoBaseImpl implements Dao { @Override public List findAll() { - Session session = getSession(); + Session session = getSessionFactory().openSession(); Transaction tx = null; List result = null; try { diff --git a/service-layer/src/main/java/com/iluwatar/servicelayer/spell/SpellDaoImpl.java b/service-layer/src/main/java/com/iluwatar/servicelayer/spell/SpellDaoImpl.java index b280b1250..81b3b6189 100644 --- a/service-layer/src/main/java/com/iluwatar/servicelayer/spell/SpellDaoImpl.java +++ b/service-layer/src/main/java/com/iluwatar/servicelayer/spell/SpellDaoImpl.java @@ -38,7 +38,7 @@ public class SpellDaoImpl extends DaoBaseImpl implements SpellDao { @Override public Spell findByName(String name) { - Session session = getSession(); + Session session = getSessionFactory().openSession(); Transaction tx = null; Spell result = null; try { diff --git a/service-layer/src/main/java/com/iluwatar/servicelayer/spellbook/SpellbookDaoImpl.java b/service-layer/src/main/java/com/iluwatar/servicelayer/spellbook/SpellbookDaoImpl.java index 7724583ab..c7131b843 100644 --- a/service-layer/src/main/java/com/iluwatar/servicelayer/spellbook/SpellbookDaoImpl.java +++ b/service-layer/src/main/java/com/iluwatar/servicelayer/spellbook/SpellbookDaoImpl.java @@ -38,7 +38,7 @@ public class SpellbookDaoImpl extends DaoBaseImpl implements Spellboo @Override public Spellbook findByName(String name) { - Session session = getSession(); + Session session = getSessionFactory().openSession(); Transaction tx = null; Spellbook result = null; try { diff --git a/service-layer/src/main/java/com/iluwatar/servicelayer/wizard/WizardDaoImpl.java b/service-layer/src/main/java/com/iluwatar/servicelayer/wizard/WizardDaoImpl.java index 67a37e969..0014bf921 100644 --- a/service-layer/src/main/java/com/iluwatar/servicelayer/wizard/WizardDaoImpl.java +++ b/service-layer/src/main/java/com/iluwatar/servicelayer/wizard/WizardDaoImpl.java @@ -39,7 +39,7 @@ public class WizardDaoImpl extends DaoBaseImpl implements WizardDao { @Override public Wizard findByName(String name) { - Session session = getSession(); + Session session = getSessionFactory().openSession(); Transaction tx = null; Wizard result = null; try { diff --git a/tolerant-reader/src/main/java/com/iluwatar/tolerantreader/RainbowFishSerializer.java b/tolerant-reader/src/main/java/com/iluwatar/tolerantreader/RainbowFishSerializer.java index d0ad5d798..7445dec4d 100644 --- a/tolerant-reader/src/main/java/com/iluwatar/tolerantreader/RainbowFishSerializer.java +++ b/tolerant-reader/src/main/java/com/iluwatar/tolerantreader/RainbowFishSerializer.java @@ -52,11 +52,10 @@ public final class RainbowFishSerializer { map.put("age", String.format("%d", rainbowFish.getAge())); map.put("lengthMeters", String.format("%d", rainbowFish.getLengthMeters())); map.put("weightTons", String.format("%d", rainbowFish.getWeightTons())); - FileOutputStream fileOut = new FileOutputStream(filename); - ObjectOutputStream objOut = new ObjectOutputStream(fileOut); - objOut.writeObject(map); - objOut.close(); - fileOut.close(); + try (FileOutputStream fileOut = new FileOutputStream(filename); + ObjectOutputStream objOut = new ObjectOutputStream(fileOut)) { + objOut.writeObject(map); + } } /** @@ -71,23 +70,24 @@ public final class RainbowFishSerializer { map.put("angry", Boolean.toString(rainbowFish.getAngry())); map.put("hungry", Boolean.toString(rainbowFish.getHungry())); map.put("sleeping", Boolean.toString(rainbowFish.getSleeping())); - FileOutputStream fileOut = new FileOutputStream(filename); - ObjectOutputStream objOut = new ObjectOutputStream(fileOut); - objOut.writeObject(map); - objOut.close(); - fileOut.close(); + try (FileOutputStream fileOut = new FileOutputStream(filename); + ObjectOutputStream objOut = new ObjectOutputStream(fileOut)) { + objOut.writeObject(map); + } } /** * Read V1 RainbowFish from file */ public static RainbowFish readV1(String filename) throws IOException, ClassNotFoundException { - FileInputStream fileIn = new FileInputStream(filename); - ObjectInputStream objIn = new ObjectInputStream(fileIn); - Map map = (Map) objIn.readObject(); - objIn.close(); - fileIn.close(); - return new RainbowFish(map.get("name"), Integer.parseInt(map.get("age")), Integer.parseInt(map - .get("lengthMeters")), Integer.parseInt(map.get("weightTons"))); + Map map = null; + + try (FileInputStream fileIn = new FileInputStream(filename); + ObjectInputStream objIn = new ObjectInputStream(fileIn)) { + map = (Map) objIn.readObject(); + } + + return new RainbowFish(map.get("name"), Integer.parseInt(map.get("age")), Integer.parseInt(map.get("lengthMeters")), + Integer.parseInt(map.get("weightTons"))); } }