La Mise En Cache Du Jeu De Résultats

Son plus comme subjective de la question, Le principal objectif de la question est de mettre en Cache java.sql.Jeu de résultats. Mais je sais que c'est pas de mécanisme préféré car il est étroitement associé à la Connexion, et les données peuvent être vidé lorsque la connexion est fermée. Pour résoudre ce problème, je suis en utilisant CachedRowSet. L'instance de CachedRowSet sera mis en cache à l'aide de tiers outil de cache, ce qui m'aidera à réduire db appels.

Extrait de Code de mon application est donnée ci-dessous. La méthode executeQuery(String) est mis en œuvre dans une classe abstraite dont toutes les sous-classes à utiliser pour exécuter la requête. Il pourrait y avoir à la clientèle sous-classes ainsi l'utilisation de cette méthode pour récupérer des données de notre système.

public final ResultSet executeQuery(String query){
        try {
        //return data if it is available in cache, else execute and store in cache
            CachedRowSet cachedRowSet=getDataFromCache(query);
            if(cachedRowSet!=null) {
                return cachedRowSet;   
            }
            PreparedStatement statement=getStatment();
            ResultSet rs= statement.executeQuery(query);
            CachedRowSet cachedRowSet=new CachedRowSetImpl();
            cachedRowSet.populate(rs);
                    cachedData(cachedRowSet);
            return cachedRowSet;
        } catch (Exception e) {
            return null;
        }
    }

Maintenant, je suis un peu confus avec les points ci-dessous

  1. Au lieu de l'interface ResultSet, je reviendrai instance de CachedResultSet. Serait-ce exact de remplacement pour jeu de résultats. JAR du pilote,DB classes peuvent être différentes à travers l'environnement du client. Client d'écrire des classes personnalisées et d'attendre d'un jeu de résultats de la classe Abstraite. Serait-ce la cause de tout problème? Quelque chose comme ci-dessous

    public class CustomerXX s'étend BaseClass {

    public void process(String query){
    
        ResultSet rs = executeQuery(query);
    
        //process rs to fetch data
    
    }

    }

  2. De risque impliqués dans ce genre d'opération( mise en Cache CachedRowSet, de la validité des données)
  3. Performance de la création de CachedRowSet
  4. Compatibilité avec tous les ResultSet opérations ( ResultSet.getString(), ResultSet.obtenir..()). Si, à tout Conducteur d'attendre/produit différents sous-classe de ResultSet ( Dire jdbcResultSet,BaseResultSet, etc)

J'ai même genre de beaucoup d'autres question est de mon esprit, je suis juste écrit quelques-uns d'entre eux que je me sens valide et a une plus grande priorité.

Pas sûr que ma question est très vague, n'ont assez de clarté de mes besoins.

Les idées, les pensées, les suggestions sont très appréciés, et un grand merci à l'avance

Si le client attend ResultSet, et CachedRowSet s'étend/implémente ResultSet, le client sera heureux d'accepter les CachedRowSet

OriginalL'auteur Satheesh Cheveri | 2012-10-21