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