DBA Data[Home] [Help]

PACKAGE BODY: APPS.XDP_RECOVERY

Source


1 PACKAGE BODY XDP_RECOVERY AS
2 /* $Header: XDPRECOB.pls 120.1 2005/06/09 00:28:59 appldev  $ */
3 
4 -- Private procedures Begin
5 -- Private procedures END
6 
7 -- Public Procedures BEGIN
8 
9 -- Added sacsharm - Application Monitoring service
10 
11 PROCEDURE  Start_Watchdog_Process (p_message_wait_timeout IN NUMBER DEFAULT 1,
12 			     p_correlation_id IN VARCHAR2,
13 			     x_message_key OUT NOCOPY VARCHAR2,
14 			     x_queue_timed_out OUT NOCOPY VARCHAR2)
15 is
16 
17 l_ControllersNotRunning	varchar2 (4000);
18 l_CPID 			number;
19 l_ContRunning 		varchar2(1);
20 
21 l_RetCode		number;
22 l_ErrBuf		varchar2 (4000);
23 
24 l_GenCountActive NUMBER := 0;
25 l_GenCountFuture NUMBER := 0;
26 
27 l_StartFlag 	 	boolean := FALSE;
28 
29 BEGIN
30 IF( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN  -- Fix: 4256771, dbhagat, 28 Apr 05
31 	FND_LOG.STRING (FND_LOG.LEVEL_PROCEDURE, 'XDP_RECOVERY.START_WATCHDOG_PROCESS', 'BEGIN:');
32 END IF;
33 
34 
35 	-- So that Dequeuer blocks as per parameter else it immediately starts
36 	-- dequeuing the next message
37 	x_queue_timed_out := 'Y';
38 
39 	--***************************************************************
40 	--*********  SET THE CONTEXT ************************************
41 
42 	XDP_ADAPTER.pv_callerContext := XDP_ADAPTER.pv_callerContextAdmin;
43 
44 	--***************************************************************
45 	--***************************************************************
46 
47 	----------------------------------------------------------------
48 	-- Verify Running adapters
49 	----------------------------------------------------------------
50 
51 	XDP_ADAPTER.Verify_All_Adapters (
52 				p_retcode => l_RetCode,
53 				p_errbuf => l_ErrBuf);
54 
55 	----------------------------------------------------------------
56 	-- Enable/Disable NOT_AVAILABLE/Other adapters, if required
57 	----------------------------------------------------------------
58 
59 	for v_AllAdapters in XDP_ADAPTER_CORE_DB.G_Get_All_Adapters loop
60 
61 
62 		l_GenCountActive := 0;
63 		l_GenCountFuture := 0;
64 
65 		if v_AllAdapters.adapter_status = XDP_ADAPTER.pv_statusNotAvailable then
66 
67 			IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN  -- Fix: 4256771, dbhagat, 28 Apr 05
68 				FND_LOG.STRING (FND_LOG.LEVEL_STATEMENT,
69 					'XDP_RECOVERY.START_WATCHDOG_PROCESS',
70 					'Adapter not available: '||v_AllAdapters.CHANNEL_NAME);
71 			END IF;
72 
73 			XDP_ADAPTER_CORE_DB.Are_Adapter_Generics_Available (
74 				p_fe_id => v_AllAdapters.FE_ID,
75 				p_AdapterType => v_AllAdapters.ADAPTER_TYPE,
76 				p_GenCountActive => l_GenCountActive,
77 				p_GenCountFuture => l_GenCountFuture);
78 
79 			--if XDP_ADAPTER_CORE_DB.Is_Adapter_Available (
80 			--		p_fe_id => v_AllAdapters.FE_ID,
81 			--		p_AdapterType => v_AllAdapters.ADAPTER_TYPE) then
82 
83 			if l_GenCountActive > 0 then
84 
85 				IF( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN  -- Fix: 4256771, dbhagat, 28 Apr 05
86 					FND_LOG.STRING (FND_LOG.LEVEL_EXCEPTION,
87 						'XDP_RECOVERY.START_WATCHDOG_PROCESS',
88 						'Adapter NOW available: '||v_AllAdapters.CHANNEL_NAME);
89 				END IF;
90 
91 				-- Set the adapter status to SHUTDOWN
92 				XDP_ADAPTER_CORE_DB.UpdateAdapter (
93 					p_ChannelName => v_AllAdapters.CHANNEL_NAME,
94 					p_Status => XDP_ADAPTER.pv_statusStopped);
95 
96 				commit;
97 			end if;
98 
99 		else
100 
101 			XDP_ADAPTER_CORE_DB.Are_Adapter_Generics_Available (
102 				p_fe_id => v_AllAdapters.FE_ID,
103 				p_AdapterType => v_AllAdapters.ADAPTER_TYPE,
104 				p_GenCountActive => l_GenCountActive,
105 				p_GenCountFuture => l_GenCountFuture);
106 
107 			--if not XDP_ADAPTER_CORE_DB.Is_Adapter_Available (
108 			--		p_fe_id => v_AllAdapters.FE_ID,
109 			--		p_AdapterType => v_AllAdapters.ADAPTER_TYPE) then
110 
111 			if l_GenCountActive = 0 then
112 
113 				IF( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN  -- Fix: 4256771, dbhagat, 28 Apr 05
114 					FND_LOG.STRING (FND_LOG.LEVEL_EXCEPTION,
115 						'XDP_RECOVERY.START_WATCHDOG_PROCESS',
116 						'Adapter NO LONGER available: '||v_AllAdapters.CHANNEL_NAME);
117 				END IF;
118 
119 				-- Terminate the adapter if running
120 				-- if v_AllAdapters.PROCESS_ID > 0 then
121 				-- Could be an unimplemented adapter type
122 				-- if v_AllAdapters.adapter_status != XDP_ADAPTER.pv_statusStopped then
123 
124 				if (v_AllAdapters.adapter_status not in
125 						(XDP_ADAPTER.pv_statusStopped,
126 						XDP_ADAPTER.pv_statusStoppedError,
127 						XDP_ADAPTER.pv_statusTerminated,
128 						XDP_ADAPTER.pv_statusDeactivated,
129 						XDP_ADAPTER.pv_statusDeactivatedSystem)) then
130 
131 					-- This API will also check if Controller is UP
132 
133 					XDP_ADAPTER.Terminate_Adapter (
134 						p_ChannelName => v_AllAdapters.channel_name,
135 						p_retcode => l_RetCode,
136 						p_errbuf => l_ErrBuf);
137 
138 					commit;
139 
140 					-- pv_retAdapterInvalidState -- Not possible as state not checked
141 			        	-- pv_retAdapterCannotLock -- ERROR, possibly being used
142                			 	-- pv_retAdapterCtrlNotRunning -- ERROR
143 			                -- pv_retAdapterAbnormalExit -- Not a error
144 					-- when other errors -- ERROR
145 
146 					if ((l_RetCode <> 0) and
147                                             (l_RetCode <> XDP_ADAPTER.pv_retAdapterAbnormalExit)) then
148 
149 						-- If termination is not successful, we donot
150 						-- update adapter status to NOT_AVAILABLE
151 						-- Send notification
152 
153 						XDP_ADAPTER_CORE.NotifyAdapterTerminateFailure
154 							(v_AllAdapters.adapter_display_name);
155 
156 						IF( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN -- Fix: 4256771, dbhagat, 28 Apr 05
157 							FND_LOG.STRING (FND_LOG.LEVEL_ERROR,
158 								'XDP_RECOVERY.START_WATCHDOG_PROCESS',
159 								'Adapter was running, termination failed with error: '||
160 								l_RetCode||', message: '||l_ErrBuf);
161 						END IF;
162 					else
163                                             if l_RetCode = 0 then
164 						IF( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN  -- Fix: 4256771, dbhagat, 28 Apr 05
165 							FND_LOG.STRING (FND_LOG.LEVEL_EXCEPTION,
166 							'XDP_RECOVERY.START_WATCHDOG_PROCESS',
167 							'Adapter was running, terminated successfully');
168 						END IF;
169                                             END IF;
170 
171                                             -- Set the adapter status to NOT_AVAILABLE
172 					    XDP_ADAPTER_CORE_DB.UpdateAdapter (
173 						p_ChannelName => v_AllAdapters.CHANNEL_NAME,
174 						p_Status => XDP_ADAPTER.pv_statusNotAvailable);
175 					end if;
176 
177 				else
178 					-- Set the adapter status to NOT_AVAILABLE
179 					XDP_ADAPTER_CORE_DB.UpdateAdapter (
180 						p_ChannelName => v_AllAdapters.CHANNEL_NAME,
181 						p_Status => XDP_ADAPTER.pv_statusNotAvailable);
182 
183 				end if;
184 
185 				commit;
186 			end if;
187 		end if;
188 	end loop;
189 
190 	l_ControllersNotRunning := 'NONE';
191 
192 	for v_GetSvcID in XDP_ADAPTER_CORE_DB.G_Get_Controller_Instances loop
193 
194 		XDP_CONTROLLER_CORE.VerifyControllerStatus
195 			(p_ConcQID => v_GetSvcID.service_instance_Id,
196 			p_CPID => l_CPID,
197 			p_ControllerRunning => l_ContRunning);
198 
199 		if l_ContRunning <> 'Y' then
200 			if l_ControllersNotRunning = 'NONE' then
201 				-- First time
202 				l_ControllersNotRunning :=
203 					v_GetSvcID.USER_CONCURRENT_QUEUE_NAME||':';
204 			else
205 				l_ControllersNotRunning := l_ControllersNotRunning||
206 					v_GetSvcID.USER_CONCURRENT_QUEUE_NAME||':';
207 			end if;
208 		else
209 			-- Controller is running
210 
211 			----------------------------------------------------------------
212 			-- Start the automatic (AUTO and SOD) adapters for a controller
213 			----------------------------------------------------------------
214 
215 			for v_GetAutoAdapters in
216 				XDP_ADAPTER_CORE_DB.G_Get_Automatic_Adapters
217 					(v_GetSvcID.service_instance_id) loop
218 
219 				l_StartFlag := FALSE;
220 
221 				if v_GetAutoAdapters.STARTUP_MODE =
222 					XDP_ADAPTER.pv_startAutomatic then
223 
224 					l_StartFlag := TRUE;
225 
226 				else
227 					-- If SOD adapter
228 
229 					if v_GetAutoAdapters.APPLICATION_MODE =
230 						XDP_ADAPTER.pv_applModeQueue then
231 
232 						-- If async. messaging adapter
233 						-- Peek into Outbound message queue
234 
235  						if (XDP_ADAPTER_CORE_DB.GetNumOfJobsCount(
236 							p_fe_id => v_GetAutoAdapters.fe_id,
237 							p_fe_name => v_GetAutoAdapters.fulfillment_element_name,
238 							p_mode => 'ASYNC') > 0) then
239 							l_StartFlag := TRUE;
240 						END IF;
241 					else
242 
243 						-- If sync. messaging adapter (PIPE OR NONE)
244 						-- Peek into FA job queue
245 
246 						if (XDP_ADAPTER_CORE_DB.PeekIntoFeWaitQueue(
247 							p_ChannelName => v_GetAutoAdapters.channel_name) = 'Y') then
248 							l_StartFlag := TRUE;
249 						END IF;
250 					END IF;
251 				END IF;
252 
253 				if (l_StartFlag) then
254 
255 					IF( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN  -- Fix: 4256771, dbhagat, 28 Apr 05
256 						FND_LOG.STRING (FND_LOG.LEVEL_EXCEPTION,
257 							'XDP_RECOVERY.START_WATCHDOG_PROCESS',
258 							'Automatic adapter required to be started: '||v_GetAutoAdapters.CHANNEL_NAME);
259 					END IF;
260 
261 					XDP_ADAPTER.Start_Adapter (
262 						p_ChannelName => v_GetAutoAdapters.channel_name,
263 						p_retcode => l_RetCode,
264 						p_errbuf => l_ErrBuf);
265 
266 					-- pv_retAdapterInvalidState --Not possible as cursor ensures this
267 			        	-- pv_retAdapterCannotLock --Not possible unless someone else
268                                         --                           starting
269                			 	-- pv_retAdapterCtrlNotRunning -- Not possible, already verified
270 			                -- pv_retAdapterAbnormalExit -- Not possible
271 					-- when other errors -- ERROR
272 
273 					if (l_RetCode not in (0,
274 						XDP_ADAPTER.pv_retAdapterInvalidState,
275 						XDP_ADAPTER.pv_retAdapterCannotLock)) then
276 						IF( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN -- Fix: 4256771, dbhagat, 28 Apr 05
277 							FND_LOG.STRING (FND_LOG.LEVEL_ERROR,
278 								'XDP_RECOVERY.START_WATCHDOG_PROCESS',
279 								'Adapter start failed with error: '||l_RetCode||
280 								', message: '||l_ErrBuf);
281 						END IF;
282 					else
283 						IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN  -- Fix: 4256771, dbhagat, 28 Apr 05
284 							FND_LOG.STRING (FND_LOG.LEVEL_STATEMENT,
285 								'XDP_RECOVERY.START_WATCHDOG_PROCESS',
286 								'Adapter started successfully');
287 						END IF;
288 					END IF;
289 
290 					commit;
291 
292 				END IF;
293 
294 			END LOOP; -- Start automatic adapters loop
295 
296 			----------------------------------------------------------------
297 			-- Disconnect/Stop the DWI adapters for a controller
298 			----------------------------------------------------------------
299 
300 			for v_DWIAdapters in XDP_ADAPTER_CORE_DB.G_Get_DWI_Adapters
301 							(v_GetSvcID.service_instance_id) loop
302 
303 				if (v_DWIAdapters.STARTUP_MODE = XDP_ADAPTER.pv_startOnDemand) then
304 
305 					-- Stop IDLE SOD adapters
306 
307 					IF( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN  -- Fix: 4256771, dbhagat, 28 Apr 05
308 						FND_LOG.STRING (FND_LOG.LEVEL_EXCEPTION,
309 							'XDP_RECOVERY.START_WATCHDOG_PROCESS',
310 							'Adapter idle, required to be stopped: '||v_DWIAdapters.CHANNEL_NAME);
311 					END IF;
312 
313 					XDP_ADAPTER.Stop_Adapter (
314 						p_ChannelName => v_DWIAdapters.channel_name,
315 						p_retcode => l_RetCode,
316 						p_errbuf => l_ErrBuf);
317 
318 					-- pv_retAdapterInvalidState -- Not an ERROR
319 			        	-- pv_retAdapterCannotLock -- getting used NOW
320                			 	-- pv_retAdapterCtrlNotRunning -- Not possible, already verified
321 			                -- pv_retAdapterAbnormalExit --
322 					-- when other errors -- ERROR
323 
324 					if (l_RetCode not in (0,
325 						XDP_ADAPTER.pv_retAdapterInvalidState,
326 						XDP_ADAPTER.pv_retAdapterCannotLockReqSub,
327 						XDP_ADAPTER.pv_retAdapterOpFailed)) then
328 						IF( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN -- Fix: 4256771, dbhagat, 28 Apr 05
329 							FND_LOG.STRING (FND_LOG.LEVEL_ERROR,
330 								'XDP_RECOVERY.START_WATCHDOG_PROCESS',
331 								'Adapter stop failed with error: '||l_RetCode||
332 								', message: '||l_ErrBuf);
333 						END IF;
334 					elsif l_RetCode = XDP_ADAPTER.pv_retAdapterCannotLockReqSub then
335 						-- Admin request would be submitted as lock
336 						-- was not obtained on adapter
337 						-- We donot need to stop adapter as it needs to be used
338 						-- as someother process (FA) has locked it for use
339 						rollback;
340                                         else
341 						IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN  -- Fix: 4256771, dbhagat, 28 Apr 05
342 							FND_LOG.STRING (FND_LOG.LEVEL_STATEMENT,
343 								'XDP_RECOVERY.START_WATCHDOG_PROCESS',
344 								'Adapter stopped successfully');
345 						END IF;
346 					END IF;
347 				else
348 					-- Disconnect IDLE COD adapters
349 
350 					IF( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN  -- Fix: 4256771, dbhagat, 28 Apr 05
351 						FND_LOG.STRING (FND_LOG.LEVEL_EXCEPTION,
352 							'XDP_RECOVERY.START_WATCHDOG_PROCESS',
353 							'Adapter idle, required to be disconnected: '||v_DWIAdapters.CHANNEL_NAME);
354 					END IF;
355 
356 					XDP_ADAPTER.Disconnect_Adapter (
357 						p_ChannelName => v_DWIAdapters.channel_name,
358 						p_retcode => l_RetCode,
359 						p_errbuf => l_ErrBuf);
360 
361 					-- pv_retAdapterInvalidState -- Not an ERROR
362 			        	-- pv_retAdapterCannotLock -- getting used NOW
363                			 	-- pv_retAdapterCtrlNotRunning -- Not possible, already verified
364 			                -- pv_retAdapterAbnormalExit -- Not an ERROR
365 					-- when other errors -- ERROR
366 
367 					if (l_RetCode not in (0,
368 						XDP_ADAPTER.pv_retAdapterInvalidState,
369 						XDP_ADAPTER.pv_retAdapterCannotLock,
370 						XDP_ADAPTER.pv_retAdapterOpFailed)) then
371 						IF( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN -- Fix: 4256771, dbhagat, 28 Apr 05
372 							FND_LOG.STRING (FND_LOG.LEVEL_ERROR,
373 							'XDP_RECOVERY.START_WATCHDOG_PROCESS',
374 								'Adapter disconnect failed with error: '||l_RetCode||
375 								', message: '||l_ErrBuf);
376 						END IF;
377 					else
378 						IF( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN  -- Fix: 4256771, dbhagat, 28 Apr 05
379 							FND_LOG.STRING (FND_LOG.LEVEL_STATEMENT,
380 								'XDP_RECOVERY.START_WATCHDOG_PROCESS',
381 								'Adapter disconnected successfully');
382 						END IF;
383 					end if;
384 
385 				END IF;
386 
387 				commit;
388 
389 			end loop; -- Stop/DWI adapters
390 
391 		end if; -- Controller running
392 
393 	END LOOP; -- Controller loop
394 
395 	if l_ControllersNotRunning <> 'NONE' then
396 
397 		IF( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN  -- Fix: 4256771, dbhagat, 28 Apr 05
398 			FND_LOG.STRING (FND_LOG.LEVEL_EXCEPTION, 'XDP_RECOVERY.START_WATCHDOG_PROCESS',
399 				'Controllers NOT running: '||l_ControllersNotRunning);
400 		END IF;
401 
402 		-- Send notification with messages text as
403 		-- l_ControllersNotRunning
404 		XDP_CONTROLLER_CORE.NotifyControllerNotRunning (l_ControllersNotRunning);
405 		commit;
406 
407 	end if;
408 
409 EXCEPTION
410 WHEN OTHERS THEN
411 	IF( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN -- Fix: 4256771, dbhagat, 28 Apr 05
412 		FND_LOG.STRING (FND_LOG.LEVEL_ERROR, 'XDP_RECOVERY.START_WATCHDOG_PROCESS',
413 			'Unhandled error, SQLCODE: '||SQLCODE);
414 	END IF;
415 commit;
416 
417 end Start_Watchdog_Process;
418 
419 --
420 --  Package Initialization values
421 --
422 
423 -- BEGIN
424 
425 END XDP_RECOVERY;