(file) Return to JMPILocalProviderManager.cpp CVS log (file) (dir) Up to [Pegasus] / pegasus / src / Pegasus / ProviderManager2 / JMPI

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

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2