[Home] [Help]
PACKAGE BODY: APPS.IEO_CONCURRENT_PUB
Source
1 PACKAGE BODY IEO_CONCURRENT_PUB as
2 /* $Header: ieopconb.pls 120.0 2005/06/02 10:55:14 appldev noship $*/
3
4 G_PKG_NAME CONSTANT varchar2(30) :='IEO_CONCURRENT_PUB';
5
6
7 PROCEDURE START_PROCESS(
8 ERRBUF OUT NOCOPY VARCHAR2,
9 RETCODE OUT NOCOPY VARCHAR2,
10 p_repeat_interval IN NUMBER
11 )
12 IS
13 l_submit_request_id NUMBER;
14 l_is_repeat_options_set BOOLEAN;
15 error_msg VARCHAR2(256);
16 l_return_value BOOLEAN;
17 REPEAT_OPTIONS_NOT_SET EXCEPTION;
18 REQUEST_NOT_SUBMITTED EXCEPTION;
19
20 BEGIN
21
22 -- dbms_output.put_line('Starting Processing');
23 fnd_file.put_line(fnd_file.log, 'Starting Processing');
24 fnd_file.put_line(fnd_file.log, 'p_repeat_interval = ' || to_char(p_repeat_interval));
25 l_is_repeat_options_set := fnd_request.set_repeat_options(
26 repeat_interval => p_repeat_interval,
27 repeat_unit => 'MINUTES',
28 repeat_type => 'START');
29 if not l_is_repeat_options_set then
30 rollback;
31 raise REPEAT_OPTIONS_NOT_SET;
32 end if;
33
34 -- dbms_output.put_line('Repeat interval is set');
35
36 l_submit_request_id := fnd_request.submit_request(
37 application=>'IEO',
38 program => 'IEO_CHECK_SERVERS',
39 description => 'Starts the Failover monitoring process');
40
41 fnd_file.put_line(fnd_file.log, 'Request Id ' || to_char(l_submit_request_id));
42 -- dbms_output.put_line('Request Id ' || to_char(l_submit_request_id));
43
44 if l_submit_request_id = 0 then
45 rollback;
46 raise REQUEST_NOT_SUBMITTED;
47 else
48 commit;
49 end if;
50 fnd_file.put_line(fnd_file.log, 'Controller Exited');
51 -- dbms_output.put_line('Controller Exited');
52
53 EXCEPTION
54 WHEN REPEAT_OPTIONS_NOT_SET THEN
55 FND_MESSAGE.SET_NAME('IEO','IEO_FO_REPEAT_OPTIONS_NOT_SET');
56 error_msg := FND_MESSAGE.GET;
57 fnd_file.put_line(fnd_file.log, error_msg);
58 l_return_value := FND_CONCURRENT.SET_COMPLETION_STATUS('ERROR', error_msg);
59
60 WHEN REQUEST_NOT_SUBMITTED THEN
61 FND_MESSAGE.SET_NAME('IEO','IEO_FO_REQUEST_NOT_SUBMITTED');
62 error_msg := FND_MESSAGE.GET;
63 fnd_file.put_line(fnd_file.log, error_msg);
64 l_return_value := FND_CONCURRENT.SET_COMPLETION_STATUS('ERROR', error_msg);
65
66 WHEN OTHERS THEN
67 FND_MESSAGE.SET_NAME('IEO','IEO_FO_UNEXPECTED');
68 error_msg := FND_MESSAGE.GET;
69 fnd_file.put_line(fnd_file.log, error_msg);
70 l_return_value := FND_CONCURRENT.SET_COMPLETION_STATUS('ERROR', error_msg);
71 END START_PROCESS;
72
73
74
75 PROCEDURE IEO_CHECK_RESTART_SERVERS
76 (
77 ERRBUF OUT NOCOPY VARCHAR2,
78 RETCODE OUT NOCOPY VARCHAR2
79 )
80 IS
81 l_api_name CONSTANT VARCHAR2(30) := 'IEO_CHECK_RESTART_SERVERS';
82 l_api_version CONSTANT NUMBER := 1.0;
83
84 l_server_id NUMBER;
85
86 l_msg_count NUMBER;
87 l_submit_request_id NUMBER;
88 REQUEST_NOT_SUBMITTED EXCEPTION;
89
90 error_msg VARCHAR2(256);
91 p_api_version NUMBER;
92 p_init_msg_list VARCHAR2(256);
93 p_commit VARCHAR2(256);
94
95 BEGIN
96 -- Standard Start of API savepoint
97
98 fnd_file.put_line(fnd_file.log, 'Check and Restart Worker Program Started 1');
99 p_api_version := 1.0;
100 p_init_msg_list := FND_API.G_FALSE;
101 p_commit := FND_API.G_TRUE;
102
103
104 SAVEPOINT IEO_CHECK_RESTART_SERVERS_PUB;
105 -- Standard call to check for call compatibility.
106 IF NOT FND_API.Compatible_API_Call (l_api_version,
107 p_api_version,
108 l_api_name,
109 G_PKG_NAME)
110
111 THEN
112 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
113 END IF;
114 -- Initialize message list if p_init_msg_list is set to TRUE.
115 IF FND_API.To_Boolean( p_init_msg_list ) THEN
116 FND_MSG_PUB.initialize;
117 END IF;
118 -- Initialize API return status to success
119 RETCODE := FND_API.G_RET_STS_SUCCESS;
120 -- API body
121
122
123 fnd_file.put_line(fnd_file.log, 'Worker Program Started 2');
124 -- dbms_output.put_line('Worker Program Started 2');
125
126 declare cursor c1 is
127 select server_id, status, trunc((sysdate-last_update_date)*24*60*60) diff1
128 from ieo_svr_rt_info
129 where ABS(status) >= 4;
130
131 begin
132 fnd_file.put_line(fnd_file.log,'Cursor declared');
133 -- dbms_output.put_line('Cursor declared');
134
135 for c1_rec in c1 loop
136 begin
137 fnd_file.put_line(fnd_file.log,'Processing server id ' || c1_rec.server_id);
138 -- dbms_output.put_line('Processing server id ' || c1_rec.server_id);
139
140 if c1_rec.diff1 > 70 then
141 begin
142
143 -- insert new fnd request here
144 l_submit_request_id := fnd_request.submit_request(
145 application=>'IEO',
146 program => 'IEO_PING_AND_RESTART_SVR',
147 description => 'Ping and restart one IC Java Server',
148 argument1 => c1_rec.server_id);
149
150 fnd_file.put_line(fnd_file.log, 'Request Id ' || to_char(l_submit_request_id));
151 -- dbms_output.put_line('Ping and check server, Request Id ' || to_char(l_submit_request_id));
152
153 if l_submit_request_id = 0 then
154 rollback;
155 raise REQUEST_NOT_SUBMITTED;
156 else
157 commit;
158 end if;
159
160 fnd_file.put_line(fnd_file.log, 'Controller Exited');
161 -- dbms_output.put_line('Controller Exited for server '||c1_rec.server_id);
162
163 end;
164 end if;
165 end;
166 end loop;
167 end;
168
169 fnd_file.put_line(fnd_file.log, 'Worker Program Ended ');
170 -- End of API body.
171 -- Standard check of p_commit.
172 IF FND_API.To_Boolean( p_commit ) THEN
173 COMMIT WORK;
174 END IF;
175 -- Standard call to get message count and if count is 1, get message info.
176 FND_MSG_PUB.Count_And_Get
177 ( p_count => l_msg_count ,
178 p_data => ERRBUF
179 );
180 EXCEPTION
181
182 WHEN FND_API.G_EXC_ERROR THEN
183 ROLLBACK TO IEO_CHECK_RESTART_SERVERS_PUB;
184 RETCODE := FND_API.G_RET_STS_ERROR ;
185 FND_MSG_PUB.Count_And_Get
186 ( p_count => l_msg_count ,
187 p_data => ERRBUF
188 );
189 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
190 ROLLBACK TO IEO_CHECK_RESTART_SERVERS_PUB;
191 RETCODE := FND_API.G_RET_STS_UNEXP_ERROR ;
192 FND_MSG_PUB.Count_And_Get
193 ( p_count => l_msg_count ,
194 p_data => ERRBUF
195 );
196 WHEN REQUEST_NOT_SUBMITTED THEN
197 FND_MESSAGE.SET_NAME('IEO','IEO_FO_REQUEST_NOT_SUBMITTED');
198 error_msg := FND_MESSAGE.GET;
199 fnd_file.put_line(fnd_file.log, error_msg);
200 WHEN OTHERS THEN
201 ROLLBACK TO IEO_CHECK_RESTART_SERVERS_PUB;
202 RETCODE := FND_API.G_RET_STS_UNEXP_ERROR ;
203 IF FND_MSG_PUB.Check_Msg_Level
204 (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
205 THEN
206 FND_MSG_PUB.Add_Exc_Msg
207 ( G_PKG_NAME ,
208 l_api_name
209 );
210 END IF;
211 FND_MSG_PUB.Count_And_Get
212 ( p_count => l_msg_count ,
213 p_data => ERRBUF
214 );
215
216 END IEO_CHECK_RESTART_SERVERS;
217
218
219 PROCEDURE IEO_PING_AND_RESTART_SERVER
220 (
221 ERRBUF OUT NOCOPY VARCHAR2,
222 RETCODE OUT NOCOPY VARCHAR2,
223 SERVER_ID IN NUMBER
224 )
225 IS
226 l_api_name CONSTANT VARCHAR2(30) := 'IEO_PING_AND_RESTART_SERVER';
227 l_api_version CONSTANT NUMBER := 1.0;
228
229 l_server_id NUMBER;
230 l_server_name VARCHAR2(256);
231 l_node_id NUMBER;
232 l_node_status NUMBER;
233
234 diff2 NUMBER;
235
236 l_result VARCHAR2 (256);
237 l_return_status VARCHAR2(256);
238 l_msg_count NUMBER;
239 l_msg_data VARCHAR2(256);
240 l_xml_data VARCHAR2(256);
241
242 p_api_version NUMBER;
243 p_init_msg_list VARCHAR2(256);
244 p_commit VARCHAR2(256);
245
246 BEGIN
247 -- Standard Start of API savepoint
248
249 fnd_file.put_line(fnd_file.log, 'PING and Restart Worker Program Started 1');
250 p_api_version := 1.0;
251 p_init_msg_list := FND_API.G_FALSE;
252 p_commit := FND_API.G_TRUE;
253
254
255 SAVEPOINT IEO_PING_RESTART_SVR_PUB;
256 -- Standard call to check for call compatibility.
257 IF NOT FND_API.Compatible_API_Call (l_api_version,
258 p_api_version,
259 l_api_name,
260 G_PKG_NAME)
261
262 THEN
263 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
264 END IF;
265 -- Initialize message list if p_init_msg_list is set to TRUE.
266 IF FND_API.To_Boolean( p_init_msg_list ) THEN
267 FND_MSG_PUB.initialize;
268 END IF;
269 -- Initialize API return status to success
270 RETCODE := FND_API.G_RET_STS_SUCCESS;
271 -- API body
272
273 -- heartbeat time is not updated
274 -- send one command through AQ
275 l_server_id := SERVER_ID;
276
277 fnd_file.put_line(fnd_file.log, 'Execute Server Cmd:');
278 -- dbms_output.put_line('Execute Server Cmd'||SERVER_ID);
279
280 IEO_ICSM_CMD_PUB.EXECUTE_SERVER_CMD(
281 p_api_version => 1.0 ,
282 p_cmd => 'STATUS' ,
283 p_server_id => l_server_id ,
284 x_result => l_result ,
285 x_return_status => l_return_status ,
286 x_msg_count => l_msg_count ,
287 x_msg_data => l_msg_data );
288
289 fnd_file.put_line(fnd_file.log,'x_result is ' || l_result);
290 fnd_file.put_line(fnd_file.log,'x_return_status is ' || l_return_status);
291 fnd_file.put_line(fnd_file.log,'x_msg_count is ' || l_msg_count);
292 fnd_file.put_line(fnd_file.log,'x_msg_data is ' || l_msg_data);
293
294 -- dbms_output.put_line('Done with EXECUTE_SERVER_CMD... here is the result:');
295 -- dbms_output.put_line('x_result is ' || l_result);
296 -- dbms_output.put_line('x_return_status is ' || l_return_status);
297 -- dbms_output.put_line('x_msg_count is ' || l_msg_count);
298 -- dbms_output.put_line('x_msg_data is ' || l_msg_data);
299
300 if l_return_status = 'TIMEOUT' then
301 begin
302 -- failed to contact server, need to restart
303 -- dbms_output.put_line('Failed to contact server, try restart ... ');
304
305 declare cursor c2 is
306 select node_id, priority
307 from ieo_svr_node_assignments
308 where server_id = l_server_id
309 order by priority;
310
311 begin
312 for c2_rec in c2 loop
313 begin
314 fnd_file.put_line(fnd_file.log,'Checking this node id ' || c2_rec.node_id);
315 -- dbms_output.put_line('Checking this node id ' || c2_rec.node_id);
316
317 l_node_id := c2_rec.node_id;
318
319 select status into l_node_status
320 from ieo_nodes
321 where node_id = l_node_id;
322
323 if (l_node_status = 1) then
324 -- node is up
325 begin
326 select trunc((sysdate-last_update_date)*24*60*60) into diff2
327 from ieo_nodes
328 where node_id = l_node_id;
329
330 if (diff2<70) then
331 -- node has heartbeat
332 begin
333 select server_name into l_server_name
334 from ieo_svr_servers
335 where server_id = l_server_id;
336
337 -- invoke the start server command
338 -- dbms_output.put_line('Send StartServer command to ICSM node'||l_node_id);
339 IEO_ICSM_CMD_PUB.START_SERVER(
340 p_api_version => 1.0 ,
341 p_server_name => l_server_name ,
342 p_node_id => l_node_id ,
343 x_return_status => l_return_status ,
344 x_msg_count => l_msg_count ,
345 x_msg_data => l_msg_data,
346 x_xml_data => l_xml_data);
347
348 return;
349 end;
350 end if;
351 end;
352 end if;
353 end;
354 end loop;
355 end;
356 end;
357 end if;
358
359 fnd_file.put_line(fnd_file.log, 'Worker Program Ended ');
360 -- End of API body.
361 -- Standard check of p_commit.
362 IF FND_API.To_Boolean( p_commit ) THEN
363 COMMIT WORK;
364 END IF;
365 -- Standard call to get message count and if count is 1, get message info.
366 FND_MSG_PUB.Count_And_Get
367 ( p_count => l_msg_count ,
368 p_data => ERRBUF
369 );
370 EXCEPTION
371
372 WHEN FND_API.G_EXC_ERROR THEN
373 ROLLBACK TO IEO_PING_RESTART_SVR_PUB;
374 RETCODE := FND_API.G_RET_STS_ERROR ;
375 FND_MSG_PUB.Count_And_Get
376 ( p_count => l_msg_count ,
377 p_data => ERRBUF
378 );
379 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
380 ROLLBACK TO IEO_CHECK_RESTART_SERVERS_PUB;
381 RETCODE := FND_API.G_RET_STS_UNEXP_ERROR ;
382 FND_MSG_PUB.Count_And_Get
383 ( p_count => l_msg_count ,
384 p_data => ERRBUF
385 );
386 WHEN OTHERS THEN
387 ROLLBACK TO IEO_CHECK_RESTART_SERVERS_PUB;
388 RETCODE := FND_API.G_RET_STS_UNEXP_ERROR ;
389 IF FND_MSG_PUB.Check_Msg_Level
390 (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
391 THEN
392 FND_MSG_PUB.Add_Exc_Msg
393 ( G_PKG_NAME ,
394 l_api_name
395 );
396 END IF;
397 FND_MSG_PUB.Count_And_Get
398 ( p_count => l_msg_count ,
399 p_data => ERRBUF
400 );
401
402 END IEO_PING_AND_RESTART_SERVER;
403
404
405
406 END IEO_CONCURRENT_PUB;
407