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