DBA Data[Home] [Help]

PACKAGE BODY: APPS.FND_CP_FNDSM

Source


1 package body fnd_cp_fndsm as
2 /* $Header: AFCPFSMB.pls 120.4.12000000.4 2007/11/02 16:29:29 ckclark ship $ */
3 
4 procedure mark_shutdown_fndsm( node IN varchar2)
5 is
6 begin
7 	update FND_CONCURRENT_PROCESSES
8 	   set PROCESS_STATUS_CODE = 'S',
9 	       LAST_UPDATE_DATE = sysdate
10 	 where CONCURRENT_QUEUE_ID =
11 		( select CONCURRENT_QUEUE_ID
12 		    from FND_CONCURRENT_QUEUES
13 		   where MANAGER_TYPE = '6'
14 		     and NODE_NAME = node)
15 	   and PROCESS_STATUS_CODE not in ('S', 'K');
16 
17 	update FND_CONCURRENT_QUEUES
18 	   set running_processes = 0,
19 	       max_processes = 0,
20 	       control_code = null
21 	 where MANAGER_TYPE = '6'
22 	   and NODE_NAME = node;
23 
24 end mark_shutdown_fndsm;
25 
26 procedure mark_killed_fndsm( node IN varchar2)
27 is
28 begin
29 	update FND_CONCURRENT_PROCESSES
30 	   set PROCESS_STATUS_CODE = 'K',
31 	       LAST_UPDATE_DATE = sysdate
32 	 where CONCURRENT_QUEUE_ID =
33 		( select CONCURRENT_QUEUE_ID
34 		    from FND_CONCURRENT_QUEUES
35 		   where MANAGER_TYPE = '6'
36 		     and NODE_NAME = node)
37 	   and PROCESS_STATUS_CODE not in ('S', 'K');
38 
39 	update FND_CONCURRENT_QUEUES
40 	   set running_processes = 0,
41 	       max_processes = 0,
42    	       control_code = null
43 	 where MANAGER_TYPE = 6
44 	   and NODE_NAME = node;
45 
46 end mark_killed_fndsm;
47 
48 procedure shutdown_all_fndsm
49 is
50 begin
51 	update FND_CONCURRENT_PROCESSES
52 	   set PROCESS_STATUS_CODE = 'S',
53 	       LAST_UPDATE_DATE = sysdate
54 	 where MANAGER_TYPE = 6
55 	   and PROCESS_STATUS_CODE not in ('S', 'K');
56 
57 	update FND_CONCURRENT_QUEUES
58 	   set running_processes = 0,
59 	       max_processes = 0,
60 	       control_code = null
61 	 where MANAGER_TYPE = '6';
62 end shutdown_all_fndsm;
63 
64 /* 2849672- Add IN parameter twotask, so that the process row for each
65    FNDSM will have db_instance populated.  */
66 /* 5867853- register_fndsm_fcp is used by ICM to insert FNDSM row, then FNDSM
67    is spawned and uses register_fndsm_db to update the row. This procedure
68    should be an autonomous transaction with a commit so that it is instantly
69    available to FNDSM for update. */
70 procedure register_fndsm_fcp( cpid  IN number,
71 	                      node  IN varchar2,
72 			      ospid IN number,
73 			    logfile IN varchar2,
74 		           mgrusrid IN number,
75                             twotask IN varchar2)
76 is
77 PRAGMA AUTONOMOUS_TRANSACTION;
78 begin
79 
80     update FND_CONCURRENT_PROCESSES
81      set PROCESS_STATUS_CODE = 'K',
82 	LAST_UPDATE_DATE = sysdate,
83 	LAST_UPDATED_BY = mgrusrid
84     where PROCESS_STATUS_CODE not in ('S','K')
85         and MANAGER_TYPE = 6
86     and NODE_NAME = node;
87 
88     update FND_CONCURRENT_QUEUES
89 	set running_processes = 1,
90 	    max_processes = 1,
91 	    control_code = null
92 	where MANAGER_TYPE = 6 and NODE_NAME = node;
93 
94            INSERT INTO FND_CONCURRENT_PROCESSES
95                     (CONCURRENT_PROCESS_ID, ORACLE_PROCESS_ID,
96                      QUEUE_APPLICATION_ID,  CONCURRENT_QUEUE_ID,
97                                             SESSION_ID,
98                      Creation_Date,         Created_By,
99                      LAST_UPDATE_DATE,      LAST_UPDATED_BY,
100                      PROCESS_START_DATE,    PROCESS_STATUS_CODE,
101                      MANAGER_TYPE,          OS_PROCESS_ID,
102 		     LOGFILE_NAME,
103                      NODE_NAME,             SQLNET_STRING)
104 
105                (select
106                              cpid, '999999',
107 
108 			     Q.APPLICATION_ID, Q.CONCURRENT_QUEUE_ID,
109 
110                                         '999999',
111                              sysdate,   mgrusrid,
112                              SYSDATE,   mgrusrid,
113                              SYSDATE,   'A',
114                              6,         ospid,
115 			     logfile,
116                              node,      twotask
117 
118 			     from FND_CONCURRENT_QUEUES Q
119 			 where Q.MANAGER_TYPE = 6
120 		         and Q.NODE_NAME = node
121               );
122     commit;
123 
124      exception
125         when others then
126            rollback;
127            raise;
128 
129 end register_fndsm_fcp;
130 
131 PROCEDURE register_fndsm_fcq(node varchar2)
132 is
133 	mgr_name varchar2(36);
134 	sm_name  varchar2(241);
135 	qcount	 number;
136 	ncount   number;
137 	dummy    number;
138 begin
139 	mgr_name := 'FNDSM_' || node;
140 	IF lengthb(mgr_name) > 30
141 	THEN
142 		mgr_name := substrb(mgr_name,1,30);
143 	END IF;
144 
145         select count(*)
146 	into qcount
147 	from fnd_concurrent_queues
148 	where node_name = node
149 	 and  manager_type = '6';
150 
151 
152 
153         if (qcount = 0) then
154 	        select count(*)
155 		into ncount
156 		from fnd_concurrent_queues
157 		where upper(CONCURRENT_QUEUE_NAME) = upper(mgr_name);
158 
159 		if (ncount <> 0) then
160 			select fnd_concurrent_queues_s.nextval
161 			into dummy
162 			from dual;
163 
164 			mgr_name := substrb('FNDSM_'||dummy||'_'||node,
165 						1, 30);
166 		end if;
167 
168 	    sm_name := fnd_message.get_string('FND', 'CONC-FNDSM NAME');
169 		if(sm_name = 'CONC-FNDSM NAME') then
170 			sm_name := 'Service Manager';
171 		end if;
172 
173 		delete from fnd_concurrent_queues_tl
174                   where upper(CONCURRENT_QUEUE_NAME) = upper(mgr_name)
175                   AND application_id = (SELECT application_id FROM fnd_application WHERE application_short_name = 'FND');
176 
177 	    begin
178 		fnd_manager.register(sm_name || ': ' || node, 'FND',
179 			mgr_name, sm_name, 'Service Manager',
180 			     null, null, node, null, null, null,
181 			     	'FNDSM', 'FND', null, 'US'  );
182 	    end;
183 	end if;
184 
185 end register_fndsm_fcq;
186 
187 PROCEDURE register_fndim_fcq(node varchar2)
188 is
189 	mgr_name varchar2(36);
190 	im_name  varchar2(241);
191 	ncount	 number;
192 	qcount	 number;
193 	dummy    number;
194 begin
195 	mgr_name := 'FNDIM_' || node;
196 	IF lengthb(mgr_name) > 30
197 	THEN
198 		mgr_name := substrb(mgr_name,1,30);
199 	END IF;
200 
201         select count(*)
202 	into qcount
203 	from fnd_concurrent_queues
204 	where manager_type = '2'
205 	 and  node_name = node;
206 
207 	if (qcount = 0) then
208 		select count(*)
209 		into ncount
210 		from fnd_concurrent_queues
211 		where upper(CONCURRENT_QUEUE_NAME) = upper(mgr_name);
212 
213 		if (ncount <> 0) then
214 			select fnd_concurrent_queues_s.nextval
215 			into dummy
216 			from dual;
217 
218 			mgr_name := substrb('FNDIM_'||dummy||'_'||node,
219 						1, 30);
220 		end if;
221 
222 	    im_name := fnd_message.get_string('FND', 'CONC-FNDIM NAME');
223 		if(im_name = 'CONC-FNDIM NAME') then
224 			im_name := 'Internal Monitor';
225 		end if;
226 
227 		delete from fnd_concurrent_queues_tl
228                   where upper(CONCURRENT_QUEUE_NAME) = upper(mgr_name)
229                   AND application_id = (SELECT application_id FROM fnd_application WHERE application_short_name = 'FND');
230 
231 	    begin
232 		fnd_manager.register(im_name || ': ' || node, 'FND',
233 			mgr_name, im_name, 'Internal Monitor',
234 			     null, null, node, null, null, null,
235 			     	'FNDIMON', 'FND', null, 'US'  );
236 	    end;
237 	end if;
238 
239 end register_fndim_fcq;
240 
241 PROCEDURE register_oamgcs_fcq(node IN varchar2,Oracle_home IN varchar2
242 DEFAULT null, interval IN number DEFAULT 300000)
243 is
244 	mgr_name varchar2(36);
245 	name  varchar2(241);
246 	svcparams varchar2(256);
247 	qcount	 number;
248 	ncount   number;
249 	dummy    number;
250 begin
251 	mgr_name := 'OAMGCS_' || node;
252 	svcparams := 'NODE=' || node || ';ORACLE_HOME='|| Oracle_home ||';LOADINTERVAL=' ||TO_CHAR(interval) ||
253 ';RTI_KEEP_DAYS=1;FRD_KEEP_DAYS=7';
254 	IF lengthb(mgr_name) > 30
255 	THEN
256 		mgr_name := substrb(mgr_name,1,30);
257 	END IF;
258 
259     select count(*)
260 	into qcount
261 	from fnd_concurrent_queues
262 	where node_name = node
263 	 and TO_NUMBER(manager_type) = (select service_id
264 		from fnd_cp_services where service_handle='OAMGCS');
265 
266         if (qcount = 0) then
267 	        select count(*)
268 		into ncount
269 		from fnd_concurrent_queues
270 		where upper(CONCURRENT_QUEUE_NAME) = upper(mgr_name);
271 
272 		if (ncount <> 0) then
273 			select fnd_concurrent_queues_s.nextval
274 			into dummy
275 			from dual;
276 
277 			mgr_name := substrb('OAMGCS_'||dummy||'_'||node,
278 						1, 30);
279 		end if;
280 
281   	        name := fnd_message.get_string('FND', 'CONC-OAMGCS NAME');
282 
283 		if(name = 'CONC-OAMGCS NAME') then
284 			name := 'OAM Generic Collection Service';
285 		end if;
286 
287 		delete from fnd_concurrent_queues_tl
288                   where upper(CONCURRENT_QUEUE_NAME) = upper(mgr_name)
289                   AND application_id = (SELECT application_id FROM fnd_application WHERE application_short_name = 'FND');
290 
291 	    begin
292   		if not fnd_manager.Manager_exists(name || ':' ||node,'FND') then
293 		  fnd_manager.register_si(manager=>name || ': ' || node,
294 					application=>'FND',
295 					short_name=>mgr_name,
296 					service_handle=>'OAMGCS',
297 					PRIMARY_NODE=>node);
298 		end if;
299                 /* Bug 2557014: use work_shift_id parameter insted of
300                    workshift_name parameter to ensure Standard workshift
301                    is found in NLS instances */
302   		if not fnd_manager.manager_work_shift_exists(name || ':' ||node,'FND','Standard') then
303      fnd_manager.assign_work_shift(manager_short_name=>mgr_name,
304                        manager_application=>'FND',
305                        work_shift_id => 0,
306                        processes=>1,
307 		       sleep_seconds=>30,
308 	                       svc_params=>svcparams);
309 		end if;
310 	    end;
311 	end if;
312 
313 end register_oamgcs_fcq;
314 
315 
316 procedure register_fndsm_db( ospid IN number,
317 			     cpid  IN number,
318 		          instance IN varchar2)
319 is
320 PRAGMA AUTONOMOUS_TRANSACTION;
321 	nodename varchar2(30);
322 	opid number;
323 	audsid number;
324 	dbname varchar2(8);
325 	dbdomain varchar2(120);
326 	dbinstname varchar2(16);
327 	insnum number;
328 begin
329 	select instance_number
330 	  into insnum
331 	  from v$instance;
332 
333 	select instance_name
334 	  into dbinstname
335 	  from v$instance;
336 
337 	select value
338 	  into dbname
339 	  from v$parameter
340 	 where name = 'db_name';
341 
342 	select value
343 	  into dbdomain
344 	  from v$parameter
345 	 where name = 'db_domain';
346 
347 	select userenv('SESSIONID')
348 	  into audsid
349 	  from dual;
350 
351 	select p.pid
352 	  into opid
353 	  from v$process p, v$session s
354 	 where s.audsid = userenv('SESSIONID')
355 	   and p.addr = s.paddr;
356 
357 	select node_name
358 	  into nodename
359 	  from fnd_concurrent_processes
360 	 where concurrent_process_id = cpid;
361 
362 	update fnd_concurrent_processes
363 		set oracle_process_id = opid,
364 		    session_id = audsid,
365                     db_name = dbname,
366                     db_domain = dbdomain,
367                     db_instance = dbinstname,
368                     sqlnet_string = instance,
369                     instance_number = insnum
370 		where os_process_id = ospid
371                   and process_status_code = 'A'
372 		  and node_name = nodename;
373 
374 	commit;
375 
376      exception
377         when others then
378            rollback;
379 
380 end register_fndsm_db;
381 
382 procedure insert_service_fcp( cmpid IN number,
383 			      qapid IN number,
384 				qid IN number,
385 			   mgrusrid IN number,
386 			    mgrtype IN varchar2,
387                                node IN varchar2)
388 is
389 PRAGMA AUTONOMOUS_TRANSACTION;
390 begin
391 	INSERT INTO FND_CONCURRENT_PROCESSES
392         	(CONCURRENT_PROCESS_ID, ORACLE_PROCESS_ID,
393 		QUEUE_APPLICATION_ID,  CONCURRENT_QUEUE_ID,
394 		OS_PROCESS_ID,         SESSION_ID,
395 		Creation_Date,         Created_By,
396 		LAST_UPDATE_DATE,      LAST_UPDATED_BY,
397 		PROCESS_START_DATE,    PROCESS_STATUS_CODE,
398 		MANAGER_TYPE,          NODE_NAME,
399 		Lk_Handle)
400 		VALUES
401 		(cmpid,    '999999',
402 		 qapid,    qid,
403 		 '999999',  '999999',
404 		 Sysdate,   mgrusrid,
405 		 SYSDATE,   mgrusrid,
406 		 SYSDATE,   'Z',
407 		 mgrtype,  upper(node),
408 		 'SERVICE');
409 
410 	commit;
411 
412      exception
413         when others then
414            rollback;
415            raise;
416 
417 end insert_service_fcp;
418 
419 end fnd_cp_fndsm;