doanduyhai / Achilles

An advanced Java Object Mapper/Query DSL generator for Cassandra
http://achilles.archinnov.info
Apache License 2.0
241 stars 92 forks source link

initSession should use supplier instead #355

Closed rickdong closed 5 years ago

rickdong commented 5 years ago

in ArgumentExtractor#initSession, instead of eagerly providing the orElse value and left with a dangling open session if user choose to provide a session, the following code:

public static Session initSession(Cluster cluster, ConfigMap configurationMap) {
        LOGGER.trace("Extract or init Session from configuration map");

        return Optional.<Session>ofNullable(configurationMap.getTyped(NATIVE_SESSION))
                .orElse(initKeyspaceName(configurationMap)
                                .map(cluster::connect)
                                .orElseGet(cluster::connect)
                );
    }

should probably be changed to:

public static Session initSession(Cluster cluster, ConfigMap configurationMap) {
        LOGGER.trace("Extract or init Session from configuration map");

        return Optional.<Session>ofNullable(configurationMap.getTyped(NATIVE_SESSION))
                .orElse(()-> initKeyspaceName(configurationMap)
                                .map(cluster::connect)
                                .orElseGet(cluster::connect)
                );
    }
doanduyhai commented 5 years ago

Good idea, thanks for the tip!