aboutsummaryrefslogtreecommitdiffstats
path: root/app-c/appc/appc-event-listener/appc-event-listener-bundle/src/main/java/org/openecomp/appc/listener/AppcEventListenerActivator.java
blob: 4c2e2819666621313582c597f064c5227e518e86 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
/*-
 * ============LICENSE_START=======================================================
 * openECOMP : APP-C
 * ================================================================================
 * Copyright (C) 2017 AT&T Intellectual Property. All rights
 * 						reserved.
 * ================================================================================
 * 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.
 * ============LICENSE_END=========================================================
 */

package org.openecomp.appc.listener;

import org.openecomp.appc.configuration.Configuration;
import org.openecomp.appc.configuration.ConfigurationFactory;
import org.openecomp.appc.listener.impl.ControllerImpl;

import com.att.eelf.configuration.EELFLogger;
import com.att.eelf.configuration.EELFManager;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceRegistration;

import java.util.HashSet;
import java.util.Properties;
import java.util.Set;

/**
 * This activator is used to initialize and terminate the dmaap listener controller and pool(s)
 * <p>
 * The DMaaP listener is responsible for listening to a topic on the Universal Event Bus and reading in messages that
 * conform to the DCAE message format for APPC. These messages will then be parsed and passed along to the APPC Provider
 * to take action on. The listener will also send messages out on DMaaP during critical phases. The messages sent out will
 * have a status of:
 * <ul>
 * <li><i>PENDING</i> - The listener has read the message off of DMaaP and has put it in the queue to be processed</li>
 * <li><i>ACTIVE</i> - The listener has begun actually processing the request and is waiting on the appc provider to
 * complete the request</li>
 * <li><i>SUCCESS</i> or <i>FAILURE</i> - The listener has gotten a response back from the appc provider. If it is a
 * FAILURE, a message should also be included</li>
 * </ul>
 * </p>
 * <p>
 * Activation of the bundle will provision 1 controller that in turn will provision 1 (or in the future more) listener
 * to interact with DMaaP. Each listener will have a queue of messages read off of DMaaP and a thread pool of workers to
 * process them. This worker is responsible for contacting appc provider to perform the action
 * </p>
 * <p>
 * When the bundle is deactivated, the stopNow() method is called and the thread pool is emptied and all remaining jobs
 * are orphaned. Alternatively stop() could be called which would allow all remaining jobs in the queue to complete at
 * the cost of longer run time.
 * </p>
 * 
 * @since Aug 30, 2015
 * @version $Id$
 */
public class AppcEventListenerActivator implements BundleActivator {

    /**
     * The bundle registration
     */
    private ServiceRegistration registration = null;

    /**
     * The configuration object
     */
    private Configuration configuration;

    /**
     * The bundle context
     */
    private static BundleContext context;

    /**
     * The reference to the actual implementation object that implements the services
     */
    private Controller adapter;

    /**
     * The logger to be used
     */
    private final EELFLogger LOG = EELFManager.getInstance().getLogger(AppcEventListenerActivator.class);

    /**
     * Called when this bundle is started so the Framework can perform the bundle-specific activities necessary to start
     * this bundle. This method can be used to register services or to allocate any resources that this bundle needs.
     * <p>
     * This method must complete and return to its caller in a timely manner.
     * </p>
     *
     * @param ctx
     *            The execution context of the bundle being started.
     * @throws java.lang.Exception
     *             If this method throws an exception, this bundle is marked as stopped and the Framework will remove
     *             this bundle's listeners, unregister all services registered by this bundle, and release all services
     *             used by this bundle.
     * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
     */
    @Override
    public void start(BundleContext ctx) throws Exception {
        LOG.info("Starting Bundle " + getName());

        context = ctx;

        configuration = ConfigurationFactory.getConfiguration();

        Properties props = configuration.getProperties();

        Set<ListenerProperties> listeners = new HashSet<ListenerProperties>();

        // Configure App-C Closed Loop Listener
/*        ListenerProperties clProps = new ListenerProperties("appc.ClosedLoop", props);
        clProps.setListenerClass(org.openecomp.appc.listener.CL.impl.ListenerImpl.class);
        listeners.add(clProps);*/
        
        // Configure App-C 1607 Closed Loop Listener
        ListenerProperties cl1607Props = new ListenerProperties("appc.ClosedLoop1607", props);
        cl1607Props.setListenerClass(org.openecomp.appc.listener.CL1607.impl.ListenerImpl.class);
        listeners.add(cl1607Props);                                                       	

	
/*        ListenerProperties clLCMProps = new ListenerProperties("appc.LCM", props);
        clLCMProps.setListenerClass(org.openecomp.appc.listener.LCM.impl.ListenerImpl.class);
        listeners.add(clLCMProps);*/

/*
        ListenerProperties clLCMProps1607 = new ListenerProperties("appc.LCM1607", props);
        clLCMProps1607.setListenerClass(org.openecomp.appc.listener.LCM1607.impl.ListenerImpl.class);
        listeners.add(clLCMProps1607);
*/

        adapter = new ControllerImpl(listeners);
        if (ctx != null && registration == null) {
            LOG.info("Registering service DMaaP Controller");
            registration = ctx.registerService(Controller.class, adapter, null);
        }
        adapter.start();

        LOG.info("DMaaP Listener started successfully");
    }

    /**
     * Called when this bundle is stopped so the Framework can perform the bundle-specific activities necessary to stop
     * the bundle. In general, this method should undo the work that the BundleActivator.start method started. There
     * should be no active threads that were started by this bundle when this bundle returns. A stopped bundle must not
     * call any Framework objects.
     * <p>
     * This method must complete and return to its caller in a timely manner.
     * </p>
     *
     * @param ctx
     *            The execution context of the bundle being stopped.
     * @throws java.lang.Exception
     *             If this method throws an exception, the bundle is still marked as stopped, and the Framework will
     *             remove the bundle's listeners, unregister all services registered by the bundle, and release all
     *             services used by the bundle. *
     * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
     */
    @Override
    public void stop(BundleContext ctx) throws Exception {
        boolean stopNow = true;
        LOG.info("Stopping DMaaP Listener. StopNow=" + stopNow);
        adapter.stop(stopNow);
        if (registration != null) {
            registration.unregister();
            registration = null;
        }
        LOG.info("DMaaP Listener stopped successfully");
    }

    public String getName() {
        return "DMaaP Listener";
    }

}