import java.util.Hashtable; import java.sql.DriverManager; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class GlobalValues implements java.io.Serializable { private static GlobalValues self = null; public static synchronized GlobalValues getRef() { if( self == null ) { self = new GlobalValues(); } return( self ); } private Hashtable cache; private GlobalValues() { cache = new Hashtable( 15, 5 ); // load your JDBC driver } public synchronized String get( String name ) { Value value = (Value) cache.get( name ); if( ( value == null ) || ( value.hasExpired() ) ) { value = load( name ); cache.put( name, value ); } return( value.getValue() ); } private Value load( String name ) { Value value = null; try { Connection conn = DriverManager.getConnection( "your database" ); String sql = "SELECT VALUE, EXPIRE FROM GLOBAL_VALUES WHERE NAME = '?'"; PreparedStatement prep = conn.prepareStatement( sql ); prep.setString( 1, name ); ResultSet rset = prep.executeQuery(); if( rset.next() ) { String val = rset.getString( "VALUE" ); long exp = rset.getInt( "EXPIRE" ); value = new Value( val, exp ); } rset.close(); prep.close(); conn.close(); } catch( SQLException e ) { } return( value ); } class Value { private long time; private String value; private long expire; Value( String value, long expire ) { this.value = value; this.expire = expire; time = System.currentTimeMillis(); } String getValue() { return value; } boolean hasExpired() { if( expire != 0 ) { if( ( System.currentTimeMillis() - time ) > expire ) { return true; } } return false; } } }