(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 r.kieninger 1.17.4.2 // NOCHKSRC
 34 schuur      1.1      #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 r.kieninger 1.17.4.2     : _idle_timeout(PEGASUS_PROVIDER_IDLE_TIMEOUT_SECONDS)
 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 marek       1.17.4.1             PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER,
 90 mark.hamzy  1.9                                   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 mark.hamzy  1.17                            <<(long)provider
140 mark.hamzy  1.12                            <<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 marek       1.17.4.1                        PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER,
175 mark.hamzy  1.12                                             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 marek       1.17.4.1                    PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER,
237 mark.hamzy  1.9                                          Tracer::LEVEL4,
238                                                          "new JMPIProvider is NULL!");
239                                         DDD(PEGASUS_STD(cout)
240                                             <<"--- JMPILocalProviderManager::_provider_ctrl: "
241                                               "new JMPIProvider is NULL!"
242                                             <<PEGASUS_STD(endl));
243                      
244                                         throw NullPointer();
245                                     }
246                      
247                                     provider = newProvider;
248                      
249                                     if (0 == (provider->_cimom_handle = new CIMOMHandle()))
250                                     {
251 marek       1.17.4.1                    PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER,
252 mark.hamzy  1.9                                          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                      
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 mark.hamzy  1.9                              " 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 mark.hamzy  1.17                       }
294 marek       1.13                       catch(Exception &except)
295                                        {
296                                            PEG_TRACE_STRING(
297                                                TRC_PROVIDERMANAGER,
298                                                Tracer::LEVEL4,
299                                                "Calling provider->initialize caused exception:"
300                                                +except.getMessage()
301                                                );
302                                            DDD(PEGASUS_STD(cout)
303                                                <<"--- JMPILocalProviderManager::_provider_ctrl:"
304                                                  " Exception caught calling initialize!"
305                                                  <<PEGASUS_STD(endl));
306 mark.hamzy  1.17                           throw PEGASUS_CIM_EXCEPTION(CIM_ERR_FAILED,
307 marek       1.13                                                       except.getMessage());
308                                        }
309 mark.hamzy  1.9                        catch(...)
310                                        {
311 marek       1.17.4.1                       PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER,
312 mark.hamzy  1.9                                             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 mark.hamzy  1.17                       <<(long)provider
351 mark.hamzy  1.9                        <<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 marek       1.17.4.1             PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER,
370 mark.hamzy  1.9                                   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 marek       1.17.4.1             PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER,
405 mark.hamzy  1.9                                   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 marek       1.17.4.1             PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER,
430 mark.hamzy  1.9                                   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 marek       1.17.4.1             PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER,
449 mark.hamzy  1.9                                   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 marek       1.17.4.1             PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER,
468 mark.hamzy  1.9                                   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 marek       1.17.4.1             PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER,
486 mark.hamzy  1.9                                   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 marek       1.17.4.1         PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
637 kumpf       1.16                 "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 marek           1.17.4.1         PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
656                                      "Number of providers in _providers table = %d", _providers.size ()));
657 mark.hamzy      1.9      
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 marek           1.17.4.1         PEG_TRACE_CSTRING (TRC_DISCARDED_DATA, Tracer::LEVEL2,
686 carolann.graves 1.8                  "Unexpected error in getIndicationProvidersToEnable");
687                              }
688                          
689 marek           1.17.4.1     PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
690 carolann.graves 1.8              "Number of indication providers to enable = %d",
691 marek           1.17.4.1         enableProviders.size ()));
692 carolann.graves 1.8      
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