/* * Copyright 2014 Ricardo Lorenzo<unshakablespirit@gmail.com> * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import com.typesafe.config.Config; import com.typesafe.config.ConfigFactory; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import play.Application; import play.Configuration; import play.GlobalSettings; import java.io.File; /** * Created by ricardolorenzo on 17/07/2014. */ public class Global extends GlobalSettings { /** * The name of the persistence unit we will be using. */ static final String DEFAULT_PERSISTENCE_UNIT = "default"; /** * Declare the application context to be used - a Java annotation based application context requiring no XML. */ final private AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); @Override public Configuration onLoadConfig(Configuration configuration, File file, ClassLoader classLoader) { Config googleConfig = ConfigFactory.parseFile(new File(file, "conf/google.conf")); Config combinedConfig = configuration.getWrappedConfiguration().underlying().withFallback(googleConfig); return new Configuration(combinedConfig); } /** * Sync the context lifecycle with Play's. */ @Override public void onStart(final Application app) { super.onStart(app); // AnnotationConfigApplicationContext can only be refreshed once, but we do it here even though this method // can be called multiple times. The reason for doing during startup is so that the Play configuration is // entirely available to this application context. ctx.scan("conf", "services", "controllers", "utils"); ctx.refresh(); // This will construct the beans and call any construction lifecycle methods e.g. @PostConstruct ctx.start(); } /** * Sync the context lifecycle with Play's. */ @Override public void onStop(final Application app) { // This will call any destruction lifecycle methods and then release the beans e.g. @PreDestroy ctx.close(); super.onStop(app); } /** * Controllers must be resolved through the application context. There is a special method of GlobalSettings * that we can override to resolve a given controller. This resolution is required by the Play router. */ @Override public <A> A getControllerInstance(Class<A> aClass) { return ctx.getBean(aClass); } }