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

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2