[Home] [Help]
PACKAGE BODY: APPS.XDP_CONTROLLER_CORE
Source
1 PACKAGE BODY XDP_CONTROLLER_CORE AS
2 /* $Header: XDPCCORB.pls 120.1 2005/06/08 23:42:19 appldev $ */
3
4 -- Private procedures Begin
5
6 TYPE term_adapter_rec IS RECORD
7 (Channel_Name varchar2(40),
8 Lock_Retry varchar2(1),
9 Process_id number);
10
11 TYPE term_adapters_tab IS TABLE of term_adapter_rec
12 index by binary_integer;
13
14 Procedure Stop_Impl_Adapter(p_ChannelName in varchar2,
15 p_retcode OUT NOCOPY NUMBER,
16 p_errbuf OUT NOCOPY VARCHAR2);
17
18 Function GetCtrlWaitToKillMins return number;
19
20 -- Private procedures END
21
22 -- Public Procedures BEGIN
23 Procedure LaunchAdapter (CPID in number,
24 AdapterInfo in varchar2)
25 is
26 begin
27
28 -- dbms_output.put_line('Sending CUSTOM Message to CPID: ' || CPID);
29 fnd_cp_gsm_ipc.Send_Custom_Message(CPID,
30 pv_StartCustomMessage,
31 AdapterInfo);
32
33 end LaunchAdapter;
34
35
36 Procedure VerifyAdapters (CPID in number,
37 AdapterInfo in varchar2)
38 is
39 begin
40 fnd_cp_gsm_ipc.Send_Custom_Message(CPID,
41 pv_VerifyCustomMessage,
42 AdapterInfo);
43
44 end VerifyAdapters;
45
46
47 Procedure TerminateAdapter(CPID in varchar2,
48 AdapterInfo in varchar2)
49 is
50
51 begin
52
53 fnd_cp_gsm_ipc.Send_Custom_Message(CPID,
54 pv_TermCustomMessage,
55 AdapterInfo);
56
57 end TerminateAdapter;
58
59 Procedure SuspendAdapter(CPID in varchar2,
60 AdapterInfo in varchar2)
61 is
62 begin
63 fnd_cp_gsm_ipc.Send_Custom_Message(CPID,
64 pv_SuspCustomMessage,
65 AdapterInfo);
66 end SuspendAdapter;
67
68 Procedure ResumeAdapter(CPID in varchar2,
69 AdapterInfo in varchar2)
70 is
71 begin
72 fnd_cp_gsm_ipc.Send_Custom_Message(CPID,
73 pv_ResuCustomMessage,
74 AdapterInfo);
75 end ResumeAdapter;
76
77 Procedure ConnectAdapter(CPID in varchar2,
78 AdapterInfo in varchar2)
79 is
80 begin
81 fnd_cp_gsm_ipc.Send_Custom_Message(CPID,
82 pv_ConnCustomMessage,
83 AdapterInfo);
84 end ConnectAdapter;
85
86 Procedure DisconnectAdapter(CPID in varchar2,
87 AdapterInfo in varchar2)
88 is
89 begin
90 fnd_cp_gsm_ipc.Send_Custom_Message(CPID,
91 pv_DiscCustomMessage,
92 AdapterInfo);
93 end DisconnectAdapter;
94
95 Procedure StopAdapter(CPID in varchar2,
96 AdapterInfo in varchar2)
97 is
98 begin
99 fnd_cp_gsm_ipc.Send_Custom_Message(CPID,
100 pv_StopCustomMessage,
101 AdapterInfo);
102 end StopAdapter;
103
104 Procedure GenericOperationAdapter(CPID in varchar2,
105 AdapterInfo in varchar2)
106 is
107 begin
108 fnd_cp_gsm_ipc.Send_Custom_Message(CPID,
109 pv_GenOpCustomMessage,
110 AdapterInfo);
111 end GenericOperationAdapter;
112
113 Procedure VerifyControllerStatus(p_ConcQID in number,
114 p_CPID OUT NOCOPY number,
115 p_ControllerRunning OUT NOCOPY varchar2)
116 is
117 begin
118 p_CPID := XDP_APPLICATION.Fetch_CPID(ConcQID => p_ConcQID);
119 if p_CPID > 0 then
120 p_ControllerRunning := 'Y';
121 else
122 p_ControllerRunning := 'N';
123 end if;
124
125 end VerifyControllerStatus;
126
127 -- Does processing that is required before Controller stops
128 -- Added - sacsharm
129 Procedure Perform_Stop_Processing (p_CPID in varchar2,
130 p_AdapterInfo OUT NOCOPY varchar2)
131 is
132
133 l_ConcQID number := 0;
134 l_ConcQName varchar2 (30);
135 l_ErrorMsg VARCHAR2 (4000);
136 l_RetCode NUMBER := 0;
137 l_req NUMBER;
138 l_job NUMBER;
139
140 l_AdapterTobeTerminated boolean;
141
142 l_term_adapters_list term_adapters_tab;
143 l_term_adapter_count number := 0;
144 begin
145 if( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) then --Fix Bug: 4256771, dputhiye, 28 Apr 05
146 FND_LOG.STRING (FND_LOG.LEVEL_PROCEDURE, 'XDP_CONTROLLER_CORE.PERFORM_STOP_PROCESSING',
147 'BEGIN:p_CPID: '||p_CPID);
148 end if;
149
150 p_AdapterInfo := 'NONE';
151 XDP_APPLICATION.Fetch_ConcQ_Details (
152 CPID => p_CPID,
153 ConcQID => l_ConcQID,
154 ConcQName => l_ConcQName);
155
156 if l_ConcQID > 0 then
157
158 l_term_adapters_list.delete;
159
160 --***************************************************************
161 --********* SET THE CONTEXT ************************************
162
163 XDP_ADAPTER.pv_callerContext := XDP_ADAPTER.pv_callerContextAdmin;
164
165 --***************************************************************
166 --***************************************************************
167
168 XDP_ADAPTER.Verify_Running_Adapters (
169 p_controller_instance_id => l_ConcQID,
170 x_adapter_info => p_AdapterInfo,
171 p_retcode => l_RetCode,
172 p_errbuf => l_ErrorMsg
173 );
174
175 if (l_RetCode <> 0) then
176 if( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) then --Fix Bug: 4256771, dputhiye, 28 Apr 05
177 FND_LOG.STRING (FND_LOG.LEVEL_ERROR,
178 'XDP_CONTROLLER_CORE.PERFORM_STOP_PROCESSING',
179 'XDP_ADAPTER.VERIFY_RUNNING_ADAPTERS returned error: '||
180 l_RetCode||', Desc: '||l_ErrorMsg);
181 end if;
182 END IF;
183
184 -- Either way, we donot want Controller to verify adapters on basis of
185 -- PIDs
186
187 p_AdapterInfo := 'NONE';
188
189 for v_AdapterPID in XDP_ADAPTER_CORE_DB.G_Get_Running_Adapters (l_ConcQID) loop
190
191 if (((v_AdapterPID.is_implemented = 'Y') and (v_AdapterPID.process_id > 0)) or
192 (v_AdapterPID.is_implemented = 'N')) then
193 if( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) then --Fix Bug: 4256771, dputhiye, 28 Apr 05
194 FND_LOG.STRING (FND_LOG.LEVEL_EXCEPTION,
195 'XDP_CONTROLLER_CORE.PERFORM_STOP_PROCESSING',
196 'Stopping adapter: '||v_AdapterPID.channel_name);
197 end if;
198 l_AdapterTobeTerminated := FALSE;
199
200 if v_AdapterPID.is_implemented = 'N' then
201 -- This will also submit the job incase we are not able to
202 -- lock, so no need to submit job to stop adapter
203 XDP_ADAPTER.Stop_Adapter (v_AdapterPID.channel_name,
204 l_RetCode, l_ErrorMsg);
205 else
206 -- We shouldnt call Stop_Adapter API for implemented adapters
207 -- as that will submit CUSTOM request on Controller queue
208 -- and Controller is STOPPING
209 Stop_Impl_Adapter (v_AdapterPID.channel_name,
210 l_RetCode, l_ErrorMsg);
211 END IF;
212
213 -- pv_retAdapterInvalidState -- already down
214 -- pv_retAdapterCannotLockReqSub-- Not a ERROR
215 -- pv_retAdapterCtrlNotRunning -- Not possible
216 -- pv_retAdapterAbnormalExit/CommFailed -- will stop on its own
217 -- when other errors -- ERROR
218
219 if ((l_RetCode <> 0) and
220 (l_retcode <> XDP_ADAPTER.pv_retAdapterInvalidState) and
221 (l_retcode <> XDP_ADAPTER.pv_retAdapterCommFailed) and
222 (l_retcode <> XDP_ADAPTER.pv_retAdapterCannotLockReqSub)) THEN
223
224 -- dbms_output.put_line('l_Retcode: ' || l_RetCode);
225 -- dbms_output.put_line('l_ErrorMsg: ' || l_ErrorMsg);
226
227 l_AdapterTobeTerminated := TRUE;
228 if( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) then --Fix Bug: 4256771, dputhiye, 28 Apr 05
229 FND_LOG.STRING (FND_LOG.LEVEL_ERROR,
230 'XDP_CONTROLLER_CORE.PERFORM_STOP_PROCESSING',
231 'Adapter stop failed with error: '||l_RetCode||', error msg: '||l_ErrorMsg);
232 end if;
233
234 elsif (l_retcode = XDP_ADAPTER.pv_retAdapterCannotLockReqSub) then
235 if( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) then --Fix Bug: 4256771, dputhiye, 28 Apr 05
236 FND_LOG.STRING (FND_LOG.LEVEL_EXCEPTION,
237 'XDP_CONTROLLER_CORE.PERFORM_STOP_PROCESSING',
238 'Adapter stop request submitted');
239 FND_LOG.STRING (FND_LOG.LEVEL_EXCEPTION,
240 'XDP_CONTROLLER_CORE.PERFORM_STOP_PROCESSING',
241 l_ErrorMsg);
242 end if;
243
244 -- Although request has been submitted
245 -- Hopefully it should complete
246 -- before XDP_CTRL_WAIT_TO_KILL_MINUTES
247
248 l_AdapterTobeTerminated := TRUE;
249 else
250 -- Success, InvalidState, CommFailed case
251 -- InvalidState means already stoppped
252 -- CommFailed means adapter will stop on its own
253 if( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) then --Fix Bug: 4256771, dputhiye, 28 Apr 05
254 FND_LOG.STRING (FND_LOG.LEVEL_EXCEPTION,
255 'XDP_CONTROLLER_CORE.PERFORM_STOP_PROCESSING',
256 'Adapter successfully stopped');
257 end if;
258 end if;
259
260 -- Irrespective of Stop_Adapter outcome
261 -- Adapters have to be terminated
262 -- incase they donot shutdown gracefully
263 -- on their own
264
265 if ((v_AdapterPID.process_id > 0) and
266 (l_AdapterToBeTerminated = TRUE)) then
267 if( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) then --Fix Bug: 4256771, dputhiye, 28 Apr 05
268 FND_LOG.STRING (FND_LOG.LEVEL_EXCEPTION,
269 'XDP_CONTROLLER_CORE.PERFORM_STOP_PROCESSING',
270 'Adapter '||v_AdapterPID.channel_name||
271 ' will be forcefully terminated');
272 end if;
273
274 l_term_adapter_count := l_term_adapter_count + 1;
275 l_term_adapters_list(l_term_adapter_count).channel_name :=
276 v_AdapterPID.channel_name;
277 l_term_adapters_list(l_term_adapter_count).process_id :=
278 v_AdapterPID.process_id;
279 if l_retcode = XDP_ADAPTER.pv_retAdapterCannotLockReqSub then
280 l_term_adapters_list(l_term_adapter_count).lock_retry :=
281 'Y';
282 else
283 l_term_adapters_list(l_term_adapter_count).lock_retry :=
284 'N';
285 END IF;
286
287 end if;
288
289 commit;
290 end if;
291 end loop;
292
293 if l_term_adapters_list.COUNT > 0 then
294
295 DBMS_LOCK.SLEEP (GetCtrlWaitToKillMins*60);
296
297 for i in 1..l_term_adapters_list.COUNT loop
298 if (l_term_adapters_list.EXISTS(i) and
299 (l_term_adapters_list(i).lock_retry = 'Y')) then
300
301 Stop_Impl_Adapter (l_term_adapters_list(i).channel_name,
302 l_RetCode, l_ErrorMsg);
303 commit;
304
305 if ((l_RetCode = 0) or
306 (l_retcode = XDP_ADAPTER.pv_retAdapterInvalidState) or
307 (l_retcode = XDP_ADAPTER.pv_retAdapterCommFailed)) THEN
308 l_term_adapters_list(i).process_id := -1;
309 END IF;
310 END IF;
311 END LOOP;
312
313 for i in 1..l_term_adapters_list.COUNT loop
314 if (l_term_adapters_list.EXISTS(i) and
315 (l_term_adapters_list(i).process_id > 0)) then
316
317 if p_AdapterInfo = 'NONE' then
318 p_AdapterInfo :=
319 l_term_adapters_list(i).channel_name||':'||
320 l_term_adapters_list(i).process_id||':';
321 else
322 p_AdapterInfo := p_AdapterInfo||
323 l_term_adapters_list(i).channel_name||':'||
324 l_term_adapters_list(i).process_id||':';
325 end if;
326
327 END IF;
328 END LOOP;
329 END IF;
330 if( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) then --Fix Bug: 4256771, dputhiye, 28 Apr 05
331 FND_LOG.STRING (FND_LOG.LEVEL_EXCEPTION,
332 'XDP_CONTROLLER_CORE.PERFORM_STOP_PROCESSING',
333 'Adapters to be forcefully stopped: '||p_AdapterInfo);
334 end if;
335
336 else
337 -- dbms_output.put_line('ConcQID: ' || l_ConcQID);
338 if( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) then --Fix Bug: 4256771, dputhiye, 28 Apr 05
339 FND_LOG.STRING (FND_LOG.LEVEL_ERROR,
340 'XDP_CONTROLLER_CORE.PERFORM_STOP_PROCESSING',
341 'Could not get concurrent queue id for CPID: '||p_CPID);
342 end if;
343 end if;
344
345 exception
346 when others then
347 if( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) then --Fix Bug: 4256771, dputhiye, 28 Apr 05
348 FND_LOG.STRING (FND_LOG.LEVEL_ERROR, 'XDP_CONTROLLER_CORE.PERFORM_STOP_PROCESSING',
349 'Unhandled error, SQLCODE: '||SQLCODE);
350 end if;
351
352 end Perform_Stop_Processing;
353
354 Procedure NotifyControllerNotRunning (p_Controllers in VARCHAR2)
355 is
356 l_NotifID number;
357 l_NotifRecipient varchar2(80);
358 begin
359 l_NotifRecipient := xdp_utilities.GetSystemErrNotifRecipient;
360
361 l_NotifID := wf_notification.Send(role => l_NotifRecipient,
362 msg_type => xdp_utilities.pv_ErrorNotifItemType,
363 msg_name => XDP_CONTROLLER_CORE.pv_ControllerNotRunningMsg,
364 due_date =>sysdate);
365
366 wf_notification.SetAttrText( nid => l_NotifID,
367 aname => 'CONTROLLER_SERVICE',
368 avalue => p_Controllers );
369
370 end NotifyControllerNotRunning;
371
372 -- Does processing that is required when Controller starts
373 -- Added - sacsharm
374 Procedure Perform_Start_Processing (p_CPID in varchar2,
375 p_AdapterInfo OUT NOCOPY varchar2)
376 is
377
378 l_ConcQID number := 0;
379 l_ConcQName varchar2 (30);
380 l_ErrorMsg VARCHAR2 (4000);
381 l_RetCode NUMBER := 0;
382 l_req NUMBER;
383 l_job NUMBER;
384
385 begin
386 if( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) then --Fix Bug: 4256771, dputhiye, 28 Apr 05
387 FND_LOG.STRING (FND_LOG.LEVEL_PROCEDURE, 'XDP_CONTROLLER_CORE.PERFORM_START_PROCESSING',
388 'BEGIN:p_CPID: '||p_CPID);
389 end if;
390
391 p_AdapterInfo := 'NONE';
392 XDP_APPLICATION.Fetch_ConcQ_Details (
393 CPID => p_CPID,
394 ConcQID => l_ConcQID,
395 ConcQName => l_ConcQName);
396
397 if l_ConcQID > 0 then
398
399 XDP_ADAPTER.Verify_Running_Adapters (
400 p_controller_instance_id => l_ConcQID,
401 x_adapter_info => p_AdapterInfo,
402 p_retcode => l_RetCode,
403 p_errbuf => l_ErrorMsg
404 );
405
406 if (l_RetCode = 0) then
407 if( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) then --Fix Bug: 4256771, dputhiye, 28 Apr 05
408 FND_LOG.STRING (FND_LOG.LEVEL_EXCEPTION,
409 'XDP_CONTROLLER_CORE.PERFORM_START_PROCESSING',
410 'Adapters to be resetted: '||p_AdapterInfo);
411 end if;
412 else
413 if( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) then --Fix Bug: 4256771, dputhiye, 28 Apr 05
414 FND_LOG.STRING (FND_LOG.LEVEL_ERROR,
415 'XDP_CONTROLLER_CORE.PERFORM_START_PROCESSING',
416 'XDP_ADAPTER.VERIFY_RUNNING_ADAPTERS returned error: '||
417 l_RetCode||', Desc: '||l_ErrorMsg);
418 end if;
419 END IF;
420
421 -- Either way, we donot want Controller to verify adapters on basis of
422 -- PIDs
423
424 p_AdapterInfo := 'NONE';
425
426 XDP_ADAPTER.Reset_SysDeactivated_Adapters (p_controller_instance_id => l_ConcQID);
427
428 else
429 -- dbms_output.put_line('ConcQID: ' || l_ConcQID);
430 if( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) then --Fix Bug: 4256771, dputhiye, 28 Apr 05
431 FND_LOG.STRING (FND_LOG.LEVEL_ERROR,
432 'XDP_CONTROLLER_CORE.PERFORM_START_PROCESSING',
433 'Could not get concurrent queue id for CPID: '||p_CPID);
434 end if;
435 end if;
436
437 exception
438 when others then
439 p_AdapterInfo := 'NONE';
440 if( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) then --Fix Bug: 4256771, dputhiye, 28 Apr 05
441 FND_LOG.STRING (FND_LOG.LEVEL_ERROR, 'XDP_CONTROLLER_CORE.PERFORM_START_PROCESSING',
442 'Unhandled error, SQLCODE: '||SQLCODE);
443 end if;
444
445 end Perform_Start_Processing;
446
447 Procedure Process_Control_Command(p_ChannelName in varchar2,
448 p_Operation in varchar2,
449 p_OpData in varchar2 default null,
450 p_Caller in varchar2 default 'USER',
451 p_Status OUT NOCOPY varchar2,
452 p_ErrorMessage OUT NOCOPY varchar2)
453 is
454 l_ErrorMsg VARCHAR2 (4000);
455 l_RetCode NUMBER := 0;
456 begin
457
458 p_Status := XDP_ADAPTER_CORE.pv_AdapterResponseSuccess;
459 p_ErrorMessage := '';
460
461 -- Lock adapter incase p_Operation is pv_opConnect or pv_opResume
462 if p_Operation = XDP_ADAPTER.pv_opConnect or p_Operation = XDP_ADAPTER.pv_opResume then
463 if (XDP_ADAPTER_CORE_DB.ObtainAdapterLock_Verify(p_ChannelName) = 'N') then
464 --Should not happen
465 --raise e_UnabletoLockAdapter;
466 null;
467 end if;
468 END IF;
469
470 XDP_ADAPTER_CORE.ProcessControlCommand (
471 p_ChannelName => p_ChannelName,
472 p_Operation => p_Operation,
473 p_OpData => p_OpData,
474 p_Status => p_Status,
475 p_ErrorMessage => p_ErrorMessage);
476
477 if p_Status = XDP_ADAPTER_CORE.pv_AdapterResponseSuccess then
478
479 -- Deactivate the automatic adapter in case user stops it.
480 if p_Operation = XDP_ADAPTER.pv_opStop then
481
482 if (p_Caller = XDP_ADAPTER.pv_CallerContextUser) then
483
484 if (XDP_ADAPTER_CORE_DB.Is_Adapter_Automatic(p_ChannelName)) then
485
486 XDP_ADAPTER_CORE_DB.Update_Adapter_Status(
487 p_ChannelName => p_ChannelName,
488 p_Status => XDP_ADAPTER.pv_statusDeactivated);
489 END IF;
490 END IF;
491
492 elsif p_Operation = XDP_ADAPTER.pv_opConnect or p_Operation = XDP_ADAPTER.pv_opResume then
493 -- Handover the channel
494 XDPCORE_FA.HandOverChannel (ChannelName => p_ChannelName,
495 FeID => 0,
496 ChannelUsageCode => NULL,
497 Caller => 'ADMIN',
498 ErrCode => l_RetCode,
499 ErrStr => l_ErrorMsg);
500 if l_RetCode <> 0 then
501 rollback;
502 p_Status := XDP_ADAPTER_CORE.pv_ProcessCommandError;
503 p_ErrorMessage := 'Error in HandOverChannel, error: '||substr(l_ErrorMsg,1,255);
504 end if;
505 END IF;
506
507 elsif p_Status = XDP_ADAPTER_CORE.pv_AdapterResponseFailure then
508 -- p_ErrorMessage will already be set by Adapter
509 -- Adapter will go down on its own
510 -- Do nothing
511 null;
512
513 elsif p_Status = XDP_ADAPTER_CORE.pv_ProcessCommandTimedout then
514
515 p_ErrorMessage := 'Operation timed out';
516 XDP_ADAPTER_CORE_DB.Update_Adapter_Status(
517 p_ChannelName => p_ChannelName,
518 p_Status => XDP_ADAPTER.pv_statusStoppedError,
519 p_ErrorMsg => 'XDP_ADAPTER_OP_COMM_FAILURE');
520
521 -- elsif p_Status = XDP_ADAPTER_CORE.pv_ProcessCommandError then
522 else
523 p_ErrorMessage := 'dbms_pipe error';
524 XDP_ADAPTER_CORE_DB.Update_Adapter_Status(
525 p_ChannelName => p_ChannelName,
526 p_Status => XDP_ADAPTER.pv_statusStoppedError,
527 p_ErrorMsg => 'XDP_ADAPTER_PIPE_ERROR');
528
529 end if;
530
531 if p_Operation = XDP_ADAPTER.pv_opConnect or p_Operation = XDP_ADAPTER.pv_opResume then
532 -- Release adapter lock
533 if XDP_ADAPTER_CORE_DB.ReleaseAdapterLock(p_ChannelName) = 'N' then
534 if( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) then --Fix Bug: 4256771, dputhiye, 28 Apr 05
535 FND_LOG.STRING (FND_LOG.LEVEL_UNEXPECTED,
536 'XDP_CONTROLLER_CORE.PROCESS_CONTROL_COMMAND',
537 'Could not release the lock, Channel name: '||p_ChannelName);
538 end if;
539 end if;
540 END IF;
541
542 commit;
543
544 exception
545 when others then
546 if XDP_ADAPTER_CORE_DB.ReleaseAdapterLock(p_ChannelName) = 'N' then
547 if( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) then --Fix Bug: 4256771, dputhiye, 28 Apr 05
548 FND_LOG.STRING (FND_LOG.LEVEL_UNEXPECTED,
549 'XDP_CONTROLLER_CORE.PROCESS_CONTROL_COMMAND',
550 'Could not release the lock, Channel name: '||p_ChannelName);
551 end if;
552 end if;
553 if( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) then --Fix Bug: 4256771, dputhiye, 28 Apr 05
554 FND_LOG.STRING (FND_LOG.LEVEL_ERROR, 'XDP_CONTROLLER_CORE.PROCESS_CONTROL_COMMAND',
555 'Unhandled error, SQLCODE: '||SQLCODE);
556 end if;
557 rollback;
558 p_Status := XDP_ADAPTER_CORE.pv_ProcessCommandError;
559 p_ErrorMessage := 'Unhandled error, SQLCODE: '||SQLCODE;
560
561 end Process_Control_Command;
562
563
564 Procedure Stop_Impl_Adapter(p_ChannelName in varchar2,
565 p_retcode OUT NOCOPY NUMBER,
566 p_errbuf OUT NOCOPY VARCHAR2)
567 is
568 l_Status varchar2(4000);
569
570 begin
571 if( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) then --Fix Bug: 4256771, dputhiye, 28 Apr 05
572 FND_LOG.STRING (FND_LOG.LEVEL_PROCEDURE, 'XDP_ADAPTER.STOP_IMPL_ADAPTER',
573 'BEGIN:p_ChannelName: '||p_ChannelName);
574 end if;
575 p_retcode := 0;
576 p_errbuf := '';
577
578 if not XDP_ADAPTER_CORE.VerifyAdapterOperation(p_ChannelName, XDP_ADAPTER.pv_OpStop,
579 l_Status) then
580 p_retcode := XDP_ADAPTER.pv_retAdapterInvalidState;
581 return;
582 end if;
583
584 if (XDP_ADAPTER_CORE_DB.ObtainAdapterLock_Verify(p_ChannelName) = 'N') then
585 p_retcode := XDP_ADAPTER.pv_retAdapterCannotLockReqSub;
586 return;
587 end if;
588
589 -- Cannot use Verify_Adapter API as call to update row has to be autonomous
590 if not XDP_ADAPTER_CORE_DB.Verify_Adapter (p_ChannelName) then
591 if XDP_ADAPTER_CORE_DB.ReleaseAdapterLock(p_ChannelName) = 'N' then
592 if( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) then --Fix Bug: 4256771, dputhiye, 28 Apr 05
593 FND_LOG.STRING (FND_LOG.LEVEL_UNEXPECTED, 'XDP_ADAPTER.VALIDATE_OPERATION',
594 'Could not release the lock, Channel name: '||p_ChannelName);
595 end if;
596 end if;
597 p_retCode := XDP_ADAPTER.pv_retAdapterCommFailed;
598 return;
599 END IF;
600
601 XDP_ADAPTER_CORE_DB.Update_Adapter_Status(
602 p_ChannelName => p_ChannelName,
603 p_Status => XDP_ADAPTER.pv_statusStopping);
604
605 Process_Control_Command(p_ChannelName => p_ChannelName,
606 p_Operation => XDP_ADAPTER.pv_opStop,
607 p_Caller => XDP_ADAPTER.pv_callerContextAdmin,
608 p_Status => l_Status,
609 p_ErrorMessage => p_errbuf);
610
611 -- pv_AdapterResponseFailure means handshake happened with adapter, adapter will go down
612 if ((l_Status <> XDP_ADAPTER_CORE.pv_AdapterResponseSuccess) and
613 (l_Status <> XDP_ADAPTER_CORE.pv_AdapterResponseFailure)) then
614 p_retCode := XDP_ADAPTER.pv_retAdapterOtherError;
615 END IF;
616
617 if XDP_ADAPTER_CORE_DB.ReleaseAdapterLock(p_ChannelName) = 'N' then
618 if( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) then --Fix Bug: 4256771, dputhiye, 28 Apr 05
619 FND_LOG.STRING (FND_LOG.LEVEL_UNEXPECTED, 'XDP_ADAPTER.STOP_IMPL_ADAPTER',
620 'Could not release the lock, Channel name: '||p_ChannelName);
621 end if;
622 end if;
623
624 exception
625
626 when others then
627 if (XDP_ADAPTER_CORE_DB.ReleaseAdapterLock(p_ChannelName) = 'N') then
628 if( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) then --Fix Bug: 4256771, dputhiye, 28 Apr 05
629 FND_LOG.STRING (FND_LOG.LEVEL_UNEXPECTED, 'XDP_ADAPTER.STOP_IMPL_ADAPTER',
630 'Could not release the lock, Channel name: '||p_ChannelName);
631 end if;
632 end if;
633
634 p_retCode := SQLCODE;
635 p_errbuf := SQLERRM;
636 if( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) then --Fix Bug: 4256771, dputhiye, 28 Apr 05
637 FND_LOG.STRING (FND_LOG.LEVEL_ERROR, 'XDP_ADAPTER.STOP_IMPL_ADAPTER',
638 'Error code: '||p_retCode||' ,Error desc: '||p_errbuf);
639 end if;
640 end Stop_Impl_Adapter;
641
642 Function GetCtrlWaitToKillMins return number
643 is
644 l_ProfileValue varchar2(40);
645 begin
646 if fnd_profile.defined('XDP_CTRL_WAIT_TO_KILL_MINUTES') then
647 fnd_profile.get('XDP_CTRL_WAIT_TO_KILL_MINUTES', l_ProfileValue);
648 if to_number(l_ProfileValue) <= 0 then
649 l_ProfileValue := '2';
650 end if;
651 else
652 l_ProfileValue := '2';
653 end if;
654
655 return to_number(l_ProfileValue);
656
657 end GetCtrlWaitToKillMins;
658
659 end XDP_CONTROLLER_CORE;