package de.jpaw.bonaparte.core; import java.io.InputStream; import java.util.Properties; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** Specifies the backreferencing strategy for some serializers. * The possible values are * <li>NONE - do not check for recurring objects (will destroy identities) * <li>BY_REFERENCE - check for recurring objects using the object reference identity (leaves identities untouched) * <li>BY_CONTENTS - check for recurring objects using object equality (possibly creates new identities) * It depends on the data, which approach is the fastest. In any case, the serialized size is smallest for BY_CONTENTS, followed by BY_REFERENCE. * */ public enum ObjectReuseStrategy { NONE, BY_REFERENCE, BY_CONTENTS; private static final Logger LOGGER = LoggerFactory.getLogger(ObjectReuseStrategy.class); static public ObjectReuseStrategy defaultStrategy = BY_REFERENCE; static { // read from properties file String path = "/META-INF/maven/de.jpaw/bonaparte-core/pom.properties"; String version = "UNKNOWN"; Properties prop = new Properties(); InputStream in = ObjectReuseStrategy.class.getResourceAsStream(path ); try { prop.load(in); version = prop.getProperty("version"); } catch (Exception e) { // have no properties => version is unknown LOGGER.debug("cannot access maven properties: ", e); } finally { try { in.close(); } catch (Exception ex) { } } // read the system default via property, if allowed try { String sysDefault = System.getProperty("bonaparte.defaultReuseStrategy"); if (sysDefault != null) { if ("BY_REFERENCE".equals(sysDefault)) defaultStrategy = BY_REFERENCE; else if ("BY_CONTENTS".equals(sysDefault)) defaultStrategy = BY_CONTENTS; else if ("BY_CONTENTS".equals(sysDefault)) defaultStrategy = BY_CONTENTS; else if ("NONE".equals(sysDefault)) defaultStrategy = NONE; else LOGGER.warn("Unknown system default reuseStrategy: {}", sysDefault); } } catch (Exception e) { // low log level, as this is an optional feature and warnings may be annoying LOGGER.debug("cannot access system properties"); } LOGGER.info("Starting BONAPARTE-java version {} using reuse strategy {}", version, defaultStrategy); } }