[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;