Creato da pastuweb.com
Share My Page
My Social Accounts
Account FaceBook Account LinkedIn Account Twitter Account Google Plus Account Git Hub

Questa classe Java è particolarmente utile nel caso in cui si lavorasse su DIVERSI AMBIENTI e volessimo  avere qualcosa di comune. Esempio di ambienti:

  • WEB SERVER Tomcat di Sviluppo
  • WEB SERVER Tomcat di Test
  • WEB SERVER Tomcat di Esercizio

Se volessimo passare all'interno dell'applicazione Java un certo valore che però cambia a seconda del server utilizzato....Come fare?

soluzione: attraverso un file properties i cui valori delle singole chiavi sono diversi  MA le CHIAVI e il PATH sono UGUALI per tutti e TRE gli AMBIENTI.

Esempio path del file properties: TOMCAT_HOME/server/conf/customParametersServer.properties

Dove TOMCAT_HOME è una variabile di ambiente.

 

Esempio di codice customParametersServer.properties del WEB SERVER Tomcat di Sviluppo

server.name=tomcat-sviluppo.it

chiave.server=chiavesviluppo

 

Qui sotto viene mostrata la classe Java da inserire all'interno del package "javautility.util":

package javautility.utility;
 
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.StringTokenizer;
 
import org.apache.log4j.Logger;
 
