@SuppressWarnings("unchecked") private void initMorphia_() { Properties c = Play.configuration; String dbName = c.getProperty(PREFIX + "name"); if (null == dbName) { warn("mongodb name not configured! using [test] db"); dbName = "test"; } DB db = mongo_.getDB(dbName); if (c.containsKey(PREFIX + "username") && c.containsKey(PREFIX + "password")) { String username = c.getProperty(PREFIX + "username"); String password = c.getProperty(PREFIX + "password"); if (!db.isAuthenticated() && !db.authenticate(username, password.toCharArray())) { throw new RuntimeException("MongoDB authentication failed: " + dbName); } } String loggerClass = c.getProperty("morphia.logger"); Class<? extends LogrFactory> loggerClazz = SilentLogrFactory.class; if (null != loggerClass) { final Pattern P_PLAY = Pattern.compile("(play|enable|true|yes|on)", Pattern.CASE_INSENSITIVE); final Pattern P_SILENT = Pattern.compile("(silent|disable|false|no|off)", Pattern.CASE_INSENSITIVE); if (P_PLAY.matcher(loggerClass).matches()) { loggerClazz = PlayLogrFactory.class; } else if (!P_SILENT.matcher(loggerClass).matches()) { try { loggerClazz = (Class<? extends LogrFactory>) Class.forName(loggerClass); } catch (Exception e) { warn( "Cannot init morphia logger factory using %s. Use PlayLogrFactory instead", loggerClass); } } } loggerRegistered_ = false; MorphiaLoggerFactory.reset(); MorphiaLoggerFactory.registerLogger(loggerClazz); morphia_ = new Morphia(); loggerRegistered_ = true; ds_ = morphia_.createDatastore(mongo_, dbName); dataStores_.put(dbName, ds_); String uploadCollection = c.getProperty("morphia.collection.upload", "uploads"); if (getBooleanProperty("gridfs.enabled")) { gridfs = new GridFS(MorphiaPlugin.ds().getDB(), uploadCollection); } morphia_ .getMapper() .addInterceptor( new AbstractEntityInterceptor() { @Override public void preLoad(Object ent, DBObject dbObj, Mapper mapr) { if (ent instanceof Model) { PlayPlugin.postEvent(MorphiaEvent.ON_LOAD.getId(), ent); ((Model) ent)._h_OnLoad(); } } @Override public void postLoad(Object ent, DBObject dbObj, Mapper mapr) { if (ent instanceof Model) { Model m = (Model) ent; PlayPlugin.postEvent(MorphiaEvent.LOADED.getId(), ent); m._h_Loaded(); } } }); }
static { MorphiaLoggerFactory.reset(); MorphiaLoggerFactory.registerLogger(SLF4JLogrImplFactory.class); }