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