1 karl 1.18 //%2005////////////////////////////////////////////////////////////////////////
|
2 schuur 1.1 //
|
3 karl 1.17 // 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 schuur 1.1 // IBM Corp.; EMC Corporation, The Open Group.
|
7 karl 1.17 // 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.18 // Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
10 // EMC Corporation; VERITAS Software Corporation; The Open Group.
|
11 schuur 1.1 //
12 // Permission is hereby granted, free of charge, to any person obtaining a copy
13 // of this software and associated documentation files (the "Software"), to
14 // deal in the Software without restriction, including without limitation the
15 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
16 // sell copies of the Software, and to permit persons to whom the Software is
17 // furnished to do so, subject to the following conditions:
|
18 mark.hamzy 1.23 //
|
19 schuur 1.1 // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
20 // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
21 // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
22 // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
23 // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
24 // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
25 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27 //
28 //==============================================================================
29 //
|
30 mark.hamzy 1.23 // Author: Adrian Schuur, schuur@de.ibm.com
|
31 schuur 1.1 //
|
32 se.gupta 1.9 // Modified By: Seema Gupta (gseema@in.ibm.com) for PEP135
|
33 joyce.j 1.19 // Josephine Eskaline Joyce, IBM (jojustin@in.ibm.com) for PEP#101
|
34 schuur 1.1 //
35 //%/////////////////////////////////////////////////////////////////////////////
36
37 #include "JMPIProviderManager.h"
38
39 #include "JMPIImpl.h"
40
41 #include <Pegasus/Common/CIMMessage.h>
42 #include <Pegasus/Common/OperationContext.h>
43 #include <Pegasus/Common/Tracer.h>
44 #include <Pegasus/Common/StatisticalData.h>
45 #include <Pegasus/Common/Logger.h>
46 #include <Pegasus/Common/MessageLoader.h> //l10n
|
47 kumpf 1.10 #include <Pegasus/Common/Constants.h>
|
48 schuur 1.1
49 #include <Pegasus/Config/ConfigManager.h>
50
51 #include <Pegasus/ProviderManager2/ProviderName.h>
52 #include <Pegasus/ProviderManager2/JMPI/JMPIProvider.h>
|
53 konrad.r 1.22 #include <Pegasus/ProviderManager2/JMPI/JMPIProviderModule.h>
|
54 schuur 1.1 #include <Pegasus/ProviderManager2/ProviderManagerService.h>
55
|
56 schuur 1.12 #include <Pegasus/ProviderManager2/CMPI/CMPI_SelectExp.h>
57
|
58 schuur 1.1
59 PEGASUS_USING_STD;
60 PEGASUS_NAMESPACE_BEGIN
61
|
62 mark.hamzy 1.23 int JMPIProviderManager::trace=0;
|
63 mark.hamzy 1.24
64 #ifdef PEGASUS_DEBUG
|
65 mark.hamzy 1.23 #define DDD(x) if (JMPIProviderManager::trace) x;
|
66 mark.hamzy 1.24 #else
67 #define DDD(x)
68 #endif
|
69 mark.hamzy 1.23
70 #include "Convert.h"
|
71 schuur 1.1
|
72 mark.hamzy 1.23 void JMPIProviderManager::debugPrintMethodPointers (JNIEnv *env, jclass jc)
73 {
74 // cd ${PEGAUSE_HOME}/src/Pegasus/ProviderManager2/JMPI/org/pegasus/jmpi/tests/JMPI_TestPropertyTypes
75 // javap -s -p JMPI_TestPropertyTypes
76 static const char *methodNames[][2] = {
|
77 mark.hamzy 1.24 // CIMProvider
78 // cimom-2003-11-24/org/snia/wbem/provider/CIMProvider.java
79 // src/Pegasus/ProviderManager2/JMPI/org/pegasus/jmpi/CIMProvider.java
80 {"initialize","(Lorg/pegasus/jmpi/CIMOMHandle;)V"},
|
81 mark.hamzy 1.23 {"cleanup","()V"},
|
82 mark.hamzy 1.24 // InstanceProvider
83 // cimom-2003-11-24/org/snia/wbem/provider/InstanceProvider.java
84 // src/Pegasus/ProviderManager2/JMPI/org/pegasus/jmpi/CIMInstanceProvider.java
85 {"enumInstances","(Lorg/pegasus/jmpi/CIMObjectPath;ZLorg/pegasus/jmpi/CIMClass;)Ljava/util/Vector;"},
86 {"enumInstances","(Lorg/pegasus/jmpi/CIMObjectPath;ZLorg/pegasus/jmpi/CIMClass;Z)Ljava/util/Vector;"},
87 {"getInstance","(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;Z)Lorg/pegasus/jmpi/CIMInstance;"},
|
88 mark.hamzy 1.23 {"createInstance","(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMInstance;)Lorg/pegasus/jmpi/CIMObjectPath;"},
89 {"setInstance","(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMInstance;)V"},
90 {"deleteInstance","(Lorg/pegasus/jmpi/CIMObjectPath;)V"},
91 {"execQuery","(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;ILorg/pegasus/jmpi/CIMClass;)Ljava/util/Vector;"},
|
92 mark.hamzy 1.24 // MethodProvider
93 // cimom-2003-11-24/org/snia/wbem/provider/MethodProvider.java
94 // src/Pegasus/ProviderManager2/JMPI/org/pegasus/jmpi/CIMMethodProvider.java
|
95 mark.hamzy 1.23 {"invokeMethod","(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/util/Vector;Ljava/util/Vector;)Lorg/pegasus/jmpi/CIMValue;"},
|
96 mark.hamzy 1.24 // PropertyProvider
97 // cimom-2003-11-24/org/snia/wbem/provider/PropertyProvider.java
98 // AssociatorProvider
99 // cimom-2003-11-24/org/snia/wbem/provider20/AssociatorProvider.java
100 // src/Pegasus/ProviderManager2/JMPI/org/pegasus/jmpi/CIMAssociationProvider.java
101 // CIMProviderRouter
102 // cimom-2003-11-24/org/snia/wbem/provider20/CIMProviderRouter.java
103 // EventProvider
104 // cimom-2003-11-24/org/snia/wbem/provider20/EventProvider.java
105 // src/Pegasus/ProviderManager2/JMPI/org/pegasus/jmpi/EventProvider.java
|
106 mark.hamzy 1.23 {"authorizeFilter","(Lorg/pegasus/jmpi/SelectExp;Ljava/lang/String;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;)V"},
107 {"mustPoll","(Lorg/pegasus/jmpi/SelectExp;Ljava/lang/String;Lorg/pegasus/jmpi/CIMObjectPath;)Z"},
108 {"activateFilter","(Lorg/pegasus/jmpi/SelectExp;Ljava/lang/String;Lorg/pegasus/jmpi/CIMObjectPath;Z)V"},
|
109 mark.hamzy 1.24 {"deActivateFilter","(Lorg/pegasus/jmpi/SelectExp;Ljava/lang/String;Lorg/pegasus/jmpi/CIMObjectPath;Z)V"},
110 // IndicationHandler
111 // cimom-2003-11-24/org/snia/wbem/provider20/IndicationHandler.java
112 // ProviderAdapter
113 // cimom-2003-11-24/org/snia/wbem/provider20/ProviderAdapter.java
114 // JMPI_TestPropertyTypes
115 {"findObjectPath","(Lorg/pegasus/jmpi/CIMObjectPath;)I"},
116 {"testPropertyTypesValue","(Lorg/pegasus/jmpi/CIMInstance;)V"}
|
117 mark.hamzy 1.23 };
118
119 if (!env)
120 {
121 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::debugPrintMethodPointers: env is NULL!"<<PEGASUS_STD(endl));
122 return;
123 }
124 if (!jc)
125 {
126 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::debugPrintMethodPointers: jc is NULL!"<<PEGASUS_STD(endl));
127 return;
128 }
129
130 for (int i = 0; i < (int)(sizeof (methodNames)/sizeof (methodNames[0])); i++)
131 {
132 jmethodID id = env->GetMethodID(jc,methodNames[i][0], methodNames[i][1]);
133 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::debugPrintMethodPointers: "<<methodNames[i][0]<<", id = "<<PEGASUS_STD(hex)<<(int)id<<PEGASUS_STD(dec)<<PEGASUS_STD(endl));
134 env->ExceptionClear();
135 }
136 }
|
137 schuur 1.1
138 JMPIProviderManager::IndProvTab JMPIProviderManager::provTab;
139 JMPIProviderManager::IndSelectTab JMPIProviderManager::selxTab;
140 JMPIProviderManager::ProvRegistrar JMPIProviderManager::provReg;
141
142 JMPIProviderManager::JMPIProviderManager(Mode m)
143 {
144 mode=m;
|
145 carolann.graves 1.21 _subscriptionInitComplete = false;
|
146 mark.hamzy 1.23
147 #ifdef PEGASUS_DEBUG
148 if (getenv("PEGASUS_JMPI_TRACE"))
149 JMPIProviderManager::trace = 1;
150 else
151 JMPIProviderManager::trace = 0;
152 #else
153 JMPIProviderManager::trace = 0;
154 #endif
|
155 schuur 1.1 }
156
157 JMPIProviderManager::~JMPIProviderManager(void)
158 {
159 }
160
|
161 schuur 1.12 Boolean JMPIProviderManager::insertProvider(const ProviderName & name,
|
162 schuur 1.1 const String &ns, const String &cn)
163 {
164 String key(ns+String("::")+cn+String("::")+CIMValue(name.getCapabilitiesMask()).toString());
|
165 mark.hamzy 1.23
166 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::insertProvider: "<<key<<PEGASUS_STD(endl));
167
|
168 schuur 1.1 return provReg.insert(key,name);
169 }
|
170 mark.hamzy 1.23
|
171 schuur 1.1 Message * JMPIProviderManager::processMessage(Message * request) throw()
172 {
|
173 mark.hamzy 1.23 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager::processMessage()");
|
174 schuur 1.1
175 Message * response = 0;
|
176 mark.hamzy 1.23
|
177 schuur 1.1 // pass the request message to a handler method based on message type
178 switch(request->getType())
179 {
180 case CIM_GET_INSTANCE_REQUEST_MESSAGE:
181 response = handleGetInstanceRequest(request);
|
182 mark.hamzy 1.25 break;
|
183 schuur 1.1
184 case CIM_ENUMERATE_INSTANCES_REQUEST_MESSAGE:
185 response = handleEnumerateInstancesRequest(request);
|
186 mark.hamzy 1.25 break;
|
187 schuur 1.1
188 case CIM_ENUMERATE_INSTANCE_NAMES_REQUEST_MESSAGE:
189 response = handleEnumerateInstanceNamesRequest(request);
|
190 mark.hamzy 1.25 break;
|
191 schuur 1.1
192 case CIM_CREATE_INSTANCE_REQUEST_MESSAGE:
193 response = handleCreateInstanceRequest(request);
|
194 mark.hamzy 1.25 break;
|
195 schuur 1.1
196 case CIM_MODIFY_INSTANCE_REQUEST_MESSAGE:
197 response = handleModifyInstanceRequest(request);
|
198 mark.hamzy 1.25 break;
|
199 schuur 1.1
200 case CIM_DELETE_INSTANCE_REQUEST_MESSAGE:
201 response = handleDeleteInstanceRequest(request);
|
202 mark.hamzy 1.25 break;
|
203 schuur 1.1
|
204 mark.hamzy 1.25 case CIM_EXEC_QUERY_REQUEST_MESSAGE:
205 response = handleExecQueryRequest(request);
|
206 schuur 1.1 break;
207
208 case CIM_ASSOCIATORS_REQUEST_MESSAGE:
209 response = handleAssociatorsRequest(request);
|
210 mark.hamzy 1.25 break;
|
211 schuur 1.1
212 case CIM_ASSOCIATOR_NAMES_REQUEST_MESSAGE:
213 response = handleAssociatorNamesRequest(request);
|
214 mark.hamzy 1.25 break;
|
215 schuur 1.1
216 case CIM_REFERENCES_REQUEST_MESSAGE:
217 response = handleReferencesRequest(request);
|
218 mark.hamzy 1.25 break;
|
219 schuur 1.1
220 case CIM_REFERENCE_NAMES_REQUEST_MESSAGE:
221 response = handleReferenceNamesRequest(request);
|
222 mark.hamzy 1.25 break;
|
223 schuur 1.1
|
224 schuur 1.11 case CIM_INVOKE_METHOD_REQUEST_MESSAGE:
|
225 schuur 1.1 response = handleInvokeMethodRequest(request);
|
226 mark.hamzy 1.25 break;
|
227 schuur 1.1
|
228 schuur 1.12 case CIM_CREATE_SUBSCRIPTION_REQUEST_MESSAGE:
|
229 schuur 1.1 response = handleCreateSubscriptionRequest(request);
|
230 mark.hamzy 1.25 break;
|
231 schuur 1.1
|
232 mark.hamzy 1.25 /* case CIM_MODIFY_SUBSCRIPTION_REQUEST_MESSAGE:
|
233 schuur 1.1 response = handleModifySubscriptionRequest(request);
234 break;
|
235 schuur 1.12 */
|
236 schuur 1.1 case CIM_DELETE_SUBSCRIPTION_REQUEST_MESSAGE:
237 response = handleDeleteSubscriptionRequest(request);
|
238 mark.hamzy 1.25 break;
|
239 schuur 1.1
|
240 schuur 1.12 /* case CIM_EXPORT_INDICATION_REQUEST_MESSAGE:
|
241 kumpf 1.7 response = handleExportIndicationRequest(request);
|
242 schuur 1.1 break;
|
243 schuur 1.12 */
|
244 schuur 1.1 case CIM_DISABLE_MODULE_REQUEST_MESSAGE:
245 response = handleDisableModuleRequest(request);
|
246 mark.hamzy 1.25 break;
|
247 schuur 1.1
248 case CIM_ENABLE_MODULE_REQUEST_MESSAGE:
249 response = handleEnableModuleRequest(request);
|
250 mark.hamzy 1.25 break;
|
251 schuur 1.1
252 case CIM_STOP_ALL_PROVIDERS_REQUEST_MESSAGE:
253 response = handleStopAllProvidersRequest(request);
|
254 mark.hamzy 1.25 break;
|
255 schuur 1.1
|
256 kumpf 1.4 case CIM_INITIALIZE_PROVIDER_REQUEST_MESSAGE:
|
257 mark.hamzy 1.23 response = handleInitializeProviderRequest(request);
|
258 mark.hamzy 1.25 break;
|
259 kumpf 1.4
|
260 carolann.graves 1.21 case CIM_SUBSCRIPTION_INIT_COMPLETE_REQUEST_MESSAGE:
261 response = handleSubscriptionInitCompleteRequest (request);
|
262 mark.hamzy 1.25 break;
|
263 carolann.graves 1.21
|
264 schuur 1.1 default:
|
265 mark.hamzy 1.23 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
266 "*** Unsupported Request "+request->getType());
267 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::processMessage: Unsupported request "<<request->getType ()<<PEGASUS_STD(endl));
|
268 mark.hamzy 1.25
|
269 schuur 1.1 response = handleUnsupportedRequest(request);
270 break;
271 }
272
273 PEG_METHOD_EXIT();
274
275 return(response);
276 }
277
|
278 kumpf 1.6 Boolean JMPIProviderManager::hasActiveProviders()
279 {
280 return providerManager.hasActiveProviders();
281 }
282
283 void JMPIProviderManager::unloadIdleProviders()
|
284 schuur 1.1 {
|
285 kumpf 1.6 providerManager.unloadIdleProviders();
|
286 schuur 1.1 }
287
288 #define STRDUPA(s,o) \
289 if (s) { \
290 o=(const char*)alloca(strlen(s)); \
291 strcpy((char*)(o),(s)); \
292 } \
293 else o=NULL;
294
295 #define CHARS(cstring) (char*)(strlen(cstring)?(const char*)cstring:NULL)
296
297
298 #define HandlerIntroBase(type,type1,message,request,response,handler,respType) \
299 CIM##type##RequestMessage * request = \
300 dynamic_cast<CIM##type##RequestMessage *>(const_cast<Message *>(message)); \
301 PEGASUS_ASSERT(request != 0); \
302 CIM##type##ResponseMessage * response = \
303 new CIM##type##ResponseMessage( \
304 request->messageId, \
305 CIMException(), \
306 request->queueIds.copyAndPop() \
307 schuur 1.1 respType \
308 PEGASUS_ASSERT(response != 0); \
309 response->setKey(request->getKey()); \
310 response->setHttpMethod(request->getHttpMethod()); \
311 type1##ResponseHandler handler(request, response);
312
313 #define VOIDINTRO );
314 #define NOVOIDINTRO(type) ,type);
315 #define METHODINTRO ,CIMValue(), Array<CIMParamValue>(), request->methodName );
316
317
318 #define HandlerIntroVoid(type,message,request,response,handler) \
319 HandlerIntroBase(type,type,message,request,response,handler,VOIDINTRO)
320
321 #define HandlerIntroMethod(type,message,request,response,handler) \
322 HandlerIntroBase(type,type,message,request,response,handler,METHODINTRO)
323
324 #define HandlerIntroInd(type,message,request,response,handler) \
325 HandlerIntroBase(type,Operation,message,request,response,handler,VOIDINTRO)
326
|
327 kumpf 1.4 #define HandlerIntroInit(type,message,request,response,handler) \
328 HandlerIntroBase(type,Operation,message,request,response,handler,VOIDINTRO)
329
|
330 schuur 1.1 #define HandlerIntro(type,message,request,response,handler,respType) \
331 HandlerIntroBase(type,type,message,request,response,handler,NOVOIDINTRO(respType))
332
333 #define HandlerCatch(handler) \
334 catch(CIMException & e) \
335 { PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, \
336 "Exception: " + e.getMessage()); \
337 handler.setStatus(e.getCode(), e.getContentLanguages(), e.getMessage()); \
338 } \
339 catch(Exception & e) \
340 { PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, \
341 "Exception: " + e.getMessage()); \
342 handler.setStatus(CIM_ERR_FAILED, e.getContentLanguages(), e.getMessage()); \
343 } \
344 catch(...) \
345 { PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, \
346 "Exception: Unknown"); \
347 handler.setStatus(CIM_ERR_FAILED, "Unknown error."); \
348 }
349
|
350 schuur 1.13 static jobjectArray getList(JvmVector *jv, JNIEnv *env, CIMPropertyList &list)
351 {
352 Uint32 s=list.size();
353 jobjectArray pl=NULL;
354 if (s) {
355 jstring initial=env->NewString(NULL,0);
|
356 mark.hamzy 1.23 pl=(jobjectArray)env->NewObjectArray(s,jv->StringClassRef,initial);
|
357 schuur 1.13 for (Uint32 i=0; i<s; i++) {
358 env->SetObjectArrayElement
359 (pl,i,env->NewStringUTF(list[i].getString().getCString()));
360 }
361 }
362 return pl;
363 }
|
364 schuur 1.1
365 Message * JMPIProviderManager::handleGetInstanceRequest(const Message * message) throw()
366 {
|
367 mark.hamzy 1.23 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleGetInstanceRequest");
|
368 schuur 1.1
369 HandlerIntro(GetInstance,message,request,response,handler,CIMInstance());
370
|
371 mark.hamzy 1.25 typedef enum {
372 METHOD_UNKNOWN = 0,
373 METHOD_PEGASUS_24,
374 METHOD_SNIA_PROVIDER20,
375 } METHOD_VERSION;
376 METHOD_VERSION eMethodFound = METHOD_UNKNOWN;
377 JNIEnv *env = NULL;
|
378 schuur 1.13
|
379 schuur 1.1 try {
|
380 mark.hamzy 1.23 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
|
381 schuur 1.1 "JMPIProviderManager::handleGetInstanceRequest - Host name: $0 Name space: $1 Class name: $2",
382 System::getHostName(),
383 request->nameSpace.getString(),
384 request->instanceName.getClassName().getString());
385
|
386 mark.hamzy 1.23 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleGetInstanceRequest: hostname = "<<System::getHostName()<<", namespace = "<<request->nameSpace.getString()<<", classname = "<<request->instanceName.getClassName().getString()<<PEGASUS_STD(endl));
387
|
388 schuur 1.1 // make target object path
389 CIMObjectPath objectPath(
390 System::getHostName(),
391 request->nameSpace,
392 request->instanceName.getClassName(),
393 request->instanceName.getKeyBindings());
394
395 // resolve provider name
|
396 kumpf 1.2 ProviderName name = _resolveProviderName(
397 request->operationContext.get(ProviderIdContainer::NAME));
|
398 schuur 1.1
399 // get cached or load new provider module
400 JMPIProvider::OpProviderHolder ph = providerManager.getProvider(name.getPhysicalName(),
|
401 mark.hamzy 1.23 name.getLogicalName());
|
402 schuur 1.1 OperationContext context;
403
|
404 mark.hamzy 1.23 // forward request
|
405 mark.hamzy 1.25 JMPIProvider &pr=ph.GetProvider();
|
406 schuur 1.1
|
407 mark.hamzy 1.25 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, "Calling provider.getInstance: " + pr.getName());
|
408 schuur 1.1
|
409 mark.hamzy 1.23 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleGetInstanceRequest: Calling provider getInstance: "<<pr.getName()<<PEGASUS_STD(endl));
|
410 schuur 1.1
|
411 mark.hamzy 1.25 JvmVector *jv = 0;
412
413 env = JMPIjvm::attachThread(&jv);
414
415 JMPIProvider::pm_service_op_lock op_lock(&pr);
416
417 STAT_GETSTARTTIME;
418
419 jmethodID id = NULL;
420
421 // public abstract org.pegasus.jmpi.CIMInstance getInstance (org.pegasus.jmpi.CIMObjectPath cop,
422 // org.pegasus.jmpi.CIMClass cimClass,
423 // boolean localOnly)
424 // throws org.pegasus.jmpi.CIMException
425 id = env->GetMethodID((jclass)pr.jProviderClass,
426 "getInstance",
427 "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;Z)Lorg/pegasus/jmpi/CIMInstance;");
428
429 if (id != NULL)
430 {
431 eMethodFound = METHOD_SNIA_PROVIDER20;
432 mark.hamzy 1.25 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleGetInstanceRequest: found METHOD_SNIA_PROVIDER20."<<PEGASUS_STD(endl));
433 }
434
435 if (id == NULL)
436 {
437 env->ExceptionClear();
438
439 // public org.pegasus.jmpi.CIMInstance getInstance (org.pegasus.jmpi.CIMObjectPath op,
440 // boolean localOnly,
441 // boolean includeQualifiers,
442 // boolean includeClassOrigin,
443 // java.lang.String[] propertyList,
444 // org.pegasus.jmpi.CIMClass cc)
445 // throws org.pegasus.jmpi.CIMException
446 id = env->GetMethodID((jclass)pr.jProviderClass,
447 "getInstance",
448 "(Lorg/pegasus/jmpi/CIMObjectPath;ZZZ[Ljava/lang/String;Lorg/pegasus/jmpi/CIMClass;)Lorg/pegasus/jmpi/CIMInstance;");
449
450 if (id != NULL)
451 {
452 eMethodFound = METHOD_PEGASUS_24;
453 mark.hamzy 1.25 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleGetInstanceRequest: found METHOD_PEGASUS_24."<<PEGASUS_STD(endl));
454 }
455 }
456
|
457 schuur 1.1 JMPIjvm::checkException(env);
|
458 mark.hamzy 1.23
|
459 mark.hamzy 1.25 switch (eMethodFound)
460 {
461 case METHOD_PEGASUS_24:
462 {
463 jint jObj = DEBUG_ConvertCToJava (CIMObjectPath*, jint, &objectPath);
464 jobject jRef = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jObj);
465
466 JMPIjvm::checkException(env);
467
468 CIMClass cls = pr._cimom_handle->getClass(context,
469 request->nameSpace,
470 request->instanceName.getClassName(),
471 false,
472 true,
473 true,
474 CIMPropertyList());
475
476 jObj = DEBUG_ConvertCToJava (CIMClass*, jint, &cls);
477
478 jobject jCc = env->NewObject(jv->CIMClassClassRef,jv->CIMClassNewI,jObj);
479
480 mark.hamzy 1.25 JMPIjvm::checkException(env);
|
481 mark.hamzy 1.23
|
482 mark.hamzy 1.25 jobjectArray jPropertyList = getList(jv,env,request->propertyList);
|
483 schuur 1.1
|
484 mark.hamzy 1.25 jobject inst = env->CallObjectMethod((jobject)pr.jProvider,
485 id,
486 jRef,
487 request->localOnly,
488 request->includeQualifiers,
489 request->includeClassOrigin,
490 jPropertyList,
491 jCc);
|
492 mark.hamzy 1.23
|
493 mark.hamzy 1.25 JMPIjvm::checkException(env);
|
494 mark.hamzy 1.23
|
495 mark.hamzy 1.25 STAT_PMS_PROVIDEREND;
|
496 schuur 1.1
|
497 mark.hamzy 1.25 handler.processing();
|
498 schuur 1.1
|
499 mark.hamzy 1.25 if (inst) {
500 jint jCi = env->CallIntMethod(inst,JMPIjvm::jv.CIMInstanceCInst);
501 CIMInstance *ci = DEBUG_ConvertJavaToC (jint, CIMInstance*, jCi);
|
502 schuur 1.13
|
503 mark.hamzy 1.25 handler.deliver(*ci);
504 }
505 handler.complete();
506 break;
|
507 mark.hamzy 1.23 }
|
508 schuur 1.13
|
509 mark.hamzy 1.25 case METHOD_SNIA_PROVIDER20:
510 {
511 jint jObj = DEBUG_ConvertCToJava (CIMObjectPath*, jint, &objectPath);
512 jobject jRef = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jObj);
513
514 JMPIjvm::checkException(env);
515
516 CIMClass cls = pr._cimom_handle->getClass(context,
517 request->nameSpace,
518 request->instanceName.getClassName(),
519 false,
520 true,
521 true,
522 CIMPropertyList());
523
524 jObj = DEBUG_ConvertCToJava (CIMClass*, jint, &cls);
525
526 jobject jCc = env->NewObject(jv->CIMClassClassRef,jv->CIMClassNewI,jObj);
527
528 JMPIjvm::checkException(env);
529
530 mark.hamzy 1.25 jobject inst = env->CallObjectMethod((jobject)pr.jProvider,
531 id,
532 jRef,
533 jCc,
534 true);
535
536 JMPIjvm::checkException(env);
537
538 STAT_PMS_PROVIDEREND;
|
539 schuur 1.1
|
540 mark.hamzy 1.25 handler.processing();
|
541 schuur 1.13
|
542 mark.hamzy 1.25 if (inst) {
543 jint jCi = env->CallIntMethod(inst,JMPIjvm::jv.CIMInstanceCInst);
544 CIMInstance *ci = DEBUG_ConvertJavaToC (jint, CIMInstance*, jCi);
|
545 schuur 1.13
|
546 mark.hamzy 1.25 handler.deliver(*ci);
547 }
548 handler.complete();
549 break;
550 }
|
551 mark.hamzy 1.23
|
552 mark.hamzy 1.25 case METHOD_UNKNOWN:
553 {
554 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleGetInstanceRequest: should not be here!"<<PEGASUS_STD(endl));
555 break;
556 }
|
557 schuur 1.1 }
|
558 schuur 1.13 }
|
559 schuur 1.1 HandlerCatch(handler);
|
560 schuur 1.13
|
561 schuur 1.1 if (env) JMPIjvm::detachThread();
|
562 schuur 1.13
|
563 schuur 1.1 PEG_METHOD_EXIT();
564
565 return(response);
566 }
567
568 Message * JMPIProviderManager::handleEnumerateInstancesRequest(const Message * message) throw()
569 {
|
570 mark.hamzy 1.23 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleEnumerateInstanceRequest");
571
572 HandlerIntro(EnumerateInstances,message,request,response,handler,Array<CIMInstance>());
|
573 schuur 1.1
|
574 mark.hamzy 1.25 typedef enum {
575 METHOD_UNKNOWN = 0,
576 METHOD_PEGASUS_24,
577 METHOD_SNIA_PROVIDER20,
578 } METHOD_VERSION;
579 METHOD_VERSION eMethodFound = METHOD_UNKNOWN;
580 JNIEnv *env = NULL;
|
581 schuur 1.13
582 try {
|
583 schuur 1.1 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
584 "JMPIProviderManager::handleEnumerateInstancesRequest - Host name: $0 Name space: $1 Class name: $2",
585 System::getHostName(),
586 request->nameSpace.getString(),
587 request->className.getString());
588
|
589 mark.hamzy 1.23 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstancesRequest: hostname = "<<System::getHostName()<<", namespace = "<<request->nameSpace.getString()<<", classname = "<<request->className.getString()<<PEGASUS_STD(endl));
590
|
591 schuur 1.1 // make target object path
592 CIMObjectPath objectPath(
593 System::getHostName(),
594 request->nameSpace,
595 request->className);
596
597 // resolve provider name
|
598 kumpf 1.2 ProviderName name = _resolveProviderName(
599 request->operationContext.get(ProviderIdContainer::NAME));
|
600 schuur 1.1
601 // get cached or load new provider module
602 JMPIProvider::OpProviderHolder ph =
603 providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(),
604 String::EMPTY);
605
|
606 schuur 1.12 // convert arguments
|
607 schuur 1.1 OperationContext context;
608
|
609 schuur 1.12 context.insert(request->operationContext.get(IdentityContainer::NAME));
610 context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME));
611 context.insert(request->operationContext.get(ContentLanguageListContainer::NAME));
|
612 schuur 1.1
613 // forward request
|
614 mark.hamzy 1.25 JMPIProvider &pr = ph.GetProvider();
|
615 schuur 1.1
|
616 mark.hamzy 1.25 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, "Calling provider.enumerateInstances: " + pr.getName());
|
617 schuur 1.1
|
618 mark.hamzy 1.23 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstancesRequest: Calling provider enumerateInstances: "<<pr.getName()<<PEGASUS_STD(endl));
|
619 schuur 1.12
|
620 mark.hamzy 1.25 JvmVector *jv = 0;
621
622 env = JMPIjvm::attachThread(&jv);
623
624 JMPIProvider::pm_service_op_lock op_lock(&pr);
625
626 STAT_GETSTARTTIME;
627
628 jmethodID id = NULL;
629
630 // public abstract java.util.Vector enumInstances (org.pegasus.jmpi.CIMObjectPath cop,
631 // boolean deep,
632 // org.pegasus.jmpi.CIMClass cimClass,
633 // boolean localOnly)
634 // throws org.pegasus.jmpi.CIMException
635 id = env->GetMethodID((jclass)pr.jProviderClass,
636 "enumInstances",
637 "(Lorg/pegasus/jmpi/CIMObjectPath;ZLorg/pegasus/jmpi/CIMClass;Z)Ljava/util/Vector;");
638
639 if (id != NULL)
640 {
641 mark.hamzy 1.25 eMethodFound = METHOD_SNIA_PROVIDER20;
642 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstancesRequest: found METHOD_SNIA_PROVIDER20."<<PEGASUS_STD(endl));
643 }
644
645 if (id == NULL)
646 {
647 env->ExceptionClear();
|
648 schuur 1.1
|
649 mark.hamzy 1.25 // public org.pegasus.jmpi.CIMInstance[] enumerateInstances (org.pegasus.jmpi.CIMObjectPath op,
650 // boolean localOnly,
651 // boolean includeQualifiers,
652 // boolean includeClassOrigin,
653 // java.lang.String[] propertyList,
654 // org.pegasus.jmpi.CIMClass cc)
655 // throws org.pegasus.jmpi.CIMException
656 id = env->GetMethodID((jclass)pr.jProviderClass,
657 "enumerateInstances",
658 "(Lorg/pegasus/jmpi/CIMObjectPath;ZZZ[Ljava/lang/String;Lorg/pegasus/jmpi/CIMClass;)[Lorg/pegasus/jmpi/CIMInstance;");
|
659 mark.hamzy 1.23
|
660 mark.hamzy 1.25 if (id != NULL)
661 {
662 eMethodFound = METHOD_PEGASUS_24;
663 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstancesRequest: found METHOD_PEGASUS_24."<<PEGASUS_STD(endl));
664 }
665 }
|
666 schuur 1.12
667 JMPIjvm::checkException(env);
|
668 mark.hamzy 1.23
|
669 mark.hamzy 1.25 switch (eMethodFound)
670 {
671 case METHOD_PEGASUS_24:
672 {
673 jint jObj = DEBUG_ConvertCToJava (CIMObjectPath*, jint, &objectPath);
674 jobject jRef = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jObj);
|
675 mark.hamzy 1.23
|
676 mark.hamzy 1.25 JMPIjvm::checkException(env);
|
677 schuur 1.1
|
678 mark.hamzy 1.25 CIMClass cls = pr._cimom_handle->getClass(context,
679 request->nameSpace,
680 request->className,
681 false,
682 true,
683 true,
684 CIMPropertyList());
685 JMPIjvm::checkException(env);
|
686 schuur 1.1
|
687 mark.hamzy 1.25 jObj = DEBUG_ConvertCToJava (CIMClass*, jint, &cls);
|
688 schuur 1.1
|
689 mark.hamzy 1.25 jobject jCc = env->NewObject(jv->CIMClassClassRef,jv->CIMClassNewI,jObj);
|
690 schuur 1.13
|
691 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
692 schuur 1.1
|
693 mark.hamzy 1.25 jobjectArray jPropertyList = getList(jv,env,request->propertyList);
694
695 jobjectArray jAr = (jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
696 id,
697 jRef,
698 request->localOnly,
699 request->includeQualifiers,
700 request->includeClassOrigin,
701 jPropertyList,
702 jCc);
703
|
704 mark.hamzy 1.23 JMPIjvm::checkException(env);
705
706 STAT_PMS_PROVIDEREND;
707
708 handler.processing();
|
709 mark.hamzy 1.25 if (jAr) {
710 for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
|
711 mark.hamzy 1.23 JMPIjvm::checkException(env);
712
|
713 mark.hamzy 1.25 jobject jInst=env->GetObjectArrayElement(jAr,i);
|
714 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
715 schuur 1.13
|
716 mark.hamzy 1.23 jint jCi = env->CallIntMethod(jInst,JMPIjvm::jv.CIMInstanceCInst);
717 CIMInstance *ci = DEBUG_ConvertJavaToC (jint, CIMInstance*, jCi);
|
718 schuur 1.13
|
719 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
720 schuur 1.13
|
721 mark.hamzy 1.23 handler.deliver(*ci);
722 }
723 }
724 handler.complete();
|
725 mark.hamzy 1.25 break;
|
726 schuur 1.13 }
|
727 mark.hamzy 1.25
728 case METHOD_SNIA_PROVIDER20:
729 {
730 jint jObj = DEBUG_ConvertCToJava (CIMObjectPath*, jint, &objectPath);
731 jobject jRef = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jObj);
732
733 JMPIjvm::checkException(env);
734
735 CIMClass cls = pr._cimom_handle->getClass(context,
736 request->nameSpace,
737 request->className,
738 false,
739 true,
740 true,
741 CIMPropertyList());
742 JMPIjvm::checkException(env);
743
744 jObj = DEBUG_ConvertCToJava (CIMClass*, jint, &cls);
745
746 jobject jCc = env->NewObject(jv->CIMClassClassRef,jv->CIMClassNewI,jObj);
747
748 mark.hamzy 1.25 JMPIjvm::checkException(env);
749
750 jobject jVec = env->CallObjectMethod((jobject)pr.jProvider,
751 id,
752 jRef,
753 false,
754 jCc,
755 true);
756
|
757 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
758 schuur 1.12
|
759 mark.hamzy 1.23 STAT_PMS_PROVIDEREND;
760
761 handler.processing();
|
762 mark.hamzy 1.25 if (jVec) {
763 for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); i<m; i++) {
|
764 mark.hamzy 1.23 JMPIjvm::checkException(env);
765
|
766 mark.hamzy 1.25 jobject jInst=env->CallObjectMethod(jVec,JMPIjvm::jv.VectorElementAt,i);
|
767 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
768 schuur 1.12
|
769 mark.hamzy 1.23 jint jCi = env->CallIntMethod(jInst,JMPIjvm::jv.CIMInstanceCInst);
770 CIMInstance *ci = DEBUG_ConvertJavaToC (jint, CIMInstance*, jCi);
|
771 schuur 1.12
|
772 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
773 schuur 1.12
|
774 mark.hamzy 1.23 handler.deliver(*ci);
775 }
776 }
777 handler.complete();
|
778 mark.hamzy 1.25 break;
779 }
780
781 case METHOD_UNKNOWN:
782 {
783 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstancesRequest: should not be here!"<<PEGASUS_STD(endl));
784 break;
785 }
|
786 schuur 1.1 }
787 }
788 HandlerCatch(handler);
|
789 schuur 1.12
|
790 schuur 1.11 if (env) JMPIjvm::detachThread();
|
791 schuur 1.12
|
792 schuur 1.1 PEG_METHOD_EXIT();
793
794 return(response);
795 }
796
797 Message * JMPIProviderManager::handleEnumerateInstanceNamesRequest(const Message * message) throw()
798 {
799 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager::handleEnumerateInstanceNamesRequest");
800
|
801 mark.hamzy 1.23 HandlerIntro(EnumerateInstanceNames,message,request,response, handler,Array<CIMObjectPath>());
802
|
803 mark.hamzy 1.25 typedef enum {
804 METHOD_UNKNOWN = 0,
805 METHOD_PEGASUS_24,
806 METHOD_SNIA_PROVIDER20,
807 } METHOD_VERSION;
808 METHOD_VERSION eMethodFound = METHOD_UNKNOWN;
809 JNIEnv *env = NULL;
|
810 schuur 1.13
|
811 schuur 1.1 try {
812 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
813 "JMPIProviderManager::handleEnumerateInstanceNamesRequest - Host name: $0 Name space: $1 Class name: $2",
814 System::getHostName(),
815 request->nameSpace.getString(),
816 request->className.getString());
|
817 mark.hamzy 1.23
818 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstanceNamesRequest: hostname = "<<System::getHostName()<<", namespace = "<<request->nameSpace.getString()<<", classname = "<<request->className.getString()<<PEGASUS_STD(endl));
819
|
820 mark.hamzy 1.25 // make target object path
|
821 schuur 1.1 CIMObjectPath objectPath(
822 System::getHostName(),
823 request->nameSpace,
824 request->className);
825
826 // resolve provider name
|
827 kumpf 1.2 ProviderName name = _resolveProviderName(
828 request->operationContext.get(ProviderIdContainer::NAME));
|
829 schuur 1.1
830 // get cached or load new provider module
831 JMPIProvider::OpProviderHolder ph =
832 providerManager.getProvider(name.getPhysicalName(), name.getLogicalName());
833
834 // convert arguments
835 OperationContext context;
836
|
837 mark.hamzy 1.23 context.insert(request->operationContext.get(IdentityContainer::NAME));
838 context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME));
839 context.insert(request->operationContext.get(ContentLanguageListContainer::NAME));
|
840 schuur 1.1
|
841 mark.hamzy 1.25 JMPIProvider &pr = ph.GetProvider();
|
842 schuur 1.1
|
843 mark.hamzy 1.25 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, "Calling provider.enumerateInstanceNames: " + pr.getName());
|
844 schuur 1.1
|
845 mark.hamzy 1.23 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstanceNamesRequest: Calling provider : enumerateInstanceNames"<<pr.getName()<<PEGASUS_STD(endl));
|
846 schuur 1.1
|
847 mark.hamzy 1.25 JvmVector *jv = 0;
|
848 schuur 1.12
|
849 mark.hamzy 1.25 env = JMPIjvm::attachThread(&jv);
|
850 schuur 1.1
|
851 mark.hamzy 1.25 JMPIProvider::pm_service_op_lock op_lock(&pr);
|
852 schuur 1.12
|
853 mark.hamzy 1.25 STAT_GETSTARTTIME;
|
854 mark.hamzy 1.23
|
855 mark.hamzy 1.25 jmethodID id = NULL;
|
856 mark.hamzy 1.23
|
857 mark.hamzy 1.25 // public abstract java.util.Vector enumInstances (org.pegasus.jmpi.CIMObjectPath cop,
858 // boolean deep,
859 // org.pegasus.jmpi.CIMClass cimClass)
860 // throws org.pegasus.jmpi.CIMException
861 id = env->GetMethodID((jclass)pr.jProviderClass,
862 "enumInstances",
863 "(Lorg/pegasus/jmpi/CIMObjectPath;ZLorg/pegasus/jmpi/CIMClass;)Ljava/util/Vector;");
|
864 schuur 1.1
|
865 mark.hamzy 1.25 if (id != NULL)
866 {
867 eMethodFound = METHOD_SNIA_PROVIDER20;
868 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstanceNamesRequest: found METHOD_SNIA_PROVIDER20."<<PEGASUS_STD(endl));
869 }
|
870 schuur 1.1
|
871 mark.hamzy 1.25 if (id == NULL)
872 {
873 env->ExceptionClear();
|
874 schuur 1.1
|
875 mark.hamzy 1.25 // public org.pegasus.jmpi.CIMObjectPath[] enumerateInstanceNames (org.pegasus.jmpi.CIMObjectPath op,
876 // org.pegasus.jmpi.CIMClass cc)
877 // throws org.pegasus.jmpi.CIMException
878 id = env->GetMethodID((jclass)pr.jProviderClass,
879 "enumerateInstanceNames",
880 "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;)[Lorg/pegasus/jmpi/CIMObjectPath;");
|
881 schuur 1.13
|
882 mark.hamzy 1.25 if (id != NULL)
883 {
884 eMethodFound = METHOD_PEGASUS_24;
885 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstanceNamesRequest: found METHOD_PEGASUS_24."<<PEGASUS_STD(endl));
886 }
|
887 mark.hamzy 1.23 }
|
888 mark.hamzy 1.25
|
889 schuur 1.1 JMPIjvm::checkException(env);
890
|
891 mark.hamzy 1.25 switch (eMethodFound)
892 {
893 case METHOD_PEGASUS_24:
894 {
895 jint jObj = DEBUG_ConvertCToJava (CIMObjectPath*, jint, &objectPath);
896 jobject jRef = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jObj);
897
898 JMPIjvm::checkException(env);
899
900 CIMClass cls = pr._cimom_handle->getClass(context,
901 request->nameSpace,
902 request->className,
903 false,
904 true,
905 true,
906 CIMPropertyList());
907
908 JMPIjvm::checkException(env);
909
910 jObj = DEBUG_ConvertCToJava (CIMClass*, jint, &cls);
911
912 mark.hamzy 1.25 jobject jCc = env->NewObject(jv->CIMClassClassRef,jv->CIMClassNewI,jObj);
913
914 JMPIjvm::checkException(env);
915
916 jobjectArray jAr = (jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
917 id,
918 jRef,
919 jCc);
920
|
921 mark.hamzy 1.23 JMPIjvm::checkException(env);
922
923 STAT_PMS_PROVIDEREND;
924
925 handler.processing();
|
926 mark.hamzy 1.25 if (jAr) {
927 for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
|
928 mark.hamzy 1.23 JMPIjvm::checkException(env);
929
|
930 mark.hamzy 1.25 jobject inst=env->GetObjectArrayElement(jAr,i);
|
931 mark.hamzy 1.23 JMPIjvm::checkException(env);
932
933 jint jCop = env->CallIntMethod(inst,JMPIjvm::jv.CIMObjectPathCInst);
934 CIMObjectPath *cop = DEBUG_ConvertJavaToC (jint, CIMObjectPath*, jCop);
|
935 schuur 1.13
|
936 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
937 schuur 1.13
|
938 mark.hamzy 1.23 handler.deliver(*cop);
939 }
940 }
941 handler.complete();
|
942 mark.hamzy 1.25 break;
|
943 schuur 1.13 }
|
944 mark.hamzy 1.25
945 case METHOD_SNIA_PROVIDER20:
946 {
947 jint jObj = DEBUG_ConvertCToJava (CIMObjectPath*, jint, &objectPath);
948 jobject jRef = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jObj);
949
950 JMPIjvm::checkException(env);
951
952 CIMClass cls = pr._cimom_handle->getClass(context,
953 request->nameSpace,
954 request->className,
955 false,
956 true,
957 true,
958 CIMPropertyList());
959
960 JMPIjvm::checkException(env);
961
962 jObj = DEBUG_ConvertCToJava (CIMClass*, jint, &cls);
963
964 jobject jCc = env->NewObject(jv->CIMClassClassRef,jv->CIMClassNewI,jObj);
965 mark.hamzy 1.25
966 JMPIjvm::checkException(env);
967
968 jobject jVec = env->CallObjectMethod((jobject)pr.jProvider,
969 id,
970 jRef,
971 true,
972 jCc);
973
|
974 mark.hamzy 1.23 JMPIjvm::checkException(env);
975
976 STAT_PMS_PROVIDEREND;
977
978 handler.processing();
|
979 mark.hamzy 1.25 if (jVec) {
980 for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); i<m; i++) {
|
981 mark.hamzy 1.23 JMPIjvm::checkException(env);
982
|
983 mark.hamzy 1.25 jobject inst=env->CallObjectMethod(jVec,JMPIjvm::jv.VectorElementAt,i);
|
984 mark.hamzy 1.23 JMPIjvm::checkException(env);
985
986 jint jCop = env->CallIntMethod(inst,JMPIjvm::jv.CIMObjectPathCInst);
987 CIMObjectPath *cop = DEBUG_ConvertJavaToC (jint, CIMObjectPath*, jCop);
|
988 schuur 1.13
|
989 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
990 schuur 1.13
|
991 mark.hamzy 1.23 handler.deliver(*cop);
992 }
993 }
994 handler.complete();
|
995 mark.hamzy 1.25 break;
996 }
997
998 case METHOD_UNKNOWN:
999 {
1000 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstanceNamesRequest: should not be here!"<<PEGASUS_STD(endl));
1001 break;
1002 }
|
1003 schuur 1.1 }
1004 }
1005 HandlerCatch(handler);
|
1006 mark.hamzy 1.23
1007 if (env) JMPIjvm::detachThread();
|
1008 schuur 1.1
1009 PEG_METHOD_EXIT();
1010
1011 return(response);
1012 }
1013
1014 Message * JMPIProviderManager::handleCreateInstanceRequest(const Message * message) throw()
1015 {
|
1016 mark.hamzy 1.23 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleCreateInstanceRequest");
1017
1018 HandlerIntro(CreateInstance,message,request,response,handler,CIMObjectPath());
|
1019 schuur 1.1
|
1020 mark.hamzy 1.25 typedef enum {
1021 METHOD_UNKNOWN = 0,
1022 METHOD_SNIA_PROVIDER20,
1023 } METHOD_VERSION;
1024 METHOD_VERSION eMethodFound = METHOD_UNKNOWN;
1025 JNIEnv *env = NULL;
1026
|
1027 schuur 1.1 try {
1028 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
1029 "JMPIProviderManager::handleCreateInstanceRequest - Host name: $0 Name space: $1 Class name: $2",
1030 System::getHostName(),
1031 request->nameSpace.getString(),
1032 request->newInstance.getPath().getClassName().getString());
1033
|
1034 mark.hamzy 1.23 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleCreateInstanceRequest: hostname = "<<System::getHostName()<<", namespace = "<<request->nameSpace.getString()<<", classname = "<<request->newInstance.getPath().getClassName().getString()<<PEGASUS_STD(endl));
1035
|
1036 schuur 1.1 // make target object path
1037 CIMObjectPath objectPath(
1038 System::getHostName(),
1039 request->nameSpace,
1040 request->newInstance.getPath().getClassName(),
1041 request->newInstance.getPath().getKeyBindings());
1042
1043 // resolve provider name
|
1044 kumpf 1.2 ProviderName name = _resolveProviderName(
1045 request->operationContext.get(ProviderIdContainer::NAME));
|
1046 schuur 1.1
1047 // get cached or load new provider module
1048 JMPIProvider::OpProviderHolder ph =
1049 providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(),
|
1050 mark.hamzy 1.23 String::EMPTY);
|
1051 schuur 1.1
1052 // convert arguments
1053 OperationContext context;
1054
|
1055 mark.hamzy 1.23 context.insert(request->operationContext.get(IdentityContainer::NAME));
1056 context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME));
1057 context.insert(request->operationContext.get(ContentLanguageListContainer::NAME));
|
1058 schuur 1.1
1059 // forward request
|
1060 mark.hamzy 1.25 JMPIProvider &pr = ph.GetProvider();
|
1061 schuur 1.1
|
1062 mark.hamzy 1.25 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, "Calling provider.createInstance: " + ph.GetProvider().getName());
|
1063 schuur 1.1
|
1064 mark.hamzy 1.23 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleCreateInstanceRequest: Calling provider createInstance: "<<pr.getName()<<PEGASUS_STD(endl));
|
1065 schuur 1.12
|
1066 mark.hamzy 1.25 JvmVector *jv = 0;
1067
1068 env = JMPIjvm::attachThread(&jv);
1069
1070 JMPIProvider::pm_service_op_lock op_lock(&pr);
1071
1072 STAT_GETSTARTTIME;
1073
1074 jmethodID id = NULL;
1075
1076 // public abstract org.pegasus.jmpi.CIMObjectPath createInstance (org.pegasus.jmpi.CIMObjectPath cop,
1077 // org.pegasus.jmpi.CIMInstance cimInstance)
1078 // throws org.pegasus.jmpi.CIMException
1079 id = env->GetMethodID((jclass)pr.jProviderClass,
1080 "createInstance",
1081 "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMInstance;)Lorg/pegasus/jmpi/CIMObjectPath;");
|
1082 schuur 1.1
|
1083 mark.hamzy 1.25 if (id != NULL)
1084 {
1085 eMethodFound = METHOD_SNIA_PROVIDER20;
1086 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleCreateInstanceRequest: found METHOD_SNIA_PROVIDER20."<<PEGASUS_STD(endl));
1087 }
|
1088 mark.hamzy 1.23
1089 JMPIjvm::checkException(env);
1090
|
1091 mark.hamzy 1.25 switch (eMethodFound)
1092 {
1093 case METHOD_SNIA_PROVIDER20:
1094 {
1095 jint jObj = DEBUG_ConvertCToJava (CIMObjectPath*, jint, &objectPath);
1096 jobject jRef = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jObj);
1097
1098 JMPIjvm::checkException(env);
1099
1100 jObj = DEBUG_ConvertCToJava (CIMInstance*, jint, &request->newInstance);
|
1101 mark.hamzy 1.23
|
1102 mark.hamzy 1.25 jobject jInst = env->NewObject(jv->CIMInstanceClassRef,jv->CIMInstanceNewI,jObj);
1103
1104 JMPIjvm::checkException(env);
|
1105 schuur 1.1
|
1106 mark.hamzy 1.25 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleCreateInstanceRequest: id = "<<id<<", jRef = "<<jRef<<", jInst = "<<jInst<<PEGASUS_STD(endl));
|
1107 schuur 1.1
|
1108 mark.hamzy 1.25 jobject inst = env->CallObjectMethod((jobject)pr.jProvider,
1109 id,
1110 jRef,
1111 jInst);
|
1112 schuur 1.1
|
1113 mark.hamzy 1.25 JMPIjvm::checkException(env);
|
1114 schuur 1.1
|
1115 mark.hamzy 1.25 STAT_PMS_PROVIDEREND;
|
1116 mark.hamzy 1.23
|
1117 mark.hamzy 1.25 handler.processing();
|
1118 mark.hamzy 1.23
|
1119 mark.hamzy 1.25 if (inst) {
1120 jint jCop = env->CallIntMethod(inst,JMPIjvm::jv.CIMObjectPathCInst);
1121 CIMObjectPath *cop = DEBUG_ConvertJavaToC (jint, CIMObjectPath*, jCop);
|
1122 mark.hamzy 1.23
|
1123 mark.hamzy 1.25 handler.deliver(*cop);
1124 }
1125 handler.complete();
1126 break;
1127 }
|
1128 mark.hamzy 1.23
|
1129 mark.hamzy 1.25 case METHOD_UNKNOWN:
1130 {
1131 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleCreateInstanceRequest: should not be here!"<<PEGASUS_STD(endl));
1132 break;
1133 }
|
1134 schuur 1.1 }
1135 }
1136 HandlerCatch(handler);
|
1137 mark.hamzy 1.23
|
1138 schuur 1.1 if (env) JMPIjvm::detachThread();
|
1139 mark.hamzy 1.23
|
1140 schuur 1.1 PEG_METHOD_EXIT();
1141
1142 return(response);
1143 }
1144
1145 Message * JMPIProviderManager::handleModifyInstanceRequest(const Message * message) throw()
1146 {
|
1147 mark.hamzy 1.23 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleModifyInstanceRequest");
|
1148 schuur 1.1
1149 HandlerIntroVoid(ModifyInstance,message,request,response,handler);
|
1150 mark.hamzy 1.23
|
1151 mark.hamzy 1.25 typedef enum {
1152 METHOD_UNKNOWN = 0,
1153 METHOD_PEGASUS_24,
1154 METHOD_SNIA_PROVIDER20,
1155 } METHOD_VERSION;
1156 METHOD_VERSION eMethodFound = METHOD_UNKNOWN;
1157 JNIEnv *env = NULL;
|
1158 schuur 1.13
|
1159 schuur 1.1 try {
1160 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
|
1161 konrad.r 1.15 "JMPIProviderManager::handleModifyInstanceRequest - Host name: $0 Name space: $1 Class name: $2",
|
1162 schuur 1.1 System::getHostName(),
1163 request->nameSpace.getString(),
1164 request->modifiedInstance.getPath().getClassName().getString());
1165
|
1166 mark.hamzy 1.23 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleModifyInstanceRequest: hostname = "<<System::getHostName()<<", namespace = "<<request->nameSpace.getString()<<", classname = "<<request->modifiedInstance.getPath().getClassName().getString()<<PEGASUS_STD(endl));
1167
|
1168 schuur 1.1 // make target object path
1169 CIMObjectPath objectPath(
1170 System::getHostName(),
1171 request->nameSpace,
1172 request->modifiedInstance.getPath ().getClassName(),
1173 request->modifiedInstance.getPath ().getKeyBindings());
1174
1175 // resolve provider name
|
1176 kumpf 1.2 ProviderName name = _resolveProviderName(
1177 request->operationContext.get(ProviderIdContainer::NAME));
|
1178 schuur 1.1
|
1179 mark.hamzy 1.23 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleModifyInstanceRequest: provider name physical = "<<name.getPhysicalName()<<", logical = "<<name.getLogicalName()<<PEGASUS_STD(endl));
1180
|
1181 schuur 1.1 // get cached or load new provider module
1182 JMPIProvider::OpProviderHolder ph =
1183 providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
1184
1185 // convert arguments
1186 OperationContext context;
1187
|
1188 mark.hamzy 1.23 context.insert(request->operationContext.get(IdentityContainer::NAME));
1189 context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME));
1190 context.insert(request->operationContext.get(ContentLanguageListContainer::NAME));
|
1191 schuur 1.1
1192 // forward request
|
1193 mark.hamzy 1.25 JMPIProvider &pr = ph.GetProvider();
|
1194 mark.hamzy 1.23
1195 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,"Calling provider.modifyInstance: " + pr.getName());
1196
|
1197 mark.hamzy 1.25 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleModifyInstanceRequest: Calling provider "<<PEGASUS_STD(hex)<<(int)&pr<<PEGASUS_STD(dec)<<", name = "<<pr.getName ()<<", module = "<<pr.getModule()<<" modifyInstance: "<<pr.getName()<<PEGASUS_STD(endl));
1198 ////////DDD(debugPrintMethodPointers (env, (jclass)pr.jProviderClass));
1199
1200 JvmVector *jv = 0;
1201
1202 env = JMPIjvm::attachThread(&jv);
1203
1204 JMPIProvider::pm_service_op_lock op_lock(&pr);
|
1205 mark.hamzy 1.23
|
1206 mark.hamzy 1.25 STAT_GETSTARTTIME;
1207
1208 jmethodID id = NULL;
1209
1210 // public abstract void setInstance (org.pegasus.jmpi.CIMObjectPath cop,
1211 // org.pegasus.jmpi.CIMInstance cimInstance)
1212 // org.pegasus.jmpi.throws CIMException
1213 id = env->GetMethodID((jclass)pr.jProviderClass,
1214 "setInstance",
1215 "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMInstance;)V");
1216
1217 if (id != NULL)
1218 {
1219 eMethodFound = METHOD_SNIA_PROVIDER20;
1220 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleModifyInstanceRequest: found METHOD_SNIA_PROVIDER20."<<PEGASUS_STD(endl));
1221 }
1222
1223 if (id == NULL)
1224 {
1225 env->ExceptionClear();
1226
1227 mark.hamzy 1.25 // public void setInstance (org.pegasus.jmpi.CIMObjectPath op,
1228 // org.pegasus.jmpi.CIMInstance ci,
1229 // boolean includeQualifiers,
1230 // java.lang.String[] propertyList)
1231 // throws org.pegasus.jmpi.CIMException
1232 id = env->GetMethodID((jclass)pr.jProviderClass,
1233 "setInstance",
1234 "(Lorg/pegasus/jmpi/CIMObjectPath;Z[Ljava/lang/String)V");
|
1235 schuur 1.1
|
1236 mark.hamzy 1.25 if (id != NULL)
1237 {
1238 eMethodFound = METHOD_PEGASUS_24;
1239 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleModifyInstanceRequest: found METHOD_PEGASUS_24."<<PEGASUS_STD(endl));
1240 }
1241 }
|
1242 schuur 1.1
|
1243 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
1244 schuur 1.1
|
1245 mark.hamzy 1.25 switch (eMethodFound)
1246 {
1247 case METHOD_PEGASUS_24:
1248 {
1249 jint jObj = DEBUG_ConvertCToJava (CIMObjectPath*, jint, &objectPath);
1250 jobject jRef = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jObj);
1251
1252 JMPIjvm::checkException(env);
1253
1254 jObj = DEBUG_ConvertCToJava (CIMInstance*, jint, &request->modifiedInstance);
|
1255 schuur 1.1
|
1256 mark.hamzy 1.25 jobject jInst = env->NewObject(jv->CIMInstanceClassRef,jv->CIMInstanceNewI,jObj);
1257
1258 JMPIjvm::checkException(env);
|
1259 schuur 1.1
|
1260 mark.hamzy 1.25 jobjectArray jPropertyList = getList(jv,env,request->propertyList);
|
1261 schuur 1.1
|
1262 mark.hamzy 1.25 env->CallVoidMethod((jobject)pr.jProvider,
1263 id,
1264 jRef,
1265 jInst,
1266 jPropertyList);
|
1267 schuur 1.1
|
1268 mark.hamzy 1.25 JMPIjvm::checkException(env);
|
1269 schuur 1.13
|
1270 mark.hamzy 1.25 STAT_PMS_PROVIDEREND;
1271 break;
|
1272 schuur 1.13 }
|
1273 schuur 1.1
|
1274 mark.hamzy 1.25 case METHOD_SNIA_PROVIDER20:
1275 {
1276 jint jObj = DEBUG_ConvertCToJava (CIMObjectPath*, jint, &objectPath);
1277 jobject jRef = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jObj);
1278
1279 JMPIjvm::checkException(env);
1280
1281 jObj = DEBUG_ConvertCToJava (CIMInstance*, jint, &request->modifiedInstance);
1282
1283 jobject jInst = env->NewObject(jv->CIMInstanceClassRef,jv->CIMInstanceNewI,jObj);
1284
1285 JMPIjvm::checkException(env);
1286
1287 env->CallVoidMethod((jobject)pr.jProvider,
1288 id,
1289 jRef,
1290 jInst);
1291
1292 JMPIjvm::checkException(env);
|
1293 schuur 1.13
|
1294 mark.hamzy 1.25 STAT_PMS_PROVIDEREND;
1295 break;
1296 }
|
1297 mark.hamzy 1.23
|
1298 mark.hamzy 1.25 case METHOD_UNKNOWN:
1299 {
1300 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleModifyInstanceRequest: should not be here!"<<PEGASUS_STD(endl));
1301 break;
1302 }
1303 }
|
1304 schuur 1.1 }
1305 HandlerCatch(handler);
|
1306 mark.hamzy 1.23
|
1307 schuur 1.1 if (env) JMPIjvm::detachThread();
|
1308 mark.hamzy 1.23
|
1309 schuur 1.1 PEG_METHOD_EXIT();
1310
1311 return(response);
1312 }
1313
1314 Message * JMPIProviderManager::handleDeleteInstanceRequest(const Message * message) throw()
1315 {
|
1316 mark.hamzy 1.23 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleDeleteInstanceRequest");
1317
1318 HandlerIntroVoid(DeleteInstance,message,request,response,handler);
|
1319 schuur 1.1
|
1320 mark.hamzy 1.25 typedef enum {
1321 METHOD_UNKNOWN = 0,
1322 METHOD_SNIA_PROVIDER20,
1323 } METHOD_VERSION;
1324 METHOD_VERSION eMethodFound = METHOD_UNKNOWN;
1325 JNIEnv *env = NULL;
1326
|
1327 schuur 1.1 try {
1328 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
|
1329 konrad.r 1.15 "JMPIProviderManager::handleDeleteInstanceRequest - Host name: $0 Name space: $1 Class name: $2",
|
1330 schuur 1.1 System::getHostName(),
1331 request->nameSpace.getString(),
1332 request->instanceName.getClassName().getString());
1333
|
1334 mark.hamzy 1.23 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleDeleteInstanceRequest: hostname = "<<System::getHostName()<<", namespace = "<<request->nameSpace.getString()<<", classname = "<<request->instanceName.getClassName().getString()<<PEGASUS_STD(endl));
1335
|
1336 schuur 1.1 // make target object path
1337 CIMObjectPath objectPath(
1338 System::getHostName(),
1339 request->nameSpace,
1340 request->instanceName.getClassName(),
1341 request->instanceName.getKeyBindings());
1342
1343 // resolve provider name
|
1344 kumpf 1.2 ProviderName name = _resolveProviderName(
1345 request->operationContext.get(ProviderIdContainer::NAME));
|
1346 schuur 1.1
1347 // get cached or load new provider module
1348 JMPIProvider::OpProviderHolder ph =
1349 providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
1350
1351 // convert arguments
1352 OperationContext context;
1353
|
1354 mark.hamzy 1.23 context.insert(request->operationContext.get(IdentityContainer::NAME));
1355 context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME));
1356 context.insert(request->operationContext.get(ContentLanguageListContainer::NAME));
|
1357 schuur 1.1
1358 // forward request
|
1359 mark.hamzy 1.25 JMPIProvider &pr = ph.GetProvider();
|
1360 schuur 1.1
|
1361 mark.hamzy 1.25 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, "Calling provider.deleteInstance: " + pr.getName());
|
1362 schuur 1.1
|
1363 mark.hamzy 1.23 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleDeleteInstanceRequest: Calling provider deleteInstance: "<<pr.getName()<<PEGASUS_STD(endl));
|
1364 schuur 1.1
|
1365 mark.hamzy 1.25 JvmVector *jv = 0;
1366
1367 env = JMPIjvm::attachThread(&jv);
1368
1369 JMPIProvider::pm_service_op_lock op_lock(&pr);
1370
1371 STAT_GETSTARTTIME;
1372
1373 jmethodID id = NULL;
1374
1375 // public abstract void deleteInstance (org.pegasus.jmpi.CIMObjectPath cop)
1376 // throws org.pegasus.jmpi.CIMException
1377 id = env->GetMethodID((jclass)pr.jProviderClass,
1378 "deleteInstance",
1379 "(Lorg/pegasus/jmpi/CIMObjectPath;)V");
|
1380 schuur 1.1
|
1381 mark.hamzy 1.25 if (id != NULL)
1382 {
1383 eMethodFound = METHOD_SNIA_PROVIDER20;
1384 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleDeleteInstanceRequest: found METHOD_SNIA_PROVIDER20."<<PEGASUS_STD(endl));
1385 }
|
1386 mark.hamzy 1.23
1387 JMPIjvm::checkException(env);
|
1388 schuur 1.1
|
1389 mark.hamzy 1.25 switch (eMethodFound)
1390 {
1391 case METHOD_SNIA_PROVIDER20:
1392 {
1393 jint jObj = DEBUG_ConvertCToJava (CIMObjectPath*, jint, &objectPath);
1394 jobject jRef = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jObj);
1395
1396 JMPIjvm::checkException(env);
1397
1398 env->CallVoidMethod((jobject)pr.jProvider,id,jRef);
1399
1400 JMPIjvm::checkException(env);
1401
1402 STAT_PMS_PROVIDEREND;
1403 break;
1404 }
1405
1406 case METHOD_UNKNOWN:
1407 {
1408 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleDeleteInstanceRequest: should not be here!"<<PEGASUS_STD(endl));
1409 break;
1410 mark.hamzy 1.25 }
1411 }
1412 }
1413 HandlerCatch(handler);
1414
1415 if (env) JMPIjvm::detachThread();
1416
1417 PEG_METHOD_EXIT();
1418
1419 return(response);
1420 }
1421
1422 Message * JMPIProviderManager::handleExecQueryRequest(const Message * message) throw()
1423 {
1424 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleExecQueryRequest");
1425
1426 HandlerIntro(ExecQuery,message,request,response,handler,Array<CIMObject>());
1427
1428 typedef enum {
1429 METHOD_UNKNOWN = 0,
1430 METHOD_PEGASUS_24,
1431 mark.hamzy 1.25 METHOD_SNIA_PROVIDER20,
1432 } METHOD_VERSION;
1433 METHOD_VERSION eMethodFound = METHOD_UNKNOWN;
1434 JNIEnv *env = NULL;
1435
1436 try {
1437 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
1438 "JMPIProviderManager::handleExecQueryRequest - Host name: $0 Name space: $1 Class name: $2",
1439 System::getHostName(),
1440 request->nameSpace.getString(),
1441 request->className.getString());
1442
1443 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleExecQueryRequest: hostname = "<<System::getHostName()<<", namespace = "<<request->nameSpace.getString()<<", classname = "<<request->className.getString()<<PEGASUS_STD(endl));
1444
1445 // make target object path
1446 CIMObjectPath objectPath(
1447 System::getHostName(),
1448 request->nameSpace,
1449 request->className);
1450
1451 // resolve provider name
1452 mark.hamzy 1.25 ProviderName name = _resolveProviderName(
1453 request->operationContext.get(ProviderIdContainer::NAME));
1454
1455 // get cached or load new provider module
1456 JMPIProvider::OpProviderHolder ph =
1457 providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
1458
1459 // convert arguments
1460 OperationContext context;
1461
1462 context.insert(request->operationContext.get(IdentityContainer::NAME));
1463 context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME));
1464 context.insert(request->operationContext.get(ContentLanguageListContainer::NAME));
1465
1466 // forward request
1467 JMPIProvider &pr = ph.GetProvider();
1468
1469 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,"Calling provider.execQuery: " + pr.getName());
1470
1471 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleExecQueryRequest: Calling provider execQuery: "<<pr.getName()<<", queryLanguage: "<<request->queryLanguage<<", query: "<<request->query<<PEGASUS_STD(endl));
1472
1473 mark.hamzy 1.25 JvmVector *jv = 0;
1474
1475 env = JMPIjvm::attachThread(&jv);
1476
|
1477 mark.hamzy 1.23 JMPIProvider::pm_service_op_lock op_lock(&pr);
|
1478 schuur 1.1
|
1479 mark.hamzy 1.23 STAT_GETSTARTTIME;
|
1480 schuur 1.1
|
1481 mark.hamzy 1.25 jmethodID id = NULL;
1482
1483 // public abstract java.util.Vector execQuery (org.pegasus.jmpi.CIMObjectPath cop,
1484 // java.lang.String queryStatement,
1485 // int ql,
1486 // org.pegasus.jmpi.CIMClass cimClass)
1487 // throws org.pegasus.jmpi.CIMException
1488 //
1489 id = env->GetMethodID((jclass)pr.jProviderClass,
1490 "execQuery",
1491 "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;ILorg/pegasus/jmpi/CIMClass;)Ljava/util/Vector;");
1492
1493 if (id != NULL)
1494 {
1495 eMethodFound = METHOD_SNIA_PROVIDER20;
1496 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleExecQueryRequest: found METHOD_SNIA_PROVIDER20."<<PEGASUS_STD(endl));
1497 }
1498
1499 if (id == NULL)
1500 {
1501 env->ExceptionClear();
1502 mark.hamzy 1.25
1503 // public abstract org.pegasus.jmpi.CIMInstance[] execQuery(org.pegasus.jmpi.CIMObjectPath op,
1504 // java.lang.String query,
1505 // java.lang.String ql,
1506 // org.pegasus.jmpi.CIMClass cc)
1507 // throws org.pegasus.jmpi.CIMException
1508 id = env->GetMethodID((jclass)pr.jProviderClass,
1509 "execQuery",
1510 "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Lorg/pegasus/jmpi/CIMClass;)[Lorg/pegasus/jmpi/CIMInstance;");
1511
1512 if (id != NULL)
1513 {
1514 eMethodFound = METHOD_PEGASUS_24;
1515 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleExecQueryRequest: found METHOD_PEGASUS_24."<<PEGASUS_STD(endl));
1516 }
1517 }
1518
1519 if (id == NULL)
1520 {
1521 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleExecQueryRequest: found no method!"<<PEGASUS_STD(endl));
1522 }
1523 mark.hamzy 1.25
|
1524 schuur 1.1 JMPIjvm::checkException(env);
1525
|
1526 mark.hamzy 1.25 switch (eMethodFound)
1527 {
1528 case METHOD_PEGASUS_24:
1529 {
1530 jint jcopref = DEBUG_ConvertCToJava (CIMObjectPath*, jint, &objectPath);
1531 jobject jcop = env->NewObject(jv->CIMObjectPathClassRef, jv->CIMObjectPathNewI, jcopref);
1532
1533 JMPIjvm::checkException(env);
1534
1535 jstring jqueryLanguage = env->NewStringUTF(request->queryLanguage.getCString());
1536 jstring jquery = env->NewStringUTF(request->query.getCString());
1537
1538 CIMClass cls = pr._cimom_handle->getClass(context,
1539 request->nameSpace,
1540 request->className,
1541 false,
1542 true,
1543 true,
1544 CIMPropertyList());
1545 JMPIjvm::checkException(env);
1546
1547 mark.hamzy 1.25 jint jcls = DEBUG_ConvertCToJava (CIMClass*, jint, &cls);
1548
1549 jobject jCc=env->NewObject(jv->CIMClassClassRef,jv->CIMClassNewI,jcls);
1550
1551 JMPIjvm::checkException(env);
1552
1553 jobjectArray jAr = (jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
1554 id,
1555 jcop,
1556 jquery,
1557 jqueryLanguage,
1558 jCc);
|
1559 mark.hamzy 1.23
|
1560 mark.hamzy 1.25 JMPIjvm::checkException(env);
1561
1562 STAT_PMS_PROVIDEREND;
1563
1564 handler.processing();
1565 if (jAr) {
1566 for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
1567 JMPIjvm::checkException(env);
1568
1569 jobject inst=env->GetObjectArrayElement(jAr,i);
1570 JMPIjvm::checkException(env);
|
1571 mark.hamzy 1.23
|
1572 mark.hamzy 1.25 jint jCi = env->CallIntMethod(inst,JMPIjvm::jv.CIMInstanceCInst);
1573 CIMInstance *ci = DEBUG_ConvertJavaToC (jint, CIMInstance*, jCi);
1574
1575 JMPIjvm::checkException(env);
1576
1577 handler.deliver(*ci);
1578 }
1579 }
1580 handler.complete();
1581 break;
1582 }
1583
1584 case METHOD_SNIA_PROVIDER20:
1585 {
1586 jint jcopref = DEBUG_ConvertCToJava (CIMObjectPath*, jint, &objectPath);
1587 jobject jcop = env->NewObject(jv->CIMObjectPathClassRef, jv->CIMObjectPathNewI, jcopref);
1588
1589 JMPIjvm::checkException(env);
1590
1591 jstring jqueryLanguage = env->NewStringUTF(request->queryLanguage.getCString());
1592 jstring jquery = env->NewStringUTF(request->query.getCString());
1593 mark.hamzy 1.25
1594 CIMClass cls = pr._cimom_handle->getClass(context,
1595 request->nameSpace,
1596 request->className,
1597 false,
1598 true,
1599 true,
1600 CIMPropertyList());
1601 JMPIjvm::checkException(env);
1602
1603 jint jcls = DEBUG_ConvertCToJava (CIMClass*, jint, &cls);
1604
1605 jobject jCc=env->NewObject(jv->CIMClassClassRef,jv->CIMClassNewI,jcls);
1606
1607 JMPIjvm::checkException(env);
1608
1609 jint jql = 0; // @BUG - how to convert?
1610
1611 jobjectArray jVec = (jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
1612 id,
1613 jcop,
1614 mark.hamzy 1.25 jquery,
1615 jql,
1616 jCc);
1617
1618 JMPIjvm::checkException(env);
1619
1620 STAT_PMS_PROVIDEREND;
1621
1622 handler.processing();
1623 if (jVec) {
1624 for (int i=0,m=env->GetArrayLength(jVec); i<m; i++) {
1625 JMPIjvm::checkException(env);
1626
1627 jobject inst=env->GetObjectArrayElement(jVec,i);
1628 JMPIjvm::checkException(env);
1629
1630 jint jCi = env->CallIntMethod(inst,JMPIjvm::jv.CIMInstanceCInst);
1631 CIMInstance *ci = DEBUG_ConvertJavaToC (jint, CIMInstance*, jCi);
1632
1633 JMPIjvm::checkException(env);
1634
1635 mark.hamzy 1.25 handler.deliver(*ci);
1636 }
1637 }
1638 handler.complete();
1639 break;
1640 }
1641
1642 case METHOD_UNKNOWN:
1643 {
1644 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleExecQueryRequest: should not be here!"<<PEGASUS_STD(endl));
1645 break;
1646 }
1647 }
|
1648 schuur 1.1 }
1649 HandlerCatch(handler);
|
1650 mark.hamzy 1.23
|
1651 schuur 1.1 if (env) JMPIjvm::detachThread();
|
1652 mark.hamzy 1.23
|
1653 schuur 1.1 PEG_METHOD_EXIT();
1654
1655 return(response);
1656 }
1657
1658 Message * JMPIProviderManager::handleAssociatorsRequest(const Message * message) throw()
1659 {
|
1660 mark.hamzy 1.23 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleAssociatorsRequest");
1661
1662 HandlerIntro(Associators,message,request,response,handler,Array<CIMObject>());
|
1663 schuur 1.1
|
1664 mark.hamzy 1.24 typedef enum {
1665 METHOD_UNKNOWN = 0,
|
1666 mark.hamzy 1.25 METHOD_PEGASUS_24,
|
1667 mark.hamzy 1.24 METHOD_SNIA_PROVIDER20,
1668 } METHOD_VERSION;
1669 METHOD_VERSION eMethodFound = METHOD_UNKNOWN;
1670 JNIEnv *env = NULL;
|
1671 schuur 1.13
|
1672 schuur 1.1 try {
1673 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
1674 "JMPIProviderManager::handleAssociatorsRequest - Host name: $0 Name space: $1 Class name: $2",
1675 System::getHostName(),
1676 request->nameSpace.getString(),
1677 request->objectName.getClassName().getString());
1678
|
1679 mark.hamzy 1.25 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorsRequest: hostname = "<<System::getHostName()<<", namespace = "<<request->nameSpace.getString()<<", classname = "<<request->objectName.getClassName().getString()<<PEGASUS_STD(endl));
|
1680 mark.hamzy 1.23
|
1681 schuur 1.1 // make target object path
1682 CIMObjectPath objectPath(
1683 System::getHostName(),
1684 request->nameSpace,
1685 request->objectName.getClassName());
1686
1687 objectPath.setKeyBindings(request->objectName.getKeyBindings());
1688
1689 CIMObjectPath assocPath(
1690 System::getHostName(),
1691 request->nameSpace,
1692 request->assocClass.getString());
1693
1694 // resolve provider name
|
1695 kumpf 1.2 ProviderName name = _resolveProviderName(
1696 request->operationContext.get(ProviderIdContainer::NAME));
|
1697 schuur 1.1
1698 // get cached or load new provider module
1699 JMPIProvider::OpProviderHolder ph =
1700 providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
1701
|
1702 mark.hamzy 1.24 // convert arguments
|
1703 schuur 1.1 OperationContext context;
1704
|
1705 mark.hamzy 1.23 context.insert(request->operationContext.get(IdentityContainer::NAME));
1706 context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME));
1707 context.insert(request->operationContext.get(ContentLanguageListContainer::NAME));
|
1708 schuur 1.1
1709 // forward request
|
1710 mark.hamzy 1.24 JMPIProvider &pr = ph.GetProvider();
1711
1712 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,"Calling provider.associators: " + pr.getName());
|
1713 schuur 1.1
|
1714 mark.hamzy 1.24 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorsRequest: Calling provider associators: "<<pr.getName()<<", role: "<<request->role<<", aCls: "<<request->assocClass<<PEGASUS_STD(endl));
|
1715 schuur 1.1
|
1716 mark.hamzy 1.24 JvmVector *jv = 0;
|
1717 schuur 1.1
|
1718 mark.hamzy 1.24 env = JMPIjvm::attachThread(&jv);
|
1719 schuur 1.1
1720 JMPIProvider::pm_service_op_lock op_lock(&pr);
1721
1722 STAT_GETSTARTTIME;
1723
|
1724 mark.hamzy 1.24 jmethodID id = NULL;
1725
1726 // public abstract java.util.Vector associators (org.pegasus.jmpi.CIMObjectPath assocName,
|
1727 mark.hamzy 1.25 // org.pegasus.jmpi.CIMObjectPath pathName,
|
1728 mark.hamzy 1.24 // java.lang.String resultClass,
1729 // java.lang.String role,
1730 // java.lang.String resultRole,
1731 // boolean includeQualifiers,
1732 // boolean includeClassOrigin,
1733 // java.lang.String[] propertyList)
|
1734 mark.hamzy 1.25 // throws org.pegasus.jmpi.CIMException
|
1735 mark.hamzy 1.24 //
1736 id = env->GetMethodID((jclass)pr.jProviderClass,
1737 "associators",
|
1738 mark.hamzy 1.25 "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZ[Ljava/lang/String;)Ljava/util/Vector;");
1739 //@BUG was: "(Lorg/pegasus/jmpi/CIMObjectPath; Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZ[Ljava/lang/String;)Ljava/util/Vector;"
|
1740 mark.hamzy 1.24
1741 if (id != NULL)
1742 {
|
1743 mark.hamzy 1.25 eMethodFound = METHOD_SNIA_PROVIDER20;
1744 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorsRequest: found METHOD_SNIA_PROVIDER20."<<PEGASUS_STD(endl));
|
1745 mark.hamzy 1.24 }
|
1746 schuur 1.12
|
1747 mark.hamzy 1.24 if (id == NULL)
1748 {
1749 env->ExceptionClear();
1750
1751 // public abstract java.util.Vector associators (org.pegasus.jmpi.CIMObjectPath assocName,
1752 // java.lang.String resultClass,
1753 // java.lang.String role,
1754 // java.lang.String resultRole,
1755 // boolean includeQualifiers,
1756 // boolean includeClassOrigin,
1757 // java.lang.String[] propertyList)
|
1758 mark.hamzy 1.25 // throws org.pegasus.jmpi.CIMException
|
1759 mark.hamzy 1.24 //
1760 id = env->GetMethodID((jclass)pr.jProviderClass,
1761 "associators",
|
1762 mark.hamzy 1.25 "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZ[Ljava/lang/String;)Ljava/util/Vector;");
1763 //@BUG was: "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZ[Ljava/lang/String;)[Lorg/pegasus/jmpi/CIMInstance;"
|
1764 mark.hamzy 1.24
1765 if (id != NULL)
1766 {
|
1767 mark.hamzy 1.25 eMethodFound = METHOD_PEGASUS_24;
1768 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorsRequest: found METHOD_PEGASUS_24."<<PEGASUS_STD(endl));
|
1769 mark.hamzy 1.24 }
1770 }
1771
1772 if (id == NULL)
1773 {
1774 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorsRequest: found no method!"<<PEGASUS_STD(endl));
|
1775 mark.hamzy 1.23 }
|
1776 mark.hamzy 1.24
|
1777 schuur 1.1 JMPIjvm::checkException(env);
1778
|
1779 mark.hamzy 1.24 switch (eMethodFound)
1780 {
|
1781 mark.hamzy 1.25 case METHOD_PEGASUS_24:
|
1782 mark.hamzy 1.24 {
|
1783 mark.hamzy 1.25 jint jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, &objectPath);
1784 jobject jAssociationName = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
1785
1786 JMPIjvm::checkException(env);
1787
1788 jstring jResultClass = env->NewStringUTF(request->resultClass.getString().getCString());
1789 jstring jRole = env->NewStringUTF(request->role.getCString());
1790 jstring jResultRole = env->NewStringUTF(request->resultRole.getCString());
1791
1792 JMPIjvm::checkException(env);
1793
1794 jobjectArray jPropertyList = getList(jv,env,request->propertyList);
1795
|
1796 mark.hamzy 1.24 jobjectArray jVec=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
1797 id,
1798 jAssociationName,
1799 jResultClass,
1800 jRole,
1801 jResultRole,
1802 false,
1803 false,
1804 jPropertyList);
|
1805 mark.hamzy 1.25
|
1806 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
1807 schuur 1.13
|
1808 mark.hamzy 1.23 STAT_PMS_PROVIDEREND;
|
1809 schuur 1.1
|
1810 mark.hamzy 1.23 handler.processing();
1811 if (jVec) {
|
1812 mark.hamzy 1.24 for (int i=0,m=env->GetArrayLength(jVec); i<m; i++) {
|
1813 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
1814 schuur 1.1
|
1815 mark.hamzy 1.24 jobject jInst=env->GetObjectArrayElement(jVec,i);
1816
|
1817 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
1818 schuur 1.13
|
1819 mark.hamzy 1.24 jint jCi = env->CallIntMethod(jInst,JMPIjvm::jv.CIMInstanceCInst);
|
1820 schuur 1.13
|
1821 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
1822 schuur 1.13
|
1823 mark.hamzy 1.24 CIMInstance *ci = DEBUG_ConvertJavaToC (jint, CIMInstance*, jCi);
1824 CIMClass cls = pr._cimom_handle->getClass(context,request->nameSpace,ci->getClassName(),false,true,true,CIMPropertyList());
1825 const CIMObjectPath& op = ci->getPath();
1826 CIMObjectPath iop = ci->buildPath(cls);
1827
|
1828 mark.hamzy 1.23 iop.setNameSpace(op.getNameSpace());
1829 ci->setPath(iop);
|
1830 schuur 1.13
|
1831 mark.hamzy 1.23 handler.deliver(*ci);
1832 }
1833 }
|
1834 mark.hamzy 1.24 handler.complete();
1835 break;
|
1836 mark.hamzy 1.23 }
|
1837 mark.hamzy 1.24
1838 case METHOD_SNIA_PROVIDER20:
1839 {
|
1840 mark.hamzy 1.25 jint jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, &objectPath);
1841 jobject jAssociationName = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
1842
1843 JMPIjvm::checkException(env);
1844
|
1845 mark.hamzy 1.24 jint jPathNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, &assocPath);
1846 jobject jPathName = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jPathNameRef);
1847
1848 JMPIjvm::checkException(env);
1849
|
1850 mark.hamzy 1.25 jstring jResultClass = env->NewStringUTF(request->resultClass.getString().getCString());
1851 jstring jRole = env->NewStringUTF(request->role.getCString());
1852 jstring jResultRole = env->NewStringUTF(request->resultRole.getCString());
1853
1854 JMPIjvm::checkException(env);
1855
1856 jobjectArray jPropertyList = getList(jv,env,request->propertyList);
1857
|
1858 mark.hamzy 1.24 jobjectArray jVec=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
1859 id,
1860 jAssociationName,
1861 jPathName,
1862 jResultClass,
1863 jRole,
1864 jResultRole,
1865 false,
1866 false,
1867 jPropertyList);
|
1868 mark.hamzy 1.25
|
1869 mark.hamzy 1.23 JMPIjvm::checkException(env);
1870
1871 STAT_PMS_PROVIDEREND;
1872
1873 handler.processing();
|
1874 mark.hamzy 1.24 if (jVec) {
1875 for (int i=0,m=env->GetArrayLength(jVec); i<m; i++) {
|
1876 mark.hamzy 1.23 JMPIjvm::checkException(env);
1877
|
1878 mark.hamzy 1.24 jobject jInst=env->GetObjectArrayElement(jVec,i);
1879
|
1880 mark.hamzy 1.23 JMPIjvm::checkException(env);
1881
|
1882 mark.hamzy 1.24 jint jCi = env->CallIntMethod(jInst,JMPIjvm::jv.CIMInstanceCInst);
1883
|
1884 mark.hamzy 1.23 JMPIjvm::checkException(env);
1885
|
1886 mark.hamzy 1.24 CIMInstance *ci = DEBUG_ConvertJavaToC (jint, CIMInstance*, jCi);
1887 CIMClass cls = pr._cimom_handle->getClass(context,request->nameSpace,ci->getClassName(),false,true,true,CIMPropertyList());
1888 const CIMObjectPath& op = ci->getPath();
1889 CIMObjectPath iop = ci->buildPath(cls);
1890
|
1891 mark.hamzy 1.23 iop.setNameSpace(op.getNameSpace());
1892 ci->setPath(iop);
|
1893 schuur 1.13
|
1894 mark.hamzy 1.23 handler.deliver(*ci);
1895 }
1896 }
|
1897 mark.hamzy 1.24 handler.complete();
1898 break;
1899 }
1900
1901 case METHOD_UNKNOWN:
1902 {
1903 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorsRequest: should not be here!"<<PEGASUS_STD(endl));
1904 break;
1905 }
|
1906 mark.hamzy 1.23 }
|
1907 schuur 1.1 }
1908 HandlerCatch(handler);
|
1909 schuur 1.13
1910 if (env) JMPIjvm::detachThread();
1911
|
1912 schuur 1.1 PEG_METHOD_EXIT();
1913
1914 return(response);
1915 }
|
1916 schuur 1.13
|
1917 schuur 1.1 Message * JMPIProviderManager::handleAssociatorNamesRequest(const Message * message) throw()
1918 {
|
1919 mark.hamzy 1.23 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleAssociatorNamesRequest");
1920
1921 HandlerIntro(AssociatorNames,message,request,response,handler,Array<CIMObjectPath>());
|
1922 schuur 1.1
|
1923 mark.hamzy 1.24 typedef enum {
1924 METHOD_UNKNOWN = 0,
|
1925 mark.hamzy 1.25 METHOD_PEGASUS_24,
|
1926 mark.hamzy 1.24 METHOD_SNIA_PROVIDER20
1927 } METHOD_VERSION;
1928 METHOD_VERSION eMethodFound = METHOD_UNKNOWN;
1929 JNIEnv *env = NULL;
|
1930 schuur 1.13
|
1931 schuur 1.1 try {
1932 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
1933 "JMPIProviderManager::handleAssociatorNamesRequest - Host name: $0 Name space: $1 Class name: $2",
1934 System::getHostName(),
1935 request->nameSpace.getString(),
1936 request->objectName.getClassName().getString());
1937
|
1938 mark.hamzy 1.23 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: hostname = "<<System::getHostName()<<", namespace = "<<request->nameSpace.getString()<<", classname = "<<request->objectName.getClassName().getString()<<PEGASUS_STD(endl));
1939
|
1940 schuur 1.1 // make target object path
1941 CIMObjectPath objectPath(
1942 System::getHostName(),
1943 request->nameSpace,
1944 request->objectName.getClassName());
1945
1946 objectPath.setKeyBindings(request->objectName.getKeyBindings());
1947
1948 CIMObjectPath assocPath(
1949 System::getHostName(),
1950 request->nameSpace,
1951 request->assocClass.getString());
|
1952 mark.hamzy 1.23
|
1953 schuur 1.1 // resolve provider name
|
1954 kumpf 1.2 ProviderName name = _resolveProviderName(
1955 request->operationContext.get(ProviderIdContainer::NAME));
|
1956 schuur 1.1
1957 // get cached or load new provider module
1958 JMPIProvider::OpProviderHolder ph =
1959 providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
1960
1961 // convert arguments
1962 OperationContext context;
1963
|
1964 mark.hamzy 1.23 context.insert(request->operationContext.get(IdentityContainer::NAME));
1965 context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME));
1966 context.insert(request->operationContext.get(ContentLanguageListContainer::NAME));
|
1967 schuur 1.1
1968 // forward request
|
1969 mark.hamzy 1.24 JMPIProvider &pr = ph.GetProvider();
|
1970 schuur 1.1
|
1971 mark.hamzy 1.24 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,"Calling provider.associatorNames: " + pr.getName());
|
1972 schuur 1.1
|
1973 mark.hamzy 1.23 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: Calling provider associatorNames: "<<pr.getName()<<", role: "<<request->role<<", aCls: "<<request->assocClass<<PEGASUS_STD(endl));
|
1974 schuur 1.1
|
1975 mark.hamzy 1.24 JvmVector *jv = 0;
1976
1977 env = JMPIjvm::attachThread(&jv);
|
1978 schuur 1.1
1979 JMPIProvider::pm_service_op_lock op_lock(&pr);
1980
1981 STAT_GETSTARTTIME;
1982
|
1983 mark.hamzy 1.24 jmethodID id = NULL;
1984
1985 // public abstract java.util.Vector associatorNames (org.pegasus.jmpi.CIMObjectPath assocName,
|
1986 mark.hamzy 1.25 // org.pegasus.jmpi.CIMObjectPath pathName,
|
1987 mark.hamzy 1.24 // java.lang.String resultClass,
1988 // java.lang.String role,
1989 // java.lang.String resultRole)
1990 // throws org.pegasus.jmpi.CIMException
1991 id = env->GetMethodID((jclass)pr.jProviderClass,
1992 "associatorNames",
|
1993 mark.hamzy 1.25 "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/util/Vector;");
1994 //@BUG was: "(Lorg/pegasus/jmpi/CIMObjectPath; Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/util/Vector;"
|
1995 mark.hamzy 1.24
1996 if (id != NULL)
1997 {
|
1998 mark.hamzy 1.25 eMethodFound = METHOD_SNIA_PROVIDER20;
1999 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: found METHOD_SNIA_PROVIDER20."<<PEGASUS_STD(endl));
|
2000 mark.hamzy 1.24 }
2001
2002 if (id == NULL)
2003 {
2004 env->ExceptionClear();
2005
2006 // public abstract java.util.Vector associatorNames (org.pegasus.jmpi.CIMObjectPath assocName,
2007 // java.lang.String resultClass,
2008 // java.lang.String role,
2009 // java.lang.String resultRole)
2010 // throws org.pegasus.jmpi.CIMException
2011 id = env->GetMethodID((jclass)pr.jProviderClass,
2012 "associatorNames",
|
2013 mark.hamzy 1.25 "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/util/Vector;");
2014 //@BUG was: "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)[Lorg/pegasus/jmpi/CIMObjectPath;"
|
2015 mark.hamzy 1.24
2016 if (id != NULL)
2017 {
|
2018 mark.hamzy 1.25 eMethodFound = METHOD_PEGASUS_24;
2019 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: found METHOD_PEGASUS_24."<<PEGASUS_STD(endl));
|
2020 mark.hamzy 1.24 }
2021 }
|
2022 schuur 1.13
|
2023 mark.hamzy 1.24 if (id == NULL)
2024 {
2025 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: found no method!"<<PEGASUS_STD(endl));
|
2026 mark.hamzy 1.23 }
|
2027 mark.hamzy 1.24
|
2028 schuur 1.1 JMPIjvm::checkException(env);
2029
|
2030 mark.hamzy 1.24 switch (eMethodFound)
2031 {
|
2032 mark.hamzy 1.25 case METHOD_PEGASUS_24:
|
2033 mark.hamzy 1.24 {
|
2034 mark.hamzy 1.25 jint jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, &objectPath);
2035 jobject jAssociationName = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
2036
2037 JMPIjvm::checkException(env);
2038
2039 jstring jResultClass = env->NewStringUTF(request->resultClass.getString().getCString());
2040 jstring jRole = env->NewStringUTF(request->role.getCString());
2041 jstring jResultRole = env->NewStringUTF(request->resultRole.getCString());
2042
2043 JMPIjvm::checkException(env);
2044
|
2045 mark.hamzy 1.24 jobjectArray jVec=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
2046 id,
2047 jAssociationName,
2048 jResultClass,
2049 jRole,
2050 jResultRole);
|
2051 mark.hamzy 1.25
|
2052 mark.hamzy 1.23 JMPIjvm::checkException(env);
2053
2054 STAT_PMS_PROVIDEREND;
2055
2056 handler.processing();
2057 if (jVec) {
|
2058 mark.hamzy 1.24 for (int i=0,m=env->GetArrayLength(jVec); i<m; i++) {
|
2059 mark.hamzy 1.23 JMPIjvm::checkException(env);
2060
|
2061 mark.hamzy 1.24 jobject jInst=env->GetObjectArrayElement(jVec,i);
2062
|
2063 mark.hamzy 1.23 JMPIjvm::checkException(env);
2064
|
2065 mark.hamzy 1.24 jint jCop = env->CallIntMethod(jInst,JMPIjvm::jv.CIMObjectPathCInst);
|
2066 mark.hamzy 1.23 CIMObjectPath *cop = DEBUG_ConvertJavaToC (jint, CIMObjectPath*, jCop);
2067
2068 JMPIjvm::checkException(env);
2069
2070 handler.deliver(*cop);
2071 }
2072 }
2073 handler.complete();
|
2074 mark.hamzy 1.24 break;
|
2075 mark.hamzy 1.23 }
|
2076 mark.hamzy 1.24
2077 case METHOD_SNIA_PROVIDER20:
2078 {
|
2079 mark.hamzy 1.25 jint jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, &objectPath);
2080 jobject jAssociationName = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
2081
2082 JMPIjvm::checkException(env);
2083
|
2084 mark.hamzy 1.24 jint jPathNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, &assocPath);
2085 jobject jPathName = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jPathNameRef);
2086
2087 JMPIjvm::checkException(env);
2088
|
2089 mark.hamzy 1.25 jstring jResultClass = env->NewStringUTF(request->resultClass.getString().getCString());
2090 jstring jRole = env->NewStringUTF(request->role.getCString());
2091 jstring jResultRole = env->NewStringUTF(request->resultRole.getCString());
2092
2093 JMPIjvm::checkException(env);
2094
|
2095 mark.hamzy 1.24 jobjectArray jVec=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
2096 id,
2097 jAssociationName,
2098 jPathNameRef,
2099 jResultClass,
2100 jRole,
2101 jResultRole);
|
2102 mark.hamzy 1.25
|
2103 mark.hamzy 1.23 JMPIjvm::checkException(env);
2104
2105 STAT_PMS_PROVIDEREND;
|
2106 schuur 1.13
|
2107 mark.hamzy 1.23 handler.processing();
|
2108 mark.hamzy 1.24 if (jVec) {
2109 for (int i=0,m=env->GetArrayLength(jVec); i<m; i++) {
|
2110 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
2111 schuur 1.13
|
2112 mark.hamzy 1.24 jobject jInst=env->GetObjectArrayElement(jVec,i);
2113
|
2114 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
2115 schuur 1.13
|
2116 mark.hamzy 1.24 jint jCop = env->CallIntMethod(jInst,JMPIjvm::jv.CIMObjectPathCInst);
|
2117 mark.hamzy 1.23 CIMObjectPath *cop = DEBUG_ConvertJavaToC (jint, CIMObjectPath*, jCop);
|
2118 schuur 1.1
|
2119 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
2120 schuur 1.1
|
2121 mark.hamzy 1.23 handler.deliver(*cop);
2122 }
2123 }
2124 handler.complete();
|
2125 mark.hamzy 1.24 break;
2126 }
2127
2128 case METHOD_UNKNOWN:
2129 {
2130 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: should not be here!"<<PEGASUS_STD(endl));
2131 break;
2132 }
|
2133 mark.hamzy 1.23 }
|
2134 schuur 1.1 }
2135 HandlerCatch(handler);
|
2136 schuur 1.12
|
2137 mark.hamzy 1.23 if (env) JMPIjvm::detachThread();
|
2138 schuur 1.12
|
2139 schuur 1.1 PEG_METHOD_EXIT();
2140
2141 return(response);
2142 }
2143
2144 Message * JMPIProviderManager::handleReferencesRequest(const Message * message) throw()
2145 {
|
2146 mark.hamzy 1.23 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleReferencesRequest");
2147
2148 HandlerIntro(References,message,request,response,handler,Array<CIMObject>());
|
2149 schuur 1.1
|
2150 mark.hamzy 1.24 typedef enum {
2151 METHOD_UNKNOWN = 0,
|
2152 mark.hamzy 1.25 METHOD_PEGASUS_24,
|
2153 mark.hamzy 1.24 METHOD_SNIA_PROVIDER20,
2154 } METHOD_VERSION;
2155 METHOD_VERSION eMethodFound = METHOD_UNKNOWN;
2156 JNIEnv *env = NULL;
|
2157 schuur 1.13
|
2158 schuur 1.1 try {
2159 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
|
2160 konrad.r 1.15 "JMPIProviderManager::handleReferencesRequest - Host name: $0 Name space: $1 Class name: $2",
|
2161 schuur 1.1 System::getHostName(),
2162 request->nameSpace.getString(),
2163 request->objectName.getClassName().getString());
2164
|
2165 mark.hamzy 1.23 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferencesRequest: hostname = "<<System::getHostName()<<", namespace = "<<request->nameSpace.getString()<<", classname = "<<request->objectName.getClassName().getString()<<PEGASUS_STD(endl));
2166
|
2167 schuur 1.1 // make target object path
2168 CIMObjectPath objectPath(
2169 System::getHostName(),
2170 request->nameSpace,
2171 request->objectName.getClassName());
2172
2173 objectPath.setKeyBindings(request->objectName.getKeyBindings());
2174
2175 CIMObjectPath resultPath(
2176 System::getHostName(),
2177 request->nameSpace,
2178 request->resultClass.getString());
2179
2180 // resolve provider name
|
2181 kumpf 1.2 ProviderName name = _resolveProviderName(
2182 request->operationContext.get(ProviderIdContainer::NAME));
|
2183 schuur 1.1
2184 // get cached or load new provider module
2185 JMPIProvider::OpProviderHolder ph =
2186 providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
2187
2188 // convert arguments
2189 OperationContext context;
2190
|
2191 schuur 1.12 context.insert(request->operationContext.get(IdentityContainer::NAME));
2192 context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME));
2193 context.insert(request->operationContext.get(ContentLanguageListContainer::NAME));
|
2194 schuur 1.1
2195 // forward request
|
2196 mark.hamzy 1.24 JMPIProvider &pr = ph.GetProvider();
2197
2198 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,"Calling provider.references: " + pr.getName());
|
2199 schuur 1.1
|
2200 mark.hamzy 1.24 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferencesRequest: Calling provider references: "<<pr.getName()<<", role: "<<request->role<<" aCls: "<<request->resultClass<<PEGASUS_STD(endl));
|
2201 schuur 1.1
|
2202 mark.hamzy 1.24 JvmVector *jv = 0;
|
2203 schuur 1.1
|
2204 mark.hamzy 1.24 env = JMPIjvm::attachThread(&jv);
|
2205 schuur 1.1
2206 JMPIProvider::pm_service_op_lock op_lock(&pr);
2207
2208 STAT_GETSTARTTIME;
2209
|
2210 mark.hamzy 1.24 jmethodID id = NULL;
2211
2212 // public abstract java.util.Vector references (org.pegasus.jmpi.CIMObjectPath assocName,
|
2213 mark.hamzy 1.25 // org.pegasus.jmpi.CIMObjectPath pathName,
|
2214 mark.hamzy 1.24 // java.lang.String role,
2215 // boolean includeQualifiers,
2216 // boolean includeClassOrigin,
2217 // java.lang.String[] propertyList)
2218 // throws org.pegasus.jmpi.CIMException
2219 id = env->GetMethodID((jclass)pr.jProviderClass,
2220 "references",
|
2221 mark.hamzy 1.25 "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;ZZ[Ljava/lang/String;)Ljava/util/Vector;");
2222 //@BUG was: "(Lorg/pegasus/jmpi/CIMObjectPath; Ljava/lang/String;ZZ[Ljava/lang/String;)Ljava/util/Vector;"
|
2223 mark.hamzy 1.24
2224 if (id != NULL)
2225 {
|
2226 mark.hamzy 1.25 eMethodFound = METHOD_SNIA_PROVIDER20;
2227 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferencesRequest: found METHOD_SNIA_PROVIDER20."<<PEGASUS_STD(endl));
|
2228 mark.hamzy 1.24 }
2229
2230 if (id == NULL)
2231 {
2232 env->ExceptionClear();
2233
2234 // public abstract java.util.Vector references (org.pegasus.jmpi.CIMObjectPath assocName,
2235 // java.lang.String role,
2236 // boolean includeQualifiers,
2237 // boolean includeClassOrigin,
2238 // java.lang.String[] propertyList)
2239 // throws org.pegasus.jmpi.CIMException
2240 id = env->GetMethodID((jclass)pr.jProviderClass,
2241 "references",
|
2242 mark.hamzy 1.25 "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;ZZ[Ljava/lang/String;)Ljava/util/Vector;");
2243 //@BUG was: "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;ZZ[Ljava/lang/String;)[Lorg/pegasus/jmpi/CIMInstance;"
|
2244 mark.hamzy 1.24
2245 if (id != NULL)
2246 {
|
2247 mark.hamzy 1.25 eMethodFound = METHOD_PEGASUS_24;
2248 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferencesRequest: found METHOD_PEGASUS_24."<<PEGASUS_STD(endl));
|
2249 mark.hamzy 1.24 }
2250 }
|
2251 schuur 1.12
|
2252 mark.hamzy 1.24 if (id == NULL)
2253 {
|
2254 mark.hamzy 1.25 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferencesRequest: found no method!"<<PEGASUS_STD(endl));
|
2255 mark.hamzy 1.23 }
|
2256 mark.hamzy 1.24
|
2257 schuur 1.1 JMPIjvm::checkException(env);
2258
|
2259 mark.hamzy 1.24 switch (eMethodFound)
2260 {
|
2261 mark.hamzy 1.25 case METHOD_PEGASUS_24:
|
2262 mark.hamzy 1.24 {
|
2263 mark.hamzy 1.25 jint jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, &objectPath);
2264 jobject jAssociationName = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
2265
2266 JMPIjvm::checkException(env);
2267
2268 jstring jRole = env->NewStringUTF(request->role.getCString());
2269
2270 JMPIjvm::checkException(env);
2271
2272 jobjectArray jPropertyList = getList(jv,env,request->propertyList);
2273
|
2274 mark.hamzy 1.24 jobjectArray jVec=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
2275 id,
2276 jAssociationName,
2277 jRole,
2278 false,
2279 false,
2280 jPropertyList);
|
2281 mark.hamzy 1.25
|
2282 mark.hamzy 1.23 JMPIjvm::checkException(env);
2283
2284 STAT_PMS_PROVIDEREND;
2285
2286 handler.processing();
2287 if (jVec) {
|
2288 mark.hamzy 1.24 for (int i=0,m=env->GetArrayLength(jVec); i<m; i++) {
|
2289 mark.hamzy 1.23 JMPIjvm::checkException(env);
2290
|
2291 mark.hamzy 1.24 jobject jInst=env->GetObjectArrayElement(jVec,i);
2292
|
2293 mark.hamzy 1.23 JMPIjvm::checkException(env);
2294
|
2295 mark.hamzy 1.24 jint jCi = env->CallIntMethod(jInst,JMPIjvm::jv.CIMInstanceCInst);
|
2296 mark.hamzy 1.23
2297 JMPIjvm::checkException(env);
2298
|
2299 mark.hamzy 1.24 CIMInstance *ci = DEBUG_ConvertJavaToC (jint, CIMInstance*, jCi);
2300 CIMClass cls = pr._cimom_handle->getClass(context,
2301 request->nameSpace,
2302 ci->getClassName(),
2303 false,
2304 true,
2305 true,
2306 CIMPropertyList());
2307 const CIMObjectPath& op = ci->getPath();
2308 CIMObjectPath iop = ci->buildPath(cls);
2309
|
2310 mark.hamzy 1.23 iop.setNameSpace(op.getNameSpace());
2311 ci->setPath(iop);
|
2312 schuur 1.13
|
2313 mark.hamzy 1.23 handler.deliver(*ci);
2314 }
2315 }
2316 handler.complete();
|
2317 mark.hamzy 1.24 break;
|
2318 mark.hamzy 1.23 }
|
2319 schuur 1.1
|
2320 mark.hamzy 1.24 case METHOD_SNIA_PROVIDER20:
2321 {
|
2322 mark.hamzy 1.25 jint jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, &objectPath);
2323 jobject jAssociationName = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
2324
2325 JMPIjvm::checkException(env);
2326
|
2327 mark.hamzy 1.24 jint jPathNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, &resultPath);
2328 jobject jPathName = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jPathNameRef);
2329
2330 JMPIjvm::checkException(env);
2331
|
2332 mark.hamzy 1.25 jstring jRole = env->NewStringUTF(request->role.getCString());
2333
2334 JMPIjvm::checkException(env);
2335
2336 jobjectArray jPropertyList = getList(jv,env,request->propertyList);
2337
|
2338 mark.hamzy 1.24 jobjectArray jVec=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
2339 id,
2340 jAssociationName,
2341 jPathName,
2342 jRole,
2343 false,
2344 false,
2345 jPropertyList);
|
2346 mark.hamzy 1.25
|
2347 mark.hamzy 1.24 JMPIjvm::checkException(env);
2348
2349 STAT_PMS_PROVIDEREND;
2350
2351 handler.processing();
2352 if (jVec) {
2353 for (int i=0,m=env->GetArrayLength(jVec); i<m; i++) {
2354 JMPIjvm::checkException(env);
2355
2356 jobject jInst=env->GetObjectArrayElement(jVec,i);
2357
2358 JMPIjvm::checkException(env);
2359
2360 jint jCi = env->CallIntMethod(jInst,JMPIjvm::jv.CIMInstanceCInst);
2361
2362 JMPIjvm::checkException(env);
2363
2364 CIMInstance *ci = DEBUG_ConvertJavaToC (jint, CIMInstance*, jCi);
2365 CIMClass cls = pr._cimom_handle->getClass(context,
2366 request->nameSpace,
2367 ci->getClassName(),
2368 mark.hamzy 1.24 false,
2369 true,
2370 true,
2371 CIMPropertyList());
2372 const CIMObjectPath& op = ci->getPath();
2373 CIMObjectPath iop = ci->buildPath(cls);
|
2374 schuur 1.1
|
2375 mark.hamzy 1.24 iop.setNameSpace(op.getNameSpace());
2376 ci->setPath(iop);
|
2377 schuur 1.12
|
2378 mark.hamzy 1.24 handler.deliver(*ci);
2379 }
2380 }
2381 handler.complete();
2382 break;
2383 }
|
2384 mark.hamzy 1.23
|
2385 mark.hamzy 1.24 case METHOD_UNKNOWN:
2386 {
|
2387 mark.hamzy 1.25 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferencesRequest: should not be here!"<<PEGASUS_STD(endl));
|
2388 mark.hamzy 1.24 break;
2389 }
|
2390 mark.hamzy 1.23 }
|
2391 schuur 1.1 }
2392 HandlerCatch(handler);
|
2393 schuur 1.12
2394 if (env) JMPIjvm::detachThread();
2395
|
2396 schuur 1.1 PEG_METHOD_EXIT();
2397
2398 return(response);
2399 }
2400
2401 Message * JMPIProviderManager::handleReferenceNamesRequest(const Message * message) throw()
2402 {
|
2403 mark.hamzy 1.23 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleReferenceNamesRequest");
2404
2405 HandlerIntro(ReferenceNames,message,request,response,handler,Array<CIMObjectPath>());
|
2406 schuur 1.1
|
2407 mark.hamzy 1.24 typedef enum {
2408 METHOD_UNKNOWN = 0,
|
2409 mark.hamzy 1.25 METHOD_PEGASUS_24,
|
2410 mark.hamzy 1.24 METHOD_SNIA_PROVIDER20,
2411 } METHOD_VERSION;
2412 METHOD_VERSION eMethodFound = METHOD_UNKNOWN;
2413 JNIEnv *env = NULL;
|
2414 schuur 1.13
|
2415 schuur 1.1 try {
2416 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
2417 "JMPIProviderManager::handleReferenceNamesRequest - Host name: $0 Name space: $1 Class name: $2",
2418 System::getHostName(),
2419 request->nameSpace.getString(),
2420 request->objectName.getClassName().getString());
2421
|
2422 mark.hamzy 1.23 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferenceNamesRequest: hostname = "<<System::getHostName()<<", namespace = "<<request->nameSpace.getString()<<", classname = "<<request->objectName.getClassName().getString()<<PEGASUS_STD(endl));
2423
|
2424 schuur 1.1 // make target object path
2425 CIMObjectPath objectPath(
2426 System::getHostName(),
2427 request->nameSpace,
2428 request->objectName.getClassName());
2429
2430 objectPath.setKeyBindings(request->objectName.getKeyBindings());
2431
2432 CIMObjectPath resultPath(
2433 System::getHostName(),
2434 request->nameSpace,
2435 request->resultClass.getString());
2436
2437 // resolve provider name
|
2438 kumpf 1.2 ProviderName name = _resolveProviderName(
2439 request->operationContext.get(ProviderIdContainer::NAME));
|
2440 schuur 1.1
2441 // get cached or load new provider module
2442 JMPIProvider::OpProviderHolder ph =
2443 providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
2444
2445 // convert arguments
2446 OperationContext context;
2447
|
2448 schuur 1.11 context.insert(request->operationContext.get(IdentityContainer::NAME));
2449 context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME));
2450 context.insert(request->operationContext.get(ContentLanguageListContainer::NAME));
|
2451 schuur 1.1
|
2452 mark.hamzy 1.24 JMPIProvider &pr = ph.GetProvider();
|
2453 schuur 1.1
|
2454 mark.hamzy 1.25 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, "Calling provider.referenceNames: " + pr.getName());
|
2455 schuur 1.1
|
2456 mark.hamzy 1.23 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferenceNamesRequest: Calling provider referenceNames: "<<pr.getName()<<", role: "<<request->role<<", aCls: "<<request->resultClass<<PEGASUS_STD(endl));
|
2457 schuur 1.12
|
2458 mark.hamzy 1.24 JvmVector *jv = 0;
2459
2460 env = JMPIjvm::attachThread(&jv);
|
2461 schuur 1.1
2462 JMPIProvider::pm_service_op_lock op_lock(&pr);
2463
2464 STAT_GETSTARTTIME;
2465
|
2466 mark.hamzy 1.24 jmethodID id = NULL;
2467
2468 // public abstract java.util.Vector referenceNames (org.pegasus.jmpi.CIMObjectPath assocName,
|
2469 mark.hamzy 1.25 // org.pegasus.jmpi.CIMObjectPath pathName,
|
2470 mark.hamzy 1.24 // java.lang.String role)
|
2471 mark.hamzy 1.25 // throws org.pegasus.jmpi.CIMException
|
2472 mark.hamzy 1.24 id = env->GetMethodID((jclass)pr.jProviderClass,
2473 "referenceNames",
|
2474 mark.hamzy 1.25 "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;)Ljava/util/Vector;");
2475 //@BUG was: "(Lorg/pegasus/jmpi/CIMObjectPath; Ljava/lang/String;)Ljava/util/Vector;"
|
2476 mark.hamzy 1.24
2477 if (id != NULL)
2478 {
|
2479 mark.hamzy 1.25 eMethodFound = METHOD_SNIA_PROVIDER20;
2480 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferenceNamesRequest: found METHOD_SNIA_PROVIDER20."<<PEGASUS_STD(endl));
|
2481 mark.hamzy 1.24 }
2482
2483 if (id == NULL)
2484 {
2485 env->ExceptionClear();
2486
2487 // public abstract java.util.Vector referenceNames (org.pegasus.jmpi.CIMObjectPath assocName,
2488 // java.lang.String role)
|
2489 mark.hamzy 1.25 // throws org.pegasus.jmpi.CIMException
|
2490 mark.hamzy 1.24 id = env->GetMethodID((jclass)pr.jProviderClass,
2491 "referenceNames",
|
2492 mark.hamzy 1.25 "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;)Ljava/util/Vector;");
2493 //@BUG was: "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;)[Lorg/pegasus/jmpi/CIMObjectPath;"
|
2494 mark.hamzy 1.24
2495 if (id != NULL)
2496 {
|
2497 mark.hamzy 1.25 eMethodFound = METHOD_PEGASUS_24;
2498 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferenceNamesRequest: found METHOD_PEGASUS_24."<<PEGASUS_STD(endl));
|
2499 mark.hamzy 1.24 }
2500 }
|
2501 schuur 1.11
|
2502 mark.hamzy 1.24 if (id == NULL)
2503 {
|
2504 mark.hamzy 1.25 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferenceNamesRequest: found no method!"<<PEGASUS_STD(endl));
|
2505 mark.hamzy 1.23 }
|
2506 mark.hamzy 1.24
|
2507 schuur 1.1 JMPIjvm::checkException(env);
2508
|
2509 mark.hamzy 1.24 switch (eMethodFound)
2510 {
|
2511 mark.hamzy 1.25 case METHOD_PEGASUS_24:
|
2512 mark.hamzy 1.24 {
|
2513 mark.hamzy 1.25 jint jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, &objectPath);
2514 jobject jAssociationName = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
2515
2516 JMPIjvm::checkException(env);
2517
2518 jstring jRole = env->NewStringUTF(request->role.getCString());
2519
2520 JMPIjvm::checkException(env);
2521
|
2522 mark.hamzy 1.24 jobjectArray jVec=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
2523 id,
2524 jAssociationName,
2525 jRole);
|
2526 mark.hamzy 1.25
|
2527 mark.hamzy 1.23 JMPIjvm::checkException(env);
2528
2529 STAT_PMS_PROVIDEREND;
2530
2531 handler.processing();
2532 if (jVec) {
|
2533 mark.hamzy 1.24 for (int i=0,m=env->GetArrayLength(jVec); i<m; i++) {
|
2534 mark.hamzy 1.23 JMPIjvm::checkException(env);
2535
|
2536 mark.hamzy 1.24 jobject jInst=env->GetObjectArrayElement(jVec,i);
2537
|
2538 mark.hamzy 1.23 JMPIjvm::checkException(env);
2539
|
2540 mark.hamzy 1.24 jint jCop = env->CallIntMethod(jInst,JMPIjvm::jv.CIMObjectPathCInst);
|
2541 mark.hamzy 1.23
2542 JMPIjvm::checkException(env);
2543
|
2544 mark.hamzy 1.25 CIMObjectPath *cop = DEBUG_ConvertJavaToC (jint, CIMObjectPath*, jCop);
|
2545 mark.hamzy 1.24
|
2546 mark.hamzy 1.23 handler.deliver(*cop);
2547 }
2548 }
2549 handler.complete();
|
2550 mark.hamzy 1.24 break;
|
2551 mark.hamzy 1.23 }
|
2552 mark.hamzy 1.24
2553 case METHOD_SNIA_PROVIDER20:
2554 {
|
2555 mark.hamzy 1.25 jint jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, &objectPath);
2556 jobject jAssociationName = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
2557
2558 JMPIjvm::checkException(env);
2559
|
2560 mark.hamzy 1.24 jint jPathNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, &resultPath);
2561 jobject jPathName = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jPathNameRef);
2562
2563 JMPIjvm::checkException(env);
2564
|
2565 mark.hamzy 1.25 jstring jRole = env->NewStringUTF(request->role.getCString());
2566
2567 JMPIjvm::checkException(env);
2568
|
2569 mark.hamzy 1.24 jobjectArray jVec=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
2570 id,
2571 jAssociationName,
2572 jPathName,
2573 jRole);
|
2574 mark.hamzy 1.25
|
2575 mark.hamzy 1.23 JMPIjvm::checkException(env);
2576
2577 STAT_PMS_PROVIDEREND;
|
2578 schuur 1.13
|
2579 mark.hamzy 1.23 handler.processing();
|
2580 mark.hamzy 1.24 if (jVec) {
2581 for (int i=0,m=env->GetArrayLength(jVec); i<m; i++) {
|
2582 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
2583 schuur 1.13
|
2584 mark.hamzy 1.24 jobject jInst=env->GetObjectArrayElement(jVec,i);
2585
|
2586 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
2587 schuur 1.13
|
2588 mark.hamzy 1.24 jint jCop = env->CallIntMethod(jInst,JMPIjvm::jv.CIMObjectPathCInst);
|
2589 schuur 1.1
|
2590 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
2591 schuur 1.1
|
2592 mark.hamzy 1.25 CIMObjectPath *cop = DEBUG_ConvertJavaToC (jint, CIMObjectPath*, jCop);
|
2593 mark.hamzy 1.24
|
2594 mark.hamzy 1.23 handler.deliver(*cop);
2595 }
2596 }
2597 handler.complete();
|
2598 mark.hamzy 1.24 break;
2599 }
2600
2601 case METHOD_UNKNOWN:
2602 {
|
2603 mark.hamzy 1.25 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferenceNamesRequest: should not be here!"<<PEGASUS_STD(endl));
|
2604 mark.hamzy 1.24 break;
2605 }
|
2606 mark.hamzy 1.23 }
|
2607 schuur 1.1 }
2608 HandlerCatch(handler);
|
2609 schuur 1.11
2610 if (env) JMPIjvm::detachThread();
2611
|
2612 schuur 1.1 PEG_METHOD_EXIT();
2613
2614 return(response);
2615 }
2616
2617 Message * JMPIProviderManager::handleInvokeMethodRequest(const Message * message) throw()
2618 {
|
2619 mark.hamzy 1.23 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleInvokeMethodRequest");
2620
2621 HandlerIntroMethod(InvokeMethod,message,request,response,handler);
|
2622 schuur 1.1
|
2623 mark.hamzy 1.25 typedef enum {
2624 METHOD_UNKNOWN = 0,
2625 METHOD_PEGASUS_24,
2626 METHOD_SNIA_PROVIDER20,
2627 } METHOD_VERSION;
2628 METHOD_VERSION eMethodFound = METHOD_UNKNOWN;
2629 JNIEnv *env = NULL;
|
2630 schuur 1.13
|
2631 schuur 1.1 try {
2632 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
2633 "JMPIProviderManager::handleInvokeMethodRequest - Host name: $0 Name space: $1 Class name: $2",
2634 System::getHostName(),
2635 request->nameSpace.getString(),
2636 request->instanceName.getClassName().getString());
2637
|
2638 mark.hamzy 1.23 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleInvokeMethodRequest: hostname = "<<System::getHostName()<<", namespace = "<<request->nameSpace.getString()<<", classname = "<<request->instanceName.getClassName().getString()<<PEGASUS_STD(endl));
2639
|
2640 schuur 1.1 // make target object path
2641 CIMObjectPath objectPath(
2642 System::getHostName(),
2643 request->nameSpace,
2644 request->instanceName.getClassName(),
2645 request->instanceName.getKeyBindings());
2646
2647 // resolve provider name
|
2648 kumpf 1.2 ProviderName name = _resolveProviderName(
2649 request->operationContext.get(ProviderIdContainer::NAME));
|
2650 schuur 1.1
2651 // get cached or load new provider module
2652 JMPIProvider::OpProviderHolder ph =
2653 providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
2654
2655 // convert arguments
2656 OperationContext context;
2657
|
2658 schuur 1.11 context.insert(request->operationContext.get(IdentityContainer::NAME));
2659 context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME));
2660 context.insert(request->operationContext.get(ContentLanguageListContainer::NAME));
|
2661 schuur 1.1
|
2662 mark.hamzy 1.25 JMPIProvider &pr=ph.GetProvider();
|
2663 schuur 1.1
|
2664 mark.hamzy 1.25 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, "Calling provider.invokeMethod: " + pr.getName());
|
2665 schuur 1.1
|
2666 mark.hamzy 1.23 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleInvokeMethodRequest: Calling provider invokeMethod: "<<pr.getName()<<PEGASUS_STD(endl));
|
2667 schuur 1.11
|
2668 mark.hamzy 1.25 JvmVector *jv = 0;
|
2669 mark.hamzy 1.23
|
2670 mark.hamzy 1.25 env = JMPIjvm::attachThread(&jv);
|
2671 schuur 1.11
|
2672 mark.hamzy 1.25 JMPIProvider::pm_service_op_lock op_lock(&pr);
|
2673 schuur 1.11
|
2674 schuur 1.1 STAT_GETSTARTTIME;
2675
|
2676 mark.hamzy 1.25 jmethodID id = NULL;
2677
2678 // public abstract org.pegasus.jmpi.CIMValue invokeMethod (org.pegasus.jmpi.CIMObjectPath cop,
2679 // java.lang.String name,
2680 // java.util.Vector in,
2681 // java.util.Vector out)
2682 // throws org.pegasus.jmpi.CIMException
2683 id = env->GetMethodID((jclass)pr.jProviderClass,
2684 "invokeMethod",
2685 "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/util/Vector;Ljava/util/Vector;)Lorg/pegasus/jmpi/CIMValue;");
2686
2687 if (id != NULL)
2688 {
2689 eMethodFound = METHOD_SNIA_PROVIDER20;
2690 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleInvokeMethodRequest: found METHOD_SNIA_PROVIDER20."<<PEGASUS_STD(endl));
2691 }
2692
2693 if (id == NULL)
2694 {
2695 env->ExceptionClear();
2696
2697 mark.hamzy 1.25 // public org.pegasus.jmpi.CIMValue invokeMethod (org.pegasus.jmpi.CIMObjectPath op,
2698 // java.lang.String methodName,
2699 // org.pegasus.jmpi.CIMArgument[] inArgs,
2700 // org.pegasus.jmpi.CIMArgument[] outArgs)
2701 // throws org.pegasus.jmpi.CIMException
2702 id = env->GetMethodID((jclass)pr.jProviderClass,
2703 "invokeMethod",
2704 "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;[Lorg/pegasus/jmpi/CIMArgument;[Lorg/pegasus/jmpi/CIMArgument;)Lorg/pegasus/jmpi/CIMValue;");
2705
2706 if (id != NULL)
2707 {
2708 eMethodFound = METHOD_PEGASUS_24;
2709 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleInvokeMethodRequest: found METHOD_PEGASUS_24."<<PEGASUS_STD(endl));
2710 }
|
2711 mark.hamzy 1.23 }
|
2712 mark.hamzy 1.25
|
2713 schuur 1.11 JMPIjvm::checkException(env);
2714
|
2715 mark.hamzy 1.25 switch (eMethodFound)
2716 {
2717 case METHOD_PEGASUS_24:
2718 {
2719 jint jObj = DEBUG_ConvertCToJava (CIMObjectPath*, jint, &objectPath);
2720
2721 jobject jRef=env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jObj);
2722 JMPIjvm::checkException(env);
2723
2724 jstring jMethod=env->NewStringUTF(request->methodName.getString().getCString());
|
2725 mark.hamzy 1.23 JMPIjvm::checkException(env);
2726
|
2727 mark.hamzy 1.25 Uint32 m=request->inParameters.size();
2728
2729 jobjectArray jArIn=(jobjectArray)env->NewObjectArray(m,jv->CIMArgumentClassRef,NULL);
2730 for (Uint32 i=0; i<m; i++) {
2731 CIMParamValue *parm = new CIMParamValue(request->inParameters[i]);
2732 jint jObj = DEBUG_ConvertCToJava (CIMParamValue*, jint, parm);
2733 jobject jArg = env->NewObject(jv->CIMArgumentClassRef,jv->CIMArgumentNewI,jObj);
|
2734 mark.hamzy 1.23
|
2735 mark.hamzy 1.25 env->SetObjectArrayElement(jArIn,i,jArg);
2736 }
|
2737 mark.hamzy 1.23
|
2738 mark.hamzy 1.25 jobjectArray jArOut=(jobjectArray)env->NewObjectArray(24,jv->CIMArgumentClassRef,NULL);
|
2739 mark.hamzy 1.23
|
2740 mark.hamzy 1.25 jobject jValue=env->CallObjectMethod((jobject)pr.jProvider,id,jRef,jMethod,jArIn,jArOut);
|
2741 mark.hamzy 1.23 JMPIjvm::checkException(env);
2742
2743 STAT_PMS_PROVIDEREND;
2744
2745 handler.processing();
2746
2747 jint jv = env->CallIntMethod(jValue,JMPIjvm::jv.CIMValueCInst);
2748 CIMValue *v = DEBUG_ConvertJavaToC (jint, CIMValue*, jv);
2749
2750 handler.deliver(*v);
|
2751 schuur 1.13
|
2752 mark.hamzy 1.25 for (int i=0; i<24; i++) {
2753 jobject jArg=env->GetObjectArrayElement(jArOut,i);
|
2754 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
2755 schuur 1.13
|
2756 mark.hamzy 1.25 if (jArg==NULL) break;
|
2757 schuur 1.13
|
2758 mark.hamzy 1.25 jint jp = env->CallIntMethod(jArg,JMPIjvm::jv.ArgumentCInst);
2759 CIMParamValue *p = DEBUG_ConvertJavaToC (jint, CIMParamValue*, jp);
|
2760 schuur 1.13
|
2761 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
2762 schuur 1.1
|
2763 mark.hamzy 1.25 handler.deliverParamValue(*p);
|
2764 mark.hamzy 1.23 }
|
2765 schuur 1.1
|
2766 mark.hamzy 1.23 handler.complete();
|
2767 mark.hamzy 1.25 break;
|
2768 mark.hamzy 1.23 }
|
2769 schuur 1.11
|
2770 mark.hamzy 1.25 case METHOD_SNIA_PROVIDER20:
2771 {
2772 jint jObj = DEBUG_ConvertCToJava (CIMObjectPath*, jint, &objectPath);
2773
2774 jobject jRef=env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jObj);
2775 JMPIjvm::checkException(env);
2776
2777 jstring jMethod=env->NewStringUTF(request->methodName.getString().getCString());
2778 JMPIjvm::checkException(env);
2779
2780 jobject jVecIn=env->NewObject(jv->VectorClassRef,jv->VectorNew);
2781 JMPIjvm::checkException(env);
2782 for (int i=0,m=request->inParameters.size(); i<m; i++) {
2783 const CIMParamValue &parm = request->inParameters[i];
2784 const CIMValue v = parm.getValue();
2785 CIMProperty *p = new CIMProperty(parm.getParameterName(),v,v.getArraySize());
2786 jint jObj = DEBUG_ConvertCToJava (CIMProperty*, jint, p);
2787
2788 jobject prop=env->NewObject(jv->CIMPropertyClassRef,jv->CIMPropertyNewI,jObj);
|
2789 mark.hamzy 1.23
|
2790 mark.hamzy 1.25 env->CallVoidMethod(jVecIn,jv->VectorAddElement,prop);
2791 }
|
2792 mark.hamzy 1.23
|
2793 mark.hamzy 1.25 jobject jVecOut=env->NewObject(jv->VectorClassRef,jv->VectorNew);
2794 JMPIjvm::checkException(env);
|
2795 mark.hamzy 1.23
|
2796 mark.hamzy 1.25 jobject jValue=env->CallObjectMethod((jobject)pr.jProvider,id,jRef,jMethod,jVecIn,jVecOut);
|
2797 mark.hamzy 1.23 JMPIjvm::checkException(env);
2798
2799 STAT_PMS_PROVIDEREND;
2800
2801 handler.processing();
|
2802 schuur 1.1
|
2803 mark.hamzy 1.23 jint jv = env->CallIntMethod(jValue,JMPIjvm::jv.CIMValueCInst);
2804 CIMValue *v = DEBUG_ConvertJavaToC (jint, CIMValue*, jv);
2805
2806 handler.deliver(*v);
2807
|
2808 mark.hamzy 1.25 for (int i=0,m=env->CallIntMethod(jVecOut,JMPIjvm::jv.VectorSize); i<m; i++) {
|
2809 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
2810 schuur 1.13
|
2811 mark.hamzy 1.25 jobject jProp=env->CallObjectMethod(jVecOut,JMPIjvm::jv.VectorElementAt,i);
2812 JMPIjvm::checkException(env);
|
2813 schuur 1.13
|
2814 mark.hamzy 1.25 jint jp = env->CallIntMethod(jProp,JMPIjvm::jv.PropertyCInst);
2815 CIMProperty *p = DEBUG_ConvertJavaToC (jint, CIMProperty*, jp);
|
2816 schuur 1.13
|
2817 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
2818 schuur 1.13
|
2819 mark.hamzy 1.25 handler.deliverParamValue(CIMParamValue(p->getName().getString(),p->getValue()));
2820 }
2821
2822 handler.complete();
2823 break;
2824 }
|
2825 mark.hamzy 1.23
|
2826 mark.hamzy 1.25 case METHOD_UNKNOWN:
2827 {
2828 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleInvokeMethodRequest: should not be here!"<<PEGASUS_STD(endl));
2829 break;
2830 }
|
2831 mark.hamzy 1.23 }
|
2832 schuur 1.1 }
2833 HandlerCatch(handler);
|
2834 schuur 1.11
2835 if (env) JMPIjvm::detachThread();
2836
|
2837 schuur 1.1 PEG_METHOD_EXIT();
2838
|
2839 schuur 1.11 return(response);
|
2840 schuur 1.1 }
|
2841 mark.hamzy 1.23
|
2842 schuur 1.1 int LocateIndicationProviderNames(const CIMInstance& pInstance, const CIMInstance& pmInstance,
2843 String& providerName, String& location)
2844 {
2845 Uint32 pos = pInstance.findProperty(CIMName ("Name"));
2846 pInstance.getProperty(pos).getValue().get(providerName);
2847
2848 pos = pmInstance.findProperty(CIMName ("Location"));
2849 pmInstance.getProperty(pos).getValue().get(location);
2850 return 0;
2851 }
2852
2853 Message * JMPIProviderManager::handleCreateSubscriptionRequest(const Message * message) throw()
2854 {
|
2855 konrad.r 1.15 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager::handleCreateSubscriptionRequest");
|
2856 schuur 1.1
|
2857 mark.hamzy 1.23 HandlerIntroInd(CreateSubscription,message,request,response,handler);
2858
|
2859 mark.hamzy 1.25 typedef enum {
2860 METHOD_UNKNOWN = 0,
2861 METHOD_SNIA_PROVIDER20,
2862 } METHOD_VERSION;
2863 METHOD_VERSION eMethodFound = METHOD_UNKNOWN;
2864 JNIEnv *env = NULL;
2865
|
2866 schuur 1.1 try {
|
2867 mark.hamzy 1.25 String providerName,
2868 providerLocation;
2869 CIMInstance req_provider,
2870 req_providerModule;
2871
2872 ProviderIdContainer pidc = (ProviderIdContainer)request->operationContext.get(ProviderIdContainer::NAME);
|
2873 schuur 1.1
|
2874 mark.hamzy 1.25 req_provider = pidc.getProvider();
|
2875 schuur 1.12 req_providerModule = pidc.getModule();
|
2876 mark.hamzy 1.25
|
2877 schuur 1.12 LocateIndicationProviderNames(req_provider, req_providerModule,providerName,providerLocation);
|
2878 schuur 1.1
2879 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
2880 "JMPIProviderManager::handleCreateSubscriptionRequest - Host name: $0 Name space: $1 Provider name(s): $2",
2881 System::getHostName(),
2882 request->nameSpace.getString(),
2883 providerName);
2884
|
2885 mark.hamzy 1.23 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleCreateSubscriptionRequest: hostname = "<<System::getHostName()<<", namespace = "<<request->nameSpace.getString()<<", providername = "<<providerName<<PEGASUS_STD(endl));
2886
|
2887 schuur 1.1 String fileName = resolveFileName(providerLocation);
2888
2889 // get cached or load new provider module
2890 JMPIProvider::OpProviderHolder ph =
2891 providerManager.getProvider(fileName, providerName, String::EMPTY);
2892
|
2893 mark.hamzy 1.25 indProvRecord *prec = NULL;
2894
|
2895 schuur 1.12 provTab.lookup(providerName,prec);
|
2896 mark.hamzy 1.25
|
2897 mark.hamzy 1.23 if (prec)
|
2898 mark.hamzy 1.25 {
|
2899 mark.hamzy 1.23 prec->count++;
|
2900 mark.hamzy 1.25 }
2901 else
2902 {
2903 prec=new indProvRecord();
2904 provTab.insert(providerName,prec);
|
2905 schuur 1.12 }
|
2906 schuur 1.1
|
2907 carolann.graves 1.21 //
2908 // Save the provider instance from the request
2909 //
2910 ph.GetProvider ().setProviderInstance (req_provider);
2911
|
2912 mark.hamzy 1.25 indSelectRecord *srec = new indSelectRecord();
2913 const CIMObjectPath &sPath = request->subscriptionInstance.getPath();
2914
|
2915 schuur 1.12 selxTab.insert(sPath.toString(),srec);
|
2916 schuur 1.1
2917 // convert arguments
2918 OperationContext *context=new OperationContext();
2919
|
2920 mark.hamzy 1.25 if (prec->ctx==NULL)
2921 {
2922 prec->ctx=context;
|
2923 mark.hamzy 1.23 }
|
2924 schuur 1.12
2925 context->insert(request->operationContext.get(IdentityContainer::NAME));
2926 context->insert(request->operationContext.get(AcceptLanguageListContainer::NAME));
2927 context->insert(request->operationContext.get(ContentLanguageListContainer::NAME));
2928 context->insert(request->operationContext.get(SubscriptionInstanceContainer::NAME));
2929 context->insert(request->operationContext.get(SubscriptionLanguageListContainer::NAME));
2930 context->insert(request->operationContext.get(SubscriptionFilterConditionContainer::NAME));
|
2931 schuur 1.1
2932 CIMObjectPath subscriptionName = request->subscriptionInstance.getPath();
2933
|
2934 schuur 1.12 SubscriptionFilterConditionContainer sub_cntr = request->operationContext.get
2935 (SubscriptionFilterConditionContainer::NAME);
2936
|
2937 mark.hamzy 1.25 JMPIProvider &pr = ph.GetProvider();
|
2938 konrad.r 1.22
|
2939 mark.hamzy 1.25 CIMOMHandleQueryContext *qcontext=new CIMOMHandleQueryContext(CIMNamespaceName(request->nameSpace.getString()),
2940 *pr._cimom_handle);
|
2941 konrad.r 1.22
|
2942 mark.hamzy 1.25 CMPI_SelectExp *eSelx = new CMPI_SelectExp(*context,
2943 qcontext,
2944 request->query,
2945 sub_cntr.getQueryLanguage());
|
2946 konrad.r 1.22
|
2947 schuur 1.12 srec->eSelx=eSelx;
|
2948 mark.hamzy 1.25 srec->qContext=qcontext;
|
2949 schuur 1.1
|
2950 mark.hamzy 1.25 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, "Calling provider.createSubscriptionRequest: " + pr.getName());
|
2951 schuur 1.1
|
2952 mark.hamzy 1.23 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleCreateSubscriptionRequest: Calling provider createSubscriptionRequest: "<<pr.getName()<<PEGASUS_STD(endl));
|
2953 schuur 1.1
2954 for(Uint32 i = 0, n = request->classNames.size(); i < n; i++) {
2955 CIMObjectPath className(
2956 System::getHostName(),
2957 request->nameSpace,
2958 request->classNames[i]);
2959 eSelx->classNames.append(className);
2960 }
2961
2962 CIMPropertyList propertyList = request->propertyList;
|
2963 schuur 1.12 if (!propertyList.isNull()) {
|
2964 schuur 1.1 Array<CIMName> p=propertyList.getPropertyNameArray();
2965 int pCount=p.size();
2966 eSelx->props=(const char**)malloc((1+pCount)*sizeof(char*));
2967 for (int i=0; i<pCount; i++) {
2968 eSelx->props[i]=strdup(p[i].getString().getCString());
|
2969 mark.hamzy 1.23 }
|
2970 schuur 1.1 eSelx->props[pCount]=NULL;
2971 }
2972
|
2973 mark.hamzy 1.25 JvmVector *jv = 0;
2974
2975 env = JMPIjvm::attachThread(&jv);
2976
2977 JMPIProvider::pm_service_op_lock op_lock(&pr);
2978
2979 STAT_GETSTARTTIME;
2980
2981 jmethodID id = NULL;
2982
2983 // public void authorizeFilter (org.pegasus.jmpi.SelectExp filter,
2984 // java.lang.String eventType,
2985 // org.pegasus.jmpi.CIMObjectPath classPath,
2986 // java.lang.String owner)
2987 // throws org.pegasus.jmpi.CIMException
2988 id = env->GetMethodID((jclass)pr.jProviderClass,
2989 "activateFilter",
2990 "(Lorg/pegasus/jmpi/SelectExp;Ljava/lang/String;Lorg/pegasus/jmpi/CIMObjectPath;Z)V");
|
2991 schuur 1.12
|
2992 mark.hamzy 1.25 if (id != NULL)
2993 {
2994 eMethodFound = METHOD_SNIA_PROVIDER20;
2995 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleCreateSubscriptionRequest: found METHOD_SNIA_PROVIDER20."<<PEGASUS_STD(endl));
2996 }
|
2997 mark.hamzy 1.23
2998 JMPIjvm::checkException(env);
2999
|
3000 mark.hamzy 1.25 switch (eMethodFound)
3001 {
3002 case METHOD_SNIA_PROVIDER20:
3003 {
3004 jint jObj = DEBUG_ConvertCToJava (CMPI_SelectExp*, jint, eSelx);
3005 jobject jSel = env->NewObject(jv->SelectExpClassRef,jv->SelectExpNewI,jObj);
3006
3007 JMPIjvm::checkException(env);
3008
3009 jObj = DEBUG_ConvertCToJava (CIMObjectPath*, jint, &eSelx->classNames[0]);
|
3010 mark.hamzy 1.23
|
3011 mark.hamzy 1.25 jobject jRef = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jObj);
|
3012 schuur 1.12
|
3013 mark.hamzy 1.25 JMPIjvm::checkException(env);
|
3014 schuur 1.1
|
3015 mark.hamzy 1.25 jstring jType = env->NewStringUTF(request->nameSpace.getString().getCString());
|
3016 schuur 1.1
|
3017 mark.hamzy 1.25 JMPIjvm::checkException(env);
|
3018 schuur 1.1
|
3019 mark.hamzy 1.25 env->CallVoidMethod((jobject)pr.jProvider,
3020 id,
3021 jSel,
3022 jType,
3023 jRef,
3024 (jboolean)0);
|
3025 schuur 1.12
|
3026 mark.hamzy 1.25 JMPIjvm::checkException(env);
|
3027 schuur 1.1
|
3028 carolann.graves 1.21 //
|
3029 mark.hamzy 1.25 // Increment count of current subscriptions for this provider
|
3030 carolann.graves 1.21 //
|
3031 mark.hamzy 1.25 if (ph.GetProvider ().testIfZeroAndIncrementSubscriptions ())
|
3032 carolann.graves 1.21 {
|
3033 mark.hamzy 1.25 //
3034 // If there were no current subscriptions before the increment,
3035 // the first subscription has been created
3036 // Call the provider's enableIndications method
3037 //
3038 if (_subscriptionInitComplete)
3039 {
3040 prec->enabled = true;
3041 CIMRequestMessage * request = 0;
3042 CIMResponseMessage * response = 0;
3043 prec->handler = new EnableIndicationsResponseHandler
3044 (request, response, req_provider, _indicationCallback);
3045 }
|
3046 carolann.graves 1.21 }
|
3047 mark.hamzy 1.25
3048 STAT_PMS_PROVIDEREND;
3049 break;
|
3050 carolann.graves 1.21 }
3051
|
3052 mark.hamzy 1.25 case METHOD_UNKNOWN:
3053 {
3054 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleCreateSubscriptionRequest: should not be here!"<<PEGASUS_STD(endl));
3055 break;
3056 }
3057 }
|
3058 schuur 1.1
3059 }
3060 HandlerCatch(handler);
|
3061 schuur 1.12
|
3062 mark.hamzy 1.23 if (env) JMPIjvm::detachThread();
3063
|
3064 schuur 1.1 PEG_METHOD_EXIT();
3065
3066 return(response);
3067 }
3068
3069 Message * JMPIProviderManager::handleDeleteSubscriptionRequest(const Message * message) throw()
3070 {
3071 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager::handleDeleteSubscriptionRequest");
3072
|
3073 mark.hamzy 1.23 HandlerIntroInd(DeleteSubscription,message,request,response,handler);
3074
|
3075 mark.hamzy 1.25 typedef enum {
3076 METHOD_UNKNOWN = 0,
3077 METHOD_SNIA_PROVIDER20,
3078 } METHOD_VERSION;
3079 METHOD_VERSION eMethodFound = METHOD_UNKNOWN;
3080 JNIEnv *env = NULL;
3081
|
3082 schuur 1.1 try {
|
3083 mark.hamzy 1.25 String providerName,
3084 providerLocation;
3085 CIMInstance req_provider,
3086 req_providerModule;
3087 ProviderIdContainer pidc = (ProviderIdContainer)request->operationContext.get(ProviderIdContainer::NAME);
3088
3089 req_provider = pidc.getProvider();
|
3090 schuur 1.12 req_providerModule = pidc.getModule();
|
3091 se.gupta 1.9
|
3092 mark.hamzy 1.25 LocateIndicationProviderNames(req_provider, req_providerModule, providerName,providerLocation);
|
3093 schuur 1.1
3094 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
3095 "JMPIProviderManager::handleDeleteSubscriptionRequest - Host name: $0 Name space: $1 Provider name(s): $2",
3096 System::getHostName(),
3097 request->nameSpace.getString(),
3098 providerName);
3099
|
3100 mark.hamzy 1.23 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleDeleteSubscriptionRequest: hostname = "<<System::getHostName()<<", namespace = "<<request->nameSpace.getString()<<", providername = "<<providerName<<PEGASUS_STD(endl));
3101
|
3102 schuur 1.1 String fileName = resolveFileName(providerLocation);
3103
3104 // get cached or load new provider module
3105 JMPIProvider::OpProviderHolder ph =
3106 providerManager.getProvider(fileName, providerName, String::EMPTY);
3107
|
3108 mark.hamzy 1.25 indProvRecord *prec = NULL;
3109
|
3110 schuur 1.12 provTab.lookup(providerName,prec);
|
3111 mark.hamzy 1.25 if (--prec->count <= 0)
3112 {
3113 provTab.remove(providerName);
3114 prec=NULL;
|
3115 schuur 1.12 }
|
3116 schuur 1.1
|
3117 mark.hamzy 1.25 indSelectRecord *srec = NULL;
3118 const CIMObjectPath &sPath = request->subscriptionInstance.getPath();
3119 String sPathString = sPath.toString();
3120
|
3121 schuur 1.12 selxTab.lookup(sPathString,srec);
|
3122 schuur 1.1
|
3123 mark.hamzy 1.25 CMPI_SelectExp *eSelx = srec->eSelx;
3124 CIMOMHandleQueryContext *qContext = srec->qContext;
|
3125 konrad.r 1.22
|
3126 schuur 1.12 selxTab.remove(sPathString);
|
3127 schuur 1.1
|
3128 schuur 1.12 // convert arguments
|
3129 schuur 1.1 OperationContext context;
3130
|
3131 schuur 1.12 context.insert(request->operationContext.get(IdentityContainer::NAME));
3132 context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME));
3133 context.insert(request->operationContext.get(ContentLanguageListContainer::NAME));
3134 context.insert(request->operationContext.get(SubscriptionInstanceContainer::NAME));
3135 context.insert(request->operationContext.get(SubscriptionLanguageListContainer::NAME));
3136
|
3137 schuur 1.1 CIMObjectPath subscriptionName = request->subscriptionInstance.getPath();
3138
|
3139 schuur 1.12 JMPIProvider & pr=ph.GetProvider();
|
3140 schuur 1.1
|
3141 mark.hamzy 1.25 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, "Calling provider.deleteSubscriptionRequest: " + pr.getName());
|
3142 schuur 1.1
|
3143 mark.hamzy 1.23 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleDeleteSubscriptionRequest: Calling provider deleteSubscriptionRequest: "<<pr.getName()<<PEGASUS_STD(endl));
|
3144 schuur 1.1
|
3145 mark.hamzy 1.25 JvmVector *jv = 0;
3146
3147 env = JMPIjvm::attachThread(&jv);
3148
3149 JMPIProvider::pm_service_op_lock op_lock(&pr);
3150
3151 STAT_GETSTARTTIME;
3152
3153 jmethodID id = NULL;
3154
3155 // public void deActivateFilter (org.pegasus.jmpi.SelectExp filter,
3156 // java.lang.String eventType,
3157 // org.pegasus.jmpi.CIMObjectPath classPath,
3158 // boolean lastActivation)
3159 // throws org.pegasus.jmpi.CIMException
3160 id = env->GetMethodID((jclass)pr.jProviderClass,
3161 "deActivateFilter",
3162 "(Lorg/pegasus/jmpi/SelectExp;Ljava/lang/String;Lorg/pegasus/jmpi/CIMObjectPath;Z)V");
|
3163 schuur 1.12
|
3164 mark.hamzy 1.25 if (id != NULL)
3165 {
3166 eMethodFound = METHOD_SNIA_PROVIDER20;
3167 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleDeleteSubscriptionRequest: found METHOD_SNIA_PROVIDER20."<<PEGASUS_STD(endl));
3168 }
|
3169 mark.hamzy 1.23
3170 JMPIjvm::checkException(env);
3171
|
3172 mark.hamzy 1.25 switch (eMethodFound)
3173 {
3174 case METHOD_SNIA_PROVIDER20:
3175 {
3176 jint jObj = DEBUG_ConvertCToJava (CMPI_SelectExp*, jint, eSelx);
3177 jobject jSel = env->NewObject(jv->SelectExpClassRef,jv->SelectExpNewI,jObj);
3178
3179 JMPIjvm::checkException(env);
3180
3181 jObj = DEBUG_ConvertCToJava (CIMObjectPath*, jint, &eSelx->classNames[0]);
|
3182 mark.hamzy 1.23
|
3183 mark.hamzy 1.25 jobject jRef = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jObj);
|
3184 schuur 1.12
|
3185 mark.hamzy 1.25 JMPIjvm::checkException(env);
|
3186 schuur 1.12
|
3187 mark.hamzy 1.25 jstring jType = env->NewStringUTF(request->nameSpace.getString().getCString());
|
3188 schuur 1.1
|
3189 mark.hamzy 1.25 JMPIjvm::checkException(env);
|
3190 schuur 1.1
|
3191 mark.hamzy 1.25 env->CallVoidMethod((jobject)pr.jProvider,
3192 id,
3193 jSel,
3194 jType,
3195 jRef,
3196 (jboolean)(prec==NULL));
|
3197 schuur 1.1
|
3198 mark.hamzy 1.25 JMPIjvm::checkException(env);
|
3199 schuur 1.1
|
3200 carolann.graves 1.21 //
|
3201 mark.hamzy 1.25 // Decrement count of current subscriptions for this provider
|
3202 carolann.graves 1.21 //
|
3203 mark.hamzy 1.25 if (ph.GetProvider ().decrementSubscriptionsAndTestIfZero ())
|
3204 carolann.graves 1.21 {
|
3205 mark.hamzy 1.25 //
3206 // If there are no current subscriptions after the decrement,
3207 // the last subscription has been deleted
3208 // Call the provider's disableIndications method
3209 //
3210 if (_subscriptionInitComplete)
3211 {
3212 prec->enabled = false;
3213 if (prec->handler) delete prec->handler;
3214 prec->handler = NULL;
3215 }
|
3216 carolann.graves 1.21 }
3217
|
3218 mark.hamzy 1.25 STAT_PMS_PROVIDEREND;
|
3219 schuur 1.1
|
3220 mark.hamzy 1.25 delete eSelx;
3221 delete qContext;
3222 delete srec;
3223 break;
3224 }
|
3225 schuur 1.12
|
3226 mark.hamzy 1.25 case METHOD_UNKNOWN:
3227 {
3228 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleDeleteSubscriptionRequest: should not be here!"<<PEGASUS_STD(endl));
3229 break;
3230 }
3231 }
|
3232 schuur 1.1 }
3233 HandlerCatch(handler);
|
3234 schuur 1.12
|
3235 mark.hamzy 1.23 if (env) JMPIjvm::detachThread();
3236
|
3237 schuur 1.1 PEG_METHOD_EXIT();
3238
3239 return(response);
3240 }
3241
3242 Message * JMPIProviderManager::handleDisableModuleRequest(const Message * message) throw()
3243 {
3244 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager::handleDisableModuleRequest");
3245
3246 CIMDisableModuleRequestMessage * request =
3247 dynamic_cast<CIMDisableModuleRequestMessage *>(const_cast<Message *>(message));
3248
3249 PEGASUS_ASSERT(request != 0);
3250
3251 // get provider module name
3252 String moduleName;
3253 CIMInstance mInstance = request->providerModule;
3254 Uint32 pos = mInstance.findProperty(CIMName ("Name"));
3255
3256 if(pos != PEG_NOT_FOUND)
3257 {
3258 schuur 1.1 mInstance.getProperty(pos).getValue().get(moduleName);
3259 }
3260
3261 Boolean disableProviderOnly = request->disableProviderOnly;
3262
3263 Array<Uint16> operationalStatus;
|
3264 kumpf 1.2 // Assume success.
|
3265 kumpf 1.10 operationalStatus.append(CIM_MSE_OPSTATUS_VALUE_STOPPED);
|
3266 schuur 1.1
|
3267 kumpf 1.2 //
|
3268 schuur 1.1 // Unload providers
|
3269 kumpf 1.2 //
|
3270 schuur 1.1 Array<CIMInstance> _pInstances = request->providers;
3271
3272 CIMDisableModuleResponseMessage * response =
3273 new CIMDisableModuleResponseMessage(
3274 request->messageId,
3275 CIMException(),
3276 request->queueIds.copyAndPop(),
3277 operationalStatus);
3278
3279 PEGASUS_ASSERT(response != 0);
3280
3281 // preserve message key
3282 response->setKey(request->getKey());
3283
3284 //
3285 // Set HTTP method in response from request
3286 //
3287 response->setHttpMethod (request->getHttpMethod ());
3288
3289 PEG_METHOD_EXIT();
3290
3291 schuur 1.1 return(response);
3292 }
3293
3294 Message * JMPIProviderManager::handleEnableModuleRequest(const Message * message) throw()
3295 {
3296 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager::handleEnableModuleRequest");
3297
3298 CIMEnableModuleRequestMessage * request =
3299 dynamic_cast<CIMEnableModuleRequestMessage *>(const_cast<Message *>(message));
3300
3301 PEGASUS_ASSERT(request != 0);
3302
3303 Array<Uint16> operationalStatus;
|
3304 kumpf 1.10 operationalStatus.append(CIM_MSE_OPSTATUS_VALUE_OK);
|
3305 schuur 1.1
3306 CIMEnableModuleResponseMessage * response =
3307 new CIMEnableModuleResponseMessage(
3308 request->messageId,
3309 CIMException(),
3310 request->queueIds.copyAndPop(),
3311 operationalStatus);
3312
3313 PEGASUS_ASSERT(response != 0);
3314
3315 // preserve message key
3316 response->setKey(request->getKey());
3317
3318 // Set HTTP method in response from request
3319 response->setHttpMethod (request->getHttpMethod ());
3320
3321 PEG_METHOD_EXIT();
3322
3323 return(response);
3324 }
3325
3326 schuur 1.1 Message * JMPIProviderManager::handleStopAllProvidersRequest(const Message * message) throw()
3327 {
3328 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager::handleStopAllProvidersRequest");
3329
3330 CIMStopAllProvidersRequestMessage * request =
3331 dynamic_cast<CIMStopAllProvidersRequestMessage *>(const_cast<Message *>(message));
3332
3333 PEGASUS_ASSERT(request != 0);
3334
3335 CIMStopAllProvidersResponseMessage * response =
3336 new CIMStopAllProvidersResponseMessage(
3337 request->messageId,
3338 CIMException(),
3339 request->queueIds.copyAndPop());
3340
3341 PEGASUS_ASSERT(response != 0);
3342
3343 // preserve message key
3344 response->setKey(request->getKey());
3345
3346 // Set HTTP method in response from request
3347 schuur 1.1 response->setHttpMethod (request->getHttpMethod ());
3348
3349 // tell the provider manager to shutdown all the providers
3350 providerManager.shutdownAllProviders();
3351
3352 PEG_METHOD_EXIT();
3353
3354 return(response);
3355 }
3356
|
3357 kumpf 1.4 Message * JMPIProviderManager::handleInitializeProviderRequest(const Message * message)
3358 {
3359 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager::handleInitializeProviderRequest");
3360
3361 HandlerIntroInit(InitializeProvider,message,request,response,handler);
3362
3363 try
3364 {
3365 // resolve provider name
|
3366 mark.hamzy 1.23 ProviderName name = _resolveProviderName(
3367 request->operationContext.get(ProviderIdContainer::NAME));
|
3368 kumpf 1.4
3369 // get cached or load new provider module
3370 JMPIProvider::OpProviderHolder ph =
|
3371 mark.hamzy 1.23 providerManager.getProvider(name.getPhysicalName(),
3372 name.getLogicalName(), String::EMPTY);
|
3373 kumpf 1.4
3374 }
3375 HandlerCatch(handler);
3376
3377 PEG_METHOD_EXIT();
3378
3379 return(response);
3380 }
3381
|
3382 mark.hamzy 1.25 Message * JMPIProviderManager::handleSubscriptionInitCompleteRequest (const Message * message)
|
3383 carolann.graves 1.21 {
3384 PEG_METHOD_ENTER (TRC_PROVIDERMANAGER,
3385 "JMPIProviderManager::handleSubscriptionInitCompleteRequest");
3386
3387 CIMSubscriptionInitCompleteRequestMessage * request =
3388 dynamic_cast <CIMSubscriptionInitCompleteRequestMessage *>
3389 (const_cast <Message *> (message));
3390
3391 PEGASUS_ASSERT (request != 0);
3392
3393 CIMSubscriptionInitCompleteResponseMessage * response =
3394 dynamic_cast <CIMSubscriptionInitCompleteResponseMessage *>
3395 (request->buildResponse ());
3396
3397 PEGASUS_ASSERT (response != 0);
3398
3399 //
3400 // Set indicator
3401 //
3402 _subscriptionInitComplete = true;
3403
3404 carolann.graves 1.21 //
3405 // For each provider that has at least one subscription, call
3406 // provider's enableIndications method
3407 //
3408 Array <JMPIProvider *> enableProviders;
3409 enableProviders = providerManager.getIndicationProvidersToEnable ();
3410
3411 Uint32 numProviders = enableProviders.size ();
3412 for (Uint32 i = 0; i < numProviders; i++)
3413 {
3414 try
3415 {
3416 CIMInstance provider;
3417 provider = enableProviders [i]->getProviderInstance ();
3418
3419 //
3420 // Get cached or load new provider module
3421 //
3422 JMPIProvider::OpProviderHolder ph = providerManager.getProvider
3423 (enableProviders [i]->getModule ()->getFileName (),
3424 enableProviders [i]->getName ());
3425 carolann.graves 1.21
3426 indProvRecord * prec = NULL;
3427 provTab.lookup (enableProviders [i]->getName (), prec);
3428 if (prec)
3429 {
3430 prec->enabled = true;
3431 CIMRequestMessage * request = 0;
3432 CIMResponseMessage * response = 0;
3433 prec->handler = new EnableIndicationsResponseHandler
3434 (request, response, provider, _indicationCallback);
3435 }
3436 }
3437 catch (CIMException & e)
3438 {
3439 PEG_TRACE_STRING (TRC_PROVIDERMANAGER, Tracer::LEVEL2,
3440 "CIMException: " + e.getMessage ());
3441 }
3442 catch (Exception & e)
3443 {
3444 PEG_TRACE_STRING (TRC_PROVIDERMANAGER, Tracer::LEVEL2,
3445 "Exception: " + e.getMessage ());
3446 carolann.graves 1.21 }
3447 catch(...)
3448 {
3449 PEG_TRACE_STRING (TRC_PROVIDERMANAGER, Tracer::LEVEL2,
3450 "Unknown error in handleSubscriptionInitCompleteRequest");
3451 }
3452 }
3453
3454 PEG_METHOD_EXIT ();
3455 return (response);
3456 }
3457
|
3458 schuur 1.1 Message * JMPIProviderManager::handleUnsupportedRequest(const Message * message) throw()
3459 {
|
3460 mark.hamzy 1.23 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleUnsupportedRequest");
3461
|
3462 konrad.r 1.16 CIMRequestMessage* request =
3463 dynamic_cast<CIMRequestMessage *>(const_cast<Message *>(message));
3464 PEGASUS_ASSERT(request != 0 );
3465
3466 CIMResponseMessage* response = request->buildResponse();
3467 response->cimException =
3468 PEGASUS_CIM_EXCEPTION(CIM_ERR_NOT_SUPPORTED, String::EMPTY);
|
3469 schuur 1.1
3470 PEG_METHOD_EXIT();
|
3471 konrad.r 1.16 return response;
|
3472 schuur 1.1 }
3473
|
3474 kumpf 1.2 ProviderName JMPIProviderManager::_resolveProviderName(
3475 const ProviderIdContainer & providerId)
|
3476 schuur 1.1 {
|
3477 kumpf 1.2 String providerName;
3478 String fileName;
3479 String interfaceName;
3480 CIMValue genericValue;
3481
3482 genericValue = providerId.getProvider().getProperty(
3483 providerId.getProvider().findProperty("Name")).getValue();
3484 genericValue.get(providerName);
3485
3486 genericValue = providerId.getModule().getProperty(
3487 providerId.getModule().findProperty("Location")).getValue();
3488 genericValue.get(fileName);
3489 fileName = resolveFileName(fileName);
3490
3491 // ATTN: This attribute is probably not required
3492 genericValue = providerId.getModule().getProperty(
3493 providerId.getModule().findProperty("InterfaceType")).getValue();
3494 genericValue.get(interfaceName);
3495
3496 return ProviderName(providerName, fileName, interfaceName, 0);
|
3497 schuur 1.1 }
3498
3499 String JMPIProviderManager::resolveFileName(String fileName)
3500 {
3501 String name;
3502 #if defined(PEGASUS_OS_TYPE_WINDOWS)
3503 name = fileName; // + String(".dll");
3504 #elif defined(PEGASUS_OS_HPUX) && defined(PEGASUS_PLATFORM_HPUX_PARISC_ACC)
3505 name = ConfigManager::getHomedPath(ConfigManager::getInstance()->getCurrentValue("providerDir"));
3506 name.append(String("/") + fileName); // + String(".sl"));
3507 #elif defined(PEGASUS_OS_HPUX) && !defined(PEGASUS_PLATFORM_HPUX_PARISC_ACC)
3508 name = ConfigManager::getHomedPath(ConfigManager::getInstance()->getCurrentValue("providerDir"));
3509 name.append(String("/") + fileName); // + String(".so"));
3510 #elif defined(PEGASUS_OS_OS400)
3511 name = filrName;
3512 #else
3513 name = ConfigManager::getHomedPath(ConfigManager::getInstance()->getCurrentValue("providerDir"));
3514 name.append(String("/") + fileName); // + String(".so"));
3515 #endif
3516 return name;
3517 }
3518 schuur 1.1
3519 PEGASUS_NAMESPACE_END
|