public class Config {
 
private static Logger log = Logger.getLogger(Config.class);
private static Properties m_cfg = null;
private static boolean expansion = true;
 
 
/* CUSTOMIZZABILE */
public static final String SERVER_NAME = "server.name";
public static final String CHIAVE_SERVER  = "chiave.server";
/* fine CUSTOMIZZABILE */
 
private static final String startTag = "${";
private static final String endTag = "}";
 
/*PIU' IMPORTANTE*/
private static synchronized void configInit() {
String propsFileName = null;
try {
String tomcatHome = System.getenv("TOMCAT_HOME"); //accede alla variabile d'ambiente "TOMCAT_HOME"
 
//path fisico del file .properties (COMUNE a TUTTI GLI AMBIENTI)
propsFileName = tomcatHome+ "/server/conf/customParametersServer.properties"; 
log.info("loading propsFileName [" + propsFileName + "]");
Config.load(new FileInputStream(propsFileName));
} catch (Exception ex) {
String msg = "Errore di caricamento dei file di properties [" + propsFileName + "]";
log.error(msg, ex);
}
}
/*fine PIU' IMPORTANTE*/
 
private static String expand(String in) {
if (in == null)
return null;
StringBuffer out = new StringBuffer();
int index = 0;
int i = 0;
String key = null;
while ((index = in.indexOf(startTag, i)) > -1) {
key = in.substring(index + 2, in.indexOf(endTag, index + 3));
out.append(in.substring(i, index));
String val = getProp(key);
if (val != null) {
// be careful here
out.append(expand(val));
} else {
out.append(startTag).append(key).append(endTag);
}
i = index + 3 + key.length();
}
return out.append(in.substring(i)).toString();
}
 
 
private static String expand(String in, Properties props) {
if (in == null)
return null;
StringBuffer out = new StringBuffer();
int index = 0;
int i = 0;
String key = null;
while ((index = in.indexOf(startTag, i)) > -1) {
key = in.substring(index + 2, in.indexOf(endTag, index + 3));
out.append(in.substring(i, index));
String val = getProp(key, props);
if (val != null) {
// be careful here
out.append(expand(val, props));
} else {
out.append(startTag).append(key).append(endTag);
}
i = index + 3 + key.length();
}
return out.append(in.substring(i)).toString();
}
 
 
protected static void expandAll(Properties p) {
for (Enumeration en = p.keys(); en.hasMoreElements();) {
String k = (String) en.nextElement();
Object v = p.get(k);
if (v instanceof String) {
String nv = expand((String) v);
p.put(k, nv);
}
if (v instanceof Properties) {
expandAll((Properties) v);
}
}
}
 
 
public static boolean getBoolean(String prop) {
boolean result = false;
result = getProp(prop).equalsIgnoreCase("true");
return result;
}
 
 
public static char getChar(String prop) {
char result = '-';
 
try {
result = getProp(prop).charAt(0);
} catch (Exception ex) {
String msg = "Property [" + prop + "] charAt(0) error!";
log.error(msg, ex);
}
 
return result;
}
 
 
public static int getInt(String prop) {
int requestedItem = 0;
 
try {
requestedItem = Integer.parseInt(getProp(prop));
} catch (NumberFormatException ex) {
String msg = "Property [" + prop + "] is not a number!";
log.error(msg, ex);
}
 
return requestedItem;
 
}
 
 
public static long getLong(String prop) {
long requestedItem = 0;
 
try {
requestedItem = Long.parseLong(getProp(prop));
} catch (NumberFormatException ex) {
String msg = "Property [" + prop + "] is not a number!";
log.error(msg, ex);
}
 
return requestedItem;
 
}
 
 
/**
* @param propName
*            identifica la chiave con cui ricercare la properties nel file
* @return ritorna il valore della properties ricercata come String
*/
/*PIU' IMPORTANTE*/
public static String getProp(String propName) {
String propValue;
 
if (m_cfg == null) {
configInit();
}
 
if ((propValue = m_cfg.getProperty(propName)) == null) {
log.warn("Configuration item [" + propName + "] missing!");
}
 
if (isExpansionEnabled()) {
propValue = expand(propValue);
}
 
log.debug("returning propName [" + propName + "] propValue [" + propValue + "]");
return propValue;
}
/*fine PIU' IMPORTANTE*/
 
 
public static String getProp(String propName, Properties customProps) {
String propValue;
 
if (m_cfg == null) {
configInit();
}
 
customProps.putAll(m_cfg);
if ((propValue = customProps.getProperty(propName)) == null) {
log.warn("Configuration item [" + propName + "] missing!");
}
 
if (isExpansionEnabled()) {
propValue = expand(propValue, customProps);
}
 
log.debug("returning propName [" + propName + "] propValue [" + propValue + "]");
return propValue;
}
 
public static Properties getPropertiesObj() {
if (m_cfg == null) {
log.warn("Properties object null!");
}
 
return m_cfg;
}
 
/**
* @param prop
*            identifica la chiave con cui ricercare la properties nel file
* @return ritorna la lista di quelle properties configurate come una lista
*         separata da |
*/
public static List<String> getProps(String prop) {
String requestedItem;
List<String> result = new ArrayList<String>();
 
try {
requestedItem = getProp(prop);
StringTokenizer st = new StringTokenizer(requestedItem, "|");
while (st.hasMoreElements()) {
String elem = st.nextToken();
result.add(elem);
}
} catch (Exception ex) {
String msg = "Property [" + prop + "] error!";
log.error(msg, ex);
}
 
return result;
 
}
 
 
/**
* @param keyList
*            Stringa che identifica la lista di proprieta' che sranno
*            chiave della mappa
* @param valueList
*            Stringa che identifica la lista di proprieta' che sranno
*            valori della mappa
* @return result Ritorna la mappa delle proprieta' associando i campi desc
*         e value presenti nel file di properties
*/
 
public static Map<String, String> getPropsMap(String keyList, String valueList) {
Map<String, String> result = new HashMap<String, String>();
List requestedKey;
List requestedValue;
int i;
 
requestedKey = getProps(keyList);
requestedValue = getProps(valueList);
 
if (requestedKey.size() == requestedValue.size()) {
for (i = 0; i < requestedKey.size(); i++) {
result.put((String) requestedKey.get(i), (String) requestedValue.get(i));
}
 
return result;
} else {
return result;
}
}
 
 
public static boolean isExpansionEnabled() {
return expansion;
}
 
/**
* @param InputStream
*            da caricare
* @throws Exception
*/
private static synchronized void load(InputStream is) throws Exception {
try {
m_cfg = new Properties();
m_cfg.load(is);
} catch (Exception ex) {
String msg = "Error loading properties!";
log.error(msg, ex);
}
}
 
}
 
Poi per richiamare il valore della chiave richiesta usare:
In una JSP:
<%@page import="javautility.utility.Config" %>
....
Nome del Server: <%=Config.getProp(Config.SERVER_NAME)%>
 
In una Servlet:
import javautility.utility.Config;
....
Config.getProp(Config.SERVER_NAME);
Average (1 Vote)
The average rating is 5.0 stars out of 5.