1 karl 1.10 //%2006////////////////////////////////////////////////////////////////////////
|
2 schuur 1.1 //
|
3 karl 1.6 // Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
4 // Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
5 // Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
6 // IBM Corp.; EMC Corporation, The Open Group.
7 // Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
8 // IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
|
9 karl 1.7 // Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
10 // EMC Corporation; VERITAS Software Corporation; The Open Group.
|
11 karl 1.10 // Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.;
12 // EMC Corporation; Symantec Corporation; The Open Group.
|
13 schuur 1.1 //
14 // Permission is hereby granted, free of charge, to any person obtaining a copy
15 // of this software and associated documentation files (the "Software"), to
16 // deal in the Software without restriction, including without limitation the
17 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
18 // sell copies of the Software, and to permit persons to whom the Software is
19 // furnished to do so, subject to the following conditions:
|
20 mark.hamzy 1.11 //
|
21 schuur 1.1 // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
22 // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
23 // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
24 // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
25 // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
26 // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
27 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
28 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 //
30 //==============================================================================
31 //
32 // Author: Chip Vincent (cvincent@us.ibm.com)
33 //
34 // Modified By: Yi Zhou, Hewlett-Packard Company(yi_zhou@hp.com)
35 // Mike Day IBM Corporation (mdday@us.ibm.com)
36 // Adrian Schuur, schuur@de.ibm.com
37 //
38 //%/////////////////////////////////////////////////////////////////////////////
39
40 #include "JMPILocalProviderManager.h"
41
|
42 mike 1.14 #include <Pegasus/Common/Time.h>
|
43 schuur 1.1 #include <Pegasus/Common/Constants.h>
44 #include <Pegasus/Common/Tracer.h>
45 #include <Pegasus/Common/PegasusVersion.h>
46
47 #include <Pegasus/ProviderManager2/JMPI/JMPIProvider.h>
48 #include <Pegasus/ProviderManager2/JMPI/JMPIProviderModule.h>
49 #include <Pegasus/ProviderManager2/ProviderManagerService.h>
50
51 PEGASUS_USING_STD;
52 PEGASUS_NAMESPACE_BEGIN
53
|
54 mark.hamzy 1.9 int JMPILocalProviderManager::trace=0;
55
56 #ifdef PEGASUS_DEBUG
57 #define DDD(x) if (JMPILocalProviderManager::trace) x;
58 #else
59 #define DDD(x)
60 #endif
61
|
62 schuur 1.1 JMPILocalProviderManager::JMPILocalProviderManager(void)
|
63 kumpf 1.2 : _idle_timeout(IDLE_LIMIT)
|
64 schuur 1.1 {
|
65 mark.hamzy 1.9 #ifdef PEGASUS_DEBUG
66 if (getenv("PEGASUS_JMPI_TRACE"))
67 JMPILocalProviderManager::trace=1;
68 else
69 JMPILocalProviderManager::trace=0;
70 #else
71 JMPILocalProviderManager::trace=0;
72 #endif
|
73 schuur 1.1 }
74
75 JMPILocalProviderManager::~JMPILocalProviderManager(void)
76 {
77 Uint32 ccode;
78
79 _provider_ctrl(UNLOAD_ALL_PROVIDERS, this, &ccode);
80 }
81
82 Sint32 JMPILocalProviderManager::_provider_ctrl(CTRL code, void *parm, void *ret)
83 {
84 static Uint32 quantum;
85 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "_provider_ctrl");
86
87 Sint32 ccode = 0;
88 CTRL_STRINGS *parms = reinterpret_cast<CTRL_STRINGS *>(parm);
89
90 switch(code)
91 {
92
93 case GET_PROVIDER:
94 schuur 1.1 {
|
95 mark.hamzy 1.9 PEG_TRACE_STRING(TRC_PROVIDERMANAGER,
96 Tracer::LEVEL2,
97 "_provider_ctrl::GET_PROVIDER");
98
99 String providerName = *(parms->providerName);
100 String moduleFileName = *(parms->fileName);
101 String interfaceName = *(parms->interfaceName);
102
103 DDD(PEGASUS_STD(cout)
|
104 mark.hamzy 1.11 <<"--- JMPILocalProviderManager::_provider_ctrl: GET_PROVIDER providerName = "
|
105 mark.hamzy 1.9 <<providerName
|
106 mark.hamzy 1.11 <<", moduleFileName = "
107 <<moduleFileName
108 <<", interfaceName = "
109 <<interfaceName
|
110 mark.hamzy 1.9 <<PEGASUS_STD(endl));
|
111 schuur 1.1
|
112 mark.hamzy 1.11 if (providerName.size () == 0)
113 {
114 throw NullPointer();
115 }
116
|
117 schuur 1.1 JMPIProvider::OpProviderHolder* ph =
|
118 mark.hamzy 1.9 reinterpret_cast< JMPIProvider::OpProviderHolder* >( ret );
119 JMPIProviderModule *newModule = NULL;
120 JMPIProviderModule *module = NULL;
121 JMPIProvider *newProvider = NULL;
122 JMPIProvider *provider = NULL;
123 ProviderVector base;
|
124 schuur 1.1
125 try
126 {
|
127 mark.hamzy 1.12 AutoMutex lock (_providerTableMutex);
128
129 if (true == _providers.lookup(providerName, provider))
|
130 mark.hamzy 1.9 {
|
131 mark.hamzy 1.12 PEG_TRACE_STRING(TRC_PROVIDERMANAGER,
132 Tracer::LEVEL4,
133 "Found JMPIProvider "
134 + providerName
135 + " in JMPIProvider Manager Cache");
136 DDD(PEGASUS_STD(cout)
137 <<"--- JMPILocalProviderManager::_provider_ctrl: Found "
138 <<providerName
139 <<" in JMPIProvider Manager Cache"
140 <<PEGASUS_STD(endl));
141 DDD(PEGASUS_STD(cout)
142 <<"--- JMPILocalProviderManager::_provider_ctrl:"
143 " setting provider to "
144 <<PEGASUS_STD(hex)
145 <<(int)provider
146 <<PEGASUS_STD(dec)
147 <<PEGASUS_STD(endl));
|
148 schuur 1.1
|
149 mark.hamzy 1.12 ph->SetProvider(provider);
|
150 mark.hamzy 1.9
|
151 mark.hamzy 1.12 ///////////////////ph->GetProvider().update_idle_timer();
152 break;
153 }
|
154 mark.hamzy 1.9
|
155 mark.hamzy 1.12 PEG_TRACE_STRING(TRC_PROVIDERMANAGER,
156 Tracer::LEVEL4,
157 "Creating JMPIProvider " + providerName );
158 DDD(PEGASUS_STD(cout)
159 <<"--- JMPILocalProviderManager::_provider_ctrl: Creating "
160 <<providerName
161 <<PEGASUS_STD(endl));
|
162 mark.hamzy 1.9
|
163 mark.hamzy 1.12 if (false == _modules.lookup(moduleFileName, module))
164 {
165 PEG_TRACE_STRING(TRC_PROVIDERMANAGER,
166 Tracer::LEVEL4,
167 "Creating JMPIProvider Module "
168 + moduleFileName );
169 DDD(PEGASUS_STD(cout)
170 <<"--- JMPILocalProviderManager::_provider_ctrl: "
171 "Creating module "
172 <<moduleFileName
173 <<PEGASUS_STD(endl));
|
174 mark.hamzy 1.9
|
175 mark.hamzy 1.12 newModule = new JMPIProviderModule(moduleFileName,
176 interfaceName);
|
177 mark.hamzy 1.9
|
178 mark.hamzy 1.12 if (0 == newModule)
179 {
180 PEG_TRACE_STRING(TRC_PROVIDERMANAGER,
181 Tracer::LEVEL4,
182 "new JMPIProviderModule is NULL!");
183 DDD(PEGASUS_STD(cout)
184 <<"--- JMPILocalProviderManager::_provider_ctrl:"
185 " new JMPIProviderModule is NULL!"
186 <<PEGASUS_STD(endl));
|
187 mark.hamzy 1.9
|
188 mark.hamzy 1.12 throw NullPointer();
189 }
|
190 mark.hamzy 1.9
|
191 mark.hamzy 1.12 module = newModule;
|
192 mark.hamzy 1.9
|
193 mark.hamzy 1.12 _modules.insert(moduleFileName, module);
194 }
195 else
196 {
197 PEG_TRACE_STRING(TRC_PROVIDERMANAGER,
198 Tracer::LEVEL4,
199 "Using Cached JMPIProvider Module "
200 + moduleFileName);
201 DDD(PEGASUS_STD(cout)
202 <<"--- JMPILocalProviderManager::_provider_ctrl: "
203 "Using cached "
204 <<moduleFileName
205 <<PEGASUS_STD(endl));
|
206 mark.hamzy 1.9 }
207
208 PEG_TRACE_STRING(TRC_PROVIDERMANAGER,
209 Tracer::LEVEL4,
210 "Loading/Linking JMPIProvider Module "
211 + moduleFileName );
212 DDD(PEGASUS_STD(cout)
213 <<"--- JMPILocalProviderManager::_provider_ctrl:"
214 " Loading/Linking module "
215 <<moduleFileName
216 <<PEGASUS_STD(endl));
217
218 try
219 {
220 base = module->load(moduleFileName);
221 }
222 catch(...)
223 {
224 PEG_TRACE_STRING(TRC_PROVIDERMANAGER,
225 Tracer::LEVEL4,
226 "Exception caught Loading/Linking"
227 mark.hamzy 1.9 " JMPIProvider Module "
228 + moduleFileName );
229 DDD(PEGASUS_STD(cout)
230 <<"--- JMPILocalProviderManager::_provider_ctrl: "
231 "Exception caught Loading/Linking module "
232 <<moduleFileName
233 <<PEGASUS_STD(endl));
234
235 throw;
236 }
237
238 // create provider module
239 newProvider = new JMPIProvider(providerName, module, &base);
240 if (0 == newProvider)
241 {
242 PEG_TRACE_STRING(TRC_PROVIDERMANAGER,
243 Tracer::LEVEL4,
244 "new JMPIProvider is NULL!");
245 DDD(PEGASUS_STD(cout)
246 <<"--- JMPILocalProviderManager::_provider_ctrl: "
247 "new JMPIProvider is NULL!"
248 mark.hamzy 1.9 <<PEGASUS_STD(endl));
249
250 throw NullPointer();
251 }
252
253 provider = newProvider;
254
255 if (0 == (provider->_cimom_handle = new CIMOMHandle()))
256 {
257 PEG_TRACE_STRING(TRC_PROVIDERMANAGER,
258 Tracer::LEVEL4,
259 "_cimom_handle is NULL!");
260 DDD(PEGASUS_STD(cout)
261 <<"--- JMPILocalProviderManager::_provider_ctrl:"
262 " _cimom_handle is NULL!"
263 <<PEGASUS_STD(endl));
264
265 throw NullPointer();
266 }
267
268 provider->_quantum = 0;
269 mark.hamzy 1.9
270 {
271 AutoMutex lock(provider->_statusMutex);
272
273 PEG_TRACE_STRING(TRC_PROVIDERMANAGER,
274 Tracer::LEVEL2,
275 "Loading JMPIProvider "
276 + provider->_name);
277 DDD(PEGASUS_STD(cout)
278 <<"--- JMPILocalProviderManager::_provider_ctrl:"
279 " Loading "
280 <<provider->_name
281 <<PEGASUS_STD(endl));
282 try
283 {
284 provider->initialize(*(provider->_cimom_handle));
285 }
|
286 marek 1.13 catch(CIMException &cimExcept)
287 {
288 PEG_TRACE_STRING(
289 TRC_PROVIDERMANAGER,
290 Tracer::LEVEL4,
291 "Calling provider->initialize caused exception:"
292 +cimExcept.getMessage()
293 );
294 DDD(PEGASUS_STD(cout)
295 <<"--- JMPILocalProviderManager::_provider_ctrl:"
296 " Exception caught calling initialize!"
297 <<PEGASUS_STD(endl));
298 throw;
299 }
300 catch(Exception &except)
301 {
302 PEG_TRACE_STRING(
303 TRC_PROVIDERMANAGER,
304 Tracer::LEVEL4,
305 "Calling provider->initialize caused exception:"
306 +except.getMessage()
307 marek 1.13 );
308 DDD(PEGASUS_STD(cout)
309 <<"--- JMPILocalProviderManager::_provider_ctrl:"
310 " Exception caught calling initialize!"
311 <<PEGASUS_STD(endl));
312 throw PEGASUS_CIM_EXCEPTION(CIM_ERR_FAILED,
313 except.getMessage());
314 }
|
315 mark.hamzy 1.9 catch(...)
316 {
317 PEG_TRACE_STRING(TRC_PROVIDERMANAGER,
318 Tracer::LEVEL4,
319 "Exception caught calling initialize!");
320 DDD(PEGASUS_STD(cout)
321 <<"--- JMPILocalProviderManager::_provider_ctrl:"
322 " Exception caught calling initialize!"
323 <<PEGASUS_STD(endl));
324
325 throw UninitializedObjectException();
326 }
327 }
|
328 mark.hamzy 1.12
329 ///////////////provider->update_idle_timer();
330
331 _providers.insert(providerName, provider);
|
332 mark.hamzy 1.9 }
333 catch (...)
334 {
335 if (newModule)
336 {
337 _modules.remove(moduleFileName);
338 }
339
340 delete newModule;
341
342 if (newProvider)
343 {
344 delete newProvider->_cimom_handle;
345 }
346
347 delete newProvider;
348
349 throw;
350 }
351
352 DDD(PEGASUS_STD(cout)
353 mark.hamzy 1.9 <<"--- JMPILocalProviderManager::_provider_ctrl:"
354 "setting provider to "
355 <<PEGASUS_STD(hex)
356 <<(int)provider
357 <<PEGASUS_STD(dec)
358 <<PEGASUS_STD(endl));
|
359 schuur 1.1
|
360 mark.hamzy 1.9 ph->SetProvider( provider );
|
361 schuur 1.1 break;
362 }
363
364 case UNLOAD_PROVIDER:
|
365 mark.hamzy 1.9 {
366 DDD(PEGASUS_STD(cout)
367 <<"--- JMPILocalProviderManager::_provider_ctrl: "
368 "UNLOAD_PROVIDER"
369 <<PEGASUS_STD(endl));
370 break;
|
371 schuur 1.1 }
372
373 case LOOKUP_PROVIDER:
374 {
|
375 mark.hamzy 1.9 PEG_TRACE_STRING(TRC_PROVIDERMANAGER,
376 Tracer::LEVEL2,
377 "_provider_ctrl::LOOKUP_PROVIDER");
378 DDD(PEGASUS_STD(cout)
379 <<"--- JMPILocalProviderManager::_provider_ctrl: "
380 "LOOKUP_PROVIDER "
381 <<*(parms->providerName)
382 <<PEGASUS_STD(endl));
383
384 AutoMutex lock (_providerTableMutex);
385
386 if (true == _providers.lookup(*(parms->providerName),
387 *(reinterpret_cast<JMPIProvider * *>(ret))))
388 {
389 PEG_TRACE_STRING(TRC_PROVIDERMANAGER,
390 Tracer::LEVEL4,
391 "Found JMPIProvider in cache: "
392 + *(parms->providerName));
|
393 schuur 1.1
|
394 mark.hamzy 1.9 ////////////////(*(reinterpret_cast<JMPIProvider * *>(ret)))->update_idle_timer();
|
395 schuur 1.1 }
396 else
397 {
|
398 mark.hamzy 1.9 PEG_TRACE_STRING(TRC_PROVIDERMANAGER,
399 Tracer::LEVEL4,
400 "Could not find JMPIProvider in cache: "
401 + *(parms->providerName));
|
402 schuur 1.1 ccode = -1;
403 }
404
405 break;
406 }
407
408 case LOOKUP_MODULE:
409 {
|
410 mark.hamzy 1.9 PEG_TRACE_STRING(TRC_PROVIDERMANAGER,
411 Tracer::LEVEL2,
412 "_provider_ctrl::LOOKUP_MODULE");
413 DDD(PEGASUS_STD(cout)
414 <<"--- JMPILocalProviderManager::_provider_ctrl: "
415 "LOOKUP_MODULE "
416 <<*(parms->fileName)
417 <<PEGASUS_STD(endl));
|
418 schuur 1.1
|
419 mark.hamzy 1.9 AutoMutex lock (_providerTableMutex);
|
420 schuur 1.1
|
421 mark.hamzy 1.9 if (false == _modules.lookup(*(parms->fileName),
|
422 schuur 1.1 *(reinterpret_cast<JMPIProviderModule * *>(ret))))
423 {
424 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
425 "Could not find JMPIProvider Module in cache: " +
426 *(parms->fileName));
427 ccode = -1;
428 }
429
430 break;
431 }
432
433 case INSERT_PROVIDER:
434 {
|
435 mark.hamzy 1.9 PEG_TRACE_STRING(TRC_PROVIDERMANAGER,
436 Tracer::LEVEL2,
437 "_provider_ctrl::INSERT_PROVIDER");
438 DDD(PEGASUS_STD(cout)
439 <<"--- JMPILocalProviderManager::_provider_ctrl: "
440 "INSERT_PROVIDER "
441 <<*(parms->providerName)
442 <<PEGASUS_STD(endl));
443
444 AutoMutex lock (_providerTableMutex);
|
445 schuur 1.1
|
446 mark.hamzy 1.9 if (false == _providers.insert(*(parms->providerName),
447 *reinterpret_cast<JMPIProvider * *>(parm)))
|
448 schuur 1.1 ccode = -1;
449 break;
450 }
|
451 mark.hamzy 1.9
|
452 schuur 1.1 case INSERT_MODULE:
453 {
|
454 mark.hamzy 1.9 PEG_TRACE_STRING(TRC_PROVIDERMANAGER,
455 Tracer::LEVEL2,
456 "_provider_ctrl::INSERT_MODULE");
457 DDD(PEGASUS_STD(cout)
458 <<"--- JMPILocalProviderManager::_provider_ctrl: "
459 "INSERT_MODULE "
460 <<*(parms->fileName)
461 <<PEGASUS_STD(endl));
462
463 AutoMutex lock (_providerTableMutex);
464
465 if(false == _modules.insert(*(parms->fileName),
466 *reinterpret_cast<JMPIProviderModule * *>(parm)))
|
467 schuur 1.1 ccode = -1;
468 break;
469 }
|
470 mark.hamzy 1.9
|
471 schuur 1.1 case REMOVE_PROVIDER:
472 {
|
473 mark.hamzy 1.9 PEG_TRACE_STRING(TRC_PROVIDERMANAGER,
474 Tracer::LEVEL2,
475 "_provider_ctrl::REMOVE_PROVIDER");
476 DDD(PEGASUS_STD(cout)
477 <<"--- JMPILocalProviderManager::_provider_ctrl: "
478 "REMOVE_PROVIDER "
479 <<*(parms->providerName)
480 <<PEGASUS_STD(endl));
|
481 schuur 1.1
|
482 mark.hamzy 1.9 AutoMutex lock (_providerTableMutex);
483
484 if (false == _providers.remove(*(parms->providerName)))
|
485 schuur 1.1 ccode = -1;
486 break;
487 }
|
488 mark.hamzy 1.9
|
489 schuur 1.1 case REMOVE_MODULE:
490 {
|
491 mark.hamzy 1.9 PEG_TRACE_STRING(TRC_PROVIDERMANAGER,
492 Tracer::LEVEL2,
493 "_provider_ctrl::REMOVE_MODULE");
494 DDD(PEGASUS_STD(cout)
495 <<"--- JMPILocalProviderManager::_provider_ctrl: REMOVE_MODULE "
496 <<*(parms->fileName)
497 <<PEGASUS_STD(endl));
|
498 schuur 1.1
|
499 mark.hamzy 1.9 AutoMutex lock (_providerTableMutex);
500
501 if (false == _modules.remove(*(parms->fileName)))
|
502 schuur 1.1 ccode = -1;
503 break;
504 }
505
506 case UNLOAD_ALL_PROVIDERS:
|
507 schuur 1.4 {
|
508 mark.hamzy 1.9 DDD(PEGASUS_STD(cout)
509 <<"--- JMPILocalProviderManager::_provider_ctrl: "
510 "UNLOAD_ALL_PROVIDERS"
511 <<PEGASUS_STD(endl));
512
|
513 schuur 1.4 JMPIjvm::destroyJVM();
|
514 mark.hamzy 1.9 break;
515 }
|
516 schuur 1.4
|
517 schuur 1.1 case UNLOAD_IDLE_PROVIDERS:
|
518 mark.hamzy 1.9 {
519 DDD(PEGASUS_STD(cout)
520 <<"--- JMPILocalProviderManager::_provider_ctrl: "
521 "UNLOAD_IDLE_PROVIDERS"
522 <<PEGASUS_STD(endl));
523 break;
|
524 schuur 1.1 }
525
526 case UNLOAD_IDLE_MODULES:
|
527 mark.hamzy 1.9 {
528 DDD(PEGASUS_STD(cout)
529 <<"--- JMPILocalProviderManager::_provider_ctrl: "
530 "UNLOAD_IDLE_MODULES"
531 <<PEGASUS_STD(endl));
532 break;
|
533 schuur 1.1 }
534
535 default:
|
536 mark.hamzy 1.9 {
537 DDD(PEGASUS_STD(cout)
538 <<"--- JMPILocalProviderManager::_provider_ctrl: unknown! "
539 <<code
540 <<PEGASUS_STD(endl));
541 ccode = -1;
542 break;
543 }
|
544 schuur 1.1 }
545 PEG_METHOD_EXIT();
546 return(ccode);
547 }
548
549 JMPIProvider * JMPILocalProviderManager::_getResolver
550 (const String & fileName, const String & interfaceType)
551 {
552 JMPIProvider *pr;
553 String id(interfaceType+String("::")+fileName);
554 if (true == _resolvers.lookup(id,pr)) {
555 return pr;
556 }
557 return NULL;
558 }
|
559 mark.hamzy 1.9
|
560 schuur 1.1 JMPIProvider::OpProviderHolder JMPILocalProviderManager::getProvider(
561 const String & fileName,
562 const String & providerName,
563 const String & interfaceName)
564 {
565 JMPIProvider::OpProviderHolder ph;
566 CTRL_STRINGS strings;
567 Sint32 ccode;
568 strings.fileName = &fileName;
569 strings.providerName = &providerName;
570 strings.interfaceName = &interfaceName;
571
|
572 mark.hamzy 1.9 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "ProviderManager::getProvider");
573
|
574 schuur 1.1 try {
575 ccode = _provider_ctrl( GET_PROVIDER, &strings, &ph );
576 }
|
577 mark.hamzy 1.9 catch (const Exception &e) {
578 DDD(PEGASUS_STD(cout)
579 <<"--- JMPILocalProviderManager::getProvider: loading proxy: "
580 <<e.getMessage()
581 <<PEGASUS_STD(endl));
582 PEG_METHOD_EXIT();
|
583 schuur 1.1 throw;
|
584 mark.hamzy 1.9 }
|
585 schuur 1.1 catch(...) {
|
586 mark.hamzy 1.9 DDD(PEGASUS_STD(cout)
587 <<"--- JMPILocalProviderManager::getProvider: catch (...) "
588 <<PEGASUS_STD(endl));
|
589 schuur 1.1 PEG_METHOD_EXIT();
590 throw;
591 }
592
593 PEG_METHOD_EXIT();
594 return(ph);
595 }
596
597 void JMPILocalProviderManager::unloadProvider(
598 const String & fileName,
599 const String & providerName)
600 {
601 CTRL_STRINGS strings;
602 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "ProviderManager::unloadProvider");
603 strings.fileName = &fileName;
604 strings.providerName = &providerName;
605 _provider_ctrl(UNLOAD_PROVIDER, &strings, (void *)0);
606 PEG_METHOD_EXIT();
607 }
608
609 void JMPILocalProviderManager::shutdownAllProviders(void)
610 schuur 1.1 {
611 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "ProviderManager::shutdownAllProviders");
612 _provider_ctrl(UNLOAD_ALL_PROVIDERS, (void *)this, (void *)0);
613 PEG_METHOD_EXIT();
614 }
615
616
|
617 kumpf 1.2 Boolean JMPILocalProviderManager::hasActiveProviders()
|
618 schuur 1.1 {
|
619 mark.hamzy 1.9 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "ProviderManager::hasActiveProviders");
620
621 AutoMutex lock (_providerTableMutex);
622
623 Boolean fRet = _providers.size() > 0;
|
624 kumpf 1.2
625 PEG_METHOD_EXIT();
|
626 mark.hamzy 1.9 return fRet;
|
627 kumpf 1.2 }
628
629 void JMPILocalProviderManager::unloadIdleProviders()
630 {
631 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
632 "ProviderManager::unloadIdleProviders");
633
|
634 schuur 1.1 static struct timeval first = {0,0}, now, last = {0,0};
|
635 mark.hamzy 1.9
|
636 schuur 1.1 if(first.tv_sec == 0)
|
637 kumpf 1.2 {
|
638 mike 1.14 Time::gettimeofday(&first);
|
639 kumpf 1.2 }
|
640 mike 1.14 Time::gettimeofday(&now);
|
641 kumpf 1.2
642 if (((now.tv_sec - first.tv_sec) > IDLE_LIMIT) &&
643 ((now.tv_sec - last.tv_sec) > IDLE_LIMIT))
|
644 schuur 1.1 {
|
645 mike 1.14 Time::gettimeofday(&last);
|
646 kumpf 1.2 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
647 "Checking for Idle providers to unload.");
648 try
649 {
|
650 mark.hamzy 1.9 AutoMutex lock(_providerTableMutex);
651
|
652 kumpf 1.2 _provider_ctrl(UNLOAD_IDLE_PROVIDERS, this, (void *)0);
653 }
654 catch(...)
|
655 schuur 1.1 {
656 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
|
657 kumpf 1.2 "Caught unexpected exception from UNLOAD_IDLE_PROVIDERS.");
|
658 schuur 1.1 }
659 }
660 PEG_METHOD_EXIT();
661 }
662
|
663 carolann.graves 1.8 Array <JMPIProvider *>
664 JMPILocalProviderManager::getIndicationProvidersToEnable ()
665 {
666 PEG_METHOD_ENTER (TRC_PROVIDERMANAGER,
667 "JMPILocalProviderManager::getIndicationProvidersToEnable");
668
669 Array <JMPIProvider *> enableProviders;
670
671 try
672 {
673 AutoMutex lock (_providerTableMutex);
674
|
675 mark.hamzy 1.9 Tracer::trace (TRC_PROVIDERMANAGER, Tracer::LEVEL4,
676 "Number of providers in _providers table = %d", _providers.size ());
677
|
678 carolann.graves 1.8 //
679 // Iterate through the _providers table
680 //
681 for (ProviderTable::Iterator i = _providers.start (); i != 0; i++)
682 {
683 //
684 // Enable any indication provider with current subscriptions
685 //
686 JMPIProvider * provider = i.value ();
687 if (provider->testSubscriptions ())
688 {
689 enableProviders.append (provider);
690 }
691 }
692 }
693 catch (CIMException & e)
694 {
695 PEG_TRACE_STRING (TRC_DISCARDED_DATA, Tracer::LEVEL2,
696 "CIMException: " + e.getMessage ());
697 }
698 catch (Exception & e)
699 carolann.graves 1.8 {
700 PEG_TRACE_STRING (TRC_DISCARDED_DATA, Tracer::LEVEL2,
701 "Exception: " + e.getMessage ());
702 }
703 catch (...)
704 {
705 PEG_TRACE_STRING (TRC_DISCARDED_DATA, Tracer::LEVEL2,
706 "Unexpected error in getIndicationProvidersToEnable");
707 }
708
709 Tracer::trace (TRC_PROVIDERMANAGER, Tracer::LEVEL4,
710 "Number of indication providers to enable = %d",
711 enableProviders.size ());
712
713 PEG_METHOD_EXIT ();
714 return enableProviders;
715 }
716
717
|
718 schuur 1.1 PEGASUS_NAMESPACE_END
|