1 PACKAGE BODY oam_gcs AS
2 /* $Header: afamgcsb.pls 120.1 2005/07/02 03:56:19 appldev noship $ */
3 /*
4 PROCEDURE REGISTER_OAMGCS_FCQ
5
6 Procedure to register a service instance
7
8 PARAMETERS
9
10 node Node name to use as service instance
11 rti_dir the custom directory location for RTI
12 Oracle_home Value of ORACLE_HOME for the node specified
13 Interval Interval of periodical uploading
14 */
15
16
17 PROCEDURE register_oamgcs_fcq(node IN varchar2,Oracle_home IN varchar2 DEFAULT null,rti_dir IN varchar2 DEFAULT null, interval IN number DEFAULT 300000)
18 is
19 mgr_name varchar2(36);
20 name varchar2(256);
21 svcparams varchar2(1024);
22 error_message VARCHAR2(1024);
23 rti_dir_path VARCHAR2(512);
24 qcount number;
25 ncount number;
26 dummy number;
27 BEGIN
28 mgr_name := 'OAMGCS_' || UPPER(node);
29 IF (rti_dir=null) THEN
30 rti_dir_path:=Oracle_home;
31 ELSE
32 rti_dir_path:=rti_dir;
33 END IF;
34 svcparams := 'NODE=' || UPPER(node) ||';LOADINTERVAL=' ||TO_CHAR(interval) ||';RTI_KEEP_DAYS=1;FRD_KEEP_DAYS=7';
35
36 IF (Oracle_home is not null) THEN
37 svcparams := svcparams||';ORACLE_HOME='|| Oracle_home;
38 END IF;
39 IF (rti_dir_path is not null) THEN
40 svcparams := svcparams||';FORMS60_RTI_DIR='|| rti_dir_path;
41 END IF;
42
43 IF lengthb(mgr_name) > 30 THEN
44 mgr_name := substrb(mgr_name,1,30);
45 END IF;
46
47 SELECT count(*)
48 INTO qcount
49 FROM fnd_concurrent_queues
50 WHERE UPPER(node_name) =UPPER(node)
51 AND TO_NUMBER(manager_type) = (select service_id
52 FROM fnd_cp_services where service_handle='OAMGCS');
53
54 IF (qcount = 0) THEN
55 SELECT count(*)
56 INTO ncount
57 FROM fnd_concurrent_queues
58 WHERE concurrent_queue_name = mgr_name;
59
60 IF (ncount <> 0) THEN
61 SELECT fnd_concurrent_queues_s.nextval
62 INTO dummy
63 FROM dual;
64
65 mgr_name := substrb('OAMGCS_'||dummy||'_'||UPPER(node),
66 1, 30);
67 END IF;
68
69 name := fnd_message.get_string('FND', 'CONC-OAMGCS NAME');
70
71 IF(name = 'CONC-OAMGCS NAME') THEN
72 name := 'OAM Generic Collection Service';
73 END IF;
74
75 DELETE FROM fnd_concurrent_queues_tl
76 WHERE concurrent_queue_name = mgr_name;
77
78 BEGIN
79 IF NOT fnd_manager.Manager_exists(mgr_name,'FND') THEN
80 fnd_manager.register_si(manager=>name || ':' ||UPPER(node),
81 application=>'FND',
82 short_name=>mgr_name,
83 service_handle=>'OAMGCS',
84 PRIMARY_NODE=>UPPER(node));
85 END IF;
86 /* Bug 2557014: use work_shift_id parameter insted of
87 workshift_name parameter to ensure Standard workshift
88 is found in NLS instances */
89 IF NOT fnd_manager.manager_work_shift_exists(mgr_name,'FND','Standard') THEN
90 fnd_manager.assign_work_shift(manager_short_name=>mgr_name,
91 manager_application=>'FND',
92 work_shift_id => 0,
93 processes=>1,
94 sleep_seconds=>30,
95 svc_params=>svcparams);
96 END IF;
97 END;
98 END IF;
99 EXCEPTION when others THEN
100 IF (SQLCODE=100) THEN
101 error_message:='Concurrent Manager not found to update OAM GCS';
102 END IF;
103 IF (SQLCODE=-6502) THEN
104 error_message:='The Service Parameter length is more than 1024';
105 END IF;
106 IF( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
107 FND_MESSAGE.SET_NAME('FND','FND_OAMGCS_REGISTER_ERR');
108 FND_MESSAGE.SET_TOKEN('MSG', error_message);
109 FND_LOG.MESSAGE (FND_LOG.LEVEL_ERROR,'FND.PLSQL.AFAMGCSB.OAM_GCS.REGISTER_OAMGCS_FCQ',TRUE);
110 END IF;
111 END register_oamgcs_fcq;
112
113 /*
114
115 PROCEDURE UPDATE_GCS
116
117 Procedure to update a service instance
118
119 PARAMETERS
120
121 node node name to use as service instance
122
123 Oracle_home Value of ORACLE_HOME for the node specified
124
125 Interval
126
127 */
128
129 PROCEDURE update_gcs(node IN varchar2,Oracle_home IN varchar2 DEFAULT null, rti_dir IN varchar2 DEFAULT null,interval IN number DEFAULT 300000)
130 IS
131 mgr_name VARCHAR2(36);
132 svcparams VARCHAR2(1024);
133 queue_id NUMBER(15);
134 error_message VARCHAR2(10);
135 rti_dir_path VARCHAR2(1024);
136 BEGIN
137 IF (rti_dir=null) THEN
138 rti_dir_path:=Oracle_home;
139 ELSE
140 rti_dir_path:=rti_dir;
141 END IF;
142
143 svcparams := 'NODE=' || UPPER(node) ||';LOADINTERVAL=' ||TO_CHAR(interval) ||';RTI_KEEP_DAYS=1;FRD_KEEP_DAYS=7';
144
145 IF (Oracle_home is not null) THEN
146 svcparams := svcparams||';ORACLE_HOME='|| Oracle_home;
147 END IF;
148 IF (rti_dir_path is not null) THEN
149 svcparams := svcparams||';FORMS60_RTI_DIR='|| rti_dir_path;
150 END IF;
151
152 /* Getting the specific service instance queue_id*/
153 mgr_name := 'OAMGCS_%' || UPPER(node);
154
155 IF lengthb(mgr_name) > 30 THEN
156 mgr_name := substrb(mgr_name,1,30);
157 END IF;
158
159 SELECT concurrent_queue_id INTO queue_id
160 FROM fnd_concurrent_queues
161 WHERE application_id=0 AND concurrent_queue_name LIKE mgr_name;
162
163 /* Update the workshift for this queue_id with new svc_params */
164
165 UPDATE fnd_concurrent_queue_size
166 SET service_parameters = svcparams
167 WHERE concurrent_queue_id = queue_id AND queue_application_id = 0;
168
169 EXCEPTION when others THEN
170 error_message:='Some unexpected error occured';
171 IF (SQLCODE=100) THEN
172 error_message:='Concurrent Manager not found to update OAM GCS';
173 END IF;
174 IF (SQLCODE=-6502) THEN
175 error_message:='The Service Parameter lenght is more than 1024';
176 END IF;
177 IF( FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
178 FND_MESSAGE.SET_NAME('FND','FND_OAMGCS_UPDATE_ERR');
179 FND_MESSAGE.SET_TOKEN('MSG', error_message);
180 FND_LOG.MESSAGE (FND_LOG.LEVEL_ERROR,'FND.PLSQL.AFAMGCSB.OAM_GCS.UPDATE_OAMGCS',TRUE);
181 END IF;
182 END update_gcs;
183
184
185 /*
186
187 PROCEDURE DELETE_GCS
188
189 Procedure to delete a service instance
190
191 PARAMETERS
192
193 node node name to use as service instance
194
195
196 */
197
198 PROCEDURE delete_gcs(node IN varchar2)
199 IS
200 mgr_name VARCHAR2(36);
201 BEGIN
202
203 mgr_name := 'OAMGCS_%' ||UPPER(node);
204 IF lengthb(mgr_name) > 30 THEN
205 mgr_name := substrb(mgr_name,1,30);
206 END IF;
207
208 /* Deleting the specific service instance for specific node*/
209
210 DELETE FROM fnd_concurrent_queues
211 WHERE application_id=0 AND concurrent_queue_name LIKE mgr_name and UPPER(node_name)=upper(node);
212
213 END delete_gcs;
214
215
216
217 /*
218
219 FUNCTION SERVICE_EXISTS
220
221 Function to verify existance of a service instance
222
223 PARAMETERS
224
225 node ndoe name to verify if it is a service instance.
226
227 */
228
229
230 FUNCTION Service_exists(node IN VARCHAR2)
231 RETURN VARCHAR2 IS
232 instance_count number;
233 mgr_name varchar(36);
234
235 BEGIN
236
237 mgr_name:='OAMGCS%'||upper(node);
238 IF lengthb(mgr_name) > 30 THEN
239 mgr_name := substrb(mgr_name,1,30);
240 END IF;
241
242
243 SELECT count(concurrent_queue_id) into instance_count
244 FROM
245 fnd_concurrent_queues where concurrent_queue_name like mgr_name AND
246 upper(node_name) = upper(node);
247
248 IF (instance_count>0) THEN
249 return 'TRUE';
250 ELSE
251 return 'FALSE';
252 END IF;
253
254 EXCEPTION when others THEN return 'FALSE';
255
256 END Service_exists;
257
258 FUNCTION service_status(node IN VARCHAR2)
259 RETURN NUMBER IS
260 target number;
261 actual number;
262 description varchar2(1024);
263 error_code number;
264 error_message varchar2(1024);
265 svc_status number(1);
266 mgr_name varchar(36);
267 conc_queue_id number(15);
268 appl_id number(15);
269
270 BEGIN
271 mgr_name:='OAMGCS%'||upper(node);
272 IF lengthb(mgr_name) > 30 THEN
273 mgr_name := substrb(mgr_name,1,30);
274 END IF;
275
276
277
278
279 SELECT application_id,concurrent_queue_id INTO appl_id,conc_queue_id FROM fnd_concurrent_queues
280 where concurrent_queue_name like mgr_name
281 AND upper(node_name) = upper(node);
282
283 FND_OAM.get_svc_inst_status(appl_id,conc_queue_id,target,actual,svc_status,description,error_code,error_message);
284
285 return svc_status;
286
287 EXCEPTION when others THEN return 2;
288
289 END service_status;
290
291 END oam_gcs;