Merging in bug fixes
[appc.git] / appc-event-listener / appc-event-listener-bundle / src / main / java / org / openecomp / appc / listener / AppcEventListenerActivator.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP : APPC
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Copyright (C) 2017 Amdocs
8  * =============================================================================
9  * Licensed under the Apache License, Version 2.0 (the "License");
10  * you may not use this file except in compliance with the License.
11  * You may obtain a copy of the License at
12  * 
13  *      http://www.apache.org/licenses/LICENSE-2.0
14  * 
15  * Unless required by applicable law or agreed to in writing, software
16  * distributed under the License is distributed on an "AS IS" BASIS,
17  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18  * See the License for the specific language governing permissions and
19  * limitations under the License.
20  * 
21  * ECOMP is a trademark and service mark of AT&T Intellectual Property.
22  * ============LICENSE_END=========================================================
23  */
24
25 package org.openecomp.appc.listener;
26
27 import org.openecomp.appc.configuration.Configuration;
28 import org.openecomp.appc.configuration.ConfigurationFactory;
29 import org.openecomp.appc.listener.impl.ControllerImpl;
30
31 import com.att.eelf.configuration.EELFLogger;
32 import com.att.eelf.configuration.EELFManager;
33 import org.osgi.framework.BundleActivator;
34 import org.osgi.framework.BundleContext;
35 import org.osgi.framework.ServiceRegistration;
36
37 import java.util.HashSet;
38 import java.util.Properties;
39 import java.util.Set;
40
41 /**
42  * This activator is used to initialize and terminate the dmaap listener controller and pool(s)
43  * <p>
44  * The DMaaP listener is responsible for listening to a topic on the Universal Event Bus and reading in messages that
45  * conform to the DCAE message format for APPC. These messages will then be parsed and passed along to the APPC Provider
46  * to take action on. The listener will also send messages out on DMaaP during critical phases. The messages sent out will
47  * have a status of:
48  * <ul>
49  * <li><i>PENDING</i> - The listener has read the message off of DMaaP and has put it in the queue to be processed</li>
50  * <li><i>ACTIVE</i> - The listener has begun actually processing the request and is waiting on the appc provider to
51  * complete the request</li>
52  * <li><i>SUCCESS</i> or <i>FAILURE</i> - The listener has gotten a response back from the appc provider. If it is a
53  * FAILURE, a message should also be included</li>
54  * </ul>
55  * </p>
56  * <p>
57  * Activation of the bundle will provision 1 controller that in turn will provision 1 (or in the future more) listener
58  * to interact with DMaaP. Each listener will have a queue of messages read off of DMaaP and a thread pool of workers to
59  * process them. This worker is responsible for contacting appc provider to perform the action
60  * </p>
61  * <p>
62  * When the bundle is deactivated, the stopNow() method is called and the thread pool is emptied and all remaining jobs
63  * are orphaned. Alternatively stop() could be called which would allow all remaining jobs in the queue to complete at
64  * the cost of longer run time.
65  * </p>
66  * 
67  * @since Aug 30, 2015
68  * @version $Id$
69  */
70 public class AppcEventListenerActivator implements BundleActivator {
71
72     /**
73      * The bundle registration
74      */
75     private ServiceRegistration registration = null;
76
77     /**
78      * The configuration object
79      */
80     private Configuration configuration;
81
82     /**
83      * The bundle context
84      */
85     private static BundleContext context;
86
87     /**
88      * The reference to the actual implementation object that implements the services
89      */
90     private Controller adapter;
91
92     /**
93      * The logger to be used
94      */
95     private final EELFLogger LOG = EELFManager.getInstance().getLogger(AppcEventListenerActivator.class);
96
97     /**
98      * Called when this bundle is started so the Framework can perform the bundle-specific activities necessary to start
99      * this bundle. This method can be used to register services or to allocate any resources that this bundle needs.
100      * <p>
101      * This method must complete and return to its caller in a timely manner.
102      * </p>
103      *
104      * @param ctx
105      *            The execution context of the bundle being started.
106      * @throws java.lang.Exception
107      *             If this method throws an exception, this bundle is marked as stopped and the Framework will remove
108      *             this bundle's listeners, unregister all services registered by this bundle, and release all services
109      *             used by this bundle.
110      * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
111      */
112     @Override
113     public void start(BundleContext ctx) throws Exception {
114         LOG.info("Starting Bundle " + getName());
115
116         context = ctx;
117
118         configuration = ConfigurationFactory.getConfiguration();
119
120         Properties props = configuration.getProperties();
121
122         Set<ListenerProperties> listeners = new HashSet<ListenerProperties>();
123
124         // Configure event listener for the demo use case
125         ListenerProperties demoProps = new ListenerProperties("appc.demo", props);
126         demoProps.setListenerClass(org.openecomp.appc.listener.demo.impl.ListenerImpl.class);
127         listeners.add(demoProps);
128
129         // ===========================================================================
130
131         ListenerProperties clLCMProps = new ListenerProperties("appc.LCM", props);
132         clLCMProps.setListenerClass(org.openecomp.appc.listener.LCM.impl.ListenerImpl.class);
133         listeners.add(clLCMProps);
134
135         //Configure the OAM properties
136         clLCMProps = new ListenerProperties("appc.OAM", props);
137         clLCMProps.setListenerClass(org.openecomp.appc.listener.LCM.impl.ListenerImpl.class);
138         listeners.add(clLCMProps);
139
140 /*
141         ListenerProperties clLCMProps1607 = new ListenerProperties("appc.LCM1607", props);
142         clLCMProps1607.setListenerClass(org.openecomp.appc.listener.LCM1607.impl.ListenerImpl.class);
143         listeners.add(clLCMProps1607);
144 */
145
146         adapter = new ControllerImpl(listeners);
147         if (ctx != null && registration == null) {
148             LOG.info("Registering service DMaaP Controller");
149             registration = ctx.registerService(Controller.class, adapter, null);
150         }
151         adapter.start();
152
153         LOG.info("DMaaP Listener started successfully");
154     }
155
156     /**
157      * Called when this bundle is stopped so the Framework can perform the bundle-specific activities necessary to stop
158      * the bundle. In general, this method should undo the work that the BundleActivator.start method started. There
159      * should be no active threads that were started by this bundle when this bundle returns. A stopped bundle must not
160      * call any Framework objects.
161      * <p>
162      * This method must complete and return to its caller in a timely manner.
163      * </p>
164      *
165      * @param ctx
166      *            The execution context of the bundle being stopped.
167      * @throws java.lang.Exception
168      *             If this method throws an exception, the bundle is still marked as stopped, and the Framework will
169      *             remove the bundle's listeners, unregister all services registered by the bundle, and release all
170      *             services used by the bundle. *
171      * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
172      */
173     @Override
174     public void stop(BundleContext ctx) throws Exception {
175         boolean stopNow = true;
176         LOG.info("Stopping DMaaP Listener. StopNow=" + stopNow);
177         adapter.stop(stopNow);
178         if (registration != null) {
179             registration.unregister();
180             registration = null;
181         }
182         LOG.info("DMaaP Listener stopped successfully");
183     }
184
185     public String getName() {
186         return "DMaaP Listener";
187     }
188
189 }