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