version 1.2, 2004/10/17 20:40:04
|
version 1.18, 2008/12/02 09:01:58
|
|
|
//%2004//////////////////////////////////////////////////////////////////////// |
//%LICENSE//////////////////////////////////////////////////////////////// |
// | // |
// Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development |
// Licensed to The Open Group (TOG) under one or more contributor license |
// Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems. |
// agreements. Refer to the OpenPegasusNOTICE.txt file distributed with |
// Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.; |
// this work for additional information regarding copyright ownership. |
// IBM Corp.; EMC Corporation, The Open Group. |
// Each contributor licenses this file to you under the OpenPegasus Open |
// Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.; |
// Source License; you may not use this file except in compliance with the |
// IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group. |
// License. |
// |
// |
// Permission is hereby granted, free of charge, to any person obtaining a copy |
// Permission is hereby granted, free of charge, to any person obtaining a |
// of this software and associated documentation files (the "Software"), to |
// copy of this software and associated documentation files (the "Software"), |
// deal in the Software without restriction, including without limitation the |
// to deal in the Software without restriction, including without limitation |
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
// the rights to use, copy, modify, merge, publish, distribute, sublicense, |
// sell copies of the Software, and to permit persons to whom the Software is |
// and/or sell copies of the Software, and to permit persons to whom the |
// furnished to do so, subject to the following conditions: |
// Software is furnished to do so, subject to the following conditions: |
// |
// |
// THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN |
// The above copyright notice and this permission notice shall be included |
// ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED |
// in all copies or substantial portions of the Software. |
// "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT |
// |
// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR |
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT |
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN |
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. |
// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION |
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY |
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, |
// |
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE |
//============================================================================== |
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
// |
// |
// Author: Chip Vincent (cvincent@us.ibm.com) |
////////////////////////////////////////////////////////////////////////// |
// |
|
// Modified By: Yi Zhou, Hewlett-Packard Company(yi_zhou@hp.com) |
|
// Mike Day, IBM (mdday@us.ibm.com) |
|
// Adrian Schuur, schuur@de.ibm.com |
|
// | // |
//%///////////////////////////////////////////////////////////////////////////// | //%///////////////////////////////////////////////////////////////////////////// |
| |
#ifndef Pegasus_JMPIProvider_h | #ifndef Pegasus_JMPIProvider_h |
#define Pegasus_JMPIProvider_h | #define Pegasus_JMPIProvider_h |
| |
#include "JMPIImpl.h" |
|
#include <Pegasus/Common/Config.h> | #include <Pegasus/Common/Config.h> |
#include <Pegasus/Common/IPC.h> |
|
#include <Pegasus/Provider/CIMOMHandle.h> | #include <Pegasus/Provider/CIMOMHandle.h> |
#include <Pegasus/Provider/CIMInstanceProvider.h> | #include <Pegasus/Provider/CIMInstanceProvider.h> |
#include <Pegasus/Provider/CIMAssociationProvider.h> | #include <Pegasus/Provider/CIMAssociationProvider.h> |
#include <Pegasus/Provider/CIMMethodProvider.h> | #include <Pegasus/Provider/CIMMethodProvider.h> |
|
#include <Pegasus/Common/AtomicInt.h> |
//#include <Pegasus/ProviderManager2/CMPI/CMPIResolverModule.h> |
|
| |
#include <Pegasus/Server/Linkage.h> | #include <Pegasus/Server/Linkage.h> |
|
#include <Pegasus/ProviderManager2/JMPI/Linkage.h> |
|
#include <Pegasus/ProviderManager2/JMPI/JMPIImpl.h> |
| |
PEGASUS_NAMESPACE_BEGIN | PEGASUS_NAMESPACE_BEGIN |
| |
class JMPIProviderModule; | class JMPIProviderModule; |
class CMPIResolverModule; |
|
| |
struct ProviderVector { | struct ProviderVector { |
jclass jProviderClass; | jclass jProviderClass; |
|
|
// provider module. It is wrapped in a facade to stabalize the interface | // provider module. It is wrapped in a facade to stabalize the interface |
// and is directly tied to a module. | // and is directly tied to a module. |
| |
class PEGASUS_SERVER_LINKAGE JMPIProvider : |
class PEGASUS_JMPIPM_LINKAGE JMPIProvider : |
public virtual CIMProvider | public virtual CIMProvider |
{ | { |
public: | public: |
|
|
| |
Status getStatus(void) const; | Status getStatus(void) const; |
String getName(void) const; | String getName(void) const; |
void setResolver(CMPIResolverModule *rm) { _rm=rm; } |
|
| |
JMPIProviderModule *getModule(void) const; | JMPIProviderModule *getModule(void) const; |
| |
// << Mon Oct 14 15:42:24 2002 mdd >> for use with DQueue template |
|
// to allow conversion from using Array<> |
|
Boolean operator == (const void *key) const; |
|
Boolean operator == (const JMPIProvider & prov) const; |
|
|
|
// virtual void get_idle_timer(struct timeval *); |
|
// virtual void update_idle_timer(void); |
|
// virtual Boolean pending_operation(void); |
|
// virtual Boolean unload_ok(void); | // virtual Boolean unload_ok(void); |
| |
// force provider manager to keep in memory | // force provider manager to keep in memory |
|
|
// allow provider manager to unload when idle | // allow provider manager to unload when idle |
virtual void unprotect(void); | virtual void unprotect(void); |
| |
|
/** |
|
Increments the count of current subscriptions for this provider, and |
|
determines if there were no current subscriptions before the increment. |
|
If there were no current subscriptions before the increment, the first |
|
subscription has been created, and the provider's enableIndications |
|
method should be called. |
|
|
|
@return True, if before the increment there were no current |
|
subscriptions for this provider; |
|
False, otherwise |
|
*/ |
|
Boolean testIfZeroAndIncrementSubscriptions (); |
|
|
|
/** |
|
Decrements the count of current subscriptions for this provider, and |
|
determines if there are no current subscriptions after the decrement. |
|
If there are no current subscriptions after the decrement, the last |
|
subscription has been deleted, and the provider's disableIndications |
|
method should be called. |
|
|
|
@return True, if after the decrement there are no current subscriptions |
|
for this provider; |
|
False, otherwise |
|
*/ |
|
Boolean decrementSubscriptionsAndTestIfZero (); |
|
|
|
/** |
|
Determines if there are current subscriptions for this provider. |
|
|
|
@return True, if there is at least one current subscription |
|
for this provider; |
|
False, otherwise |
|
*/ |
|
Boolean testSubscriptions (); |
|
|
|
/** |
|
Resets the count of current subscriptions for the indication provider. |
|
*/ |
|
void resetSubscriptions (); |
|
|
|
/** |
|
Sets the provider instance for the provider. |
|
|
|
Note: the provider instance is set only for an indication provider, and |
|
is set when a Create Subscription request is processed for the provider. |
|
|
|
@param instance the Provider CIMInstance for the provider |
|
*/ |
|
void setProviderInstance (const CIMInstance & instance); |
|
|
|
/** |
|
Gets the provider instance for the provider. |
|
|
|
Note: the provider instance is set only for an indication provider, and |
|
only if a Create Subscription request has been processed for the |
|
provider. |
|
|
|
@return the Provider CIMInstance for the provider |
|
*/ |
|
CIMInstance getProviderInstance (); |
|
|
protected: | protected: |
Status _status; | Status _status; |
JMPIProviderModule *_module; | JMPIProviderModule *_module; |
|
|
private: | private: |
friend class JMPILocalProviderManager; | friend class JMPILocalProviderManager; |
friend class JMPIProviderManager; | friend class JMPIProviderManager; |
friend class ProviderManagerService; |
class OpProviderHolder; |
// friend class OpProviderHolder; |
friend class OpProviderHolder; |
|
mutable Mutex _cimomMutex; |
|
/* NOTE: This is a C++ provider only handle which is currently |
|
** used for calls to ->getClass (). getClass returns |
|
** immediately with data and is therefore safe to lock. |
|
*/ |
CIMOMHandle *_cimom_handle; | CIMOMHandle *_cimom_handle; |
|
/* NOTE: This is the java provider's handle and is left |
|
** untouched. |
|
*/ |
|
CIMOMHandle *_java_cimom_handle; |
void *jProviderClass,*jProvider; | void *jProviderClass,*jProvider; |
String _name; | String _name; |
AtomicInt _no_unload; | AtomicInt _no_unload; |
CMPIResolverModule *_rm; |
|
Uint32 _quantum; | Uint32 _quantum; |
AtomicInt _current_operations; | AtomicInt _current_operations; |
|
mutable Mutex _statusMutex; |
|
|
|
/** |
|
Count of current subscriptions for this provider. Access to this |
|
data member is controlled by the _currentSubscriptionsLock. |
|
*/ |
|
Uint32 _currentSubscriptions; |
|
|
|
/** |
|
A mutex to control access to the _currentSubscriptions member variable. |
|
Before any access (test, increment, decrement or reset) of the |
|
_currentSubscriptions member variable, the _currentSubscriptionsMutex is |
|
first locked. |
|
*/ |
|
Mutex _currentSubscriptionsMutex; |
|
|
|
/** |
|
The Provider CIMInstance for the provider. |
|
The Provider CIMInstance is set only for indication providers, and only |
|
if a Create Subscription request has been processed for the provider. |
|
The Provider CIMInstance is needed in order to construct the |
|
EnableIndicationsResponseHandler to send to the indication provider |
|
when the provider's enableIndications() method is called. |
|
The Provider CIMInstance is needed in the |
|
EnableIndicationsResponseHandler in order to construct the Process |
|
Indication request when an indication is delivered by the provider. |
|
The Provider CIMInstance is needed in the Process Indication request |
|
to enable the Indication Service to determine if the provider that |
|
generated the indication accepted a matching subscription. |
|
*/ |
|
CIMInstance _providerInstance; |
//}; | //}; |
| |
| |