EbeanAddon.java
01 /*
02  * Copyright 2014-2017 the original author or authors.
03  *
04  * Licensed under the Apache License, Version 2.0 (the "License");
05  * you may not use this file except in compliance with the License.
06  * You may obtain a copy of the License at
07  *
08  *     http://www.apache.org/licenses/LICENSE-2.0
09  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package org.codehaus.griffon.runtime.ebean;
17 
18 import com.avaje.ebean.EbeanServer;
19 import griffon.core.GriffonApplication;
20 import griffon.core.env.Metadata;
21 import griffon.inject.DependsOn;
22 import griffon.plugins.ebean.EbeanServerCallback;
23 import griffon.plugins.ebean.EbeanServerHandler;
24 import griffon.plugins.ebean.EbeanServerFactory;
25 import griffon.plugins.ebean.EbeanServerStorage;
26 import griffon.plugins.monitor.MBeanManager;
27 import org.codehaus.griffon.runtime.core.addon.AbstractGriffonAddon;
28 import org.codehaus.griffon.runtime.jmx.EbeanServerStorageMonitor;
29 
30 import javax.annotation.Nonnull;
31 import javax.inject.Inject;
32 import javax.inject.Named;
33 import java.util.Map;
34 
35 import static griffon.util.ConfigUtils.getConfigValueAsBoolean;
36 
37 /**
38  @author Andres Almiray
39  */
40 @DependsOn("datasource")
41 @Named("ebean")
42 public class EbeanAddon extends AbstractGriffonAddon {
43     @Inject
44     private EbeanServerHandler ebeanServerHandler;
45 
46     @Inject
47     private EbeanServerFactory ebeanServerFactory;
48 
49     @Inject
50     private EbeanServerStorage ebeanServerStorage;
51 
52     @Inject
53     private MBeanManager mbeanManager;
54 
55     @Inject
56     private Metadata metadata;
57 
58     @Override
59     public void init(@Nonnull GriffonApplication application) {
60         mbeanManager.registerMBean(new EbeanServerStorageMonitor(metadata, ebeanServerStorage));
61     }
62 
63     public void onStartupStart(@Nonnull GriffonApplication application) {
64         for (String ebeanServerName : ebeanServerFactory.getEbeanServerNames()) {
65             Map<String, Object> config = ebeanServerFactory.getConfigurationFor(ebeanServerName);
66             if (getConfigValueAsBoolean(config, "connect_on_startup"false)) {
67                 ebeanServerHandler.withEbean(ebeanServerName, new EbeanServerCallback<Void>() {
68                     @Override
69                     public Void handle(@Nonnull String ebeanServerName, @Nonnull EbeanServer ebeanServer) {
70                         return null;
71                     }
72                 });
73             }
74         }
75     }
76 
77     public void onShutdownStart(@Nonnull GriffonApplication application) {
78         for (String ebeanServerName : ebeanServerFactory.getEbeanServerNames()) {
79             ebeanServerHandler.closeEbean(ebeanServerName);
80         }
81     }
82 }