src/main/java/de/uapcore/lightpit/DatabaseFacade.java

changeset 38
cf85ef18f231
parent 34
824d4042c857
child 50
2a90d105edec
equal deleted inserted replaced
37:fecda0f466e6 38:cf85ef18f231
26 * POSSIBILITY OF SUCH DAMAGE. 26 * POSSIBILITY OF SUCH DAMAGE.
27 * 27 *
28 */ 28 */
29 package de.uapcore.lightpit; 29 package de.uapcore.lightpit;
30 30
31 import de.uapcore.lightpit.dao.DataAccessObjects;
32 import de.uapcore.lightpit.dao.postgres.PGDataAccessObjects;
33 import org.slf4j.Logger; 31 import org.slf4j.Logger;
34 import org.slf4j.LoggerFactory; 32 import org.slf4j.LoggerFactory;
35 33
36 import javax.naming.Context; 34 import javax.naming.Context;
37 import javax.naming.InitialContext; 35 import javax.naming.InitialContext;
89 */ 87 */
90 public static final String SC_ATTR_NAME = DatabaseFacade.class.getName(); 88 public static final String SC_ATTR_NAME = DatabaseFacade.class.getName();
91 89
92 private static final String DS_JNDI_NAME = "jdbc/lightpit/app"; 90 private static final String DS_JNDI_NAME = "jdbc/lightpit/app";
93 private DataSource dataSource; 91 private DataSource dataSource;
94 private DataAccessObjects dataAccessObjects;
95 92
96 /** 93 /**
97 * Returns the data source. 94 * Returns the data source.
98 * <p>
99 * The Optional returned should never be empty. However, if something goes
100 * wrong during initialization, the data source might be absent.
101 * Hence, users of this data source are forced to check the existence.
102 * 95 *
103 * @return a data source 96 * @return a data source
104 */ 97 */
105 public Optional<DataSource> getDataSource() { 98 public DataSource getDataSource() {
106 // TODO: this should not be an optional, if an empty optional is actually an exception 99 return dataSource;
107 return Optional.ofNullable(dataSource);
108 }
109
110 /**
111 * Returns the data access objects.
112 *
113 * @return an interface to obtain the data access objects
114 */
115 public DataAccessObjects getDataAccessObjects() {
116 return dataAccessObjects;
117 } 100 }
118 101
119 public Dialect getSQLDialect() { 102 public Dialect getSQLDialect() {
120 return dialect; 103 return dialect;
121 } 104 }
169 } catch (IllegalArgumentException ex) { 152 } catch (IllegalArgumentException ex) {
170 LOG.error("Unknown or unsupported database dialect {}. Defaulting to {}.", dbDialect, dialect); 153 LOG.error("Unknown or unsupported database dialect {}. Defaulting to {}.", dbDialect, dialect);
171 } 154 }
172 } 155 }
173 156
174 dataAccessObjects = createDataAccessObjects(dialect);
175
176 try { 157 try {
177 LOG.debug("Trying to access JNDI context {}...", contextName); 158 LOG.debug("Trying to access JNDI context {}...", contextName);
178 Context initialCtx = new InitialContext(); 159 Context initialCtx = new InitialContext();
179 Context ctx = (Context) initialCtx.lookup(contextName); 160 Context ctx = (Context) initialCtx.lookup(contextName);
180 161
189 170
190 sc.setAttribute(SC_ATTR_NAME, this); 171 sc.setAttribute(SC_ATTR_NAME, this);
191 LOG.info("Database facade injected into ServletContext."); 172 LOG.info("Database facade injected into ServletContext.");
192 } 173 }
193 174
194 private static DataAccessObjects createDataAccessObjects(Dialect dialect) {
195 switch (dialect) {
196 case Postgres:
197 return new PGDataAccessObjects();
198 default:
199 throw new AssertionError("Non-exhaustive switch - this is a bug.");
200 }
201 }
202
203 @Override 175 @Override
204 public void contextDestroyed(ServletContextEvent sce) { 176 public void contextDestroyed(ServletContextEvent sce) {
205 dataSource = null; 177 dataSource = null;
206 } 178 }
207 } 179 }

mercurial