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

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2