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

  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

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2