(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.19 // 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.19     : _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.18             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.18                        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.18                    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.18                    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.18                       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.18             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.18             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.18             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.18             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.18             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.18             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.18         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.18         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.18         PEG_TRACE_CSTRING (TRC_DISCARDED_DATA, Tracer::LEVEL2,
686 carolann.graves 1.8              "Unexpected error in getIndicationProvidersToEnable");
687                          }
688                      
689 marek           1.18     PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
690 carolann.graves 1.8          "Number of indication providers to enable = %d",
691 marek           1.18         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