Question

Je remarque des vitesses terribles en essayant d'utiliser CGLIB avec un filtre de rappel (sur des dizaines de milliers d'objets), mais je suis incapable de trouver des informations sur l'optimisation CGLIB.

Pour une interface recherche / liste, le système charge plusieurs propriétés d'une requête optimisée et peuplant l'arborescence de domaine avec ces propriétés. Pour toutes les autres propriétés, le chargement LazyLoader l'objet complet. L'idée est d'avoir les propriétés de base utilisées par la recherche / liste de chargement, tout en ne perdant pas les classes de modèle de domaine.

Exemple de base

String name = rst.getString(1);

Enhancer enhancer = new Enchancer();
enhancer.setSuperclass(Type.class);
enhancer.setCallbackFilter(new CallbackFilter(){
    public int method(Method method){
        if("getName".equals(method.getName()){
            return 1;
        }
        return 0;
    }
});
enhancer.setCallbacks(new Callback[]{
    new LazyLoader(){...}
    new FixedValueImpl(name);
});
return (Type)enhancer.create()
Était-ce utile?

La solution

Il semble que si je mets la CallbackFilter comme une variable d'instance au lieu d'une classe interne anonyme, la vitesse augmente.

private CallbackFilter callbackFilter = new CallbackFilter(){...};

...

private Type createType(ResultSet rst){
    String name = rst.getString(1);

    Enhancer enhancer = new Enchancer();
    enhancer.setSuperclass(Type.class);
    enhancer.setCallbackFilter(this.callbackFilter);
    enhancer.setCallbacks(new Callback[]{
        new LazyLoader(){...}
        new FixedValueImpl(name);
    });
    return (Type)enhancer.create()
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top