package com.DX_57.SM_57; /* include default packages for Beans */ import java.io.Serializable; import javax.enterprise.context.SessionScoped; // or import javax.faces.bean.SessionScoped; import javax.inject.Named; /* include SQL Packages */ import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.HashMap; import javax.annotation.ManagedBean; import javax.annotation.PostConstruct; import javax.sql.DataSource; import javax.annotation.Resource; import javax.faces.bean.ViewScoped; import javax.faces.context.FacesContext; import javax.inject.Inject; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; // or import javax.faces.bean.ManagedBean; import org.glassfish.osgicdi.OSGiService; @ManagedBean("ApplicationController") @ViewScoped public class Application implements Serializable { /* This Hash Map will be used to store setting and value */ private HashMap settingsMap = null; public Application(){ } /* Call the Oracle JDBC Connection driver */ @Resource(name = "jdbc/Oracle") private DataSource ds; /* Hash Map * Send this hash map with the settings and values to the JSF page */ public HashMap getsettings(){ return settingsMap; } /* Get a Hash Map with settings and values. The table is genarated right * after the constructor is initialized. */ @PostConstruct public void initSettings() throws SQLException { settingsMap = new HashMap(); if(ds == null) { throw new SQLException("Can't get data source"); } /* Initialize a connection to Oracle */ Connection conn = ds.getConnection(); if(conn == null) { throw new SQLException("Can't get database connection"); } /* With SQL statement get all settings and values */ PreparedStatement ps = conn.prepareStatement("SELECT * from GLOBALSETTINGS"); try { //get data from database ResultSet result = ps.executeQuery(); while (result.next()) { /* Put the the data from Oracle into Hash Map */ settingsMap.put(result.getString("SettingName"), result.getString("SettingValue")); } } finally { ps.close(); conn.close(); } } /* JSF returns automatically the updated values into the HashMap */ /* Update Settings Values */ public void updateDBSettings() throws SQLException { String SQL_Statement = null; if (ds == null) throw new SQLException(); Connection conn = ds.getConnection(); if (conn == null) throw new SQLException(); try { conn.setAutoCommit(false); boolean committed = false; try { /* Insert the new settings values with one SQL statement */ SQL_Statement = "UPDATE GLOBALSETTINGS " + "SET \"SettingValue\" = " + "CASE " + "WHEN \"SettingName\" = 'SessionTTL' THEN ? " + "WHEN \"SettingName\" = 'MaxUsersActive' THEN ? " + "END " + "WHERE \"SettingName\" IN ('SessionTTL', 'MaxUsersActive')"; /* Execute the SQL statement */ PreparedStatement updateQuery = conn.prepareStatement(SQL_Statement); updateQuery.setString(1, settingsMap.get("SessionTTL")); updateQuery.setString(2, settingsMap.get("MaxUsersActive")); updateQuery.executeQuery(); conn.commit(); committed = true; } finally { if (!committed) conn.rollback(); } } finally { /* Release the resource after all SQL queries are executed */ conn.close(); } /* Refresh Hash Map * Get again settings from Oracle */ initSettings(); } }