1 karl 1.39 //%2006////////////////////////////////////////////////////////////////////////
|
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 karl 1.39 // Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.;
12 // EMC Corporation; Symantec Corporation; The Open Group.
|
13 schuur 1.1 //
14 // Permission is hereby granted, free of charge, to any person obtaining a copy
15 // of this software and associated documentation files (the "Software"), to
16 // deal in the Software without restriction, including without limitation the
17 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
18 // sell copies of the Software, and to permit persons to whom the Software is
19 // furnished to do so, subject to the following conditions:
|
20 mark.hamzy 1.40 //
|
21 schuur 1.1 // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
22 // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
23 // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
24 // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
25 // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
26 // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
27 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
28 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 //
30 //==============================================================================
31 //
32 //%/////////////////////////////////////////////////////////////////////////////
33 #include "JMPIProviderManager.h"
34
35 #include "JMPIImpl.h"
36
37 #include <Pegasus/Common/CIMMessage.h>
38 #include <Pegasus/Common/OperationContext.h>
39 #include <Pegasus/Common/Tracer.h>
40 #include <Pegasus/Common/StatisticalData.h>
41 #include <Pegasus/Common/MessageLoader.h> //l10n
|
42 kumpf 1.10 #include <Pegasus/Common/Constants.h>
|
43 marek 1.54 #include <Pegasus/Common/FileSystem.h>
|
44 kumpf 1.56 #include <Pegasus/Common/ArrayInternal.h>
|
45 schuur 1.1
46 #include <Pegasus/Config/ConfigManager.h>
47
48 #include <Pegasus/ProviderManager2/ProviderName.h>
49 #include <Pegasus/ProviderManager2/JMPI/JMPIProvider.h>
|
50 konrad.r 1.22 #include <Pegasus/ProviderManager2/JMPI/JMPIProviderModule.h>
|
51 schuur 1.1
52 PEGASUS_USING_STD;
53 PEGASUS_NAMESPACE_BEGIN
54
|
55 marek 1.68 // request->localOnly is replaced with JMPI_LOCALONLY for
56 // getInstance () and enumerateInstances ()
|
57 mark.hamzy 1.30 #define JMPI_LOCALONLY false
|
58 mark.hamzy 1.36
|
59 mark.hamzy 1.32 /* Fix for 4092 */
|
60 marek 1.68 // request->includeQualifiers is replaced with JMPI_INCLUDE_QUALIFIERS
61 // for getInstance (), setInstance (), enumerateInstances (), associators ()
62 // and references ()
|
63 mark.hamzy 1.32 #define JMPI_INCLUDE_QUALIFIERS false
|
64 mark.hamzy 1.23
65 #include "Convert.h"
|
66 schuur 1.1
|
67 mark.hamzy 1.23 void JMPIProviderManager::debugPrintMethodPointers (JNIEnv *env, jclass jc)
68 {
|
69 thilo.boehm 1.69 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
70 "JMPIProviderManager::debugPrintMethodPointers");
71
|
72 mark.hamzy 1.35 static const char *methodNames[][3] = {
|
73 marek 1.68 // CIMProvider
74 {"snia 2.0",
75 "initialize",
76 "(Lorg/pegasus/jmpi/CIMOMHandle;)V"},
77 {"snia 2.0",
78 "cleanup",
79 "()V"},
|
80 mark.hamzy 1.24 // InstanceProvider
|
81 marek 1.68 {"snia 2.0",
82 "enumInstances",
83 "(Lorg/pegasus/jmpi/CIMObjectPath;ZLorg/pegasus/jmpi/CIMClass;"
84 "Z)Ljava/util/Vector;"},
85 {"pegasus 2.4",
86 "enumInstances",
87 "(Lorg/pegasus/jmpi/CIMObjectPath;ZZZ[Ljava/lang/String;"
88 "Lorg/pegasus/jmpi/CIMClass;)[Lorg/pegasus/jmpi/CIMInstance;"},
|
89 mark.hamzy 1.35 /* Begin Fix for 4189 */
|
90 marek 1.68 {"pegasus 2.5",
91 "enumerateInstances",
92 "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;"
93 "ZZ[Ljava/lang/String;)Ljava/util/Vector;"},
|
94 mark.hamzy 1.35 /* End Fix for 4189 */
|
95 marek 1.68 {"snia 2.0",
96 "enumInstances",
97 "(Lorg/pegasus/jmpi/CIMObjectPath;ZLorg/pegasus/jmpi/CIMClass;)"
98 "Ljava/util/Vector;"},
99 {"pegasus 2.4",
100 "enumerateInstanceNames",
101 "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;)"
102 "[Lorg/pegasus/jmpi/CIMObjectPath;"},
103 {"pegasus 2.5",
104 "enumerateInstanceNames",
105 "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;)"
106 "Ljava/util/Vector;"},
107 {"snia 2.0",
108 "getInstance",
109 "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;Z)"
110 "Lorg/pegasus/jmpi/CIMInstance;"},
111 {"pegasus 2.4",
112 "getInstance",
113 "(Lorg/pegasus/jmpi/CIMObjectPath;ZZZ[Ljava/lang/String;"
114 "Lorg/pegasus/jmpi/CIMClass;)Lorg/pegasus/jmpi/CIMInstance;"},
|
115 mark.hamzy 1.35 /* Begin Fix for 4238 */
|
116 marek 1.68 {"pegasus 2.5",
117 "getInstance",
118 "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;"
119 "ZZ[Ljava/lang/String;)Lorg/pegasus/jmpi/CIMInstance;"},
|
120 mark.hamzy 1.35 /* End Fix for 4238 */
|
121 marek 1.68 {"snia 2.0",
122 "createInstance",
123 "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMInstance;)"
124 "Lorg/pegasus/jmpi/CIMObjectPath;"},
125 {"snia 2.0",
126 "setInstance",
127 "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMInstance;)V"},
128 {"pegasus 2.4",
129 "setInstance",
130 "(Lorg/pegasus/jmpi/CIMObjectPath;Z[Ljava/lang/String)V"},
131 {"snia 2.0",
132 "deleteInstance",
133 "(Lorg/pegasus/jmpi/CIMObjectPath;)V"},
134 {"snia 2.0",
135 "execQuery",
136 "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;"
137 "ILorg/pegasus/jmpi/CIMClass;)Ljava/util/Vector;"},
138 {"pegasus 2.4",
139 "execQuery",
140 "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;"
141 "Ljava/lang/String;Lorg/pegasus/jmpi/CIMClass;)"
142 marek 1.68 "[Lorg/pegasus/jmpi/CIMInstance;"},
143 {"pegasus 2.5",
144 "execQuery",
145 "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;"
146 "Ljava/lang/String;Ljava/lang/String;)Ljava/util/Vector;"},
|
147 mark.hamzy 1.24 // MethodProvider
|
148 marek 1.68 {"snia 2.0",
149 "invokeMethod",
150 "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;"
151 "Ljava/util/Vector;Ljava/util/Vector;)Lorg/pegasus/jmpi/CIMValue;"},
152 {"pegasus 2.4",
153 "invokeMethod",
154 "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;"
155 "[Lorg/pegasus/jmpi/CIMArgument;[Lorg/pegasus/jmpi/CIMArgument;)"
156 "Lorg/pegasus/jmpi/CIMValue;"},
|
157 mark.hamzy 1.24 // PropertyProvider
|
158 marek 1.68 {"snia 2.0",
159 "getPropertyValue",
160 "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;)"
161 "Lorg/pegasus/jmpi/CIMValue;"},
162 {"snia 2.0",
163 "setPropertyValue",
164 "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;"
165 "Lorg/pegasus/jmpi/CIMValue;)V"},
|
166 mark.hamzy 1.24 // AssociatorProvider
|
167 marek 1.68 {"snia 2.0",
168 "associators",
169 "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;"
170 "Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;"
171 "ZZ[Ljava/lang/String;)Ljava/util/Vector;"},
172 {"pegasus 2.4",
173 "associators",
174 "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;"
175 "Ljava/lang/String;ZZ[Ljava/lang/String;)Ljava/util/Vector;"},
176 {"snia 2.0",
177 "associatorNames",
178 "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;"
179 "Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)"
180 "Ljava/util/Vector;"},
181 {"pegasus 2.4",
182 "associatorNames",
183 "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;"
184 "Ljava/lang/String;)Ljava/util/Vector;"},
185 {"snia 2.0",
186 "references",
187 "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;"
188 marek 1.68 "Ljava/lang/String;ZZ[Ljava/lang/String;)Ljava/util/Vector;"},
189 {"pegasus 2.4",
190 "references",
191 "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;"
192 "ZZ[Ljava/lang/String;)Ljava/util/Vector;"},
193 {"snia 2.0",
194 "referenceNames",
195 "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;"
196 "Ljava/lang/String;)Ljava/util/Vector;"},
197 {"pegasus 2.4",
198 "referenceNames",
199 "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;)"
200 "Ljava/util/Vector;"},
|
201 mark.hamzy 1.24 // CIMProviderRouter
202 // EventProvider
|
203 marek 1.68 {"snia 2.0",
204 "activateFilter",
205 "(Lorg/pegasus/jmpi/SelectExp;Ljava/lang/String;"
206 "Lorg/pegasus/jmpi/CIMObjectPath;Z)V"},
207 {"snia 2.0",
208 "deActivateFilter",
209 "(Lorg/pegasus/jmpi/SelectExp;Ljava/lang/String;"
210 "Lorg/pegasus/jmpi/CIMObjectPath;Z)V"},
|
211 mark.hamzy 1.24 // IndicationHandler
212 // ProviderAdapter
213 // JMPI_TestPropertyTypes
|
214 marek 1.68 {"JMPI_TestPropertyTypes",
215 "findObjectPath",
216 "(Lorg/pegasus/jmpi/CIMObjectPath;)I"},
217 {"JMPI_TestPropertyTypes",
218 "testPropertyTypesValue",
219 "(Lorg/pegasus/jmpi/CIMInstance;)V"}
|
220 mark.hamzy 1.23 };
221
222 if (!env)
223 {
|
224 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
225 "No JNI environment specified. (JNIEnv==NULL)");
226 PEG_METHOD_EXIT();
|
227 mark.hamzy 1.23 return;
228 }
229 if (!jc)
230 {
|
231 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
232 "No Java class specified. (jc==NULL)");
233 PEG_METHOD_EXIT();
|
234 mark.hamzy 1.23 return;
235 }
236
237 for (int i = 0; i < (int)(sizeof (methodNames)/sizeof (methodNames[0])); i++)
238 {
|
239 mark.hamzy 1.35 jmethodID id = env->GetMethodID(jc,methodNames[i][1], methodNames[i][2]);
|
240 marek 1.71 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
|
241 thilo.boehm 1.70 "Method: %s, %s, id = %p",
242 methodNames[i][0],methodNames[i][1],id));
|
243 thilo.boehm 1.69
|
244 mark.hamzy 1.23 env->ExceptionClear();
245 }
|
246 mark.hamzy 1.29
247 env->ExceptionClear();
|
248 thilo.boehm 1.69 PEG_METHOD_EXIT();
249 return;
|
250 mark.hamzy 1.29 }
251
|
252 thilo.boehm 1.69 void debugIntrospectJavaObject (JNIEnv *env, jobject jInst)
|
253 mark.hamzy 1.29 {
|
254 thilo.boehm 1.69 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
255 "JMPIProviderManager::debugIntrospectJavaObject");
256
|
257 mark.hamzy 1.29 jclass jInstClass = env->GetObjectClass(jInst);
258 jclass jInstSuperClass = env->GetSuperclass(jInstClass);
|
259 marek 1.68 jmethodID jmidGetDeclaredMethods = env->GetMethodID(
260 jInstClass,
261 "getDeclaredMethods",
262 "()[Ljava/lang/reflect/Method;");
|
263 mark.hamzy 1.29
264 if (!jmidGetDeclaredMethods)
265 {
266 env->ExceptionClear();
|
267 marek 1.68 jmidGetDeclaredMethods = env->GetMethodID(
268 jInstSuperClass,
269 "getDeclaredMethods",
270 "()[Ljava/lang/reflect/Method;");
|
271 mark.hamzy 1.29 }
272
273 if (jmidGetDeclaredMethods)
274 {
|
275 marek 1.68 jobjectArray jarrayDeclaredMethods = (jobjectArray)env->CallObjectMethod(
276 jInstClass,
277 jmidGetDeclaredMethods);
|
278 mark.hamzy 1.29
279 if (jarrayDeclaredMethods)
280 {
|
281 marek 1.68 for (int i=0,iLen=env->GetArrayLength(jarrayDeclaredMethods);
282 i < iLen;
283 i++)
|
284 mark.hamzy 1.29 {
285 JMPIjvm::checkException(env);
286
|
287 marek 1.68 jobject jDeclaredMethod = env->GetObjectArrayElement(
288 jarrayDeclaredMethods,
289 i);
290 jclass jDeclaredMethodClass = env->GetObjectClass(jDeclaredMethod);
|
291 mark.hamzy 1.29
292 JMPIjvm::checkException(env);
293
|
294 marek 1.68 jmethodID jmidToString = env->GetMethodID(
295 jDeclaredMethodClass,
296 "toString",
297 "()Ljava/lang/String;");
298 jstring jstringResult = (jstring)env->CallObjectMethod(
299 jDeclaredMethod,
300 jmidToString);
301 const char *pszResult = env->GetStringUTFChars(jstringResult, 0);
|
302 mark.hamzy 1.29
|
303 marek 1.71 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
|
304 thilo.boehm 1.69 "Introspect java object: %s",pszResult));
|
305 mark.hamzy 1.29
306 env->ReleaseStringUTFChars (jstringResult, pszResult);
307 }
308 }
309 }
310
311 env->ExceptionClear();
|
312 thilo.boehm 1.69 PEG_METHOD_EXIT();
313 return;
|
314 mark.hamzy 1.29 }
315
|
316 thilo.boehm 1.69 void debugDumpJavaObject (JNIEnv *env, jobject jInst)
|
317 mark.hamzy 1.29 {
|
318 thilo.boehm 1.69 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
319 "JMPIProviderManager::debugDumpJavaObject");
|
320 marek 1.68 jclass jInstClass = env->GetObjectClass(jInst);
321 jclass jInstSuperClass = env->GetSuperclass(jInstClass);
322 jmethodID jmidToString1 = env->GetMethodID(
323 jInstClass,
324 "toString",
325 "()Ljava/lang/String;");
326 jmethodID jmidToString2 = env->GetMethodID(
327 jInstSuperClass,
328 "toString",
329 "()Ljava/lang/String;");
|
330 mark.hamzy 1.29 if (!jmidToString1 || !jmidToString2)
331 {
|
332 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
333 "No class or super class description.");
|
334 mark.hamzy 1.29 env->ExceptionClear();
|
335 thilo.boehm 1.69 PEG_METHOD_EXIT();
|
336 mark.hamzy 1.29 return;
337 }
|
338 marek 1.68 jstring jstringResult1 = (jstring)env->CallObjectMethod(
339 jInstClass,
340 jmidToString1);
341 jstring jstringResult2 = (jstring)env->CallObjectMethod(
342 jInstSuperClass,
343 jmidToString2);
344 jstring jstringResult3 = (jstring)env->CallObjectMethod(
345 jInst,
346 jmidToString1);
|
347 mark.hamzy 1.29 const char *pszResult1 = env->GetStringUTFChars(jstringResult1, 0);
348 const char *pszResult2 = env->GetStringUTFChars(jstringResult2, 0);
349 const char *pszResult3 = env->GetStringUTFChars(jstringResult3, 0);
350
|
351 marek 1.68 jmethodID jmidCInst = env->GetMethodID(
352 env->GetObjectClass(jInst),
353 JMPIjvm::jv.instanceMethodNames[22].methodName,
354 JMPIjvm::jv.instanceMethodNames[22].signature);
355
|
356 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL3,
|
357 thilo.boehm 1.70 "Dumping class %p:\n "
358 " jInstSuperClass = %p\n"
359 " jClassShouldBe = %p\n"
360 " jmidCInst = %p\n"
|
361 thilo.boehm 1.69 " pszResult1 = %s\n"
362 " pszResult2 = %s\n"
363 " pszResult3 = %s",
364 jInstClass,jInstSuperClass,JMPIjvm::jv.classRefs[18],jmidCInst,
365 pszResult1,pszResult2,pszResult3 ));
|
366 mark.hamzy 1.29
367 env->ReleaseStringUTFChars (jstringResult1, pszResult1);
368 env->ReleaseStringUTFChars (jstringResult2, pszResult2);
369 env->ReleaseStringUTFChars (jstringResult3, pszResult3);
370
371 env->ExceptionClear();
|
372 thilo.boehm 1.69 PEG_METHOD_EXIT();
373 return;
|
374 mark.hamzy 1.23 }
|
375 schuur 1.1
|
376 marek 1.68 bool JMPIProviderManager::getInterfaceType(
377 ProviderIdContainer pidc,
378 String& interfaceType,
379 String& interfaceVersion)
|
380 mark.hamzy 1.43 {
|
381 thilo.boehm 1.69 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
382 "JMPIProviderManager::getInterfaceType");
383
|
384 mark.hamzy 1.43 CIMInstance ciProviderModule = pidc.getModule ();
385 Uint32 idx;
386 bool fRet = true;
387
388 idx = ciProviderModule.findProperty ("InterfaceType");
389
390 if (idx != PEG_NOT_FOUND)
391 {
392 CIMValue itValue;
393
394 itValue = ciProviderModule.getProperty (idx).getValue ();
395
396 itValue.get (interfaceType);
397
|
398 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
399 "interfaceType = %s",(const char*)interfaceType.getCString()));
|
400 mark.hamzy 1.43 }
401 else
402 {
|
403 marek 1.71 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
|
404 thilo.boehm 1.69 "inferfaceType not found.");
|
405 mark.hamzy 1.43 fRet = false;
406 }
407
408 idx = ciProviderModule.findProperty ("InterfaceVersion");
409
410 if (idx != PEG_NOT_FOUND)
411 {
412 CIMValue itValue;
413
414 itValue = ciProviderModule.getProperty (idx).getValue ();
415
416 itValue.get (interfaceVersion);
417
|
418 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
419 "interfaceVersion = %s",(const char*)interfaceVersion.getCString()));
|
420 mark.hamzy 1.43 }
421 else
422 {
|
423 marek 1.71 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
|
424 thilo.boehm 1.69 "inferfaceVersion not found.");
|
425 mark.hamzy 1.43 fRet = false;
426 }
|
427 thilo.boehm 1.69 PEG_METHOD_EXIT();
|
428 mark.hamzy 1.43 return fRet;
429 }
430
431 bool JMPIProviderManager::interfaceIsUsed (JNIEnv *env,
432 jobject jObject,
433 String searchInterfaceName)
434 {
435 jobjectArray jInterfaces = 0;
436 jsize jInterfacesLength = 0;
437 bool fFound = false;
438
439 if (!jObject)
440 {
441 return false;
442 }
443
|
444 marek 1.68 jInterfaces = (jobjectArray)env->CallObjectMethod(
445 env->GetObjectClass (jObject),
446 JMPIjvm::jv.ClassGetInterfaces);
|
447 mark.hamzy 1.43
448 if (!jInterfaces)
449 {
450 return false;
451 }
452
453 jInterfacesLength = env->GetArrayLength (jInterfaces);
454
455 for (jsize i = 0; !fFound && i < jInterfacesLength; i++)
456 {
457 jobject jInterface = env->GetObjectArrayElement (jInterfaces, i);
458
459 if (jInterface)
460 {
|
461 marek 1.68 jstring jInterfaceName = (jstring)env->CallObjectMethod(
462 jInterface,
463 JMPIjvm::jv.ClassGetName);
|
464 mark.hamzy 1.43
465 if (jInterfaceName)
466 {
|
467 marek 1.68 const char *pszInterfaceName = env->GetStringUTFChars(
468 jInterfaceName,
469 0);
|
470 mark.hamzy 1.43 String interfaceName = pszInterfaceName;
471
472 if (String::equal (interfaceName, searchInterfaceName))
473 {
474 fFound = true;
475 }
476
477 env->ReleaseStringUTFChars (jInterfaceName, pszInterfaceName);
478 }
479 }
480 }
481
482 return fFound;
483 }
484
|
485 schuur 1.1 JMPIProviderManager::IndProvTab JMPIProviderManager::provTab;
|
486 mark.hamzy 1.44 Mutex JMPIProviderManager::mutexProvTab;
|
487 schuur 1.1 JMPIProviderManager::IndSelectTab JMPIProviderManager::selxTab;
|
488 mark.hamzy 1.44 Mutex JMPIProviderManager::mutexSelxTab;
|
489 schuur 1.1 JMPIProviderManager::ProvRegistrar JMPIProviderManager::provReg;
|
490 mark.hamzy 1.44 Mutex JMPIProviderManager::mutexProvReg;
|
491 schuur 1.1
|
492 mark.hamzy 1.57 JMPIProviderManager::JMPIProviderManager()
|
493 schuur 1.1 {
|
494 carolann.graves 1.21 _subscriptionInitComplete = false;
|
495 schuur 1.1 }
496
497 JMPIProviderManager::~JMPIProviderManager(void)
498 {
499 }
500
|
501 schuur 1.12 Boolean JMPIProviderManager::insertProvider(const ProviderName & name,
|
502 schuur 1.1 const String &ns, const String &cn)
503 {
|
504 thilo.boehm 1.69 PEG_METHOD_ENTER( TRC_PROVIDERMANAGER,
505 "JMPIProviderManager::insertProvider");
506
|
507 dmitry.mikulin 1.64 String key(ns + String("::") + cn);
|
508 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL3,
509 "insertProvider: %s",(const char*)key.getCString()));
|
510 mark.hamzy 1.23
|
511 mark.hamzy 1.44 Boolean ret = false;
512
513 {
514 AutoMutex lock (mutexProvReg);
515
516 ret = provReg.insert(key,name);
517 }
518
|
519 thilo.boehm 1.69 PEG_METHOD_EXIT();
|
520 mark.hamzy 1.44 return ret;
|
521 schuur 1.1 }
|
522 mark.hamzy 1.23
|
523 schuur 1.1 Message * JMPIProviderManager::processMessage(Message * request) throw()
524 {
|
525 marek 1.68 PEG_METHOD_ENTER(
526 TRC_PROVIDERMANAGER,
527 "JMPIProviderManager::processMessage()");
|
528 schuur 1.1
529 Message * response = 0;
|
530 mark.hamzy 1.23
|
531 schuur 1.1 // pass the request message to a handler method based on message type
532 switch(request->getType())
533 {
534 case CIM_GET_INSTANCE_REQUEST_MESSAGE:
535 response = handleGetInstanceRequest(request);
|
536 mark.hamzy 1.25 break;
|
537 schuur 1.1
538 case CIM_ENUMERATE_INSTANCES_REQUEST_MESSAGE:
539 response = handleEnumerateInstancesRequest(request);
|
540 mark.hamzy 1.25 break;
|
541 schuur 1.1
542 case CIM_ENUMERATE_INSTANCE_NAMES_REQUEST_MESSAGE:
543 response = handleEnumerateInstanceNamesRequest(request);
|
544 mark.hamzy 1.25 break;
|
545 schuur 1.1
546 case CIM_CREATE_INSTANCE_REQUEST_MESSAGE:
547 response = handleCreateInstanceRequest(request);
|
548 mark.hamzy 1.25 break;
|
549 schuur 1.1
550 case CIM_MODIFY_INSTANCE_REQUEST_MESSAGE:
551 response = handleModifyInstanceRequest(request);
|
552 mark.hamzy 1.25 break;
|
553 schuur 1.1
554 case CIM_DELETE_INSTANCE_REQUEST_MESSAGE:
555 response = handleDeleteInstanceRequest(request);
|
556 mark.hamzy 1.25 break;
|
557 schuur 1.1
|
558 mark.hamzy 1.25 case CIM_EXEC_QUERY_REQUEST_MESSAGE:
559 response = handleExecQueryRequest(request);
|
560 schuur 1.1 break;
561
562 case CIM_ASSOCIATORS_REQUEST_MESSAGE:
563 response = handleAssociatorsRequest(request);
|
564 mark.hamzy 1.25 break;
|
565 schuur 1.1
566 case CIM_ASSOCIATOR_NAMES_REQUEST_MESSAGE:
567 response = handleAssociatorNamesRequest(request);
|
568 mark.hamzy 1.25 break;
|
569 schuur 1.1
570 case CIM_REFERENCES_REQUEST_MESSAGE:
571 response = handleReferencesRequest(request);
|
572 mark.hamzy 1.25 break;
|
573 schuur 1.1
574 case CIM_REFERENCE_NAMES_REQUEST_MESSAGE:
575 response = handleReferenceNamesRequest(request);
|
576 mark.hamzy 1.25 break;
|
577 schuur 1.1
|
578 mark.hamzy 1.26 case CIM_GET_PROPERTY_REQUEST_MESSAGE:
579 response = handleGetPropertyRequest(request);
580 break;
581
582 case CIM_SET_PROPERTY_REQUEST_MESSAGE:
583 response = handleSetPropertyRequest(request);
584 break;
585
|
586 schuur 1.11 case CIM_INVOKE_METHOD_REQUEST_MESSAGE:
|
587 schuur 1.1 response = handleInvokeMethodRequest(request);
|
588 mark.hamzy 1.25 break;
|
589 schuur 1.1
|
590 schuur 1.12 case CIM_CREATE_SUBSCRIPTION_REQUEST_MESSAGE:
|
591 schuur 1.1 response = handleCreateSubscriptionRequest(request);
|
592 mark.hamzy 1.25 break;
|
593 schuur 1.1
|
594 mark.hamzy 1.25 /* case CIM_MODIFY_SUBSCRIPTION_REQUEST_MESSAGE:
|
595 schuur 1.1 response = handleModifySubscriptionRequest(request);
596 break;
|
597 schuur 1.12 */
|
598 schuur 1.1 case CIM_DELETE_SUBSCRIPTION_REQUEST_MESSAGE:
599 response = handleDeleteSubscriptionRequest(request);
|
600 mark.hamzy 1.25 break;
|
601 schuur 1.1
|
602 mark.hamzy 1.26 /* case CIM_EXPORT_INDICATION_REQUEST_MESSAGE:
|
603 kumpf 1.7 response = handleExportIndicationRequest(request);
|
604 schuur 1.1 break;
|
605 schuur 1.12 */
|
606 schuur 1.1 case CIM_DISABLE_MODULE_REQUEST_MESSAGE:
607 response = handleDisableModuleRequest(request);
|
608 mark.hamzy 1.25 break;
|
609 schuur 1.1
610 case CIM_ENABLE_MODULE_REQUEST_MESSAGE:
611 response = handleEnableModuleRequest(request);
|
612 mark.hamzy 1.25 break;
|
613 schuur 1.1
614 case CIM_STOP_ALL_PROVIDERS_REQUEST_MESSAGE:
615 response = handleStopAllProvidersRequest(request);
|
616 mark.hamzy 1.25 break;
|
617 schuur 1.1
|
618 carolann.graves 1.21 case CIM_SUBSCRIPTION_INIT_COMPLETE_REQUEST_MESSAGE:
619 response = handleSubscriptionInitCompleteRequest (request);
|
620 mark.hamzy 1.25 break;
|
621 carolann.graves 1.21
|
622 schuur 1.1 default:
|
623 marek 1.71 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1,
|
624 thilo.boehm 1.69 "Unsupported Request %d",
|
625 marek 1.61 request->getType()
626 ));
|
627 mark.hamzy 1.25
|
628 schuur 1.1 response = handleUnsupportedRequest(request);
629 break;
630 }
631
632 PEG_METHOD_EXIT();
633
634 return(response);
635 }
636
|
637 kumpf 1.6 Boolean JMPIProviderManager::hasActiveProviders()
638 {
639 return providerManager.hasActiveProviders();
640 }
641
642 void JMPIProviderManager::unloadIdleProviders()
|
643 schuur 1.1 {
|
644 kumpf 1.6 providerManager.unloadIdleProviders();
|
645 schuur 1.1 }
646
647 #define STRDUPA(s,o) \
648 if (s) { \
649 o=(const char*)alloca(strlen(s)); \
650 strcpy((char*)(o),(s)); \
651 } \
652 else o=NULL;
653
654 #define CHARS(cstring) (char*)(strlen(cstring)?(const char*)cstring:NULL)
655
656
|
657 kumpf 1.55 #define HandlerIntroBase(type,type1,message,request,response,handler) \
|
658 schuur 1.1 CIM##type##RequestMessage * request = \
|
659 marek 1.68 dynamic_cast<CIM##type##RequestMessage *>(const_cast<Message *> \
660 (message)); \
|
661 schuur 1.1 PEGASUS_ASSERT(request != 0); \
662 CIM##type##ResponseMessage * response = \
|
663 kumpf 1.55 dynamic_cast<CIM##type##ResponseMessage*>(request->buildResponse()); \
|
664 schuur 1.1 PEGASUS_ASSERT(response != 0); \
|
665 kumpf 1.42 type1##ResponseHandler handler(request, response, _responseChunkCallback);
|
666 schuur 1.1
667 #define HandlerIntroInd(type,message,request,response,handler) \
|
668 kumpf 1.55 HandlerIntroBase(type,Operation,message,request,response,handler)
|
669 schuur 1.1
|
670 kumpf 1.4 #define HandlerIntroInit(type,message,request,response,handler) \
|
671 kumpf 1.55 HandlerIntroBase(type,Operation,message,request,response,handler)
|
672 kumpf 1.4
|
673 kumpf 1.55 #define HandlerIntro(type,message,request,response,handler) \
674 HandlerIntroBase(type,type,message,request,response,handler)
|
675 schuur 1.1
676 #define HandlerCatch(handler) \
677 catch(CIMException & e) \
|
678 marek 1.71 { PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL1, \
|
679 schuur 1.1 "Exception: " + e.getMessage()); \
|
680 marek 1.68 handler.setStatus(e.getCode(), e.getContentLanguages(), \
681 e.getMessage()); \
|
682 schuur 1.1 } \
683 catch(Exception & e) \
|
684 marek 1.71 { PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL1, \
|
685 schuur 1.1 "Exception: " + e.getMessage()); \
|
686 marek 1.68 handler.setStatus(CIM_ERR_FAILED, e.getContentLanguages(), \
687 e.getMessage()); \
|
688 schuur 1.1 } \
689 catch(...) \
|
690 marek 1.71 { PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL1, \
|
691 schuur 1.1 "Exception: Unknown"); \
692 handler.setStatus(CIM_ERR_FAILED, "Unknown error."); \
693 }
694
|
695 schuur 1.13 static jobjectArray getList(JvmVector *jv, JNIEnv *env, CIMPropertyList &list)
696 {
697 Uint32 s=list.size();
698 jobjectArray pl=NULL;
699 if (s) {
700 jstring initial=env->NewString(NULL,0);
|
701 mark.hamzy 1.23 pl=(jobjectArray)env->NewObjectArray(s,jv->StringClassRef,initial);
|
702 schuur 1.13 for (Uint32 i=0; i<s; i++) {
703 env->SetObjectArrayElement
704 (pl,i,env->NewStringUTF(list[i].getString().getCString()));
705 }
706 }
707 return pl;
708 }
|
709 schuur 1.1
|
710 marek 1.68 Message * JMPIProviderManager::handleGetInstanceRequest(
711 const Message * message) throw()
|
712 schuur 1.1 {
|
713 marek 1.68 PEG_METHOD_ENTER(
714 TRC_PROVIDERMANAGER,
715 "JMPIProviderManager::handleGetInstanceRequest");
|
716 schuur 1.1
|
717 kumpf 1.55 HandlerIntro(GetInstance,message,request,response,handler);
|
718 schuur 1.1
|
719 mark.hamzy 1.25 typedef enum {
720 METHOD_UNKNOWN = 0,
|
721 mark.hamzy 1.43 METHOD_CIMINSTANCEPROVIDER,
722 METHOD_INSTANCEPROVIDER,
723 METHOD_INSTANCEPROVIDER2, // same as METHOD_CIMINSTANCEPROVIDER2
|
724 mark.hamzy 1.25 } METHOD_VERSION;
725 METHOD_VERSION eMethodFound = METHOD_UNKNOWN;
726 JNIEnv *env = NULL;
|
727 schuur 1.13
|
728 marek 1.68 try
729 {
|
730 marek 1.71 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
|
731 thilo.boehm 1.69 "handleGetInstanceRequest: "
732 "name space = %s class name = %s",
733 (const char*)request->nameSpace.getString().getCString(),
734 (const char*)request->
735 instanceName.getClassName().getString().getCString()
736 ));
|
737 mark.hamzy 1.23
|
738 schuur 1.1 // make target object path
|
739 marek 1.68 CIMObjectPath *objectPath = new CIMObjectPath(
740 System::getHostName(),
741 request->nameSpace,
742 request->instanceName.getClassName(),
743 request->instanceName.getKeyBindings());
|
744 schuur 1.1
745 // resolve provider name
|
746 kumpf 1.2 ProviderName name = _resolveProviderName(
747 request->operationContext.get(ProviderIdContainer::NAME));
|
748 schuur 1.1
749 // get cached or load new provider module
|
750 marek 1.68 JMPIProvider::OpProviderHolder ph = providerManager.getProvider(
751 name.getPhysicalName(),
752 name.getLogicalName());
|
753 schuur 1.1 OperationContext context;
754
|
755 marek 1.68 context.insert(
756 request->operationContext.get(IdentityContainer::NAME));
757 context.insert(
758 request->operationContext.get(AcceptLanguageListContainer::NAME));
759 context.insert(
760 request->operationContext.get(ContentLanguageListContainer::NAME));
|
761 mark.hamzy 1.43
|
762 mark.hamzy 1.23 // forward request
|
763 mark.hamzy 1.25 JMPIProvider &pr=ph.GetProvider();
|
764 schuur 1.1
|
765 thilo.boehm 1.69 PEG_TRACE(( TRC_PROVIDERMANAGER, Tracer::LEVEL3,
766 "handleGetInstanceRequest:Calling provider instance: %s" ,
767 (const char*)pr.getName().getCString()));
|
768 schuur 1.1
|
769 mark.hamzy 1.25 JvmVector *jv = 0;
770
771 env = JMPIjvm::attachThread(&jv);
772
|
773 mark.hamzy 1.37 if (!env)
774 {
|
775 marek 1.71 PEG_TRACE_CSTRING( TRC_PROVIDERMANAGER, Tracer::LEVEL1,
|
776 thilo.boehm 1.69 "handleGetInstanceRequest:"
777 "Could not initialize the JVM (Java Virtual Machine) "
778 "runtime environment.");
779
|
780 mark.hamzy 1.37 PEG_METHOD_EXIT();
781
|
782 marek 1.68 throw PEGASUS_CIM_EXCEPTION_L(
783 CIM_ERR_FAILED,
784 MessageLoaderParms(
|
785 thilo.boehm 1.69 "ProviderManager.JMPI.JMPIProviderManager.INIT_JVM_FAILED",
|
786 marek 1.68 "Could not initialize the JVM (Java Virtual Machine) "
787 "runtime environment."));
|
788 mark.hamzy 1.37 }
789
|
790 mark.hamzy 1.25 JMPIProvider::pm_service_op_lock op_lock(&pr);
791
|
792 mark.hamzy 1.43 jmethodID id = NULL;
793 String interfaceType;
794 String interfaceVersion;
795
|
796 marek 1.68 getInterfaceType(
797 request->operationContext.get(ProviderIdContainer::NAME),
798 interfaceType,
799 interfaceVersion);
|
800 mark.hamzy 1.43
801 if (interfaceType == "JMPI")
802 {
|
803 marek 1.68 id = env->GetMethodID(
804 (jclass)pr.jProviderClass,
805 "getInstance",
806 "(Lorg/pegasus/jmpi/CIMObjectPath;"
807 "Lorg/pegasus/jmpi/CIMClass;Z)"
808 "Lorg/pegasus/jmpi/CIMInstance;");
|
809 mark.hamzy 1.25
|
810 mark.hamzy 1.43 if (id != NULL)
811 {
812 eMethodFound = METHOD_INSTANCEPROVIDER;
|
813 marek 1.71 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL1,
|
814 thilo.boehm 1.69 "handleGetInstanceRequest: "
815 "Found METHOD_INSTANCEPROVIDER.");
|
816 mark.hamzy 1.43 }
817
818 if (id == NULL)
819 {
820 env->ExceptionClear();
|
821 mark.hamzy 1.25
|
822 marek 1.68 id = env->GetMethodID(
823 (jclass)pr.jProviderClass,
824 "getInstance",
825 "(Lorg/pegasus/jmpi/CIMObjectPath;ZZZ["
826 "Ljava/lang/String;Lorg/pegasus/jmpi/CIMClass;)"
827 "Lorg/pegasus/jmpi/CIMInstance;");
|
828 mark.hamzy 1.43
829 if (id != NULL)
830 {
831 eMethodFound = METHOD_CIMINSTANCEPROVIDER;
|
832 marek 1.71 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL1,
|
833 thilo.boehm 1.69 "handleGetInstanceRequest: "
834 "Found METHOD_CIMINSTANCEPROVIDER.");
|
835 mark.hamzy 1.43 }
836 }
|
837 mark.hamzy 1.34 }
|
838 mark.hamzy 1.43 else if (interfaceType == "JMPIExperimental")
|
839 mark.hamzy 1.34 {
|
840 marek 1.68 id = env->GetMethodID(
841 (jclass)pr.jProviderClass,
842 "getInstance",
843 "(Lorg/pegasus/jmpi/OperationContext;"
844 "Lorg/pegasus/jmpi/CIMObjectPath;"
845 "Lorg/pegasus/jmpi/CIMClass;ZZ[Ljava/lang/String;)"
846 "Lorg/pegasus/jmpi/CIMInstance;");
|
847 mark.hamzy 1.34
|
848 mark.hamzy 1.43 if (id != NULL)
849 {
850 eMethodFound = METHOD_INSTANCEPROVIDER2;
|
851 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
852 "handleGetInstanceRequest: "
853 "Found METHOD_INSTANCEPROVIDER2.");
|
854 mark.hamzy 1.43 }
855 /* Fix for 4238 */
|
856 mark.hamzy 1.25 }
857
858 if (id == NULL)
859 {
|
860 marek 1.71 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL1,
|
861 thilo.boehm 1.69 "handleGetInstanceRequest: No method provider found!");
|
862 mark.hamzy 1.43
863 PEG_METHOD_EXIT();
|
864 mark.hamzy 1.25
|
865 kumpf 1.65 throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED,
866 MessageLoaderParms(
867 "ProviderManager.JMPI.JMPIProviderManager.METHOD_NOT_FOUND",
868 "Could not find a method for the provider based on "
869 "InterfaceType."));
|
870 mark.hamzy 1.25 }
871
|
872 schuur 1.1 JMPIjvm::checkException(env);
|
873 mark.hamzy 1.23
|
874 mark.hamzy 1.25 switch (eMethodFound)
875 {
|
876 mark.hamzy 1.43 case METHOD_CIMINSTANCEPROVIDER:
|
877 mark.hamzy 1.25 {
|
878 marek 1.68 jlong jopRef=DEBUG_ConvertCToJava(CIMObjectPath*,jlong,objectPath);
879 jobject jop=env->NewObject(
880 jv->CIMObjectPathClassRef,
881 jv->CIMObjectPathNewJ,
882 jopRef);
|
883 mark.hamzy 1.25
884 JMPIjvm::checkException(env);
885
|
886 mark.hamzy 1.40 CIMClass cls;
887
888 try
889 {
|
890 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
891 "handleGetInstanceRequest: "
892 "enter(METHOD_CIMINSTANCEPROVIDER): "
893 "cimom_handle->getClass(%s).",
894 (const char*)request->
895 instanceName.getClassName().getString().getCString()
896 ));
|
897 marek 1.68
|
898 mark.hamzy 1.40 AutoMutex lock (pr._cimomMutex);
899
|
900 marek 1.68 cls = pr._cimom_handle->getClass(
901 context,
902 request->nameSpace,
903 request->instanceName.getClassName(),
904 false,
905 true,
906 true,
907 CIMPropertyList());
908
|
909 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
910 "handleGetInstanceRequest: "
911 "exit(METHOD_CIMINSTANCEPROVIDER): "
912 "cimom_handle->getClass(%s).",
913 (const char*)request->
914 instanceName.getClassName().getString().getCString()
915 ));
916
|
917 mark.hamzy 1.40 }
918 catch (CIMException e)
919 {
|
920 marek 1.71 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1,
|
921 thilo.boehm 1.69 "handleGetInstanceRequest: "
922 "Caught CIMExcetion(METHOD_CIMINSTANCEPROVIDER) "
923 "during cimom_handle->getClass(%s): %s ",
924 (const char*)request->
925 instanceName.getClassName().getString().getCString(),
926 (const char*)e.getMessage().getCString()
927 ));
928
929 PEG_METHOD_EXIT();
|
930 mark.hamzy 1.40 throw;
931 }
932
|
933 mark.hamzy 1.27 CIMClass *pcls = new CIMClass (cls);
934
935 JMPIjvm::checkException(env);
|
936 mark.hamzy 1.25
|
937 marek 1.68 jlong jcimClassRef = DEBUG_ConvertCToJava(
938 CIMClass*,
939 jlong,
940 pcls);
941 jobject jcimClass = env->NewObject(
942 jv->CIMClassClassRef,
943 jv->CIMClassNewJ,
944 jcimClassRef);
|
945 mark.hamzy 1.25
946 JMPIjvm::checkException(env);
|
947 mark.hamzy 1.23
|
948 mark.hamzy 1.25 jobjectArray jPropertyList = getList(jv,env,request->propertyList);
|
949 schuur 1.1
|
950 kumpf 1.55 StatProviderTimeMeasurement providerTime(response);
951
|
952 mark.hamzy 1.29 jobject jciRet = env->CallObjectMethod((jobject)pr.jProvider,
953 id,
954 jop,
|
955 mark.hamzy 1.36 JMPI_LOCALONLY,
956 JMPI_INCLUDE_QUALIFIERS,
|
957 mark.hamzy 1.29 request->includeClassOrigin,
958 jPropertyList,
959 jcimClass);
|
960 mark.hamzy 1.23
|
961 mark.hamzy 1.25 JMPIjvm::checkException(env);
|
962 mark.hamzy 1.23
|
963 mark.hamzy 1.25 handler.processing();
|
964 schuur 1.1
|
965 mark.hamzy 1.29 if (jciRet) {
|
966 marek 1.68 jlong jciRetRef = env->CallLongMethod(
967 jciRet,
968 JMPIjvm::jv.CIMInstanceCInst);
969 CIMInstance *ciRet = DEBUG_ConvertJavaToC(
970 jlong,
971 CIMInstance*,
972 jciRetRef);
|
973 schuur 1.13
|
974 mark.hamzy 1.29 handler.deliver(*ciRet);
|
975 mark.hamzy 1.25 }
976 handler.complete();
977 break;
|
978 mark.hamzy 1.23 }
|
979 schuur 1.13
|
980 mark.hamzy 1.34 /* Fix for 4238 */
|
981 mark.hamzy 1.43 case METHOD_INSTANCEPROVIDER2:
|
982 mark.hamzy 1.34 {
|
983 marek 1.68 jlong jocRef = DEBUG_ConvertCToJava(
984 OperationContext*,
985 jlong,
986 &request->operationContext);
987 jobject joc = env->NewObject(
988 jv->OperationContextClassRef,
989 jv->OperationContextNewJ,
990 jocRef);
991
992 jlong jopRef = DEBUG_ConvertCToJava(
993 CIMObjectPath*,
994 jlong,
995 objectPath);
996 jobject jop = env->NewObject(
997 jv->CIMObjectPathClassRef,
998 jv->CIMObjectPathNewJ,
999 jopRef);
|
1000 mark.hamzy 1.34
1001 JMPIjvm::checkException(env);
1002
|
1003 mark.hamzy 1.40 CIMClass cls;
1004
1005 try
1006 {
|
1007 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1008 "handleGetInstanceRequest: "
1009 "enter(METHOD_INSTANCEPROVIDER2): "
1010 "cimom_handle->getClass(%s).",
1011 (const char*)request->
1012 instanceName.getClassName().getString().getCString()
1013 ));
1014
|
1015 mark.hamzy 1.40 AutoMutex lock (pr._cimomMutex);
1016
|
1017 marek 1.68 cls = pr._cimom_handle->getClass(
1018 context,
1019 request->nameSpace,
1020 request->instanceName.getClassName(),
1021 false,
1022 true,
1023 true,
1024 CIMPropertyList());
|
1025 thilo.boehm 1.69
1026 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1027 "handleGetInstanceRequest: "
1028 "exit(METHOD_INSTANCEPROVIDER2): "
1029 "cimom_handle->getClass(%s).",
1030 (const char*)request->
1031 instanceName.getClassName().getString().getCString()
1032 ));
|
1033 mark.hamzy 1.40 }
1034 catch (CIMException e)
1035 {
|
1036 marek 1.71 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1,
|
1037 thilo.boehm 1.69 "handleGetInstanceRequest: "
1038 "Caught CIMExcetion (METHOD_INSTANCEPROVIDER2) "
1039 "during cimom_handle->getClass(%s): %s ",
1040 (const char*)request->
1041 instanceName.getClassName().getString().getCString(),
1042 (const char*)e.getMessage().getCString()
1043 ));
1044 PEG_METHOD_EXIT();
|
1045 mark.hamzy 1.40 throw;
1046 }
1047
|
1048 mark.hamzy 1.34 CIMClass *pcls = new CIMClass (cls);
1049
1050 JMPIjvm::checkException(env);
1051
|
1052 marek 1.68 jlong jcimClassRef = DEBUG_ConvertCToJava (CIMClass*, jlong, pcls);
1053 jobject jcimClass = env->NewObject(
1054 jv->CIMClassClassRef,
1055 jv->CIMClassNewJ,
1056 jcimClassRef);
|
1057 mark.hamzy 1.34
1058 JMPIjvm::checkException(env);
1059
1060 jobjectArray jPropertyList = getList(jv,env,request->propertyList);
|
1061 kumpf 1.55
1062 StatProviderTimeMeasurement providerTime(response);
1063
|
1064 marek 1.68 jobject jciRet = env->CallObjectMethod(
1065 (jobject)pr.jProvider,
1066 id,
1067 joc,
1068 jop,
1069 jcimClass,
1070 JMPI_INCLUDE_QUALIFIERS,
1071 request->includeClassOrigin,
1072 jPropertyList);
|
1073 mark.hamzy 1.34
1074 JMPIjvm::checkException(env);
1075
|
1076 mark.hamzy 1.43 if (joc)
1077 {
|
1078 marek 1.68 env->CallVoidMethod(
1079 joc,
1080 JMPIjvm::jv.OperationContextUnassociate);
|
1081 mark.hamzy 1.43
1082 JMPIjvm::checkException(env);
1083 }
1084
|
1085 mark.hamzy 1.34 handler.processing();
1086
1087 if (jciRet) {
|
1088 marek 1.68 jlong jciRetRef = env->CallLongMethod(
1089 jciRet,
1090 JMPIjvm::jv.CIMInstanceCInst);
1091 CIMInstance *ciRet = DEBUG_ConvertJavaToC(
1092 jlong,
1093 CIMInstance*,
1094 jciRetRef);
|
1095 mark.hamzy 1.34
1096 handler.deliver(*ciRet);
1097 }
1098 handler.complete();
1099 break;
1100 }
1101 /* Fix for 4238 */
1102
|
1103 mark.hamzy 1.43 case METHOD_INSTANCEPROVIDER:
|
1104 mark.hamzy 1.25 {
|
1105 marek 1.68 jlong jopRef = DEBUG_ConvertCToJava(
1106 CIMObjectPath*,
1107 jlong,
1108 objectPath);
1109 jobject jop = env->NewObject(
1110 jv->CIMObjectPathClassRef,
1111 jv->CIMObjectPathNewJ,jopRef);
|
1112 mark.hamzy 1.25
1113 JMPIjvm::checkException(env);
1114
|
1115 mark.hamzy 1.40 CIMClass cls;
1116
1117 try
1118 {
|
1119 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1120 "handleGetInstanceRequest: "
1121 "enter(METHOD_INSTANCEPROVIDER): "
1122 "cimom_handle->getClass(%s).",
1123 (const char*)request->
1124 instanceName.getClassName().getString().getCString()
1125 ));
1126
|
1127 mark.hamzy 1.40 AutoMutex lock (pr._cimomMutex);
1128
|
1129 marek 1.68 cls = pr._cimom_handle->getClass(
1130 context,
1131 request->nameSpace,
1132 request->instanceName.getClassName(),
1133 false,
1134 true,
1135 true,
1136 CIMPropertyList());
|
1137 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1138 "handleGetInstanceRequest: "
1139 "exit(METHOD_INSTANCEPROVIDER): "
1140 "cimom_handle->getClass(%s).",
1141 (const char*)request->
1142 instanceName.getClassName().getString().getCString()
1143 ));
|
1144 mark.hamzy 1.40 }
1145 catch (CIMException e)
1146 {
|
1147 marek 1.71 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1,
|
1148 thilo.boehm 1.69 "handleGetInstanceRequest: "
1149 "Caught CIMExcetion (METHOD_INSTANCEPROVIDER) "
1150 "during cimom_handle->getClass(%s): %s ",
1151 (const char*)request->
1152 instanceName.getClassName().getString().getCString(),
1153 (const char*)e.getMessage().getCString()
1154 ));
1155
1156 PEG_METHOD_EXIT();
|
1157 mark.hamzy 1.40 throw;
1158 }
1159
|
1160 mark.hamzy 1.27 CIMClass *pcls = new CIMClass (cls);
|
1161 mark.hamzy 1.25
|
1162 mark.hamzy 1.27 JMPIjvm::checkException(env);
1163
|
1164 marek 1.68 jlong jcimClassRef = DEBUG_ConvertCToJava (CIMClass*, jlong, pcls);
1165 jobject jcimClass = env->NewObject(
1166 jv->CIMClassClassRef,
1167 jv->CIMClassNewJ,
1168 jcimClassRef);
|
1169 mark.hamzy 1.25
1170 JMPIjvm::checkException(env);
1171
|
1172 kumpf 1.55 StatProviderTimeMeasurement providerTime(response);
1173
|
1174 mark.hamzy 1.30 // Modified for Bugzilla# 3679
|
1175 mark.hamzy 1.29 jobject jciRet = env->CallObjectMethod((jobject)pr.jProvider,
1176 id,
1177 jop,
1178 jcimClass,
|
1179 mark.hamzy 1.30 JMPI_LOCALONLY);
|
1180 mark.hamzy 1.25
1181 JMPIjvm::checkException(env);
1182
1183 handler.processing();
|
1184 schuur 1.13
|
1185 mark.hamzy 1.29 if (jciRet) {
|
1186 marek 1.68 jlong jciRetRef = env->CallLongMethod(
1187 jciRet,
1188 JMPIjvm::jv.CIMInstanceCInst);
1189 CIMInstance *ciRet = DEBUG_ConvertJavaToC(
1190 jlong,
1191 CIMInstance*,
1192 jciRetRef);
|
1193 schuur 1.13
|
1194 mark.hamzy 1.29 handler.deliver(*ciRet);
|
1195 mark.hamzy 1.25 }
1196 handler.complete();
1197 break;
1198 }
|
1199 mark.hamzy 1.23
|
1200 mark.hamzy 1.25 case METHOD_UNKNOWN:
1201 {
|
1202 marek 1.71 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL1,
|
1203 thilo.boehm 1.69 "handleGetInstanceRequest: Unknown method provider!");
|
1204 mark.hamzy 1.25 break;
1205 }
|
1206 schuur 1.1 }
|
1207 schuur 1.13 }
|
1208 schuur 1.1 HandlerCatch(handler);
|
1209 schuur 1.13
|
1210 schuur 1.1 if (env) JMPIjvm::detachThread();
|
1211 schuur 1.13
|
1212 schuur 1.1 PEG_METHOD_EXIT();
1213
1214 return(response);
1215 }
1216
|
1217 marek 1.68 Message * JMPIProviderManager::handleEnumerateInstancesRequest(
1218 const Message * message) throw()
|
1219 schuur 1.1 {
|
1220 marek 1.68 PEG_METHOD_ENTER(
1221 TRC_PROVIDERMANAGER,
1222 "JMPIProviderManager::handleEnumerateInstanceRequest");
|
1223 mark.hamzy 1.23
|
1224 kumpf 1.55 HandlerIntro(EnumerateInstances,message,request,response,handler);
|
1225 schuur 1.1
|
1226 mark.hamzy 1.25 typedef enum {
1227 METHOD_UNKNOWN = 0,
|
1228 mark.hamzy 1.43 METHOD_CIMINSTANCEPROVIDER,
1229 METHOD_CIMINSTANCEPROVIDER2,
1230 METHOD_INSTANCEPROVIDER,
1231 METHOD_INSTANCEPROVIDER2,
|
1232 mark.hamzy 1.25 } METHOD_VERSION;
1233 METHOD_VERSION eMethodFound = METHOD_UNKNOWN;
1234 JNIEnv *env = NULL;
|
1235 schuur 1.13
|
1236 marek 1.68 try
1237 {
|
1238 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL3,
1239 "handleEnumerateInstanceRequest: "
1240 "name space = %s class name = %s",
1241 (const char*)request->nameSpace.getString().getCString(),
1242 (const char*)request->className.getString().getCString()
1243 ));
|
1244 mark.hamzy 1.23
|
1245 schuur 1.1 // make target object path
|
1246 mark.hamzy 1.27 CIMObjectPath *objectPath = new CIMObjectPath (System::getHostName(),
1247 request->nameSpace,
1248 request->className);
|
1249 schuur 1.1
1250 // resolve provider name
|
1251 kumpf 1.2 ProviderName name = _resolveProviderName(
1252 request->operationContext.get(ProviderIdContainer::NAME));
|
1253 schuur 1.1
1254 // get cached or load new provider module
|
1255 marek 1.68 JMPIProvider::OpProviderHolder ph = providerManager.getProvider(
1256 name.getPhysicalName(),
1257 name.getLogicalName(),
1258 String::EMPTY);
|
1259 schuur 1.1
|
1260 schuur 1.12 // convert arguments
|
1261 schuur 1.1 OperationContext context;
1262
|
1263 marek 1.68 context.insert(
1264 request->operationContext.get(IdentityContainer::NAME));
1265 context.insert(
1266 request->operationContext.get(AcceptLanguageListContainer::NAME));
1267 context.insert(
1268 request->operationContext.get(ContentLanguageListContainer::NAME));
|
1269 schuur 1.1
1270 // forward request
|
1271 mark.hamzy 1.25 JMPIProvider &pr = ph.GetProvider();
|
1272 schuur 1.1
|
1273 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3,
1274 "handleEnumerateInstanceRequest: "
1275 "Calling provider: %s", (const char*)pr.getName().getCString()));
|
1276 schuur 1.12
|
1277 mark.hamzy 1.25 JvmVector *jv = 0;
1278
1279 env = JMPIjvm::attachThread(&jv);
1280
|
1281 mark.hamzy 1.37 if (!env)
1282 {
|
1283 marek 1.71 PEG_TRACE_CSTRING( TRC_PROVIDERMANAGER, Tracer::LEVEL1,
|
1284 thilo.boehm 1.69 "handleEnumerateInstanceRequest: "
1285 "Could not initialize the JVM (Java Virtual Machine) "
1286 "runtime environment.");
1287
|
1288 mark.hamzy 1.37 PEG_METHOD_EXIT();
1289
|
1290 kumpf 1.65 throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED,
1291 MessageLoaderParms(
1292 "ProviderManager.JMPI.JMPIProviderManager.INIT_JVM_FAILED",
1293 "Could not initialize the JVM (Java Virtual Machine) "
1294 "runtime environment."));
|
1295 mark.hamzy 1.37 }
1296
|
1297 mark.hamzy 1.25 JMPIProvider::pm_service_op_lock op_lock(&pr);
1298
|
1299 mark.hamzy 1.43 jmethodID id = NULL;
1300 String interfaceType;
1301 String interfaceVersion;
1302
|
1303 marek 1.68 getInterfaceType(
1304 request->operationContext.get (ProviderIdContainer::NAME),
1305 interfaceType,
1306 interfaceVersion);
|
1307 mark.hamzy 1.43
1308 if (interfaceType == "JMPI")
1309 {
|
1310 marek 1.68 id = env->GetMethodID(
1311 (jclass)pr.jProviderClass,
1312 "enumInstances",
1313 "(Lorg/pegasus/jmpi/CIMObjectPath;Z"
1314 "Lorg/pegasus/jmpi/CIMClass;Z)Ljava/util/Vector;");
|
1315 mark.hamzy 1.25
|
1316 mark.hamzy 1.43 if (id != NULL)
1317 {
1318 eMethodFound = METHOD_INSTANCEPROVIDER;
|
1319 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1320 "handleEnumerateInstances: Found METHOD_INSTANCEPROVIDER.");
|
1321 mark.hamzy 1.43 }
1322
1323 if (id == NULL)
1324 {
1325 env->ExceptionClear();
|
1326 mark.hamzy 1.25
|
1327 marek 1.68 id = env->GetMethodID(
1328 (jclass)pr.jProviderClass,
1329 "enumerateInstances",
1330 "(Lorg/pegasus/jmpi/CIMObjectPath;ZZZ["
1331 "Ljava/lang/String;Lorg/pegasus/jmpi/CIMClass;)["
1332 "Lorg/pegasus/jmpi/CIMInstance;");
|
1333 mark.hamzy 1.43
1334 if (id != NULL)
1335 {
1336 eMethodFound = METHOD_CIMINSTANCEPROVIDER;
|
1337 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1338 "handleEnumerateInstances: "
1339 "Found METHOD_CIMINSTANCEPROVIDER.");
|
1340 mark.hamzy 1.43 }
1341 }
1342 }
1343 else if (interfaceType == "JMPIExperimental")
|
1344 mark.hamzy 1.25 {
|
1345 marek 1.68 id = env->GetMethodID(
1346 (jclass)pr.jProviderClass,
1347 "enumerateInstances",
1348 "(Lorg/pegasus/jmpi/OperationContext;"
1349 "Lorg/pegasus/jmpi/CIMObjectPath;"
1350 "Lorg/pegasus/jmpi/CIMClass;ZZ[Ljava/lang/String;)"
1351 "Ljava/util/Vector;");
|
1352 mark.hamzy 1.33
|
1353 mark.hamzy 1.43 if (id != NULL)
1354 {
1355 eMethodFound = METHOD_INSTANCEPROVIDER2;
|
1356 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1357 "handleEnumerateInstances: "
1358 "Found METHOD_INSTANCEPROVIDER2.");
|
1359 mark.hamzy 1.43 }
1360 if (id == NULL)
1361 {
1362 env->ExceptionClear();
|
1363 marek 1.68 id = env->GetMethodID(
1364 (jclass)pr.jProviderClass,
1365 "enumerateInstances",
1366 "(Lorg/pegasus/jmpi/OperationContext;"
1367 "Lorg/pegasus/jmpi/CIMObjectPath;"
1368 "Lorg/pegasus/jmpi/CIMClass;ZZ["
1369 "Ljava/lang/String;)["
1370 "Lorg/pegasus/jmpi/CIMInstance;");
|
1371 mark.hamzy 1.43
1372 if (id != NULL)
1373 {
1374 eMethodFound = METHOD_CIMINSTANCEPROVIDER2;
|
1375 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1376 "handleEnumerateInstances: "
1377 "Found METHOD_CIMINSTANCEPROVIDER2.");
|
1378 mark.hamzy 1.43 }
1379 }
|
1380 mark.hamzy 1.25 }
1381
1382 if (id == NULL)
1383 {
|
1384 marek 1.71 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL1,
|
1385 thilo.boehm 1.69 "handleEnumerateInstances: No method provider found!");
|
1386 mark.hamzy 1.43
1387 PEG_METHOD_EXIT();
|
1388 schuur 1.1
|
1389 marek 1.68 throw PEGASUS_CIM_EXCEPTION_L(
1390 CIM_ERR_FAILED,
1391 MessageLoaderParms(
|
1392 thilo.boehm 1.69 "ProviderManager.JMPI.JMPIProviderManager.METHOD_NOT_FOUND",
|
1393 marek 1.68 "Could not find a method for the provider based on "
1394 "InterfaceType."));
|
1395 mark.hamzy 1.25 }
|
1396 schuur 1.12
1397 JMPIjvm::checkException(env);
|
1398 mark.hamzy 1.23
|
1399 mark.hamzy 1.25 switch (eMethodFound)
1400 {
|
1401 mark.hamzy 1.43 case METHOD_CIMINSTANCEPROVIDER:
|
1402 mark.hamzy 1.25 {
|
1403 marek 1.68 jlong jcopRef = DEBUG_ConvertCToJava(
1404 CIMObjectPath*,
1405 jlong,
1406 objectPath);
1407 jobject jcop = env->NewObject(
1408 jv->CIMObjectPathClassRef,
1409 jv->CIMObjectPathNewJ,
1410 jcopRef);
|
1411 mark.hamzy 1.23
|
1412 mark.hamzy 1.25 JMPIjvm::checkException(env);
|
1413 schuur 1.1
|
1414 mark.hamzy 1.40 CIMClass cls;
1415
1416 try
1417 {
|
1418 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1419 "handleEnumerateInstances: "
1420 "enter(METHOD_CIMINSTANCEPROVIDER): "
1421 "cimom_handle->getClass(%s).",
1422 (const char*)request->className.getString().getCString()
1423 ));
1424
|
1425 mark.hamzy 1.40 AutoMutex lock (pr._cimomMutex);
1426
1427 cls = pr._cimom_handle->getClass(context,
1428 request->nameSpace,
1429 request->className,
1430 false,
1431 true,
1432 true,
1433 CIMPropertyList());
|
1434 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1435 "handleEnumerateInstances: "
1436 "exit(METHOD_CIMINSTANCEPROVIDER): "
1437 "cimom_handle->getClass(%s).",
1438 (const char*)request->className.getString().getCString()
1439 ));
1440
|
1441 mark.hamzy 1.40 }
1442 catch (CIMException e)
1443 {
|
1444 marek 1.71 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1,
|
1445 thilo.boehm 1.69 "handleEnumerateInstances: "
1446 "Caught CIMExcetion(METHOD_CIMINSTANCEPROVIDER) "
1447 "during cimom_handle->getClass(%s): %s ",
1448 (const char*)request->className.getString().getCString(),
1449 (const char*)e.getMessage().getCString()
1450 ));
1451
1452 PEG_METHOD_EXIT();
|
1453 mark.hamzy 1.40 throw;
1454 }
1455
|
1456 mark.hamzy 1.27 CIMClass *pcls = new CIMClass (cls);
1457
|
1458 mark.hamzy 1.25 JMPIjvm::checkException(env);
|
1459 schuur 1.1
|
1460 mark.hamzy 1.59 jlong jccRef = DEBUG_ConvertCToJava (CIMClass*, jlong, pcls);
|
1461 marek 1.68 jobject jcc = env->NewObject(
1462 jv->CIMClassClassRef,
1463 jv->CIMClassNewJ,
1464 jccRef);
|
1465 schuur 1.13
|
1466 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
1467 schuur 1.1
|
1468 mark.hamzy 1.25 jobjectArray jPropertyList = getList(jv,env,request->propertyList);
|
1469 kumpf 1.55
1470 StatProviderTimeMeasurement providerTime(response);
1471
|
1472 marek 1.68 jobjectArray jAr = (jobjectArray)env->CallObjectMethod(
1473 (jobject)pr.jProvider,
1474 id,
1475 jcop,
1476 JMPI_LOCALONLY,
1477 JMPI_INCLUDE_QUALIFIERS,
1478 request->includeClassOrigin,
1479 jPropertyList,
1480 jcc);
|
1481 mark.hamzy 1.25
|
1482 mark.hamzy 1.23 JMPIjvm::checkException(env);
1483
1484 handler.processing();
|
1485 mark.hamzy 1.25 if (jAr) {
1486 for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
|
1487 mark.hamzy 1.23 JMPIjvm::checkException(env);
1488
|
1489 mark.hamzy 1.29 jobject jciRet = env->GetObjectArrayElement(jAr,i);
1490
|
1491 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
1492 schuur 1.13
|
1493 marek 1.68 jlong jciRetRef = env->CallLongMethod(
1494 jciRet,
1495 JMPIjvm::jv.CIMInstanceCInst);
1496 CIMInstance *ciRet = DEBUG_ConvertJavaToC(
1497 jlong,
1498 CIMInstance*,
1499 jciRetRef);
|
1500 schuur 1.13
|
1501 mark.hamzy 1.36 /* Fix for 4237 */
|
1502 mark.hamzy 1.40 CIMClass cls;
1503
1504 try
1505 {
|
1506 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1507 "handleEnumerateInstances: "
1508 "enter: cimom_handle->getClass(%s).",
1509 (const char*)ciRet->
1510 getClassName().getString().getCString()
1511 ));
1512
|
1513 mark.hamzy 1.40 AutoMutex lock (pr._cimomMutex);
1514
1515 cls = pr._cimom_handle->getClass(context,
1516 request->nameSpace,
1517 ciRet->getClassName(),
1518 false,
1519 true,
1520 true,
1521 CIMPropertyList());
|
1522 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1523 "handleEnumerateInstances: "
1524 "exit: cimom_handle->getClass(%s).",
1525 (const char*)ciRet->
1526 getClassName().getString().getCString()
1527 ));
1528
|
1529 mark.hamzy 1.40 }
1530 catch (CIMException e)
1531 {
|
1532 marek 1.71 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1,
|
1533 thilo.boehm 1.69 "handleEnumerateInstances: "
1534 "Caught CIMExcetion "
1535 "during cimom_handle->getClass(%s): %s ",
1536 (const char*)ciRet->
1537 getClassName().getString().getCString(),
1538 (const char*)e.getMessage().getCString()
1539 ));
1540
1541 PEG_METHOD_EXIT();
|
1542 mark.hamzy 1.40 throw;
1543 }
1544
|
1545 mark.hamzy 1.36 const CIMObjectPath& op = ciRet->getPath();
1546 CIMObjectPath iop = ciRet->buildPath(cls);
1547
|
1548 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
1549 schuur 1.13
|
1550 mark.hamzy 1.29 handler.deliver(*ciRet);
|
1551 mark.hamzy 1.23 }
1552 }
1553 handler.complete();
|
1554 mark.hamzy 1.25 break;
|
1555 schuur 1.13 }
|
1556 mark.hamzy 1.25
|
1557 mark.hamzy 1.43 case METHOD_CIMINSTANCEPROVIDER2:
1558 {
|
1559 marek 1.68 jlong jocRef = DEBUG_ConvertCToJava(
1560 OperationContext*,
1561 jlong,
1562 &request->operationContext);
1563 jobject joc = env->NewObject(
1564 jv->OperationContextClassRef,
1565 jv->OperationContextNewJ,
1566 jocRef);
1567
1568 jlong jcopRef = DEBUG_ConvertCToJava(
1569 CIMObjectPath*,
1570 jlong,
1571 objectPath);
1572 jobject jcop = env->NewObject(
1573 jv->CIMObjectPathClassRef,
1574 jv->CIMObjectPathNewJ,
1575 jcopRef);
|
1576 mark.hamzy 1.43
1577 JMPIjvm::checkException(env);
1578
1579 CIMClass cls;
1580
1581 try
1582 {
|
1583 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1584 "handleEnumerateInstances: "
1585 "enter(METHOD_CIMINSTANCEPROVIDER2): "
1586 "cimom_handle->getClass(%s).",
1587 (const char*)request->className.getString().getCString()
1588 ));
1589
|
1590 mark.hamzy 1.43 AutoMutex lock (pr._cimomMutex);
1591
1592 cls = pr._cimom_handle->getClass(context,
1593 request->nameSpace,
1594 request->className,
1595 false,
1596 true,
1597 true,
1598 CIMPropertyList());
|
1599 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1600 "handleEnumerateInstances: "
1601 "exit(METHOD_CIMINSTANCEPROVIDER2): "
1602 "cimom_handle->getClass(%s).",
1603 (const char*)request->className.getString().getCString()
1604 ));
|
1605 mark.hamzy 1.43 }
1606 catch (CIMException e)
1607 {
|
1608 marek 1.71 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1,
|
1609 thilo.boehm 1.69 "handleEnumerateInstances: "
1610 "Caught CIMExcetion(METHOD_CIMINSTANCEPROVIDER) "
1611 "during cimom_handle->getClass(%s): %s ",
1612 (const char*)request->className.getString().getCString(),
1613 (const char*)e.getMessage().getCString()
1614 ));
1615
1616 PEG_METHOD_EXIT();
|
1617 mark.hamzy 1.43 throw;
1618 }
1619
1620 CIMClass *pcls = new CIMClass (cls);
1621
1622 JMPIjvm::checkException(env);
1623
|
1624 mark.hamzy 1.59 jlong jccRef = DEBUG_ConvertCToJava (CIMClass*, jlong, pcls);
|
1625 marek 1.68 jobject jcc = env->NewObject(
1626 jv->CIMClassClassRef,
1627 jv->CIMClassNewJ,
1628 jccRef);
|
1629 mark.hamzy 1.43
1630 JMPIjvm::checkException(env);
1631
1632 jobjectArray jPropertyList = getList(jv,env,request->propertyList);
|
1633 kumpf 1.55
1634 StatProviderTimeMeasurement providerTime(response);
1635
|
1636 marek 1.68 jobjectArray jAr = (jobjectArray)env->CallObjectMethod(
1637 (jobject)pr.jProvider,
1638 id,
1639 joc,
1640 jcop,
1641 jcc,
1642 JMPI_INCLUDE_QUALIFIERS,
1643 request->includeClassOrigin,
1644 jPropertyList);
|
1645 mark.hamzy 1.43
1646 JMPIjvm::checkException(env);
1647
1648 if (joc)
1649 {
|
1650 marek 1.68 env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate);
|
1651 mark.hamzy 1.43
1652 JMPIjvm::checkException(env);
1653 }
1654
1655 handler.processing();
1656 if (jAr) {
1657 for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
1658 JMPIjvm::checkException(env);
1659
1660 jobject jciRet = env->GetObjectArrayElement(jAr,i);
1661
1662 JMPIjvm::checkException(env);
1663
|
1664 marek 1.68 jlong jciRetRef = env->CallLongMethod(
1665 jciRet,
1666 JMPIjvm::jv.CIMInstanceCInst);
1667 CIMInstance *ciRet = DEBUG_ConvertJavaToC(
1668 jlong,
1669 CIMInstance*,
1670 jciRetRef);
|
1671 mark.hamzy 1.43
1672 /* Fix for 4237 */
1673 CIMClass cls;
1674
1675 try
1676 {
|
1677 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1678 "handleEnumerateInstancesRequest: "
1679 "enter: cimom_handle->getClass(%s).",
1680 (const char*)ciRet->
1681 getClassName().getString().getCString()
1682 ));
1683
|
1684 mark.hamzy 1.43 AutoMutex lock (pr._cimomMutex);
1685
1686 cls = pr._cimom_handle->getClass(context,
1687 request->nameSpace,
1688 ciRet->getClassName(),
1689 false,
1690 true,
1691 true,
1692 CIMPropertyList());
|
1693 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1694 "handleEnumerateInstancesRequest: "
1695 "exit: cimom_handle->getClass(%s).",
1696 (const char*)ciRet->
1697 getClassName().getString().getCString()
1698 ));
|
1699 mark.hamzy 1.43 }
1700 catch (CIMException e)
1701 {
|
1702 marek 1.71 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1,
|
1703 thilo.boehm 1.69 "handleEnumerateInstancesRequest: "
1704 "Caught CIMExcetion "
1705 "cimom_handle->getClass(%s): %s ",
1706 (const char*)ciRet->
1707 getClassName().getString().getCString(),
1708 (const char*)e.getMessage().getCString()
1709 ));
1710
1711 PEG_METHOD_EXIT();
|
1712 mark.hamzy 1.43 throw;
1713 }
1714
1715 const CIMObjectPath& op = ciRet->getPath();
1716 CIMObjectPath iop = ciRet->buildPath(cls);
1717
1718 JMPIjvm::checkException(env);
1719
1720 handler.deliver(*ciRet);
1721 }
1722 }
1723 handler.complete();
1724 break;
1725 }
1726
|
1727 mark.hamzy 1.33 /* Fix for 4189 */
|
1728 mark.hamzy 1.43 case METHOD_INSTANCEPROVIDER2:
|
1729 mark.hamzy 1.33 {
|
1730 marek 1.68 jlong jocRef = DEBUG_ConvertCToJava(
1731 OperationContext*,
1732 jlong,
1733 &request->operationContext);
1734 jobject joc = env->NewObject(
1735 jv->OperationContextClassRef,
1736 jv->OperationContextNewJ,
1737 jocRef);
1738
1739 jlong jcopRef = DEBUG_ConvertCToJava(
1740 CIMObjectPath*,
1741 jlong,
1742 objectPath);
1743 jobject jcop = env->NewObject(
1744 jv->CIMObjectPathClassRef,
1745 jv->CIMObjectPathNewJ,
1746 jcopRef);
|
1747 mark.hamzy 1.33
1748 JMPIjvm::checkException(env);
1749
|
1750 mark.hamzy 1.40 CIMClass cls;
1751
1752 try
1753 {
|
1754 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1755 "handleEnumerateInstancesRequest: "
1756 "enter(METHOD_INSTANCEPROVIDER2): "
1757 "cimom_handle->getClass(%s).",
1758 (const char*)request->className.getString().getCString()
1759 ));
1760
|
1761 mark.hamzy 1.40 AutoMutex lock (pr._cimomMutex);
1762
1763 cls = pr._cimom_handle->getClass (context,
1764 request->nameSpace,
1765 request->className,
1766 false,
1767 true,
1768 true,
1769 CIMPropertyList());
|
1770 thilo.boehm 1.69
1771 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1772 "handleEnumerateInstancesRequest: "
1773 "enter(METHOD_INSTANCEPROVIDER2): "
1774 "cimom_handle->getClass(%s).",
1775 (const char*)request->className.getString().getCString()
1776 ));
1777
|
1778 mark.hamzy 1.40 }
1779 catch (CIMException e)
1780 {
|
1781 marek 1.71 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1,
|
1782 thilo.boehm 1.69 "handleEnumerateInstancesRequest: "
1783 "Caught CIMExcetion(METHOD_INSTANCEPROVIDER2) "
1784 "during cimom_handle->getClass(%s): %s ",
1785 (const char*)request->className.getString().getCString(),
1786 (const char*)e.getMessage().getCString()
1787 ));
1788
1789 PEG_METHOD_EXIT();
|
1790 mark.hamzy 1.40 throw;
1791 }
1792
|
1793 mark.hamzy 1.33 CIMClass *pcls = new CIMClass (cls);
1794
1795 JMPIjvm::checkException(env);
1796
|
1797 mark.hamzy 1.59 jlong jccRef = DEBUG_ConvertCToJava (CIMClass*, jlong, pcls);
|
1798 marek 1.68 jobject jcc = env->NewObject(
1799 jv->CIMClassClassRef,
1800 jv->CIMClassNewJ,
1801 jccRef);
|
1802 mark.hamzy 1.33
1803 JMPIjvm::checkException(env);
1804
1805 jobjectArray jPropertyList = getList(jv,env,request->propertyList);
|
1806 kumpf 1.55
1807 StatProviderTimeMeasurement providerTime(response);
1808
|
1809 marek 1.68 jobject jVec = env->CallObjectMethod((jobject)pr.jProvider,
1810 id,
1811 joc,
1812 jcop,
1813 jcc,
1814 JMPI_INCLUDE_QUALIFIERS,
1815 request->includeClassOrigin,
1816 jPropertyList);
|
1817 mark.hamzy 1.33
1818 JMPIjvm::checkException(env);
1819
|
1820 mark.hamzy 1.43 if (joc)
1821 {
|
1822 marek 1.68 env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate);
|
1823 mark.hamzy 1.43
1824 JMPIjvm::checkException(env);
1825 }
1826
|
1827 mark.hamzy 1.33 handler.processing();
1828 if (jVec) {
|
1829 marek 1.68 for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize);
1830 i<m;
1831 i++)
1832 {
|
1833 mark.hamzy 1.33 JMPIjvm::checkException(env);
1834
|
1835 marek 1.68 jobject jciRet = env->CallObjectMethod(
1836 jVec,
1837 JMPIjvm::jv.VectorElementAt,
1838 i);
|
1839 mark.hamzy 1.33
1840 JMPIjvm::checkException(env);
1841
|
1842 marek 1.68 jlong jciRetRef = env->CallLongMethod(
1843 jciRet,
1844 JMPIjvm::jv.CIMInstanceCInst);
1845 CIMInstance *ciRet = DEBUG_ConvertJavaToC(
1846 jlong,
1847 CIMInstance*,
1848 jciRetRef);
|
1849 mark.hamzy 1.33
1850 /* Fix for 4237 */
|
1851 mark.hamzy 1.40 CIMClass cls;
1852
1853 try
1854 {
|
1855 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1856 "handleEnumerateInstancesRequest: "
1857 "enter: cimom_handle->getClass(%s).",
1858 (const char*)ciRet->
1859 getClassName().getString().getCString()
1860 ));
1861
|
1862 mark.hamzy 1.40 AutoMutex lock (pr._cimomMutex);
1863
1864 cls = pr._cimom_handle->getClass(context,
1865 request->nameSpace,
1866 ciRet->getClassName(),
1867 false,
1868 true,
1869 true,
1870 CIMPropertyList());
|
1871 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1872 "handleEnumerateInstancesRequest: "
1873 "exit: cimom_handle->getClass(%s).",
1874 (const char*)ciRet->
1875 getClassName().getString().getCString()
1876 ));
|
1877 mark.hamzy 1.40 }
1878 catch (CIMException e)
1879 {
|
1880 marek 1.71 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1,
|
1881 thilo.boehm 1.69 "handleEnumerateInstancesRequest: "
1882 "Caught CIMExcetion "
1883 "cimom_handle->getClass(%s): %s ",
1884 (const char*)ciRet->
1885 getClassName().getString().getCString(),
1886 (const char*)e.getMessage().getCString()
1887 ));
1888
1889 PEG_METHOD_EXIT();
|
1890 mark.hamzy 1.40 throw;
1891 }
1892
|
1893 mark.hamzy 1.33 const CIMObjectPath& op = ciRet->getPath();
1894 CIMObjectPath iop = ciRet->buildPath(cls);
1895
1896 JMPIjvm::checkException(env);
1897
1898 iop.setNameSpace(op.getNameSpace());
1899
1900 ciRet->setPath(iop);
1901 /* Fix for 4237*/
1902
1903 handler.deliver(*ciRet);
1904 }
1905 }
1906 handler.complete();
1907 break;
1908 }
1909 /* Fix for 4189 */
1910
|
1911 mark.hamzy 1.43 case METHOD_INSTANCEPROVIDER:
|
1912 mark.hamzy 1.25 {
|
1913 marek 1.68 jlong jcopRef = DEBUG_ConvertCToJava(
1914 CIMObjectPath*,
1915 jlong,
1916 objectPath);
1917 jobject jcop = env->NewObject(
1918 jv->CIMObjectPathClassRef,
1919 jv->CIMObjectPathNewJ,
1920 jcopRef);
|
1921 mark.hamzy 1.25
1922 JMPIjvm::checkException(env);
1923
|
1924 mark.hamzy 1.40 CIMClass cls;
1925
1926 try
1927 {
|
1928 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1929 "handleEnumerateInstancesRequest: "
1930 "enter(METHOD_INSTANCEPROVIDER): "
1931 "cimom_handle->getClass(%s).",
1932 (const char*)request->className.getString().getCString()
1933 ));
1934
|
1935 mark.hamzy 1.40 AutoMutex lock (pr._cimomMutex);
1936
1937 cls = pr._cimom_handle->getClass(context,
1938 request->nameSpace,
1939 request->className,
1940 false,
1941 true,
1942 true,
1943 CIMPropertyList());
|
1944 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1945 "handleEnumerateInstancesRequest: "
1946 "exit(METHOD_INSTANCEPROVIDER): "
1947 "cimom_handle->getClass(%s).",
1948 (const char*)request->className.getString().getCString()
1949 ));
|
1950 mark.hamzy 1.40 }
1951 catch (CIMException e)
1952 {
|
1953 marek 1.71 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1,
|
1954 thilo.boehm 1.69 "handleEnumerateInstancesRequest: "
1955 "Caught CIMExcetion(METHOD_INSTANCEPROVIDER) "
1956 "during cimom_handle->getClass(%s): %s ",
1957 (const char*)request->className.getString().getCString(),
1958 (const char*)e.getMessage().getCString()
1959 ));
1960
1961 PEG_METHOD_EXIT();
|
1962 mark.hamzy 1.40 throw;
1963 }
1964
|
1965 mark.hamzy 1.27 CIMClass *pcls = new CIMClass (cls);
1966
|
1967 mark.hamzy 1.25 JMPIjvm::checkException(env);
1968
|
1969 mark.hamzy 1.59 jlong jccRef = DEBUG_ConvertCToJava (CIMClass*, jlong, pcls);
|
1970 marek 1.68 jobject jcc = env->NewObject(
1971 jv->CIMClassClassRef,
1972 jv->CIMClassNewJ,
1973 jccRef);
|
1974 mark.hamzy 1.25
1975 JMPIjvm::checkException(env);
1976
|
1977 kumpf 1.55 StatProviderTimeMeasurement providerTime(response);
1978
|
1979 mark.hamzy 1.30 // Modified for Bugzilla# 3679
|
1980 mark.hamzy 1.25 jobject jVec = env->CallObjectMethod((jobject)pr.jProvider,
1981 id,
|
1982 mark.hamzy 1.29 jcop,
|
1983 mark.hamzy 1.33 request->deepInheritance,
|
1984 mark.hamzy 1.29 jcc,
|
1985 mark.hamzy 1.30 JMPI_LOCALONLY);
|
1986 mark.hamzy 1.25
|
1987 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
1988 schuur 1.12
|
1989 mark.hamzy 1.23 handler.processing();
|
1990 mark.hamzy 1.25 if (jVec) {
|
1991 marek 1.68 for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize);
1992 i<m;
1993 i++)
1994 {
|
1995 mark.hamzy 1.23 JMPIjvm::checkException(env);
1996
|
1997 marek 1.68 jobject jciRet = env->CallObjectMethod(
1998 jVec,
1999 JMPIjvm::jv.VectorElementAt,
2000 i);
|
2001 mark.hamzy 1.29
|
2002 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
2003 schuur 1.12
|
2004 marek 1.68 jlong jciRetRef = env->CallLongMethod(
2005 jciRet,
2006 JMPIjvm::jv.CIMInstanceCInst);
2007 CIMInstance *ciRet = DEBUG_ConvertJavaToC(
2008 jlong,
2009 CIMInstance*,
2010 jciRetRef);
|
2011 schuur 1.12
|
2012 mark.hamzy 1.33 /* Fix for 4237 */
|
2013 mark.hamzy 1.40 CIMClass cls;
2014
2015 try
2016 {
|
2017 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2018 "handleEnumerateInstancesRequest: "
2019 "enter: cimom_handle->getClass(%s).",
2020 (const char*)ciRet->
2021 getClassName().getString().getCString()
2022 ));
2023
|
2024 mark.hamzy 1.40 AutoMutex lock (pr._cimomMutex);
2025
2026 cls = pr._cimom_handle->getClass(context,
2027 request->nameSpace,
2028 ciRet->getClassName(),
2029 false,
2030 true,
2031 true,
2032 CIMPropertyList());
|
2033 thilo.boehm 1.69
2034 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2035 "handleEnumerateInstancesRequest: "
2036 "exit: cimom_handle->getClass(%s).",
2037 (const char*)ciRet->
2038 getClassName().getString().getCString()
2039 ));
|
2040 mark.hamzy 1.40 }
2041 catch (CIMException e)
2042 {
|
2043 marek 1.71 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1,
|
2044 thilo.boehm 1.69 "handleEnumerateInstancesRequest: "
2045 "Caught CIMExcetion "
2046 "during cimom_handle->getClass(%s): %s ",
2047 (const char*)ciRet->
2048 getClassName().getString().getCString(),
2049 (const char*)e.getMessage().getCString()
2050 ));
2051
2052 PEG_METHOD_EXIT();
|
2053 mark.hamzy 1.40 throw;
2054 }
2055
|
2056 mark.hamzy 1.33 const CIMObjectPath& op = ciRet->getPath();
2057 CIMObjectPath iop = ciRet->buildPath(cls);
2058
2059 JMPIjvm::checkException(env);
2060
2061 iop.setNameSpace(op.getNameSpace());
2062
2063 ciRet->setPath(iop);
2064 /* Fix for 4237*/
2065
|
2066 mark.hamzy 1.29 handler.deliver(*ciRet);
|
2067 mark.hamzy 1.23 }
2068 }
2069 handler.complete();
|
2070 mark.hamzy 1.25 break;
2071 }
2072
2073 case METHOD_UNKNOWN:
2074 {
|
2075 marek 1.71 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL1,
|
2076 thilo.boehm 1.69 "handleEnumerateInstancesRequest: Unknown method provider!");
|
2077 mark.hamzy 1.25 break;
2078 }
|
2079 schuur 1.1 }
2080 }
2081 HandlerCatch(handler);
|
2082 schuur 1.12
|
2083 schuur 1.11 if (env) JMPIjvm::detachThread();
|
2084 schuur 1.12
|
2085 schuur 1.1 PEG_METHOD_EXIT();
2086
2087 return(response);
2088 }
2089
|
2090 marek 1.68 Message * JMPIProviderManager::handleEnumerateInstanceNamesRequest(
2091 const Message * message) throw()
|
2092 schuur 1.1 {
|
2093 marek 1.68 PEG_METHOD_ENTER(
2094 TRC_PROVIDERMANAGER,
2095 "JMPIProviderManager::handleEnumerateInstanceNamesRequest");
|
2096 schuur 1.1
|
2097 kumpf 1.55 HandlerIntro(EnumerateInstanceNames,message,request,response, handler);
|
2098 mark.hamzy 1.23
|
2099 mark.hamzy 1.25 typedef enum {
2100 METHOD_UNKNOWN = 0,
|
2101 mark.hamzy 1.43 METHOD_CIMINSTANCEPROVIDER,
2102 METHOD_CIMINSTANCEPROVIDER2,
2103 METHOD_INSTANCEPROVIDER,
2104 METHOD_INSTANCEPROVIDER2,
|
2105 mark.hamzy 1.25 } METHOD_VERSION;
2106 METHOD_VERSION eMethodFound = METHOD_UNKNOWN;
2107 JNIEnv *env = NULL;
|
2108 schuur 1.13
|
2109 schuur 1.1 try {
|
2110 marek 1.71 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
|
2111 thilo.boehm 1.69 "handleEnumerateInstanceNamesRequest: "
2112 "name space = %s class name = %s",
2113 (const char*)request->nameSpace.getString().getCString(),
2114 (const char*)request->className.getString().getCString()));
|
2115 mark.hamzy 1.23
|
2116 mark.hamzy 1.25 // make target object path
|
2117 mark.hamzy 1.27 CIMObjectPath *objectPath = new CIMObjectPath (System::getHostName(),
2118 request->nameSpace,
2119 request->className);
|
2120 schuur 1.1
2121 // resolve provider name
|
2122 kumpf 1.2 ProviderName name = _resolveProviderName(
2123 request->operationContext.get(ProviderIdContainer::NAME));
|
2124 schuur 1.1
2125 // get cached or load new provider module
|
2126 marek 1.68 JMPIProvider::OpProviderHolder ph = providerManager.getProvider(
2127 name.getPhysicalName(),
2128 name.getLogicalName());
|
2129 schuur 1.1
2130 // convert arguments
2131 OperationContext context;
2132
|
2133 marek 1.68 context.insert(
2134 request->operationContext.get(IdentityContainer::NAME));
2135 context.insert(
2136 request->operationContext.get(AcceptLanguageListContainer::NAME));
2137 context.insert(
2138 request->operationContext.get(ContentLanguageListContainer::NAME));
|
2139 schuur 1.1
|
2140 mark.hamzy 1.25 JMPIProvider &pr = ph.GetProvider();
|
2141 schuur 1.1
|
2142 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3,
2143 "handleEnumerateInstanceNamesRequest: "
2144 "Calling provider: %s",(const char*)pr.getName().getCString()));
|
2145 schuur 1.1
|
2146 mark.hamzy 1.25 JvmVector *jv = 0;
|
2147 schuur 1.12
|
2148 mark.hamzy 1.25 env = JMPIjvm::attachThread(&jv);
|
2149 schuur 1.1
|
2150 mark.hamzy 1.37 if (!env)
2151 {
|
2152 thilo.boehm 1.69 PEG_TRACE_CSTRING( TRC_PROVIDERMANAGER, Tracer::LEVEL2,
2153 "handleEnumerateInstanceNamesRequest: "
2154 "Could not initialize the JVM (Java Virtual Machine) "
2155 "runtime environment.");
2156
|
2157 mark.hamzy 1.37 PEG_METHOD_EXIT();
2158
|
2159 marek 1.68 throw PEGASUS_CIM_EXCEPTION_L(
2160 CIM_ERR_FAILED,
2161 MessageLoaderParms(
|
2162 thilo.boehm 1.69 "ProviderManager.JMPI.JMPIProviderManager.INIT_JVM_FAILED",
|
2163 marek 1.68 "Could not initialize the JVM (Java Virtual Machine) "
2164 "runtime environment."));
|
2165 mark.hamzy 1.37 }
2166
|
2167 mark.hamzy 1.25 JMPIProvider::pm_service_op_lock op_lock(&pr);
|
2168 schuur 1.12
|
2169 mark.hamzy 1.43 jmethodID id = NULL;
2170 String interfaceType;
2171 String interfaceVersion;
2172
|
2173 marek 1.68 getInterfaceType(
2174 request->operationContext.get(ProviderIdContainer::NAME),
2175 interfaceType,
2176 interfaceVersion);
|
2177 mark.hamzy 1.43
2178 if (interfaceType == "JMPI")
2179 {
|
2180 marek 1.68 id = env->GetMethodID(
2181 (jclass)pr.jProviderClass,
2182 "enumInstances",
2183 "(Lorg/pegasus/jmpi/CIMObjectPath;"
2184 "ZLorg/pegasus/jmpi/CIMClass;)Ljava/util/Vector;");
|
2185 mark.hamzy 1.43
2186 if (id != NULL)
2187 {
2188 eMethodFound = METHOD_INSTANCEPROVIDER;
|
2189 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2190 "handleEnumerateInstanceNamesRequest: "
2191 "Found METHOD_INSTANCEPROVIDER.");
|
2192 mark.hamzy 1.43 }
|
2193 mark.hamzy 1.23
|
2194 mark.hamzy 1.43 if (id == NULL)
2195 {
2196 env->ExceptionClear();
|
2197 schuur 1.1
|
2198 marek 1.68 id = env->GetMethodID(
2199 (jclass)pr.jProviderClass,
2200 "enumerateInstanceNames",
2201 "(Lorg/pegasus/jmpi/CIMObjectPath;"
2202 "Lorg/pegasus/jmpi/CIMClass;)["
2203 "Lorg/pegasus/jmpi/CIMObjectPath;");
|
2204 mark.hamzy 1.43
2205 if (id != NULL)
2206 {
2207 eMethodFound = METHOD_CIMINSTANCEPROVIDER;
|
2208 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2209 "handleEnumerateInstanceNamesRequest: "
2210 "Found METHOD_CIMINSTANCEPROVIDER.");
|
2211 mark.hamzy 1.43 }
2212 }
2213 }
2214 else if (interfaceType == "JMPIExperimental")
|
2215 mark.hamzy 1.25 {
|
2216 marek 1.68 id = env->GetMethodID(
2217 (jclass)pr.jProviderClass,
2218 "enumerateInstanceNames",
2219 "(Lorg/pegasus/jmpi/OperationContext;"
2220 "Lorg/pegasus/jmpi/CIMObjectPath;"
2221 "Lorg/pegasus/jmpi/CIMClass;)Ljava/util/Vector;");
|
2222 schuur 1.1
|
2223 mark.hamzy 1.43 if (id != NULL)
2224 {
2225 eMethodFound = METHOD_INSTANCEPROVIDER2;
|
2226 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2227 "handleEnumerateInstanceNamesRequest: "
2228 "Found METHOD_INSTANCEPROVIDER2.");
|
2229 mark.hamzy 1.43 }
|
2230 schuur 1.1
|
2231 mark.hamzy 1.43 if (id == NULL)
2232 {
2233 env->ExceptionClear();
|
2234 schuur 1.13
|
2235 marek 1.68 id = env->GetMethodID(
2236 (jclass)pr.jProviderClass,
2237 "enumerateInstanceNames",
2238 "(Lorg/pegasus/jmpi/OperationContext;"
2239 "Lorg/pegasus/jmpi/CIMObjectPath;"
2240 "Lorg/pegasus/jmpi/CIMClass;)"
2241 "[Lorg/pegasus/jmpi/CIMObjectPath;");
|
2242 mark.hamzy 1.43
2243 if (id != NULL)
2244 {
2245 eMethodFound = METHOD_CIMINSTANCEPROVIDER2;
|
2246 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2247 "handleEnumerateInstanceNamesRequest: "
2248 "Found METHOD_CIMINSTANCEPROVIDER2.");
|
2249 mark.hamzy 1.43 }
2250 }
|
2251 mark.hamzy 1.23 }
|
2252 mark.hamzy 1.25
|
2253 mark.hamzy 1.36 if (id == NULL)
2254 {
|
2255 marek 1.71 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL1,
|
2256 thilo.boehm 1.69 "handleEnumerateInstanceNamesRequest: "
2257 "No method provider found!");
|
2258 mark.hamzy 1.36
|
2259 mark.hamzy 1.43 PEG_METHOD_EXIT();
|
2260 mark.hamzy 1.36
|
2261 marek 1.68 throw PEGASUS_CIM_EXCEPTION_L(
2262 CIM_ERR_FAILED,
2263 MessageLoaderParms(
|
2264 thilo.boehm 1.69 "ProviderManager.JMPI.JMPIProviderManager.METHOD_NOT_FOUND",
|
2265 marek 1.68 "Could not find a method for the provider based on "
2266 "InterfaceType."));
|
2267 mark.hamzy 1.36 }
2268
|
2269 schuur 1.1 JMPIjvm::checkException(env);
2270
|
2271 mark.hamzy 1.25 switch (eMethodFound)
2272 {
|
2273 mark.hamzy 1.43 case METHOD_CIMINSTANCEPROVIDER:
|
2274 mark.hamzy 1.25 {
|
2275 marek 1.68 jlong jcopRef = DEBUG_ConvertCToJava(
2276 CIMObjectPath*,
2277 jlong,
2278 objectPath);
2279 jobject jcop = env->NewObject(
2280 jv->CIMObjectPathClassRef,
2281 jv->CIMObjectPathNewJ,
2282 jcopRef);
|
2283 mark.hamzy 1.25
2284 JMPIjvm::checkException(env);
2285
|
2286 mark.hamzy 1.40 CIMClass cls;
2287
2288 try
2289 {
|
2290 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2291 "handleEnumerateInstanceNamesRequest: "
2292 "enter(METHOD_CIMINSTANCEPROVIDER): "
2293 "cimom_handle->getClass(%s).",
2294 (const char*)request->className.getString().getCString()
2295 ));
2296
|
2297 mark.hamzy 1.40 AutoMutex lock (pr._cimomMutex);
2298
2299 cls = pr._cimom_handle->getClass(context,
2300 request->nameSpace,
2301 request->className,
2302 false,
2303 true,
2304 true,
2305 CIMPropertyList());
|
2306 thilo.boehm 1.69
2307 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2308 "handleEnumerateInstanceNamesRequest: "
2309 "exit(METHOD_CIMINSTANCEPROVIDER): "
2310 "cimom_handle->getClass(%s).",
2311 (const char*)request->className.getString().getCString()
2312 ));
2313
|
2314 mark.hamzy 1.40 }
2315 catch (CIMException e)
2316 {
|
2317 marek 1.71 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1,
|
2318 thilo.boehm 1.69 "handleEnumerateInstanceNamesRequest: "
2319 "Caught CIMExcetion(METHOD_CIMINSTANCEPROVIDER) "
2320 "during cimom_handle->getClass(%s): %s ",
2321 (const char*)request->className.getString().getCString(),
2322 (const char*)e.getMessage().getCString()
2323 ));
2324
2325 PEG_METHOD_EXIT();
|
2326 mark.hamzy 1.40 throw;
2327 }
2328
|
2329 mark.hamzy 1.27 CIMClass *pcls = new CIMClass (cls);
|
2330 mark.hamzy 1.25
2331 JMPIjvm::checkException(env);
2332
|
2333 marek 1.68 jlong jcimClassRef = DEBUG_ConvertCToJava(
2334 CIMClass*,
2335 jlong,
2336 pcls);
2337 jobject jcimClass = env->NewObject(
2338 jv->CIMClassClassRef,
2339 jv->CIMClassNewJ,
2340 jcimClassRef);
|
2341 mark.hamzy 1.25
2342 JMPIjvm::checkException(env);
2343
|
2344 kumpf 1.55 StatProviderTimeMeasurement providerTime(response);
2345
|
2346 marek 1.68 jobjectArray jAr = (jobjectArray)env->CallObjectMethod(
2347 (jobject)pr.jProvider,
2348 id,
2349 jcop,
2350 jcimClass);
|
2351 mark.hamzy 1.25
|
2352 mark.hamzy 1.23 JMPIjvm::checkException(env);
2353
2354 handler.processing();
|
2355 mark.hamzy 1.25 if (jAr) {
2356 for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
|
2357 mark.hamzy 1.23 JMPIjvm::checkException(env);
2358
|
2359 mark.hamzy 1.29 jobject jcopRet = env->GetObjectArrayElement(jAr,i);
2360
|
2361 mark.hamzy 1.23 JMPIjvm::checkException(env);
2362
|
2363 marek 1.68 jlong jcopRetRef = env->CallLongMethod(
2364 jcopRet,
2365 JMPIjvm::jv.CIMObjectPathCInst);
2366 CIMObjectPath *copRet = DEBUG_ConvertJavaToC(
2367 jlong,
2368 CIMObjectPath*,
2369 jcopRetRef);
|
2370 schuur 1.13
|
2371 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
2372 schuur 1.13
|
2373 mark.hamzy 1.29 handler.deliver(*copRet);
|
2374 mark.hamzy 1.23 }
2375 }
2376 handler.complete();
|
2377 mark.hamzy 1.25 break;
|
2378 schuur 1.13 }
|
2379 mark.hamzy 1.25
|
2380 mark.hamzy 1.43 case METHOD_CIMINSTANCEPROVIDER2:
|
2381 mark.hamzy 1.36 {
|
2382 marek 1.68 jlong jocRef = DEBUG_ConvertCToJava(
2383 OperationContext*,
2384 jlong,
2385 &request->operationContext);
2386 jobject joc = env->NewObject(
2387 jv->OperationContextClassRef,
2388 jv->OperationContextNewJ,
2389 jocRef);
2390
2391 jlong jcopRef = DEBUG_ConvertCToJava(
2392 CIMObjectPath*,
2393 jlong,
2394 objectPath);
2395 jobject jcop = env->NewObject(
2396 jv->CIMObjectPathClassRef,
2397 jv->CIMObjectPathNewJ,
2398 jcopRef);
|
2399 mark.hamzy 1.36
2400 JMPIjvm::checkException(env);
2401
|
2402 mark.hamzy 1.40 CIMClass cls;
2403
2404 try
2405 {
|
2406 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2407 "handleEnumerateInstanceNamesRequest: "
2408 "enter(METHOD_CIMINSTANCEPROVIDER2): "
2409 "cimom_handle->getClass(%s).",
2410 (const char*)request->className.getString().getCString()
2411 ));
2412
|
2413 mark.hamzy 1.40 AutoMutex lock (pr._cimomMutex);
2414
2415 cls = pr._cimom_handle->getClass(context,
2416 request->nameSpace,
2417 request->className,
2418 false,
2419 true,
2420 true,
2421 CIMPropertyList());
|
2422 thilo.boehm 1.69
2423 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2424 "handleEnumerateInstanceNamesRequest: "
2425 "exit(METHOD_CIMINSTANCEPROVIDER2): "
2426 "cimom_handle->getClass(%s).",
2427 (const char*)request->className.getString().getCString()
2428 ));
2429
|
2430 mark.hamzy 1.40 }
2431 catch (CIMException e)
2432 {
|
2433 marek 1.71 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1,
|
2434 thilo.boehm 1.69 "handleEnumerateInstanceNamesRequest: "
2435 "Caught CIMExcetion(METHOD_CIMINSTANCEPROVIDER2) "
2436 "during cimom_handle->getClass(%s): %s ",
2437 (const char*)request->className.getString().getCString(),
2438 (const char*)e.getMessage().getCString()
2439 ));
2440
2441 PEG_METHOD_EXIT();
|
2442 mark.hamzy 1.40 throw;
2443 }
2444
|
2445 mark.hamzy 1.36 CIMClass *pcls = new CIMClass (cls);
2446
2447 JMPIjvm::checkException(env);
2448
|
2449 marek 1.68 jlong jcimClassRef = DEBUG_ConvertCToJava(CIMClass*, jlong, pcls);
2450 jobject jcimClass = env->NewObject(
2451 jv->CIMClassClassRef,
2452 jv->CIMClassNewJ,
2453 jcimClassRef);
|
2454 mark.hamzy 1.36
2455 JMPIjvm::checkException(env);
2456
|
2457 kumpf 1.55 StatProviderTimeMeasurement providerTime(response);
2458
|
2459 marek 1.68 jobjectArray jAr = (jobjectArray)env->CallObjectMethod(
2460 (jobject)pr.jProvider,
2461 id,
2462 joc,
2463 jcop,
2464 jcimClass);
|
2465 mark.hamzy 1.36
2466 JMPIjvm::checkException(env);
2467
|
2468 mark.hamzy 1.43 if (joc)
2469 {
|
2470 marek 1.68 env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate);
|
2471 mark.hamzy 1.43
2472 JMPIjvm::checkException(env);
2473 }
2474
|
2475 mark.hamzy 1.36 handler.processing();
|
2476 mark.hamzy 1.43 if (jAr) {
2477 for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
|
2478 mark.hamzy 1.36 JMPIjvm::checkException(env);
2479
|
2480 mark.hamzy 1.43 jobject jcopRet = env->GetObjectArrayElement(jAr,i);
|
2481 mark.hamzy 1.36
2482 JMPIjvm::checkException(env);
2483
|
2484 marek 1.68 jlong jcopRetRef = env->CallLongMethod(
2485 jcopRet,
2486 JMPIjvm::jv.CIMObjectPathCInst);
2487 CIMObjectPath *copRet = DEBUG_ConvertJavaToC(
2488 jlong,
2489 CIMObjectPath*,
2490 jcopRetRef);
|
2491 mark.hamzy 1.36
2492 JMPIjvm::checkException(env);
2493
2494 handler.deliver(*copRet);
2495 }
2496 }
2497 handler.complete();
2498 break;
2499 }
2500
|
2501 mark.hamzy 1.43 case METHOD_INSTANCEPROVIDER2:
|
2502 mark.hamzy 1.25 {
|
2503 marek 1.68 jlong jocRef = DEBUG_ConvertCToJava(
2504 OperationContext*,
2505 jlong,
2506 &request->operationContext);
2507 jobject joc = env->NewObject(
2508 jv->OperationContextClassRef,
2509 jv->OperationContextNewJ,
2510 jocRef);
2511
2512 jlong jcopRef = DEBUG_ConvertCToJava(
2513 CIMObjectPath*,
2514 jlong,
2515 objectPath);
2516 jobject jcop = env->NewObject(
2517 jv->CIMObjectPathClassRef,
2518 jv->CIMObjectPathNewJ,
2519 jcopRef);
|
2520 mark.hamzy 1.25
2521 JMPIjvm::checkException(env);
2522
|
2523 mark.hamzy 1.40 CIMClass cls;
2524
2525 try
2526 {
|
2527 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2528 "handleEnumerateInstanceNamesRequest: "
2529 "enter(METHOD_INSTANCEPROVIDER2): "
2530 "cimom_handle->getClass(%s).",
2531 (const char*)request->className.getString().getCString()
2532 ));
2533
|
2534 mark.hamzy 1.40 AutoMutex lock (pr._cimomMutex);
2535
2536 cls = pr._cimom_handle->getClass(context,
2537 request->nameSpace,
2538 request->className,
2539 false,
2540 true,
2541 true,
2542 CIMPropertyList());
|
2543 thilo.boehm 1.69
2544 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2545 "handleEnumerateInstanceNamesRequest: "
2546 "exit(METHOD_INSTANCEPROVIDER2): "
2547 "cimom_handle->getClass(%s).",
2548 (const char*)request->className.getString().getCString()
2549 ));
2550
|
2551 mark.hamzy 1.40 }
2552 catch (CIMException e)
2553 {
|
2554 marek 1.71 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1,
|
2555 thilo.boehm 1.69 "handleEnumerateInstanceNamesRequest: "
2556 "Caught CIMExcetion(METHOD_INSTANCEPROVIDER2) "
2557 "during cimom_handle->getClass(%s): %s ",
2558 (const char*)request->className.getString().getCString(),
2559 (const char*)e.getMessage().getCString()
2560 ));
2561
2562 PEG_METHOD_EXIT();
|
2563 mark.hamzy 1.40 throw;
2564 }
2565
|
2566 mark.hamzy 1.27 CIMClass *pcls = new CIMClass (cls);
|
2567 mark.hamzy 1.25
2568 JMPIjvm::checkException(env);
2569
|
2570 marek 1.68 jlong jcimClassRef = DEBUG_ConvertCToJava(
2571 CIMClass*,
2572 jlong,
2573 pcls);
2574 jobject jcimClass = env->NewObject(
2575 jv->CIMClassClassRef,
2576 jv->CIMClassNewJ,
2577 jcimClassRef);
|
2578 mark.hamzy 1.25
2579 JMPIjvm::checkException(env);
2580
|
2581 kumpf 1.55 StatProviderTimeMeasurement providerTime(response);
2582
|
2583 mark.hamzy 1.25 jobject jVec = env->CallObjectMethod((jobject)pr.jProvider,
2584 id,
|
2585 mark.hamzy 1.43 joc,
|
2586 mark.hamzy 1.29 jcop,
2587 jcimClass);
|
2588 mark.hamzy 1.25
|
2589 mark.hamzy 1.23 JMPIjvm::checkException(env);
2590
|
2591 mark.hamzy 1.43 if (joc)
2592 {
|
2593 marek 1.68 env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate);
|
2594 mark.hamzy 1.43
2595 JMPIjvm::checkException(env);
2596 }
2597
|
2598 mark.hamzy 1.23 handler.processing();
|
2599 mark.hamzy 1.25 if (jVec) {
|
2600 marek 1.68 for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize);
2601 i<m;
2602 i++)
2603 {
|
2604 mark.hamzy 1.23 JMPIjvm::checkException(env);
2605
|
2606 marek 1.68 jobject jcopRet = env->CallObjectMethod(
2607 jVec,
2608 JMPIjvm::jv.VectorElementAt,
2609 i);
|
2610 mark.hamzy 1.29
|
2611 mark.hamzy 1.23 JMPIjvm::checkException(env);
2612
|
2613 marek 1.68 jlong jcopRetRef = env->CallLongMethod(
2614 jcopRet,
2615 JMPIjvm::jv.CIMObjectPathCInst);
2616 CIMObjectPath *copRet = DEBUG_ConvertJavaToC(
2617 jlong,
2618 CIMObjectPath*,
2619 jcopRetRef);
|
2620 schuur 1.13
|
2621 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
2622 schuur 1.13
|
2623 mark.hamzy 1.29 handler.deliver(*copRet);
|
2624 mark.hamzy 1.23 }
2625 }
2626 handler.complete();
|
2627 mark.hamzy 1.25 break;
2628 }
2629
|
2630 mark.hamzy 1.43 case METHOD_INSTANCEPROVIDER:
|
2631 mark.hamzy 1.25 {
|
2632 marek 1.68 jlong jcopRef = DEBUG_ConvertCToJava(
2633 CIMObjectPath*,
2634 jlong,
2635 objectPath);
2636 jobject jcop = env->NewObject(
2637 jv->CIMObjectPathClassRef,
2638 jv->CIMObjectPathNewJ,
2639 jcopRef);
|
2640 mark.hamzy 1.23
|
2641 mark.hamzy 1.43 JMPIjvm::checkException(env);
|
2642 schuur 1.1
|
2643 mark.hamzy 1.43 CIMClass cls;
|
2644 schuur 1.1
|
2645 mark.hamzy 1.43 try
2646 {
|
2647 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2648 "handleEnumerateInstanceNamesRequest: "
2649 "exit(METHOD_INSTANCEPROVIDER): "
2650 "cimom_handle->getClass(%s).",
2651 (const char*)request->className.getString().getCString()
2652 ));
2653
|
2654 mark.hamzy 1.43 AutoMutex lock (pr._cimomMutex);
2655
2656 cls = pr._cimom_handle->getClass(context,
2657 request->nameSpace,
2658 request->className,
2659 false,
2660 true,
2661 true,
2662 CIMPropertyList());
|
2663 thilo.boehm 1.69
2664 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2665 "handleEnumerateInstanceNamesRequest: "
2666 "exit(METHOD_INSTANCEPROVIDER): "
2667 "cimom_handle->getClass(%s).",
2668 (const char*)request->className.getString().getCString()
2669 ));
|
2670 mark.hamzy 1.43 }
2671 catch (CIMException e)
2672 {
|
2673 marek 1.71 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1,
|
2674 thilo.boehm 1.69 "handleEnumerateInstanceNamesRequest: "
2675 "Caught CIMExcetion(METHOD_INSTANCEPROVIDER) "
2676 "during cimom_handle->getClass(%s): %s ",
2677 (const char*)request->className.getString().getCString(),
2678 (const char*)e.getMessage().getCString()
2679 ));
2680
2681 PEG_METHOD_EXIT();
|
2682 mark.hamzy 1.43 throw;
2683 }
2684
2685 CIMClass *pcls = new CIMClass (cls);
2686
2687 JMPIjvm::checkException(env);
2688
|
2689 marek 1.68 jlong jcimClassRef = DEBUG_ConvertCToJava(
2690 CIMClass*,
2691 jlong,
2692 pcls);
2693 jobject jcimClass = env->NewObject(
2694 jv->CIMClassClassRef,
2695 jv->CIMClassNewJ,
2696 jcimClassRef);
|
2697 mark.hamzy 1.43
2698 JMPIjvm::checkException(env);
2699
|
2700 kumpf 1.55 StatProviderTimeMeasurement providerTime(response);
2701
|
2702 mark.hamzy 1.43 jobject jVec = env->CallObjectMethod((jobject)pr.jProvider,
2703 id,
2704 jcop,
2705 true,
2706 jcimClass);
2707
2708 JMPIjvm::checkException(env);
2709
2710 handler.processing();
2711 if (jVec) {
|
2712 marek 1.68 for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize);
2713 i<m;
2714 i++)
2715 {
|
2716 mark.hamzy 1.43 JMPIjvm::checkException(env);
2717
|
2718 marek 1.68 jobject jcopRet = env->CallObjectMethod(
2719 jVec,
2720 JMPIjvm::jv.VectorElementAt,
2721 i);
|
2722 mark.hamzy 1.43
2723 JMPIjvm::checkException(env);
2724
|
2725 marek 1.68 jlong jcopRetRef = env->CallLongMethod(
2726 jcopRet,
2727 JMPIjvm::jv.CIMObjectPathCInst);
2728 CIMObjectPath *copRet = DEBUG_ConvertJavaToC(
2729 jlong,
2730 CIMObjectPath*,
2731 jcopRetRef);
|
2732 mark.hamzy 1.43
2733 JMPIjvm::checkException(env);
2734
2735 handler.deliver(*copRet);
2736 }
2737 }
2738 handler.complete();
2739 break;
2740 }
2741
2742 case METHOD_UNKNOWN:
2743 {
|
2744 marek 1.71 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL1,
|
2745 thilo.boehm 1.69 "handleEnumerateInstanceNamesRequest: "
2746 "Unknown method provider!");
|
2747 mark.hamzy 1.43 break;
2748 }
2749 }
2750 }
2751 HandlerCatch(handler);
2752
2753 if (env) JMPIjvm::detachThread();
2754
2755 PEG_METHOD_EXIT();
2756
|
2757 schuur 1.1 return(response);
2758 }
2759
|
2760 marek 1.68 Message * JMPIProviderManager::handleCreateInstanceRequest(
2761 const Message * message) throw()
|
2762 schuur 1.1 {
|
2763 marek 1.68 PEG_METHOD_ENTER(
2764 TRC_PROVIDERMANAGER,
2765 "JMPIProviderManager::handleCreateInstanceRequest");
|
2766 mark.hamzy 1.23
|
2767 kumpf 1.55 HandlerIntro(CreateInstance,message,request,response,handler);
|
2768 schuur 1.1
|
2769 mark.hamzy 1.25 typedef enum {
2770 METHOD_UNKNOWN = 0,
|
2771 mark.hamzy 1.43 METHOD_INSTANCEPROVIDER, // same as METHOD_CIMINSTANCEPROVIDER
2772 METHOD_INSTANCEPROVIDER2 // same as METHOD_CIMINSTANCEPROVIDER2
|
2773 mark.hamzy 1.25 } METHOD_VERSION;
2774 METHOD_VERSION eMethodFound = METHOD_UNKNOWN;
2775 JNIEnv *env = NULL;
2776
|
2777 schuur 1.1 try {
|
2778 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL3,
2779 "handleCreateInstanceRequest: "
2780 "name space = %s class name = %s",
2781 (const char*)request->nameSpace.getString().getCString(),
2782 (const char*)request->
2783 newInstance.getPath().getClassName().getString().getCString()
2784 ));
|
2785 mark.hamzy 1.23
|
2786 schuur 1.1 // make target object path
|
2787 marek 1.68 CIMObjectPath *objectPath =
2788 new CIMObjectPath(
2789 System::getHostName(),
2790 request->nameSpace,
2791 request->newInstance.getPath().getClassName(),
2792 request->newInstance.getPath().getKeyBindings());
|
2793 schuur 1.1
2794 // resolve provider name
|
2795 kumpf 1.2 ProviderName name = _resolveProviderName(
2796 request->operationContext.get(ProviderIdContainer::NAME));
|
2797 schuur 1.1
2798 // get cached or load new provider module
|
2799 marek 1.68 JMPIProvider::OpProviderHolder ph =
2800 providerManager.getProvider(
2801 name.getPhysicalName(),
2802 name.getLogicalName(),
2803 String::EMPTY);
|
2804 schuur 1.1
2805 // forward request
|
2806 mark.hamzy 1.25 JMPIProvider &pr = ph.GetProvider();
|
2807 schuur 1.1
|
2808 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3,
2809 "handleCreateInstanceRequest: "
2810 "Calling provider: %s", (const char*)pr.getName().getCString()));
|
2811 schuur 1.12
|
2812 mark.hamzy 1.25 JvmVector *jv = 0;
2813
2814 env = JMPIjvm::attachThread(&jv);
2815
|
2816 mark.hamzy 1.37 if (!env)
2817 {
|
2818 marek 1.71 PEG_TRACE_CSTRING( TRC_PROVIDERMANAGER, Tracer::LEVEL1,
|
2819 thilo.boehm 1.69 "handleCreateInstanceRequest: "
2820 "Could not initialize the JVM (Java Virtual Machine) "
2821 "runtime environment.");
2822
|
2823 mark.hamzy 1.37 PEG_METHOD_EXIT();
2824
|
2825 marek 1.68 throw PEGASUS_CIM_EXCEPTION_L(
2826 CIM_ERR_FAILED,
2827 MessageLoaderParms(
|
2828 thilo.boehm 1.69 "ProviderManager.JMPI.JMPIProviderManager.INIT_JVM_FAILED",
|
2829 marek 1.68 "Could not initialize the JVM (Java Virtual Machine) "
2830 "runtime environment."));
|
2831 mark.hamzy 1.37 }
2832
|
2833 mark.hamzy 1.25 JMPIProvider::pm_service_op_lock op_lock(&pr);
2834
|
2835 mark.hamzy 1.43 jmethodID id = NULL;
2836 String interfaceType;
2837 String interfaceVersion;
2838
|
2839 marek 1.68 getInterfaceType(
2840 request->operationContext.get(
2841 ProviderIdContainer::NAME),
2842 interfaceType,
2843 interfaceVersion);
|
2844 mark.hamzy 1.43
2845 if (interfaceType == "JMPI")
2846 {
|
2847 marek 1.68 id = env->GetMethodID(
2848 (jclass)pr.jProviderClass,
2849 "createInstance",
2850 "(Lorg/pegasus/jmpi/CIMObjectPath;"
2851 "Lorg/pegasus/jmpi/CIMInstance;)"
2852 "Lorg/pegasus/jmpi/CIMObjectPath;");
|
2853 mark.hamzy 1.43
2854 if (id != NULL)
2855 {
2856 eMethodFound = METHOD_INSTANCEPROVIDER;
|
2857 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2858 "handleCreateInstanceRequest: "
2859 "Found METHOD_INSTANCEPROVIDER.");
|
2860 mark.hamzy 1.43 }
2861 }
2862 else if (interfaceType == "JMPIExperimental")
2863 {
|
2864 marek 1.68 id = env->GetMethodID(
2865 (jclass)pr.jProviderClass,
2866 "createInstance",
2867 "(Lorg/pegasus/jmpi/OperationContext;"
2868 "Lorg/pegasus/jmpi/CIMObjectPath;"
2869 "Lorg/pegasus/jmpi/CIMInstance;)"
2870 "Lorg/pegasus/jmpi/CIMObjectPath;");
|
2871 mark.hamzy 1.25
|
2872 mark.hamzy 1.43 if (id != NULL)
2873 {
2874 eMethodFound = METHOD_INSTANCEPROVIDER2;
|
2875 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2876 "handleCreateInstanceRequest: "
2877 "Found METHOD_INSTANCEPROVIDER2.");
|
2878 mark.hamzy 1.43 }
2879 }
|
2880 schuur 1.1
|
2881 mark.hamzy 1.43 if (id == NULL)
|
2882 mark.hamzy 1.25 {
|
2883 marek 1.71 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL1,
|
2884 thilo.boehm 1.69 "handleCreateInstanceRequest: No method provider found!");
|
2885 mark.hamzy 1.43
2886 PEG_METHOD_EXIT();
2887
|
2888 marek 1.68 throw PEGASUS_CIM_EXCEPTION_L(
2889 CIM_ERR_FAILED,
2890 MessageLoaderParms(
|
2891 thilo.boehm 1.69 "ProviderManager.JMPI.JMPIProviderManager.METHOD_NOT_FOUND",
|
2892 marek 1.68 "Could not find a method for the provider based on "
2893 "InterfaceType."));
|
2894 mark.hamzy 1.25 }
|
2895 mark.hamzy 1.23
2896 JMPIjvm::checkException(env);
2897
|
2898 mark.hamzy 1.25 switch (eMethodFound)
2899 {
|
2900 mark.hamzy 1.43 case METHOD_INSTANCEPROVIDER:
2901 {
|
2902 marek 1.68 jlong jcopRef = DEBUG_ConvertCToJava(
2903 CIMObjectPath*,
2904 jlong,
2905 objectPath);
2906 jobject jcop = env->NewObject(
2907 jv->CIMObjectPathClassRef,
2908 jv->CIMObjectPathNewJ,
2909 jcopRef);
|
2910 mark.hamzy 1.43
2911 JMPIjvm::checkException(env);
2912
2913 CIMInstance *ci = new CIMInstance (request->newInstance);
|
2914 marek 1.68 jlong jciRef = DEBUG_ConvertCToJava (CIMInstance*, jlong, ci);
2915 jobject jci = env->NewObject(
2916 jv->CIMInstanceClassRef,
2917 jv->CIMInstanceNewJ,
2918 jciRef);
|
2919 mark.hamzy 1.43
2920 JMPIjvm::checkException(env);
2921
|
2922 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2923 "handleCreateInstanceRequest: "
|
2924 thilo.boehm 1.70 "id = %p, jcop = %p, jci = %p",
2925 id,jcop,jci));
|
2926 mark.hamzy 1.43
|
2927 kumpf 1.55 StatProviderTimeMeasurement providerTime(response);
2928
|
2929 mark.hamzy 1.43 jobject jcopRet = env->CallObjectMethod((jobject)pr.jProvider,
2930 id,
2931 jcop,
2932 jci);
2933
2934 JMPIjvm::checkException(env);
2935
2936 handler.processing();
2937
2938 if (jcopRet) {
|
2939 marek 1.68 jlong jCopRetRef = env->CallLongMethod(
2940 jcopRet,
2941 JMPIjvm::jv.CIMObjectPathCInst);
2942 CIMObjectPath *copRet = DEBUG_ConvertJavaToC(
2943 jlong,
2944 CIMObjectPath*,
2945 jCopRetRef);
|
2946 mark.hamzy 1.43
2947 handler.deliver(*copRet);
2948 }
2949 handler.complete();
2950 break;
2951 }
2952
2953 case METHOD_INSTANCEPROVIDER2:
|
2954 mark.hamzy 1.25 {
|
2955 marek 1.68 jlong jocRef = DEBUG_ConvertCToJava(
2956 OperationContext*,
2957 jlong,
2958 &request->operationContext);
2959 jobject joc = env->NewObject(
2960 jv->OperationContextClassRef,
2961 jv->OperationContextNewJ,
2962 jocRef);
2963
2964 jlong jcopRef = DEBUG_ConvertCToJava(
2965 CIMObjectPath*,
2966 jlong,
2967 objectPath);
2968 jobject jcop = env->NewObject(
2969 jv->CIMObjectPathClassRef,
2970 jv->CIMObjectPathNewJ,
2971 jcopRef);
|
2972 mark.hamzy 1.25
2973 JMPIjvm::checkException(env);
2974
|
2975 marek 1.68 CIMInstance *ci = new CIMInstance (request->newInstance);
2976 jlong jciRef = DEBUG_ConvertCToJava (CIMInstance*, jlong, ci);
2977 jobject jci = env->NewObject(
2978 jv->CIMInstanceClassRef,
2979 jv->CIMInstanceNewJ,
2980 jciRef);
|
2981 mark.hamzy 1.25
2982 JMPIjvm::checkException(env);
|
2983 schuur 1.1
|
2984 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2985 "handleCreateInstanceRequest: "
|
2986 thilo.boehm 1.70 "id = %p, jcop = %p, jci = %p",
2987 id,jcop,jci));
|
2988 schuur 1.1
|
2989 kumpf 1.55 StatProviderTimeMeasurement providerTime(response);
2990
|
2991 mark.hamzy 1.29 jobject jcopRet = env->CallObjectMethod((jobject)pr.jProvider,
2992 id,
|
2993 mark.hamzy 1.43 joc,
|
2994 mark.hamzy 1.29 jcop,
2995 jci);
|
2996 schuur 1.1
|
2997 mark.hamzy 1.25 JMPIjvm::checkException(env);
|
2998 schuur 1.1
|
2999 mark.hamzy 1.43 if (joc)
3000 {
|
3001 marek 1.68 env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate);
|
3002 mark.hamzy 1.43
3003 JMPIjvm::checkException(env);
3004 }
3005
|
3006 mark.hamzy 1.25 handler.processing();
|
3007 mark.hamzy 1.23
|
3008 mark.hamzy 1.29 if (jcopRet) {
|
3009 marek 1.68 jlong jCopRetRef = env->CallLongMethod(
3010 jcopRet,
3011 JMPIjvm::jv.CIMObjectPathCInst);
3012 CIMObjectPath *copRet = DEBUG_ConvertJavaToC(
3013 jlong,
3014 CIMObjectPath*,
3015 jCopRetRef);
|
3016 mark.hamzy 1.23
|
3017 mark.hamzy 1.29 handler.deliver(*copRet);
|
3018 mark.hamzy 1.25 }
3019 handler.complete();
3020 break;
3021 }
|
3022 mark.hamzy 1.23
|
3023 mark.hamzy 1.25 case METHOD_UNKNOWN:
3024 {
|
3025 marek 1.71 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL1,
|
3026 thilo.boehm 1.69 "handleCreateInstanceRequest: Unknown method provider!");
|
3027 mark.hamzy 1.25 break;
3028 }
|
3029 schuur 1.1 }
3030 }
3031 HandlerCatch(handler);
|
3032 mark.hamzy 1.23
|
3033 schuur 1.1 if (env) JMPIjvm::detachThread();
|
3034 mark.hamzy 1.23
|
3035 schuur 1.1 PEG_METHOD_EXIT();
3036
3037 return(response);
3038 }
3039
|
3040 marek 1.68 Message * JMPIProviderManager::handleModifyInstanceRequest(
3041 const Message * message) throw()
|
3042 schuur 1.1 {
|
3043 marek 1.68 PEG_METHOD_ENTER(
3044 TRC_PROVIDERMANAGER,
3045 "JMPIProviderManager::handleModifyInstanceRequest");
|
3046 schuur 1.1
|
3047 kumpf 1.55 HandlerIntro(ModifyInstance,message,request,response,handler);
|
3048 mark.hamzy 1.23
|
3049 mark.hamzy 1.25 typedef enum {
3050 METHOD_UNKNOWN = 0,
|
3051 mark.hamzy 1.43 METHOD_CIMINSTANCEPROVIDER,
3052 METHOD_INSTANCEPROVIDER,
3053 METHOD_INSTANCEPROVIDER2, // same as METHOD_CIMINSTANCEPROVIDER2
|
3054 mark.hamzy 1.25 } METHOD_VERSION;
3055 METHOD_VERSION eMethodFound = METHOD_UNKNOWN;
3056 JNIEnv *env = NULL;
|
3057 schuur 1.13
|
3058 schuur 1.1 try {
|
3059 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL3,
3060 "handleModifyInstanceRequest: "
3061 "name space = %s class name = %s",
3062 (const char*)request->nameSpace.getString().getCString(),
3063 (const char*)request->modifiedInstance.getPath().getClassName()
3064 .getString().getCString()
3065 ));
|
3066 mark.hamzy 1.23
|
3067 schuur 1.1 // make target object path
|
3068 marek 1.68 CIMObjectPath *objectPath =
3069 new CIMObjectPath(
3070 System::getHostName(),
3071 request->nameSpace,
3072 request->modifiedInstance.getPath().getClassName(),
3073 request->modifiedInstance.getPath ().getKeyBindings());
|
3074 schuur 1.1
3075 // resolve provider name
|
3076 kumpf 1.2 ProviderName name = _resolveProviderName(
3077 request->operationContext.get(ProviderIdContainer::NAME));
|
3078 schuur 1.1
|
3079 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
3080 "handleModifyInstanceRequest: "
3081 "provider name physical = %s, logical = %s",
3082 (const char*)name.getPhysicalName().getCString(),
3083 (const char*)name.getLogicalName().getCString()
3084 ));
|
3085 mark.hamzy 1.23
|
3086 schuur 1.1 // get cached or load new provider module
|
3087 marek 1.68 JMPIProvider::OpProviderHolder ph =
3088 providerManager.getProvider(
3089 name.getPhysicalName(),
3090 name.getLogicalName(),
3091 String::EMPTY);
|
3092 schuur 1.1
3093 // forward request
|
3094 mark.hamzy 1.25 JMPIProvider &pr = ph.GetProvider();
|
3095 mark.hamzy 1.23
|
3096 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3,
3097 "handleModifyInstanceRequest: "
3098 "Calling provider: %s", (const char*)pr.getName().getCString()));
|
3099 mark.hamzy 1.25
3100 JvmVector *jv = 0;
3101
3102 env = JMPIjvm::attachThread(&jv);
3103
|
3104 mark.hamzy 1.37 if (!env)
3105 {
|
3106 marek 1.71 PEG_TRACE_CSTRING( TRC_PROVIDERMANAGER, Tracer::LEVEL1,
|
3107 thilo.boehm 1.69 "handleModifyInstanceRequest: "
3108 "Could not initialize the JVM (Java Virtual Machine) "
3109 "runtime environment.");
3110
|
3111 mark.hamzy 1.37 PEG_METHOD_EXIT();
3112
|
3113 marek 1.68 throw PEGASUS_CIM_EXCEPTION_L(
3114 CIM_ERR_FAILED,
3115 MessageLoaderParms(
|
3116 thilo.boehm 1.69 "ProviderManager.JMPI.JMPIProviderManager.INIT_JVM_FAILED",
|
3117 marek 1.68 "Could not initialize the JVM (Java Virtual Machine) "
3118 "runtime environment."));
|
3119 mark.hamzy 1.37 }
3120
|
3121 mark.hamzy 1.25 JMPIProvider::pm_service_op_lock op_lock(&pr);
|
3122 mark.hamzy 1.23
|
3123 mark.hamzy 1.43 jmethodID id = NULL;
3124 String interfaceType;
3125 String interfaceVersion;
3126
|
3127 marek 1.68 getInterfaceType(
3128 request->operationContext.get(
3129 ProviderIdContainer::NAME),
3130 interfaceType,
3131 interfaceVersion);
|
3132 mark.hamzy 1.43
3133 if (interfaceType == "JMPI")
3134 {
|
3135 marek 1.68 id = env->GetMethodID(
3136 (jclass)pr.jProviderClass,
3137 "setInstance",
3138 "(Lorg/pegasus/jmpi/CIMObjectPath;"
3139 "Lorg/pegasus/jmpi/CIMInstance;)V");
|
3140 mark.hamzy 1.43
3141 if (id != NULL)
3142 {
3143 eMethodFound = METHOD_INSTANCEPROVIDER;
|
3144 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
3145 "handleModifyInstanceRequest: "
3146 "Found METHOD_INSTANCEPROVIDER.");
|
3147 mark.hamzy 1.43 }
|
3148 mark.hamzy 1.25
|
3149 mark.hamzy 1.43 if (id == NULL)
3150 {
3151 env->ExceptionClear();
|
3152 mark.hamzy 1.25
|
3153 marek 1.68 id = env->GetMethodID(
3154 (jclass)pr.jProviderClass,
3155 "setInstance",
3156 "(Lorg/pegasus/jmpi/CIMObjectPath;"
3157 "Z[Ljava/lang/String)V");
|
3158 mark.hamzy 1.43
3159 if (id != NULL)
3160 {
3161 eMethodFound = METHOD_CIMINSTANCEPROVIDER;
|
3162 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
3163 "handleModifyInstanceRequest: "
3164 "Found METHOD_CIMINSTANCEPROVIDER.");
|
3165 mark.hamzy 1.43 }
3166 }
3167 }
3168 else if (interfaceType == "JMPIExperimental")
|
3169 mark.hamzy 1.25 {
|
3170 marek 1.68 id = env->GetMethodID(
3171 (jclass)pr.jProviderClass,
3172 "setInstance",
3173 "(Lorg/pegasus/jmpi/OperationContext;"
3174 "Lorg/pegasus/jmpi/CIMObjectPath;"
3175 "Lorg/pegasus/jmpi/CIMInstance;)V");
|
3176 mark.hamzy 1.43
3177 if (id != NULL)
3178 {
3179 eMethodFound = METHOD_INSTANCEPROVIDER2;
|
3180 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
3181 "handleModifyInstanceRequest: "
3182 "Found METHOD_INSTANCEPROVIDER2.");
|
3183 mark.hamzy 1.43 }
|
3184 mark.hamzy 1.25 }
3185
3186 if (id == NULL)
3187 {
|
3188 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
3189 "handleModifyInstanceRequest: No method provider found!");
|
3190 mark.hamzy 1.25
|
3191 mark.hamzy 1.43 PEG_METHOD_EXIT();
|
3192 schuur 1.1
|
3193 marek 1.68 throw PEGASUS_CIM_EXCEPTION_L(
3194 CIM_ERR_FAILED,
3195 MessageLoaderParms(
|
3196 thilo.boehm 1.69 "ProviderManager.JMPI.JMPIProviderManager.METHOD_NOT_FOUND",
|
3197 marek 1.68 "Could not find a method for the provider based on "
3198 "InterfaceType."));
|
3199 mark.hamzy 1.25 }
|
3200 schuur 1.1
|
3201 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
3202 schuur 1.1
|
3203 mark.hamzy 1.25 switch (eMethodFound)
3204 {
|
3205 mark.hamzy 1.43 case METHOD_INSTANCEPROVIDER2:
3206 {
|
3207 marek 1.68 jlong jocRef = DEBUG_ConvertCToJava(
3208 OperationContext*,
3209 jlong,
3210 &request->operationContext);
3211
3212 jobject joc = env->NewObject(
3213 jv->OperationContextClassRef,
3214 jv->OperationContextNewJ,
3215 jocRef);
3216
3217 jlong jcopRef = DEBUG_ConvertCToJava(
3218 CIMObjectPath*,
3219 jlong,
3220 objectPath);
3221 jobject jcop = env->NewObject(
3222 jv->CIMObjectPathClassRef,
3223 jv->CIMObjectPathNewJ,
3224 jcopRef);
|
3225 mark.hamzy 1.43
3226 JMPIjvm::checkException(env);
3227
|
3228 marek 1.68 CIMInstance *ci = new CIMInstance (request->modifiedInstance);
3229 jlong jciRef = DEBUG_ConvertCToJava (CIMInstance*, jlong, ci);
3230 jobject jci = env->NewObject(
3231 jv->CIMInstanceClassRef,
3232 jv->CIMInstanceNewJ,
3233 jciRef);
|
3234 mark.hamzy 1.43
3235 JMPIjvm::checkException(env);
3236
3237 jobjectArray jPropertyList = getList(jv,env,request->propertyList);
3238
|
3239 kumpf 1.55 StatProviderTimeMeasurement providerTime(response);
3240
|
3241 mark.hamzy 1.43 env->CallVoidMethod((jobject)pr.jProvider,
3242 id,
3243 joc,
3244 jcop,
3245 jci);
3246
3247 JMPIjvm::checkException(env);
3248
3249 if (joc)
3250 {
|
3251 marek 1.68 env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate);
|
3252 mark.hamzy 1.43
3253 JMPIjvm::checkException(env);
3254 }
3255 break;
3256 }
3257
3258 case METHOD_CIMINSTANCEPROVIDER:
|
3259 mark.hamzy 1.25 {
|
3260 marek 1.68 jlong jcopRef = DEBUG_ConvertCToJava(
3261 CIMObjectPath*,
3262 jlong,
3263 objectPath);
3264 jobject jcop = env->NewObject(
3265 jv->CIMObjectPathClassRef,
3266 jv->CIMObjectPathNewJ,
3267 jcopRef);
|
3268 mark.hamzy 1.25
3269 JMPIjvm::checkException(env);
3270
|
3271 mark.hamzy 1.29 CIMInstance *ci = new CIMInstance (request->modifiedInstance);
|
3272 marek 1.68 jlong jciRef = DEBUG_ConvertCToJava (CIMInstance*, jlong, ci);
3273 jobject jci = env->NewObject(
3274 jv->CIMInstanceClassRef,
3275 jv->CIMInstanceNewJ,
3276 jciRef);
|
3277 mark.hamzy 1.25
3278 JMPIjvm::checkException(env);
|
3279 schuur 1.1
|
3280 mark.hamzy 1.25 jobjectArray jPropertyList = getList(jv,env,request->propertyList);
|
3281 schuur 1.1
|
3282 kumpf 1.55 StatProviderTimeMeasurement providerTime(response);
3283
|
3284 mark.hamzy 1.25 env->CallVoidMethod((jobject)pr.jProvider,
3285 id,
|
3286 mark.hamzy 1.29 jcop,
3287 jci,
|
3288 mark.hamzy 1.36 JMPI_INCLUDE_QUALIFIERS,
|
3289 mark.hamzy 1.25 jPropertyList);
|
3290 schuur 1.1
|
3291 mark.hamzy 1.25 JMPIjvm::checkException(env);
3292 break;
|
3293 schuur 1.13 }
|
3294 schuur 1.1
|
3295 mark.hamzy 1.43 case METHOD_INSTANCEPROVIDER:
|
3296 mark.hamzy 1.25 {
|
3297 marek 1.68 jlong jcopRef = DEBUG_ConvertCToJava(
3298 CIMObjectPath*,
3299 jlong,
3300 objectPath);
3301 jobject jcop = env->NewObject(
3302 jv->CIMObjectPathClassRef,
3303 jv->CIMObjectPathNewJ,
3304 jcopRef);
|
3305 mark.hamzy 1.25
3306 JMPIjvm::checkException(env);
3307
|
3308 marek 1.68 CIMInstance *ci = new CIMInstance (request->modifiedInstance);
3309 jlong jciRef = DEBUG_ConvertCToJava (CIMInstance*, jlong, ci);
3310 jobject jci = env->NewObject(
3311 jv->CIMInstanceClassRef,
3312 jv->CIMInstanceNewJ,
3313 jciRef);
|
3314 mark.hamzy 1.25
3315 JMPIjvm::checkException(env);
3316
|
3317 kumpf 1.55 StatProviderTimeMeasurement providerTime(response);
3318
|
3319 mark.hamzy 1.25 env->CallVoidMethod((jobject)pr.jProvider,
3320 id,
|
3321 mark.hamzy 1.29 jcop,
3322 jci);
|
3323 mark.hamzy 1.25
3324 JMPIjvm::checkException(env);
3325 break;
3326 }
|
3327 mark.hamzy 1.23
|
3328 mark.hamzy 1.25 case METHOD_UNKNOWN:
3329 {
|
3330 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
3331 "handleModifyInstanceRequest: Unknown method provider!");
|
3332 mark.hamzy 1.25 break;
3333 }
3334 }
|
3335 schuur 1.1 }
3336 HandlerCatch(handler);
|
3337 mark.hamzy 1.23
|
3338 schuur 1.1 if (env) JMPIjvm::detachThread();
|
3339 mark.hamzy 1.23
|
3340 schuur 1.1 PEG_METHOD_EXIT();
3341
3342 return(response);
3343 }
3344
|
3345 marek 1.68 Message * JMPIProviderManager::handleDeleteInstanceRequest(
3346 const Message * message) throw()
|
3347 schuur 1.1 {
|
3348 marek 1.68 PEG_METHOD_ENTER(
3349 TRC_PROVIDERMANAGER,
3350 "JMPIProviderManager::handleDeleteInstanceRequest");
|
3351 mark.hamzy 1.23
|
3352 kumpf 1.55 HandlerIntro(DeleteInstance,message,request,response,handler);
|
3353 schuur 1.1
|
3354 mark.hamzy 1.25 typedef enum {
3355 METHOD_UNKNOWN = 0,
|
3356 mark.hamzy 1.43 METHOD_INSTANCEPROVIDER, // same as METHOD_CIMINSTANCEPROVIDER
3357 METHOD_INSTANCEPROVIDER2, // same as METHOD_CIMINSTANCEPROVIDER2
|
3358 mark.hamzy 1.25 } METHOD_VERSION;
3359 METHOD_VERSION eMethodFound = METHOD_UNKNOWN;
3360 JNIEnv *env = NULL;
3361
|
3362 schuur 1.1 try {
|
3363 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL3,
3364 "handleDeleteInstanceRequest: "
3365 "name space = %s class name = %s",
3366 (const char*)request->nameSpace.getString().getCString(),
3367 (const char*)request->
3368 instanceName.getClassName().getString().getCString()
3369 ));
|
3370 mark.hamzy 1.23
|
3371 schuur 1.1 // make target object path
|
3372 marek 1.68 CIMObjectPath *objectPath = new CIMObjectPath(
3373 System::getHostName(),
3374 request->nameSpace,
3375 request->instanceName.getClassName(),
3376 request->instanceName.getKeyBindings());
|
3377 schuur 1.1
3378 // resolve provider name
|
3379 kumpf 1.2 ProviderName name = _resolveProviderName(
3380 request->operationContext.get(ProviderIdContainer::NAME));
|
3381 schuur 1.1
3382 // get cached or load new provider module
|
3383 marek 1.68 JMPIProvider::OpProviderHolder ph =
3384 providerManager.getProvider(
3385 name.getPhysicalName(),
3386 name.getLogicalName(),
3387 String::EMPTY);
|
3388 schuur 1.1
3389 // forward request
|
3390 mark.hamzy 1.25 JMPIProvider &pr = ph.GetProvider();
|
3391 schuur 1.1
|
3392 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3,
3393 "handleDeleteInstanceRequest: "
3394 "Calling provider: %s", (const char*)pr.getName().getCString()));
|
3395 schuur 1.1
|
3396 mark.hamzy 1.25 JvmVector *jv = 0;
3397
3398 env = JMPIjvm::attachThread(&jv);
3399
|
3400 mark.hamzy 1.37 if (!env)
3401 {
|
3402 thilo.boehm 1.69 PEG_TRACE_CSTRING( TRC_PROVIDERMANAGER, Tracer::LEVEL2,
3403 "handleDeleteInstanceRequest: "
3404 "Could not initialize the JVM (Java Virtual Machine) "
3405 "runtime environment.");
3406
|
3407 mark.hamzy 1.37 PEG_METHOD_EXIT();
3408
|
3409 marek 1.68 throw PEGASUS_CIM_EXCEPTION_L(
3410 CIM_ERR_FAILED,
3411 MessageLoaderParms(
|
3412 thilo.boehm 1.69 "ProviderManager.JMPI.JMPIProviderManager.INIT_JVM_FAILED",
|
3413 marek 1.68 "Could not initialize the JVM (Java Virtual Machine) "
3414 "runtime environment."));
|
3415 mark.hamzy 1.37 }
3416
|
3417 mark.hamzy 1.25 JMPIProvider::pm_service_op_lock op_lock(&pr);
3418
|
3419 mark.hamzy 1.43 jmethodID id = NULL;
3420 String interfaceType;
3421 String interfaceVersion;
3422
|
3423 marek 1.68 getInterfaceType(
3424 request->operationContext.get(ProviderIdContainer::NAME),
3425 interfaceType,
3426 interfaceVersion);
|
3427 mark.hamzy 1.43
3428 if (interfaceType == "JMPI")
3429 {
3430 id = env->GetMethodID((jclass)pr.jProviderClass,
3431 "deleteInstance",
3432 "(Lorg/pegasus/jmpi/CIMObjectPath;)V");
3433
3434 if (id != NULL)
3435 {
3436 eMethodFound = METHOD_INSTANCEPROVIDER;
|
3437 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
3438 "handleDeleteInstanceRequest: "
3439 "Found METHOD_INSTANCEPROVIDER.");
|
3440 mark.hamzy 1.43 }
3441 }
3442 else if (interfaceType == "JMPIExperimental")
3443 {
|
3444 marek 1.68 id = env->GetMethodID(
3445 (jclass)pr.jProviderClass,
3446 "deleteInstance",
3447 "(Lorg/pegasus/jmpi/OperationContext;"
3448 "Lorg/pegasus/jmpi/CIMObjectPath;)V");
|
3449 mark.hamzy 1.25
|
3450 mark.hamzy 1.43 if (id != NULL)
3451 {
3452 eMethodFound = METHOD_INSTANCEPROVIDER2;
|
3453 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
3454 "handleDeleteInstanceRequest: "
3455 "Found METHOD_INSTANCEPROVIDER2.");
|
3456 mark.hamzy 1.43 }
3457 }
|
3458 schuur 1.1
|
3459 mark.hamzy 1.43 if (id == NULL)
|
3460 mark.hamzy 1.25 {
|
3461 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
3462 "handleDeleteInstanceRequest: No method provider found!");
|
3463 mark.hamzy 1.43
3464 PEG_METHOD_EXIT();
3465
|
3466 marek 1.68 throw PEGASUS_CIM_EXCEPTION_L(
3467 CIM_ERR_FAILED,
3468 MessageLoaderParms(
|
3469 thilo.boehm 1.69 "ProviderManager.JMPI.JMPIProviderManager.METHOD_NOT_FOUND",
|
3470 marek 1.68 "Could not find a method for the provider based on "
3471 "InterfaceType."));
|
3472 mark.hamzy 1.25 }
|
3473 mark.hamzy 1.23
3474 JMPIjvm::checkException(env);
|
3475 schuur 1.1
|
3476 mark.hamzy 1.25 switch (eMethodFound)
3477 {
|
3478 mark.hamzy 1.43 case METHOD_INSTANCEPROVIDER2:
3479 {
|
3480 marek 1.68 jlong jocRef = DEBUG_ConvertCToJava(
3481 OperationContext*,
3482 jlong,
3483 &request->operationContext);
3484 jobject joc = env->NewObject(
3485 jv->OperationContextClassRef,
3486 jv->OperationContextNewJ,
3487 jocRef);
3488
3489 jlong jcopRef = DEBUG_ConvertCToJava(
3490 CIMObjectPath*,
3491 jlong,
3492 objectPath);
3493 jobject jcop = env->NewObject(
3494 jv->CIMObjectPathClassRef,
3495 jv->CIMObjectPathNewJ,
3496 jcopRef);
|
3497 mark.hamzy 1.43
3498 JMPIjvm::checkException(env);
3499
|
3500 kumpf 1.55 StatProviderTimeMeasurement providerTime(response);
3501
|
3502 mark.hamzy 1.43 env->CallVoidMethod((jobject)pr.jProvider,
3503 id,
3504 joc,
3505 jcop);
3506
3507 JMPIjvm::checkException(env);
3508
3509 if (joc)
3510 {
|
3511 marek 1.68 env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate);
|
3512 mark.hamzy 1.43
3513 JMPIjvm::checkException(env);
3514 }
3515 break;
3516 }
3517
3518 case METHOD_INSTANCEPROVIDER:
|
3519 mark.hamzy 1.25 {
|
3520 marek 1.68 jlong jcopRef = DEBUG_ConvertCToJava(
3521 CIMObjectPath*,
3522 jlong,
3523 objectPath);
3524 jobject jcop = env->NewObject(
3525 jv->CIMObjectPathClassRef,
3526 jv->CIMObjectPathNewJ,
3527 jcopRef);
|
3528 mark.hamzy 1.25
3529 JMPIjvm::checkException(env);
3530
|
3531 kumpf 1.55 StatProviderTimeMeasurement providerTime(response);
3532
|
3533 mark.hamzy 1.36 env->CallVoidMethod((jobject)pr.jProvider,
3534 id,
3535 jcop);
|
3536 mark.hamzy 1.25
3537 JMPIjvm::checkException(env);
3538 break;
3539 }
3540
3541 case METHOD_UNKNOWN:
3542 {
|
3543 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
3544 "handleDeleteInstanceRequest: Unknown method provider!");
|
3545 mark.hamzy 1.25 break;
3546 }
3547 }
3548 }
3549 HandlerCatch(handler);
3550
3551 if (env) JMPIjvm::detachThread();
3552
3553 PEG_METHOD_EXIT();
3554
3555 return(response);
3556 }
3557
|
3558 marek 1.68 Message * JMPIProviderManager::handleExecQueryRequest(
3559 const Message * message) throw()
|
3560 mark.hamzy 1.25 {
|
3561 marek 1.68 PEG_METHOD_ENTER(
3562 TRC_PROVIDERMANAGER,
3563 "JMPIProviderManager::handleExecQueryRequest");
|
3564 mark.hamzy 1.25
|
3565 kumpf 1.55 HandlerIntro(ExecQuery,message,request,response,handler);
|
3566 mark.hamzy 1.25
3567 typedef enum {
3568 METHOD_UNKNOWN = 0,
|
3569 mark.hamzy 1.43 METHOD_CIMINSTANCEPROVIDER,
3570 METHOD_CIMINSTANCEPROVIDER2,
3571 METHOD_INSTANCEPROVIDER,
3572 METHOD_INSTANCEPROVIDER2,
|
3573 mark.hamzy 1.25 } METHOD_VERSION;
3574 METHOD_VERSION eMethodFound = METHOD_UNKNOWN;
3575 JNIEnv *env = NULL;
3576
3577 try {
|
3578 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL3,
3579 "handleExecQueryRequest: "
3580 "name space = %s class name = %s",
3581 (const char*)request->nameSpace.getString().getCString(),
3582 (const char*)request->className.getString().getCString()
3583 ));
|
3584 mark.hamzy 1.25
3585 // make target object path
|
3586 mark.hamzy 1.27 CIMObjectPath *objectPath = new CIMObjectPath (System::getHostName(),
3587 request->nameSpace,
3588 request->className);
|
3589 mark.hamzy 1.25
3590 // resolve provider name
3591 ProviderName name = _resolveProviderName(
3592 request->operationContext.get(ProviderIdContainer::NAME));
3593
3594 // get cached or load new provider module
|
3595 marek 1.68 JMPIProvider::OpProviderHolder ph =
3596 providerManager.getProvider(
3597 name.getPhysicalName(),
3598 name.getLogicalName(),
3599 String::EMPTY);
|
3600 mark.hamzy 1.25
3601 // convert arguments
3602 OperationContext context;
3603
|
3604 marek 1.68 context.insert(
3605 request->operationContext.get(IdentityContainer::NAME));
3606 context.insert(
3607 request->operationContext.get(AcceptLanguageListContainer::NAME));
3608 context.insert(
3609 request->operationContext.get(ContentLanguageListContainer::NAME));
|
3610 mark.hamzy 1.25
3611 // forward request
3612 JMPIProvider &pr = ph.GetProvider();
3613
|
3614 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3,
3615 "handleExecQueryRequest: "
3616 "Calling provider: %s, queryLanguage: %s, query: %s",
3617 (const char*)pr.getName().getCString(),
3618 (const char*)request->queryLanguage.getCString(),
3619 (const char*)request->query.getCString()
3620 ));
|
3621 mark.hamzy 1.25
3622 JvmVector *jv = 0;
3623
3624 env = JMPIjvm::attachThread(&jv);
3625
|
3626 mark.hamzy 1.37 if (!env)
3627 {
|
3628 thilo.boehm 1.69 PEG_TRACE_CSTRING( TRC_PROVIDERMANAGER, Tracer::LEVEL2,
3629 "handleExecQueryRequest: "
3630 "Could not initialize the JVM (Java Virtual Machine) "
3631 "runtime environment.");
3632
|
3633 mark.hamzy 1.37 PEG_METHOD_EXIT();
3634
|
3635 marek 1.68 throw PEGASUS_CIM_EXCEPTION_L(
3636 CIM_ERR_FAILED,
3637 MessageLoaderParms(
|
3638 thilo.boehm 1.69 "ProviderManager.JMPI.JMPIProviderManager.INIT_JVM_FAILED",
|
3639 marek 1.68 "Could not initialize the JVM (Java Virtual Machine) "
3640 "runtime environment."));
|
3641 mark.hamzy 1.37 }
3642
|
3643 mark.hamzy 1.23 JMPIProvider::pm_service_op_lock op_lock(&pr);
|
3644 schuur 1.1
|
3645 mark.hamzy 1.43 jmethodID id = NULL;
3646 String interfaceType;
3647 String interfaceVersion;
3648
|
3649 marek 1.68 getInterfaceType(
3650 request->operationContext.get(
3651 ProviderIdContainer::NAME),
3652 interfaceType,
3653 interfaceVersion);
|
3654 mark.hamzy 1.43
3655 if (interfaceType == "JMPI")
3656 {
|
3657 marek 1.68 id = env->GetMethodID(
3658 (jclass)pr.jProviderClass,
3659 "execQuery",
3660 "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;"
3661 "ILorg/pegasus/jmpi/CIMClass;)Ljava/util/Vector;");
|
3662 mark.hamzy 1.43
3663 if (id != NULL)
3664 {
3665 eMethodFound = METHOD_INSTANCEPROVIDER;
|
3666 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
3667 "handleExecQueryRequest: Found METHOD_INSTANCEPROVIDER.");
|
3668 mark.hamzy 1.43 }
|
3669 mark.hamzy 1.25
|
3670 mark.hamzy 1.43 if (id == NULL)
3671 {
3672 env->ExceptionClear();
|
3673 mark.hamzy 1.25
|
3674 marek 1.68 id = env->GetMethodID(
3675 (jclass)pr.jProviderClass,
3676 "execQuery",
3677 "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;"
3678 "Ljava/lang/String;Lorg/pegasus/jmpi/CIMClass;)"
3679 "[Lorg/pegasus/jmpi/CIMInstance;");
|
3680 mark.hamzy 1.43
3681 if (id != NULL)
3682 {
3683 eMethodFound = METHOD_CIMINSTANCEPROVIDER;
|
3684 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
3685 "handleExecQueryRequest: "
3686 "Found METHOD_CIMINSTANCEPROVIDER.");
|
3687 mark.hamzy 1.43 }
3688 }
3689 }
3690 else if (interfaceType == "JMPIExperimental")
|
3691 mark.hamzy 1.25 {
|
3692 marek 1.68 id = env->GetMethodID(
3693 (jclass)pr.jProviderClass,
3694 "execQuery",
3695 "(Lorg/pegasus/jmpi/OperationContext;"
3696 "Lorg/pegasus/jmpi/CIMObjectPath;"
3697 "Lorg/pegasus/jmpi/CIMClass;Ljava/lang/String;"
3698 "Ljava/lang/String;)Ljava/util/Vector;");
|
3699 mark.hamzy 1.25
|
3700 mark.hamzy 1.43 if (id != NULL)
3701 {
3702 eMethodFound = METHOD_INSTANCEPROVIDER2;
|
3703 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
3704 "handleExecQueryRequest: Found METHOD_INSTANCEPROVIDER2.");
|
3705 mark.hamzy 1.43 }
|
3706 mark.hamzy 1.25
|
3707 mark.hamzy 1.43 if (id == NULL)
3708 {
3709 env->ExceptionClear();
|
3710 mark.hamzy 1.25
|
3711 marek 1.68 id = env->GetMethodID(
3712 (jclass)pr.jProviderClass,
3713 "execQuery",
3714 "(Lorg/pegasus/jmpi/OperationContext;"
3715 "Lorg/pegasus/jmpi/CIMObjectPath;"
3716 "Lorg/pegasus/jmpi/CIMClass;Ljava/lang/String;"
3717 "Ljava/lang/String;)"
3718 "[Lorg/pegasus/jmpi/CIMInstance;");
|
3719 mark.hamzy 1.43
3720 if (id != NULL)
3721 {
3722 eMethodFound = METHOD_CIMINSTANCEPROVIDER2;
|
3723 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
3724 "handleExecQueryRequest: "
3725 "Found METHOD_CIMINSTANCEPROVIDER2.");
|
3726 mark.hamzy 1.43 }
3727 }
|
3728 mark.hamzy 1.25 }
3729
3730 if (id == NULL)
3731 {
|
3732 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
3733 "handleExecQueryRequest: No method provider found!");
|
3734 mark.hamzy 1.36
|
3735 mark.hamzy 1.43 PEG_METHOD_EXIT();
|
3736 mark.hamzy 1.36
|
3737 marek 1.68 throw PEGASUS_CIM_EXCEPTION_L(
3738 CIM_ERR_FAILED,
3739 MessageLoaderParms(
|
3740 thilo.boehm 1.69 "ProviderManager.JMPI.JMPIProviderManager.METHOD_NOT_FOUND",
|
3741 marek 1.68 "Could not find a method for the provider based on "
3742 "InterfaceType."));
|
3743 mark.hamzy 1.25 }
3744
|
3745 schuur 1.1 JMPIjvm::checkException(env);
3746
|
3747 mark.hamzy 1.25 switch (eMethodFound)
3748 {
|
3749 mark.hamzy 1.43 case METHOD_CIMINSTANCEPROVIDER:
|
3750 mark.hamzy 1.25 {
|
3751 marek 1.68 jlong jcopref = DEBUG_ConvertCToJava(
3752 CIMObjectPath*,
3753 jlong,
3754 objectPath);
3755 jobject jcop = env->NewObject(
3756 jv->CIMObjectPathClassRef,
3757 jv->CIMObjectPathNewJ,
3758 jcopref);
|
3759 mark.hamzy 1.25
3760 JMPIjvm::checkException(env);
3761
|
3762 marek 1.68 jstring jqueryLanguage = env->NewStringUTF(
3763 request->queryLanguage.getCString());
3764 jstring jquery = env->NewStringUTF(
3765 request->query.getCString());
|
3766 mark.hamzy 1.25
|
3767 mark.hamzy 1.40 CIMClass cls;
3768
3769 try
3770 {
|
3771 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
3772 "handleExecQueryRequest: "
3773 "enter(METHOD_CIMINSTANCEPROVIDER): "
3774 "cimom_handle->getClass(%s).",
3775 (const char*)request->className.getString().getCString()
3776 ));
3777
|
3778 mark.hamzy 1.40 AutoMutex lock (pr._cimomMutex);
3779
3780 cls = pr._cimom_handle->getClass(context,
3781 request->nameSpace,
3782 request->className,
3783 false,
3784 true,
3785 true,
3786 CIMPropertyList());
|
3787 thilo.boehm 1.69
3788 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
3789 "handleExecQueryRequest: "
3790 "exit(METHOD_CIMINSTANCEPROVIDER): "
3791 "cimom_handle->getClass(%s).",
3792 (const char*)request->className.getString().getCString()
3793 ));
3794
|
3795 mark.hamzy 1.40 }
3796 catch (CIMException e)
3797 {
|
3798 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL2,
3799 "handleExecQueryRequest: "
3800 "Caught CIMExcetion(METHOD_CIMINSTANCEPROVIDER) "
3801 "during cimom_handle->getClass(%s): %s ",
3802 (const char*)request->className.getString().getCString(),
3803 (const char*)e.getMessage().getCString()
3804 ));
3805
3806 PEG_METHOD_EXIT();
|
3807 mark.hamzy 1.40 throw;
3808 }
3809
|
3810 mark.hamzy 1.27 CIMClass *pcls = new CIMClass (cls);
3811
|
3812 mark.hamzy 1.25 JMPIjvm::checkException(env);
3813
|
3814 mark.hamzy 1.59 jlong jcls = DEBUG_ConvertCToJava (CIMClass*, jlong, pcls);
|
3815 mark.hamzy 1.25
|
3816 marek 1.68 jobject jCc=env->NewObject(
3817 jv->CIMClassClassRef,
3818 jv->CIMClassNewJ,
3819 jcls);
|
3820 mark.hamzy 1.25
3821 JMPIjvm::checkException(env);
3822
|
3823 kumpf 1.55 StatProviderTimeMeasurement providerTime(response);
3824
|
3825 marek 1.68 jobjectArray jAr = (jobjectArray)env->CallObjectMethod(
3826 (jobject)pr.jProvider,
3827 id,
3828 jcop,
3829 jquery,
3830 jqueryLanguage,
3831 jCc);
|
3832 mark.hamzy 1.23
|
3833 mark.hamzy 1.25 JMPIjvm::checkException(env);
3834
3835 handler.processing();
3836 if (jAr) {
3837 for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
3838 JMPIjvm::checkException(env);
3839
|
3840 mark.hamzy 1.29 jobject jciRet = env->GetObjectArrayElement(jAr,i);
3841
|
3842 mark.hamzy 1.25 JMPIjvm::checkException(env);
|
3843 mark.hamzy 1.23
|
3844 marek 1.68 jlong jciRetRef = env->CallLongMethod(
3845 jciRet,
3846 JMPIjvm::jv.CIMInstanceCInst);
3847 CIMInstance *ciRet = DEBUG_ConvertJavaToC(
3848 jlong,
3849 CIMInstance*,
3850 jciRetRef);
|
3851 mark.hamzy 1.25
3852 JMPIjvm::checkException(env);
3853
|
3854 mark.hamzy 1.29 handler.deliver(*ciRet);
|
3855 mark.hamzy 1.25 }
3856 }
3857 handler.complete();
3858 break;
3859 }
3860
|
3861 mark.hamzy 1.43 case METHOD_CIMINSTANCEPROVIDER2:
|
3862 mark.hamzy 1.36 {
|
3863 marek 1.68 jlong jocRef = DEBUG_ConvertCToJava(
3864 OperationContext*,
3865 jlong,
3866 &request->operationContext);
3867 jobject joc = env->NewObject(
3868 jv->OperationContextClassRef,
3869 jv->OperationContextNewJ,
3870 jocRef);
3871
3872 jlong jcopref = DEBUG_ConvertCToJava(
3873 CIMObjectPath*,
3874 jlong,
3875 objectPath);
3876 jobject jcop = env->NewObject(
3877 jv->CIMObjectPathClassRef,
3878 jv->CIMObjectPathNewJ,
3879 jcopref);
|
3880 mark.hamzy 1.36
3881 JMPIjvm::checkException(env);
3882
|
3883 marek 1.68 jstring jqueryLanguage = env->NewStringUTF(
3884 request->queryLanguage.getCString());
3885 jstring jquery = env->NewStringUTF(
3886 request->query.getCString());
|
3887 mark.hamzy 1.36
|
3888 mark.hamzy 1.40 CIMClass cls;
3889
3890 try
3891 {
|
3892 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
3893 "handleExecQueryRequest: "
3894 "enter(METHOD_CIMINSTANCEPROVIDER2): "
3895 "cimom_handle->getClass(%s).",
3896 (const char*)request->className.getString().getCString()
3897 ));
3898
|
3899 mark.hamzy 1.40 AutoMutex lock (pr._cimomMutex);
3900
3901 cls = pr._cimom_handle->getClass(context,
3902 request->nameSpace,
3903 request->className,
3904 false,
3905 true,
3906 true,
3907 CIMPropertyList());
|
3908 thilo.boehm 1.69
3909 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
3910 "handleExecQueryRequest: "
3911 "exit(METHOD_CIMINSTANCEPROVIDER2): "
3912 "cimom_handle->getClass(%s).",
3913 (const char*)request->className.getString().getCString()
3914 ));
3915
|
3916 mark.hamzy 1.40 }
3917 catch (CIMException e)
3918 {
|
3919 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL2,
3920 "handleExecQueryRequest: "
3921 "Caught CIMExcetion(METHOD_CIMINSTANCEPROVIDER2) "
3922 "during cimom_handle->getClass(%s): %s ",
3923 (const char*)request->className.getString().getCString(),
3924 (const char*)e.getMessage().getCString()
3925 ));
3926
3927 PEG_METHOD_EXIT();
|
3928 mark.hamzy 1.40 throw;
3929 }
3930
|
3931 mark.hamzy 1.36 CIMClass *pcls = new CIMClass (cls);
3932
3933 JMPIjvm::checkException(env);
3934
|
3935 mark.hamzy 1.59 jlong jcls = DEBUG_ConvertCToJava (CIMClass*, jlong, pcls);
|
3936 mark.hamzy 1.36
|
3937 marek 1.68 jobject jCc=env->NewObject(
3938 jv->CIMClassClassRef,
3939 jv->CIMClassNewJ,
3940 jcls);
|
3941 mark.hamzy 1.36
3942 JMPIjvm::checkException(env);
3943
|
3944 kumpf 1.55 StatProviderTimeMeasurement providerTime(response);
3945
|
3946 marek 1.68 jobjectArray jAr = (jobjectArray)env->CallObjectMethod(
3947 (jobject)pr.jProvider,
3948 id,
3949 joc,
3950 jcop,
3951 jquery,
3952 jqueryLanguage,
3953 jCc);
|
3954 mark.hamzy 1.36
3955 JMPIjvm::checkException(env);
3956
|
3957 mark.hamzy 1.43 if (joc)
3958 {
|
3959 marek 1.68 env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate);
|
3960 mark.hamzy 1.43
3961 JMPIjvm::checkException(env);
3962 }
3963
3964 handler.processing();
3965 if (jAr) {
3966 for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
3967 JMPIjvm::checkException(env);
3968
3969 jobject jciRet = env->GetObjectArrayElement(jAr,i);
3970
3971 JMPIjvm::checkException(env);
3972
|
3973 marek 1.68 jlong jciRetRef = env->CallLongMethod(
3974 jciRet,
3975 JMPIjvm::jv.CIMInstanceCInst);
3976 CIMInstance *ciRet = DEBUG_ConvertJavaToC(
3977 jlong,
3978 CIMInstance*,
3979 jciRetRef);
|
3980 mark.hamzy 1.43
3981 JMPIjvm::checkException(env);
3982
3983 handler.deliver(*ciRet);
3984 }
3985 }
3986 handler.complete();
3987 break;
3988 }
3989
3990 case METHOD_INSTANCEPROVIDER2:
3991 {
|
3992 marek 1.68 jlong jocRef = DEBUG_ConvertCToJava(
3993 OperationContext*,
3994 jlong,
3995 &request->operationContext);
3996 jobject joc = env->NewObject(
3997 jv->OperationContextClassRef,
3998 jv->OperationContextNewJ,
3999 jocRef);
4000
4001 jlong jcopref = DEBUG_ConvertCToJava(
4002 CIMObjectPath*,
4003 jlong,
4004 objectPath);
4005 jobject jcop = env->NewObject(
4006 jv->CIMObjectPathClassRef,
4007 jv->CIMObjectPathNewJ,
4008 jcopref);
|
4009 mark.hamzy 1.43
4010 JMPIjvm::checkException(env);
4011
|
4012 marek 1.68 jstring jqueryLanguage = env->NewStringUTF(
4013 request->queryLanguage.getCString());
4014 jstring jquery = env->NewStringUTF(
4015 request->query.getCString());
|
4016 mark.hamzy 1.43
4017 CIMClass cls;
4018
4019 try
4020 {
|
4021 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4022 "handleExecQueryRequest: "
4023 "enter(METHOD_INSTANCEPROVIDER2): "
4024 "cimom_handle->getClass(%s).",
4025 (const char*)request->className.getString().getCString()
4026 ));
4027
|
4028 mark.hamzy 1.43 AutoMutex lock (pr._cimomMutex);
4029
4030 cls = pr._cimom_handle->getClass(context,
4031 request->nameSpace,
4032 request->className,
4033 false,
4034 true,
4035 true,
4036 CIMPropertyList());
|
4037 thilo.boehm 1.69
4038 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4039 "handleExecQueryRequest: "
4040 "exit(METHOD_INSTANCEPROVIDER2): "
4041 "cimom_handle->getClass(%s).",
4042 (const char*)request->className.getString().getCString()
4043 ));
4044
|
4045 mark.hamzy 1.43 }
4046 catch (CIMException e)
4047 {
|
4048 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL2,
4049 "handleExecQueryRequest: "
4050 "Caught CIMExcetion(METHOD_INSTANCEPROVIDER2) "
4051 "during cimom_handle->getClass(%s): %s ",
4052 (const char*)request->className.getString().getCString(),
4053 (const char*)e.getMessage().getCString()
4054 ));
4055
4056 PEG_METHOD_EXIT();
|
4057 mark.hamzy 1.43 throw;
4058 }
4059
4060 CIMClass *pcls = new CIMClass (cls);
4061
|
4062 mark.hamzy 1.59 jlong jcls = DEBUG_ConvertCToJava (CIMClass*, jlong, pcls);
|
4063 mark.hamzy 1.43
|
4064 marek 1.68 jobject jCc=env->NewObject(
4065 jv->CIMClassClassRef,
4066 jv->CIMClassNewJ,
4067 jcls);
|
4068 mark.hamzy 1.43
4069 JMPIjvm::checkException(env);
4070
|
4071 kumpf 1.55 StatProviderTimeMeasurement providerTime(response);
4072
|
4073 mark.hamzy 1.51 jobject jVec = env->CallObjectMethod ((jobject)pr.jProvider,
4074 id,
4075 joc,
4076 jcop,
4077 jCc,
4078 jquery,
4079 jqueryLanguage);
|
4080 mark.hamzy 1.43
4081 JMPIjvm::checkException(env);
4082
4083 if (joc)
4084 {
|
4085 marek 1.68 env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate);
|
4086 mark.hamzy 1.43
4087 JMPIjvm::checkException(env);
4088 }
4089
|
4090 mark.hamzy 1.36 handler.processing();
|
4091 mark.hamzy 1.51 if (jVec)
4092 {
|
4093 marek 1.68 for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize);
4094 i < m;
4095 i++)
|
4096 mark.hamzy 1.51 {
|
4097 mark.hamzy 1.36 JMPIjvm::checkException(env);
4098
|
4099 marek 1.68 jobject jciRet = env->CallObjectMethod(
4100 jVec,
4101 JMPIjvm::jv.VectorElementAt,
4102 i);
|
4103 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
|
4104 thilo.boehm 1.70 "handleExecQueryRequest: jciRet = %p",jciRet));
|
4105 mark.hamzy 1.36
4106 JMPIjvm::checkException(env);
4107
|
4108 marek 1.68 jlong jciRetRef = env->CallLongMethod(
4109 jciRet,
4110 JMPIjvm::jv.CIMInstanceCInst);
4111 CIMInstance *ciRet = DEBUG_ConvertJavaToC(
4112 jlong,
4113 CIMInstance*,
4114 jciRetRef);
|
4115 mark.hamzy 1.36
4116 JMPIjvm::checkException(env);
4117
4118 handler.deliver(*ciRet);
4119 }
4120 }
|
4121 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4122 "handleExecQueryRequest: done!");
4123
|
4124 mark.hamzy 1.36 handler.complete();
4125 break;
4126 }
4127
|
4128 mark.hamzy 1.43 case METHOD_INSTANCEPROVIDER:
|
4129 mark.hamzy 1.25 {
|
4130 marek 1.68 jlong jcopref = DEBUG_ConvertCToJava(
4131 CIMObjectPath*,
4132 jlong,
4133 objectPath);
4134 jobject jcop = env->NewObject(
4135 jv->CIMObjectPathClassRef,
4136 jv->CIMObjectPathNewJ,
4137 jcopref);
|
4138 mark.hamzy 1.25
4139 JMPIjvm::checkException(env);
4140
|
4141 marek 1.68 jstring jqueryLanguage = env->NewStringUTF(
4142 request->queryLanguage.getCString());
4143 jstring jquery = env->NewStringUTF(
4144 request->query.getCString());
|
4145 mark.hamzy 1.25
|
4146 mark.hamzy 1.40 CIMClass cls;
4147
4148 try
4149 {
|
4150 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4151 "handleExecQueryRequest: "
4152 "enter(METHOD_INSTANCEPROVIDER): "
4153 "cimom_handle->getClass(%s).",
4154 (const char*)request->className.getString().getCString()
4155 ));
4156
|
4157 mark.hamzy 1.40 AutoMutex lock (pr._cimomMutex);
4158
4159 cls = pr._cimom_handle->getClass(context,
4160 request->nameSpace,
4161 request->className,
4162 false,
4163 true,
4164 true,
4165 CIMPropertyList());
|
4166 thilo.boehm 1.69
4167 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4168 "handleExecQueryRequest: "
4169 "exit(METHOD_INSTANCEPROVIDER): "
4170 "cimom_handle->getClass(%s).",
4171 (const char*)request->className.getString().getCString()
4172 ));
4173
|
4174 mark.hamzy 1.40 }
4175 catch (CIMException e)
4176 {
|
4177 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL2,
4178 "handleExecQueryRequest: "
4179 "Caught CIMExcetion(METHOD_INSTANCEPROVIDER) "
4180 "during cimom_handle->getClass(%s): %s ",
4181 (const char*)request->className.getString().getCString(),
4182 (const char*)e.getMessage().getCString()
4183 ));
4184
4185 PEG_METHOD_EXIT();
|
4186 mark.hamzy 1.40 throw;
4187 }
4188
|
4189 mark.hamzy 1.27 CIMClass *pcls = new CIMClass (cls);
4190
|
4191 mark.hamzy 1.25 JMPIjvm::checkException(env);
4192
|
4193 mark.hamzy 1.59 jlong jcls = DEBUG_ConvertCToJava (CIMClass*, jlong, pcls);
|
4194 mark.hamzy 1.25
|
4195 marek 1.68 jobject jCc=env->NewObject(
4196 jv->CIMClassClassRef,
4197 jv->CIMClassNewJ,
4198 jcls);
|
4199 mark.hamzy 1.25
4200 JMPIjvm::checkException(env);
4201
|
4202 mark.hamzy 1.59 jlong jql = 0; // @BUG - how to convert?
|
4203 mark.hamzy 1.25
|
4204 kumpf 1.55 StatProviderTimeMeasurement providerTime(response);
4205
|
4206 marek 1.68 jobject jVec = env->CallObjectMethod((jobject)pr.jProvider,
4207 id,
4208 jcop,
4209 jquery,
4210 jql,
4211 jCc);
|
4212 mark.hamzy 1.25
4213 JMPIjvm::checkException(env);
4214
4215 handler.processing();
4216 if (jVec) {
|
4217 marek 1.68 for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize);
4218 i<m;
4219 i++)
4220 {
|
4221 mark.hamzy 1.25 JMPIjvm::checkException(env);
4222
|
4223 marek 1.68 jobject jciRet = env->CallObjectMethod(
4224 jVec,
4225 JMPIjvm::jv.VectorElementAt,
4226 i);
|
4227 mark.hamzy 1.29
|
4228 mark.hamzy 1.25 JMPIjvm::checkException(env);
4229
|
4230 marek 1.68 jlong jciRetRef = env->CallLongMethod(
4231 jciRet,
4232 JMPIjvm::jv.CIMInstanceCInst);
4233 CIMInstance *ciRet = DEBUG_ConvertJavaToC(
4234 jlong,
4235 CIMInstance*,
4236 jciRetRef);
|
4237 mark.hamzy 1.25
4238 JMPIjvm::checkException(env);
4239
|
4240 mark.hamzy 1.29 handler.deliver(*ciRet);
|
4241 mark.hamzy 1.25 }
4242 }
4243 handler.complete();
4244 break;
4245 }
4246
4247 case METHOD_UNKNOWN:
4248 {
|
4249 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
4250 "handleExecQueryRequest: Unknown method provider!");
|
4251 mark.hamzy 1.25 break;
4252 }
4253 }
|
4254 schuur 1.1 }
4255 HandlerCatch(handler);
|
4256 mark.hamzy 1.23
|
4257 schuur 1.1 if (env) JMPIjvm::detachThread();
|
4258 mark.hamzy 1.23
|
4259 schuur 1.1 PEG_METHOD_EXIT();
4260
4261 return(response);
4262 }
4263
|
4264 marek 1.68 Message * JMPIProviderManager::handleAssociatorsRequest(
4265 const Message * message) throw()
|
4266 schuur 1.1 {
|
4267 marek 1.68 PEG_METHOD_ENTER(
4268 TRC_PROVIDERMANAGER,
4269 "JMPIProviderManager::handleAssociatorsRequest");
|
4270 mark.hamzy 1.23
|
4271 kumpf 1.55 HandlerIntro(Associators,message,request,response,handler);
|
4272 schuur 1.1
|
4273 mark.hamzy 1.24 typedef enum {
4274 METHOD_UNKNOWN = 0,
|
4275 mark.hamzy 1.43 METHOD_CIMASSOCIATORPROVIDER,
4276 METHOD_CIMASSOCIATORPROVIDER2,
4277 METHOD_ASSOCIATORPROVIDER,
4278 METHOD_ASSOCIATORPROVIDER2,
|
4279 mark.hamzy 1.24 } METHOD_VERSION;
4280 METHOD_VERSION eMethodFound = METHOD_UNKNOWN;
4281 JNIEnv *env = NULL;
|
4282 schuur 1.13
|
4283 marek 1.68 try
4284 {
|
4285 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL3,
4286 "handleAssociatorsRequest: "
4287 "name space = %s class name = %s",
4288 (const char*)request->nameSpace.getString().getCString(),
4289 (const char*)request->
4290 objectName.getClassName().getString().getCString()
4291 ));
|
4292 mark.hamzy 1.23
|
4293 schuur 1.1 // make target object path
|
4294 marek 1.68 CIMObjectPath *objectPath = new CIMObjectPath(
4295 System::getHostName(),
4296 request->nameSpace,
4297 request->objectName.getClassName(),
4298 request->objectName.getKeyBindings());
4299 CIMObjectPath *assocPath = new CIMObjectPath(
4300 System::getHostName(),
4301 request->nameSpace,
4302 request->assocClass.getString());
|
4303 schuur 1.1
4304 // resolve provider name
|
4305 kumpf 1.2 ProviderName name = _resolveProviderName(
4306 request->operationContext.get(ProviderIdContainer::NAME));
|
4307 schuur 1.1
4308 // get cached or load new provider module
|
4309 marek 1.68 JMPIProvider::OpProviderHolder ph =
4310 providerManager.getProvider(
4311 name.getPhysicalName(),
4312 name.getLogicalName(),
4313 String::EMPTY);
|
4314 schuur 1.1
|
4315 mark.hamzy 1.24 // convert arguments
|
4316 schuur 1.1 OperationContext context;
4317
|
4318 marek 1.68 context.insert(
4319 request->operationContext.get(IdentityContainer::NAME));
4320 context.insert(
4321 request->operationContext.get(AcceptLanguageListContainer::NAME));
4322 context.insert(
4323 request->operationContext.get(ContentLanguageListContainer::NAME));
|
4324 schuur 1.1
4325 // forward request
|
4326 mark.hamzy 1.24 JMPIProvider &pr = ph.GetProvider();
4327
|
4328 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3,
4329 "handleAssociatorsRequest: "
4330 "Calling provider: %s, role: %s, aCls: %s",
4331 (const char*)pr.getName().getCString(),
4332 (const char*)request->role.getCString(),
4333 (const char*)request->assocClass.getString().getCString()
4334 ));
|
4335 schuur 1.1
|
4336 mark.hamzy 1.24 JvmVector *jv = 0;
|
4337 schuur 1.1
|
4338 mark.hamzy 1.24 env = JMPIjvm::attachThread(&jv);
|
4339 schuur 1.1
|
4340 mark.hamzy 1.37 if (!env)
4341 {
|
4342 thilo.boehm 1.69 PEG_TRACE_CSTRING( TRC_PROVIDERMANAGER, Tracer::LEVEL2,
4343 "handleAssociatorsRequest: "
4344 "Could not initialize the JVM (Java Virtual Machine) "
4345 "runtime environment.");
4346
|
4347 mark.hamzy 1.37 PEG_METHOD_EXIT();
4348
|
4349 marek 1.68 throw PEGASUS_CIM_EXCEPTION_L(
4350 CIM_ERR_FAILED,
4351 MessageLoaderParms(
|
4352 thilo.boehm 1.69 "ProviderManager.JMPI.JMPIProviderManager.INIT_JVM_FAILED",
|
4353 marek 1.68 "Could not initialize the JVM (Java Virtual Machine) "
4354 "runtime environment."));
|
4355 mark.hamzy 1.37 }
4356
|
4357 schuur 1.1 JMPIProvider::pm_service_op_lock op_lock(&pr);
4358
|
4359 mark.hamzy 1.43 jmethodID id = NULL;
4360 String interfaceType;
4361 String interfaceVersion;
4362
|
4363 marek 1.68 getInterfaceType(
4364 request->operationContext.get(
4365 ProviderIdContainer::NAME),
4366 interfaceType,
4367 interfaceVersion);
|
4368 mark.hamzy 1.43
4369 if (interfaceType == "JMPI")
4370 {
|
4371 marek 1.68 id = env->GetMethodID(
4372 (jclass)pr.jProviderClass,
4373 "associators",
4374 "(Lorg/pegasus/jmpi/CIMObjectPath;"
4375 "Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;"
4376 "Ljava/lang/String;Ljava/lang/String;"
4377 "ZZ[Ljava/lang/String;)Ljava/util/Vector;");
|
4378 mark.hamzy 1.24
|
4379 mark.hamzy 1.43 if (id != NULL)
4380 {
4381 eMethodFound = METHOD_ASSOCIATORPROVIDER;
|
4382 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4383 "handleAssociatorsRequest: "
4384 "Found METHOD_ASSOCIATORPROVIDER.");
|
4385 mark.hamzy 1.43 }
4386
4387 if (id == NULL)
4388 {
4389 env->ExceptionClear();
|
4390 mark.hamzy 1.24
|
4391 marek 1.68 id = env->GetMethodID(
4392 (jclass)pr.jProviderClass,
4393 "associators",
4394 "(Lorg/pegasus/jmpi/CIMObjectPath;"
4395 "Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;"
4396 "Ljava/lang/String;Ljava/lang/String;"
4397 "ZZ[Ljava/lang/String;)"
4398 "[Lorg/pegasus/jmpi/CIMInstance;");
|
4399 mark.hamzy 1.43
4400 if (id != NULL)
4401 {
4402 eMethodFound = METHOD_CIMASSOCIATORPROVIDER;
|
4403 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4404 "handleAssociatorsRequest: "
4405 "Found METHOD_ASSOCIATORPROVIDER.");
|
4406 mark.hamzy 1.43 }
4407 }
4408 }
4409 else if (interfaceType == "JMPIExperimental")
|
4410 mark.hamzy 1.24 {
|
4411 marek 1.68 id = env->GetMethodID(
4412 (jclass)pr.jProviderClass,
4413 "associators",
4414 "(Lorg/pegasus/jmpi/OperationContext;"
4415 "Lorg/pegasus/jmpi/CIMObjectPath;"
4416 "Lorg/pegasus/jmpi/CIMObjectPath;"
4417 "Ljava/lang/String;Ljava/lang/String;"
4418 "Ljava/lang/String;ZZ[Ljava/lang/String;)"
4419 "Ljava/util/Vector;");
|
4420 schuur 1.12
|
4421 mark.hamzy 1.43 if (id != NULL)
4422 {
4423 eMethodFound = METHOD_ASSOCIATORPROVIDER2;
|
4424 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4425 "handleAssociatorsRequest: "
4426 "Found METHOD_ASSOCIATORPROVIDER2.");
|
4427 mark.hamzy 1.43 }
|
4428 mark.hamzy 1.24
|
4429 mark.hamzy 1.43 if (id == NULL)
4430 {
4431 env->ExceptionClear();
|
4432 marek 1.68 id = env->GetMethodID(
4433 (jclass)pr.jProviderClass,
4434 "associators",
4435 "(Lorg/pegasus/jmpi/OperationContext;"
4436 "Lorg/pegasus/jmpi/CIMObjectPath;"
4437 "Lorg/pegasus/jmpi/CIMObjectPath;"
4438 "Ljava/lang/String;Ljava/lang/String;"
4439 "Ljava/lang/String;ZZ[Ljava/lang/String;"
4440 ")[Lorg/pegasus/jmpi/CIMInstance;");
|
4441 mark.hamzy 1.43
4442 if (id != NULL)
4443 {
4444 eMethodFound = METHOD_CIMASSOCIATORPROVIDER2;
|
4445 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4446 "handleAssociatorsRequest: "
4447 "Found METHOD_CIMASSOCIATORPROVIDER2.");
|
4448 mark.hamzy 1.43 }
4449 }
|
4450 mark.hamzy 1.24 }
4451
4452 if (id == NULL)
4453 {
|
4454 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
4455 "handleAssociatorsRequest: No method found!");
|
4456 mark.hamzy 1.43
4457 PEG_METHOD_EXIT();
4458
|
4459 marek 1.68 throw PEGASUS_CIM_EXCEPTION_L(
4460 CIM_ERR_FAILED,
4461 MessageLoaderParms(
|
4462 thilo.boehm 1.69 "ProviderManager.JMPI.JMPIProviderManager.METHOD_NOT_FOUND",
|
4463 marek 1.68 "Could not find a method for the provider based on "
4464 "InterfaceType."));
|
4465 mark.hamzy 1.23 }
|
4466 mark.hamzy 1.24
|
4467 schuur 1.1 JMPIjvm::checkException(env);
4468
|
4469 mark.hamzy 1.24 switch (eMethodFound)
4470 {
|
4471 mark.hamzy 1.43 case METHOD_CIMASSOCIATORPROVIDER:
|
4472 mark.hamzy 1.24 {
|
4473 marek 1.68 jlong jAssociationNameRef = DEBUG_ConvertCToJava(
4474 CIMObjectPath*,
4475 jlong,
4476 assocPath);
4477 jobject jAssociationName = env->NewObject(
4478 jv->CIMObjectPathClassRef,
4479 jv->CIMObjectPathNewJ,
4480 jAssociationNameRef);
|
4481 mark.hamzy 1.25
4482 JMPIjvm::checkException(env);
4483
|
4484 marek 1.68 jlong jPathNameRef = DEBUG_ConvertCToJava(
4485 CIMObjectPath*,
4486 jlong,
4487 objectPath);
4488 jobject jPathName = env->NewObject(
4489 jv->CIMObjectPathClassRef,
4490 jv->CIMObjectPathNewJ,
4491 jPathNameRef);
|
4492 mark.hamzy 1.43
4493 JMPIjvm::checkException(env);
4494
|
4495 marek 1.68 jstring jResultClass =
4496 env->NewStringUTF(
4497 request->resultClass.getString().getCString());
4498 jstring jRole =
4499 env->NewStringUTF(
4500 request->role.getCString());
4501 jstring jResultRole =
4502 env->NewStringUTF(
4503 request->resultRole.getCString());
|
4504 mark.hamzy 1.25
4505 JMPIjvm::checkException(env);
4506
4507 jobjectArray jPropertyList = getList(jv,env,request->propertyList);
4508
|
4509 mark.hamzy 1.29 #ifdef PEGASUS_DEBUG
|
4510 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4511 "handleAssociatorsRequest: assocName = %s ",
4512 (const char*)assocPath->toString().getCString()));
4513 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4514 "handleAssociatorsRequest: pathName = %s ",
4515 (const char*)objectPath->toString().getCString()));
4516 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4517 "handleAssociatorsRequest: resultClass = %s ",
4518 (const char*)request->resultClass.getString().getCString()));
4519 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4520 "handleAssociatorsRequest: role = %s ",
4521 (const char*)request->role.getCString()));
4522 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4523 "handleAssociatorsRequest: resultRole = %s ",
4524 (const char*)request->resultRole.getCString()));
4525 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4526 "handleAssociatorsRequest: includeQualifiers = false");
4527 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4528 "handleAssociatorsRequest: includeClassOrigin = false");
|
4529 mark.hamzy 1.29 #endif
4530
|
4531 kumpf 1.55 StatProviderTimeMeasurement providerTime(response);
4532
|
4533 marek 1.68 jobjectArray jAr=(jobjectArray)env->CallObjectMethod(
4534 (jobject)pr.jProvider,
4535 id,
4536 jAssociationName,
4537 jPathName,
4538 jResultClass,
4539 jRole,
4540 jResultRole,
4541 JMPI_INCLUDE_QUALIFIERS,
4542 request->includeClassOrigin,
4543 jPropertyList);
|
4544 mark.hamzy 1.25
|
4545 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
4546 schuur 1.13
|
4547 mark.hamzy 1.23 handler.processing();
|
4548 mark.hamzy 1.45 if (jAr) {
4549 for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
|
4550 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
4551 schuur 1.1
|
4552 mark.hamzy 1.45 jobject jciRet = env->GetObjectArrayElement(jAr,i);
|
4553 mark.hamzy 1.24
|
4554 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
4555 schuur 1.13
|
4556 marek 1.68 jlong jciRetRef = env->CallLongMethod(
4557 jciRet,
4558 JMPIjvm::jv.CIMInstanceCInst);
|
4559 schuur 1.13
|
4560 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
4561 schuur 1.13
|
4562 marek 1.68 CIMInstance *ciRet = DEBUG_ConvertJavaToC(
4563 jlong,
4564 CIMInstance*,
4565 jciRetRef);
4566 CIMClass cls;
|
4567 mark.hamzy 1.40
4568 try
4569 {
|
4570 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4571 "handleAssociatorsRequest: "
4572 "enter(METHOD_CIMASSOCIATORPROVIDER): "
4573 "cimom_handle->getClass(%s).",
4574 (const char*)ciRet->
4575 getClassName().getString().getCString()
4576 ));
4577
|
4578 mark.hamzy 1.40 AutoMutex lock (pr._cimomMutex);
4579
4580 cls = pr._cimom_handle->getClass(context,
4581 request->nameSpace,
4582 ciRet->getClassName(),
4583 false,
4584 true,
4585 true,
4586 CIMPropertyList());
|
4587 thilo.boehm 1.69
4588 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4589 "handleAssociatorsRequest: "
4590 "exit(METHOD_CIMASSOCIATORPROVIDER): "
4591 "cimom_handle->getClass(%s).",
4592 (const char*)ciRet->
4593 getClassName().getString().getCString()
4594 ));
4595
|
4596 mark.hamzy 1.40 }
4597 catch (CIMException e)
4598 {
|
4599 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL2,
4600 "handleAssociatorsRequest: "
4601 "Caught CIMExcetion(METHOD_CIMASSOCIATORPROVIDER) "
4602 "during cimom_handle->getClass(%s): %s ",
4603 (const char*)ciRet->
4604 getClassName().getString().getCString(),
4605 (const char*)e.getMessage().getCString()
4606 ));
4607
4608 PEG_METHOD_EXIT();
|
4609 mark.hamzy 1.40 throw;
4610 }
4611
|
4612 mark.hamzy 1.29 const CIMObjectPath& op = ciRet->getPath();
4613 CIMObjectPath iop = ciRet->buildPath(cls);
|
4614 mark.hamzy 1.24
|
4615 mark.hamzy 1.27 JMPIjvm::checkException(env);
4616
|
4617 mark.hamzy 1.23 iop.setNameSpace(op.getNameSpace());
|
4618 mark.hamzy 1.29 ciRet->setPath(iop);
|
4619 schuur 1.13
|
4620 mark.hamzy 1.29 handler.deliver(*ciRet);
|
4621 mark.hamzy 1.23 }
4622 }
|
4623 mark.hamzy 1.24 handler.complete();
4624 break;
|
4625 mark.hamzy 1.23 }
|
4626 mark.hamzy 1.24
|
4627 mark.hamzy 1.43 case METHOD_CIMASSOCIATORPROVIDER2:
|
4628 mark.hamzy 1.24 {
|
4629 marek 1.68 jlong jocRef = DEBUG_ConvertCToJava(
4630 OperationContext*,
4631 jlong,
4632 &request->operationContext);
4633 jobject joc = env->NewObject(
4634 jv->OperationContextClassRef,
4635 jv->OperationContextNewJ,
4636 jocRef);
4637
4638 jlong jAssociationNameRef = DEBUG_ConvertCToJava(
4639 CIMObjectPath*,
4640 jlong,
4641 assocPath);
4642 jobject jAssociationName = env->NewObject(
4643 jv->CIMObjectPathClassRef,
4644 jv->CIMObjectPathNewJ,
4645 jAssociationNameRef);
|
4646 mark.hamzy 1.25
4647 JMPIjvm::checkException(env);
4648
|
4649 marek 1.68 jlong jPathNameRef = DEBUG_ConvertCToJava(
4650 CIMObjectPath*,
4651 jlong,
4652 objectPath);
4653 jobject jPathName = env->NewObject(
4654 jv->CIMObjectPathClassRef,
4655 jv->CIMObjectPathNewJ,
4656 jPathNameRef);
|
4657 mark.hamzy 1.24
4658 JMPIjvm::checkException(env);
4659
|
4660 marek 1.68 jstring jResultClass =
4661 env->NewStringUTF(
4662 request->resultClass.getString().getCString());
4663 jstring jRole =
4664 env->NewStringUTF(request->role.getCString());
4665 jstring jResultRole =
4666 env->NewStringUTF(request->resultRole.getCString());
|
4667 mark.hamzy 1.25
4668 JMPIjvm::checkException(env);
4669
4670 jobjectArray jPropertyList = getList(jv,env,request->propertyList);
4671
|
4672 mark.hamzy 1.29 #ifdef PEGASUS_DEBUG
|
4673 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4674 "handleAssociatorsRequest: assocName = %s ",
4675 (const char*)assocPath->toString().getCString()));
4676 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4677 "handleAssociatorsRequest: pathName = %s ",
4678 (const char*)objectPath->toString().getCString()));
4679 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4680 "handleAssociatorsRequest: resultClass = %s ",
4681 (const char*)request->resultClass.getString().getCString()));
4682 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4683 "handleAssociatorsRequest: role = %s ",
4684 (const char*)request->role.getCString()));
4685 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4686 "handleAssociatorsRequest: resultRole = %s ",
4687 (const char*)request->resultRole.getCString()));
4688 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4689 "handleAssociatorsRequest: includeQualifiers = false");
4690 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4691 "handleAssociatorsRequest: includeClassOrigin = false");
|
4692 mark.hamzy 1.29 #endif
4693
|
4694 kumpf 1.55 StatProviderTimeMeasurement providerTime(response);
4695
|
4696 marek 1.68 jobjectArray jAr=(jobjectArray)env->CallObjectMethod(
4697 (jobject)pr.jProvider,
4698 id,
4699 joc,
4700 jAssociationName,
4701 jPathName,
4702 jResultClass,
4703 jRole,
4704 jResultRole,
4705 JMPI_INCLUDE_QUALIFIERS,
4706 request->includeClassOrigin,
4707 jPropertyList);
|
4708 mark.hamzy 1.25
|
4709 mark.hamzy 1.23 JMPIjvm::checkException(env);
4710
|
4711 mark.hamzy 1.43 if (joc)
4712 {
|
4713 marek 1.68 env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate);
|
4714 mark.hamzy 1.43
4715 JMPIjvm::checkException(env);
4716 }
4717
|
4718 mark.hamzy 1.23 handler.processing();
|
4719 mark.hamzy 1.45 if (jAr) {
4720 for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
|
4721 mark.hamzy 1.43 JMPIjvm::checkException(env);
4722
|
4723 mark.hamzy 1.45 jobject jciRet = env->GetObjectArrayElement(jAr,i);
|
4724 mark.hamzy 1.43
|
4725 mark.hamzy 1.23 JMPIjvm::checkException(env);
4726
|
4727 marek 1.68 jlong jciRetRef = env->CallLongMethod(
4728 jciRet,
4729 JMPIjvm::jv.CIMInstanceCInst);
|
4730 mark.hamzy 1.24
|
4731 mark.hamzy 1.23 JMPIjvm::checkException(env);
4732
|
4733 marek 1.68 CIMInstance *ciRet = DEBUG_ConvertJavaToC(
4734 jlong,
4735 CIMInstance*,
4736 jciRetRef);
4737 CIMClass cls;
|
4738 mark.hamzy 1.40
4739 try
4740 {
|
4741 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4742 "handleAssociatorsRequest: "
4743 "enter(METHOD_CIMASSOCIATORPROVIDER2): "
4744 "cimom_handle->getClass(%s).",
4745 (const char*)ciRet->
4746 getClassName().getString().getCString()
4747 ));
4748
|
4749 mark.hamzy 1.40 AutoMutex lock (pr._cimomMutex);
4750
4751 cls = pr._cimom_handle->getClass(context,
4752 request->nameSpace,
4753 ciRet->getClassName(),
4754 false,
4755 true,
4756 true,
4757 CIMPropertyList());
|
4758 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4759 "handleAssociatorsRequest: "
4760 "exit(METHOD_CIMASSOCIATORPROVIDER2): "
4761 "cimom_handle->getClass(%s).",
4762 (const char*)ciRet->
4763 getClassName().getString().getCString()
4764 ));
|
4765 mark.hamzy 1.40 }
4766 catch (CIMException e)
4767 {
|
4768 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL2,
4769 "handleAssociatorsRequest: "
4770 "Caught CIMExcetion(METHOD_CIMASSOCIATORPROVIDER2) "
4771 "during cimom_handle->getClass(%s): %s ",
4772 (const char*)ciRet->
4773 getClassName().getString().getCString(),
4774 (const char*)e.getMessage().getCString()
4775 ));
4776
4777 PEG_METHOD_EXIT();
|
4778 mark.hamzy 1.40 throw;
4779 }
4780
|
4781 mark.hamzy 1.43 const CIMObjectPath& op = ciRet->getPath();
4782 CIMObjectPath iop = ciRet->buildPath(cls);
|
4783 mark.hamzy 1.24
|
4784 mark.hamzy 1.27 JMPIjvm::checkException(env);
4785
|
4786 mark.hamzy 1.23 iop.setNameSpace(op.getNameSpace());
|
4787 mark.hamzy 1.29 ciRet->setPath(iop);
|
4788 schuur 1.13
|
4789 mark.hamzy 1.29 handler.deliver(*ciRet);
|
4790 mark.hamzy 1.23 }
4791 }
|
4792 mark.hamzy 1.24 handler.complete();
4793 break;
4794 }
4795
|
4796 mark.hamzy 1.43 case METHOD_ASSOCIATORPROVIDER2:
|
4797 mark.hamzy 1.24 {
|
4798 marek 1.68 jlong jocRef = DEBUG_ConvertCToJava(
4799 OperationContext*,
4800 jlong,
4801 &request->operationContext);
4802 jobject joc = env->NewObject(
4803 jv->OperationContextClassRef,
4804 jv->OperationContextNewJ,
4805 jocRef);
4806
4807 jlong jAssociationNameRef = DEBUG_ConvertCToJava(
4808 CIMObjectPath*,
4809 jlong,
4810 assocPath);
4811 jobject jAssociationName = env->NewObject(
4812 jv->CIMObjectPathClassRef,
4813 jv->CIMObjectPathNewJ,
4814 jAssociationNameRef);
|
4815 schuur 1.13
|
4816 mark.hamzy 1.43 JMPIjvm::checkException(env);
|
4817 schuur 1.1
|
4818 marek 1.68 jlong jPathNameRef = DEBUG_ConvertCToJava(
4819 CIMObjectPath*,
4820 jlong,
4821 objectPath);
4822 jobject jPathName = env->NewObject(
4823 jv->CIMObjectPathClassRef,
4824 jv->CIMObjectPathNewJ,
4825 jPathNameRef);
|
4826 w.white 1.31
|
4827 mark.hamzy 1.43 JMPIjvm::checkException(env);
|
4828 schuur 1.13
|
4829 marek 1.68 jstring jResultClass =
4830 env->NewStringUTF(
4831 request->resultClass.getString().getCString());
4832 jstring jRole =
4833 env->NewStringUTF(request->role.getCString());
4834 jstring jResultRole =
4835 env->NewStringUTF(request->resultRole.getCString());
|
4836 mark.hamzy 1.23
|
4837 mark.hamzy 1.43 JMPIjvm::checkException(env);
|
4838 schuur 1.1
|
4839 mark.hamzy 1.43 jobjectArray jPropertyList = getList(jv,env,request->propertyList);
|
4840 schuur 1.13
|
4841 mark.hamzy 1.43 #ifdef PEGASUS_DEBUG
|
4842 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4843 "handleAssociatorsRequest: assocName = %s ",
4844 (const char*)assocPath->toString().getCString()));
4845 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4846 "handleAssociatorsRequest: pathName = %s ",
4847 (const char*)objectPath->toString().getCString()));
4848 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4849 "handleAssociatorsRequest: resultClass = %s ",
4850 (const char*)request->resultClass.getString().getCString()));
4851 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4852 "handleAssociatorsRequest: role = %s ",
4853 (const char*)request->role.getCString()));
4854 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4855 "handleAssociatorsRequest: resultRole = %s ",
4856 (const char*)request->resultRole.getCString()));
4857 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4858 "handleAssociatorsRequest: includeQualifiers = false");
4859 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4860 "handleAssociatorsRequest: includeClassOrigin = false");
|
4861 mark.hamzy 1.43 #endif
|
4862 schuur 1.1
|
4863 kumpf 1.55 StatProviderTimeMeasurement providerTime(response);
4864
|
4865 marek 1.68 jobjectArray jVec=(jobjectArray)env->CallObjectMethod(
4866 (jobject)pr.jProvider,
4867 id,
4868 joc,
4869 jAssociationName,
4870 jPathName,
4871 jResultClass,
4872 jRole,
4873 jResultRole,
4874 JMPI_INCLUDE_QUALIFIERS,
4875 request->includeClassOrigin,
4876 jPropertyList);
|
4877 mark.hamzy 1.23
|
4878 mark.hamzy 1.43 JMPIjvm::checkException(env);
|
4879 mark.hamzy 1.23
|
4880 mark.hamzy 1.43 if (joc)
4881 {
|
4882 marek 1.68 env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate);
|
4883 schuur 1.1
|
4884 mark.hamzy 1.43 JMPIjvm::checkException(env);
4885 }
|
4886 schuur 1.1
|
4887 mark.hamzy 1.43 handler.processing();
4888 if (jVec) {
|
4889 marek 1.68 for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize);
4890 i<m;
4891 i++)
4892 {
|
4893 mark.hamzy 1.43 JMPIjvm::checkException(env);
|
4894 schuur 1.1
|
4895 marek 1.68 jobject jciRet = env->CallObjectMethod(
4896 jVec,
4897 JMPIjvm::jv.VectorElementAt,
4898 i);
|
4899 schuur 1.1
|
4900 mark.hamzy 1.43 JMPIjvm::checkException(env);
|
4901 schuur 1.1
|
4902 marek 1.68 jlong jciRetRef = env->CallLongMethod(
4903 jciRet,
4904 JMPIjvm::jv.CIMInstanceCInst);
|
4905 schuur 1.1
|
4906 mark.hamzy 1.43 JMPIjvm::checkException(env);
|
4907 mark.hamzy 1.24
|
4908 marek 1.68 CIMInstance *ciRet = DEBUG_ConvertJavaToC(
4909 jlong,
4910 CIMInstance*,
4911 jciRetRef);
4912 CIMClass cls;
|
4913 schuur 1.1
|
4914 mark.hamzy 1.43 try
4915 {
|
4916 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4917 "handleAssociatorsRequest: "
4918 "enter(METHOD_ASSOCIATORPROVIDER2): "
4919 "cimom_handle->getClass(%s).",
4920 (const char*)ciRet->
4921 getClassName().getString().getCString()
4922 ));
4923
|
4924 mark.hamzy 1.43 AutoMutex lock (pr._cimomMutex);
4925
|
4926 marek 1.68 cls = pr._cimom_handle->getClass(
4927 context,
4928 request->nameSpace,
4929 ciRet->getClassName(),
4930 false,
4931 true,
4932 true,
4933 CIMPropertyList());
|
4934 thilo.boehm 1.69
4935 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4936 "handleAssociatorsRequest: "
4937 "exit(METHOD_ASSOCIATORPROVIDER2): "
4938 "cimom_handle->getClass(%s).",
4939 (const char*)ciRet->
4940 getClassName().getString().getCString()
4941 ));
4942
|
4943 mark.hamzy 1.43 }
4944 catch (CIMException e)
4945 {
|
4946 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL2,
4947 "handleAssociatorsRequest: "
4948 "Caught CIMExcetion(METHOD_ASSOCIATORPROVIDER2) "
4949 "during cimom_handle->getClass(%s): %s ",
4950 (const char*)ciRet->
4951 getClassName().getString().getCString(),
4952 (const char*)e.getMessage().getCString()
4953 ));
4954
4955 PEG_METHOD_EXIT();
|
4956 mark.hamzy 1.43 throw;
4957 }
4958
4959 const CIMObjectPath& op = ciRet->getPath();
4960 CIMObjectPath iop = ciRet->buildPath(cls);
4961
4962 JMPIjvm::checkException(env);
4963
4964 iop.setNameSpace(op.getNameSpace());
4965 ciRet->setPath(iop);
4966
4967 handler.deliver(*ciRet);
4968 }
4969 }
4970 handler.complete();
4971 break;
4972 }
4973
4974 case METHOD_ASSOCIATORPROVIDER:
4975 {
|
4976 marek 1.68 jlong jAssociationNameRef = DEBUG_ConvertCToJava(
4977 CIMObjectPath*,
4978 jlong,
4979 assocPath);
4980 jobject jAssociationName = env->NewObject(
4981 jv->CIMObjectPathClassRef,
4982 jv->CIMObjectPathNewJ,
4983 jAssociationNameRef);
|
4984 mark.hamzy 1.43
4985 JMPIjvm::checkException(env);
4986
|
4987 marek 1.68 jlong jPathNameRef = DEBUG_ConvertCToJava(
4988 CIMObjectPath*,
4989 jlong,
4990 objectPath);
4991 jobject jPathName = env->NewObject(
4992 jv->CIMObjectPathClassRef,
4993 jv->CIMObjectPathNewJ,
4994 jPathNameRef);
|
4995 mark.hamzy 1.43
4996 JMPIjvm::checkException(env);
4997
|
4998 marek 1.68 jstring jResultClass =
4999 env->NewStringUTF(
5000 request->resultClass.getString().getCString());
5001 jstring jRole =
5002 env->NewStringUTF(request->role.getCString());
5003 jstring jResultRole =
5004 env->NewStringUTF(request->resultRole.getCString());
|
5005 mark.hamzy 1.43
5006 JMPIjvm::checkException(env);
5007
5008 jobjectArray jPropertyList = getList(jv,env,request->propertyList);
5009
5010 #ifdef PEGASUS_DEBUG
|
5011 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5012 "handleAssociatorsRequest: assocName = %s ",
5013 (const char*)assocPath->toString().getCString()));
5014 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5015 "handleAssociatorsRequest: pathName = %s ",
5016 (const char*)objectPath->toString().getCString()));
5017 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5018 "handleAssociatorsRequest: resultClass = %s ",
5019 (const char*)request->resultClass.getString().getCString()));
5020 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5021 "handleAssociatorsRequest: role = %s ",
5022 (const char*)request->role.getCString()));
5023 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5024 "handleAssociatorsRequest: resultRole = %s ",
5025 (const char*)request->resultRole.getCString()));
5026 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5027 "handleAssociatorsRequest: includeQualifiers = false");
5028 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5029 "handleAssociatorsRequest: includeClassOrigin = false");
|
5030 mark.hamzy 1.43 #endif
5031
|
5032 kumpf 1.55 StatProviderTimeMeasurement providerTime(response);
5033
|
5034 marek 1.68 jobjectArray jVec=(jobjectArray)env->CallObjectMethod(
5035 (jobject)pr.jProvider,
5036 id,
5037 jAssociationName,
5038 jPathName,
5039 jResultClass,
5040 jRole,
5041 jResultRole,
5042 JMPI_INCLUDE_QUALIFIERS,
5043 request->includeClassOrigin,
5044 jPropertyList);
|
5045 mark.hamzy 1.43
5046 JMPIjvm::checkException(env);
5047
5048 handler.processing();
5049 if (jVec) {
|
5050 marek 1.68 for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize);
5051 i<m;
5052 i++)
5053 {
|
5054 mark.hamzy 1.43 JMPIjvm::checkException(env);
|
5055 marek 1.68 jobject jciRet = env->CallObjectMethod(
5056 jVec,
5057 JMPIjvm::jv.VectorElementAt,
5058 i);
|
5059 mark.hamzy 1.43
5060 JMPIjvm::checkException(env);
5061
|
5062 marek 1.68 jlong jciRetRef = env->CallLongMethod(
5063 jciRet,
5064 JMPIjvm::jv.CIMInstanceCInst);
5065 CIMInstance *ciRet = DEBUG_ConvertJavaToC(
5066 jlong,
5067 CIMInstance*,
5068 jciRetRef);
5069 CIMClass cls;
|
5070 mark.hamzy 1.43
5071 try
5072 {
|
5073 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5074 "handleAssociatorsRequest: "
5075 "enter(METHOD_ASSOCIATORPROVIDER): "
5076 "cimom_handle->getClass(%s).",
5077 (const char*)ciRet->
5078 getClassName().getString().getCString()
5079 ));
5080
|
5081 mark.hamzy 1.43 AutoMutex lock (pr._cimomMutex);
5082
5083 cls = pr._cimom_handle->getClass(context,
5084 request->nameSpace,
5085 ciRet->getClassName(),
5086 false,
5087 true,
5088 true,
5089 CIMPropertyList());
|
5090 thilo.boehm 1.69
5091 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5092 "handleAssociatorsRequest: "
5093 "exit(METHOD_ASSOCIATORPROVIDER): "
5094 "cimom_handle->getClass(%s).",
5095 (const char*)ciRet->
5096 getClassName().getString().getCString()
5097 ));
|
5098 mark.hamzy 1.43 }
5099 catch (CIMException e)
5100 {
|
5101 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL2,
5102 "handleAssociatorsRequest: "
5103 "Caught CIMExcetion(METHOD_ASSOCIATORPROVIDER) "
5104 "during cimom_handle->getClass(%s): %s ",
5105 (const char*)ciRet->
5106 getClassName().getString().getCString(),
5107 (const char*)e.getMessage().getCString()
5108 ));
5109
5110 PEG_METHOD_EXIT();
|
5111 mark.hamzy 1.43 throw;
5112 }
5113
|
5114 marek 1.68 const CIMObjectPath& op = ciRet->getPath();
5115 CIMObjectPath iop = ciRet->buildPath(cls);
|
5116 mark.hamzy 1.43
5117 JMPIjvm::checkException(env);
5118
5119 iop.setNameSpace(op.getNameSpace());
5120 ciRet->setPath(iop);
5121
5122 handler.deliver(*ciRet);
5123 }
5124 }
5125 handler.complete();
5126 break;
5127 }
5128
5129 case METHOD_UNKNOWN:
5130 {
|
5131 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
5132 "handleAssociatorsRequest: Unknown method provider!");
|
5133 mark.hamzy 1.43 break;
5134 }
5135 }
5136 }
5137 HandlerCatch(handler);
5138
5139 if (env) JMPIjvm::detachThread();
5140
5141 PEG_METHOD_EXIT();
5142
5143 return(response);
5144 }
5145
|
5146 marek 1.68 Message * JMPIProviderManager::handleAssociatorNamesRequest(
5147 const Message * message) throw()
|
5148 mark.hamzy 1.43 {
|
5149 marek 1.68 PEG_METHOD_ENTER(
5150 TRC_PROVIDERMANAGER,
5151 "JMPIProviderManager::handleAssociatorNamesRequest");
|
5152 mark.hamzy 1.43
|
5153 kumpf 1.55 HandlerIntro(AssociatorNames,message,request,response,handler);
|
5154 mark.hamzy 1.43
5155 typedef enum {
5156 METHOD_UNKNOWN = 0,
5157 METHOD_CIMASSOCIATORPROVIDER,
5158 METHOD_CIMASSOCIATORPROVIDER2,
5159 METHOD_ASSOCIATORPROVIDER,
5160 METHOD_ASSOCIATORPROVIDER2
5161 } METHOD_VERSION;
5162 METHOD_VERSION eMethodFound = METHOD_UNKNOWN;
5163 JNIEnv *env = NULL;
5164
|
5165 marek 1.68 try
5166 {
|
5167 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL3,
5168 "handleAssociatorNamesRequest: "
5169 "name space = %s class name = %s",
5170 (const char*)request->nameSpace.getString().getCString(),
5171 (const char*)request->
5172 objectName.getClassName().getString().getCString()
5173 ));
|
5174 mark.hamzy 1.43
5175 // make target object path
|
5176 marek 1.68 CIMObjectPath *objectPath = new CIMObjectPath(
5177 System::getHostName(),
5178 request->nameSpace,
5179 request->objectName.getClassName(),
5180 request->objectName.getKeyBindings());
5181 CIMObjectPath *assocPath = new CIMObjectPath(
5182 System::getHostName(),
5183 request->nameSpace,
5184 request->assocClass.getString());
|
5185 mark.hamzy 1.43
5186 // resolve provider name
5187 ProviderName name = _resolveProviderName(
5188 request->operationContext.get(ProviderIdContainer::NAME));
5189
5190 // get cached or load new provider module
|
5191 marek 1.68 JMPIProvider::OpProviderHolder ph =
5192 providerManager.getProvider(
5193 name.getPhysicalName(),
5194 name.getLogicalName(),
5195 String::EMPTY);
|
5196 mark.hamzy 1.43
5197 // forward request
5198 JMPIProvider &pr = ph.GetProvider();
5199
|
5200 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3,
5201 "handleAssociatorNamesRequest: "
5202 "Calling provider: %s, role: %s, aCls: %s",
5203 (const char*)pr.getName().getCString(),
5204 (const char*)request->role.getCString(),
5205 (const char*)request->assocClass.getString().getCString()
5206 ));
|
5207 mark.hamzy 1.43
5208 JvmVector *jv = 0;
5209
5210 env = JMPIjvm::attachThread(&jv);
5211
5212 if (!env)
5213 {
|
5214 thilo.boehm 1.69 PEG_TRACE_CSTRING( TRC_PROVIDERMANAGER, Tracer::LEVEL2,
5215 "handleAssociatorNamesRequest: "
5216 "Could not initialize the JVM (Java Virtual Machine) "
5217 "runtime environment.");
5218
|
5219 mark.hamzy 1.43 PEG_METHOD_EXIT();
|
5220 mark.hamzy 1.37
|
5221 marek 1.68 throw PEGASUS_CIM_EXCEPTION_L(
5222 CIM_ERR_FAILED,
5223 MessageLoaderParms(
|
5224 thilo.boehm 1.69 "ProviderManager.JMPI.JMPIProviderManager.INIT_JVM_FAILED",
|
5225 marek 1.68 "Could not initialize the JVM (Java Virtual Machine) "
5226 "runtime environment."));
|
5227 mark.hamzy 1.37 }
5228
|
5229 schuur 1.1 JMPIProvider::pm_service_op_lock op_lock(&pr);
5230
|
5231 mark.hamzy 1.43 jmethodID id = NULL;
5232 String interfaceType;
5233 String interfaceVersion;
5234
|
5235 marek 1.68 getInterfaceType(
5236 request->operationContext.get(ProviderIdContainer::NAME),
5237 interfaceType,
5238 interfaceVersion);
|
5239 mark.hamzy 1.43
5240 if (interfaceType == "JMPI")
5241 {
|
5242 marek 1.68 id = env->GetMethodID(
5243 (jclass)pr.jProviderClass,
5244 "associatorNames",
5245 "(Lorg/pegasus/jmpi/CIMObjectPath;"
5246 "Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;"
5247 "Ljava/lang/String;Ljava/lang/String;)"
5248 "Ljava/util/Vector;");
|
5249 mark.hamzy 1.43
5250 if (id != NULL)
5251 {
5252 eMethodFound = METHOD_ASSOCIATORPROVIDER;
|
5253 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5254 "handleAssociatorNamesRequest: "
5255 "Found METHOD_ASSOCIATORPROVIDER.");
|
5256 mark.hamzy 1.43 }
|
5257 mark.hamzy 1.24
|
5258 mark.hamzy 1.43 if (id == NULL)
5259 {
5260 env->ExceptionClear();
|
5261 marek 1.68 id = env->GetMethodID(
5262 (jclass)pr.jProviderClass,
5263 "associatorNames",
5264 "(Lorg/pegasus/jmpi/CIMObjectPath;"
5265 "Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;"
5266 "Ljava/lang/String;Ljava/lang/String;)"
5267 "[Lorg/pegasus/jmpi/CIMObjectPath;");
|
5268 mark.hamzy 1.43
5269 if (id != NULL)
5270 {
5271 eMethodFound = METHOD_CIMASSOCIATORPROVIDER;
|
5272 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5273 "handleAssociatorNamesRequest: "
5274 "Found METHOD_CIMASSOCIATORPROVIDER.");
|
5275 mark.hamzy 1.43 }
5276 }
5277 }
5278 else if (interfaceType == "JMPIExperimental")
|
5279 mark.hamzy 1.24 {
|
5280 marek 1.68 id = env->GetMethodID(
5281 (jclass)pr.jProviderClass,
5282 "associatorNames",
5283 "(Lorg/pegasus/jmpi/OperationContext;"
5284 "Lorg/pegasus/jmpi/CIMObjectPath;"
5285 "Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;"
5286 "Ljava/lang/String;Ljava/lang/String;)"
5287 "Ljava/util/Vector;");
|
5288 mark.hamzy 1.24
|
5289 mark.hamzy 1.43 if (id != NULL)
5290 {
5291 eMethodFound = METHOD_ASSOCIATORPROVIDER2;
|
5292 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5293 "handleAssociatorNamesRequest: "
5294 "Found METHOD_ASSOCIATORPROVIDER2.");
|
5295 mark.hamzy 1.43 }
|
5296 mark.hamzy 1.24
|
5297 mark.hamzy 1.43 if (id == NULL)
5298 {
5299 env->ExceptionClear();
|
5300 mark.hamzy 1.24
|
5301 marek 1.68 id = env->GetMethodID(
5302 (jclass)pr.jProviderClass,
5303 "associatorNames",
5304 "(Lorg/pegasus/jmpi/OperationContext;"
5305 "Lorg/pegasus/jmpi/CIMObjectPath;"
5306 "Lorg/pegasus/jmpi/CIMObjectPath;"
5307 "Ljava/lang/String;Ljava/lang/String;"
5308 "Ljava/lang/String;)["
5309 "Lorg/pegasus/jmpi/CIMObjectPath;");
|
5310 mark.hamzy 1.43
5311 if (id != NULL)
5312 {
5313 eMethodFound = METHOD_CIMASSOCIATORPROVIDER2;
|
5314 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5315 "handleAssociatorNamesRequest: "
5316 "Found METHOD_CIMASSOCIATORPROVIDER2.");
|
5317 mark.hamzy 1.43 }
5318 }
|
5319 mark.hamzy 1.24 }
|
5320 schuur 1.13
|
5321 mark.hamzy 1.24 if (id == NULL)
5322 {
|
5323 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
5324 "handleAssociatorNames: No method found!");
|
5325 mark.hamzy 1.43
5326 PEG_METHOD_EXIT();
5327
|
5328 marek 1.68 throw PEGASUS_CIM_EXCEPTION_L(
5329 CIM_ERR_FAILED,
5330 MessageLoaderParms(
|
5331 thilo.boehm 1.69 "ProviderManager.JMPI.JMPIProviderManager.METHOD_NOT_FOUND",
|
5332 marek 1.68 "Could not find a method for the provider based on "
5333 "InterfaceType."));
|
5334 mark.hamzy 1.23 }
|
5335 mark.hamzy 1.24
|
5336 schuur 1.1 JMPIjvm::checkException(env);
5337
|
5338 mark.hamzy 1.24 switch (eMethodFound)
5339 {
|
5340 mark.hamzy 1.43 case METHOD_CIMASSOCIATORPROVIDER:
5341 {
|
5342 marek 1.68 jlong jAssociationNameRef = DEBUG_ConvertCToJava(
5343 CIMObjectPath*,
5344 jlong,
5345 assocPath);
5346 jobject jAssociationName = env->NewObject(
5347 jv->CIMObjectPathClassRef,
5348 jv->CIMObjectPathNewJ,
5349 jAssociationNameRef);
|
5350 mark.hamzy 1.43
5351 JMPIjvm::checkException(env);
5352
|
5353 marek 1.68 jlong jPathNameRef = DEBUG_ConvertCToJava(
5354 CIMObjectPath*,
5355 jlong,
5356 objectPath);
5357 jobject jPathName = env->NewObject(
5358 jv->CIMObjectPathClassRef,
5359 jv->CIMObjectPathNewJ,
5360 jPathNameRef);
|
5361 mark.hamzy 1.43
5362 JMPIjvm::checkException(env);
5363
|
5364 marek 1.68 jstring jResultClass =
5365 env->NewStringUTF(
5366 request->resultClass.getString().getCString());
5367 jstring jRole =
5368 env->NewStringUTF(request->role.getCString());
5369 jstring jResultRole =
5370 env->NewStringUTF(request->resultRole.getCString());
|
5371 mark.hamzy 1.43
5372 JMPIjvm::checkException(env);
5373
5374 #ifdef PEGASUS_DEBUG
|
5375 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5376 "handleAssociatorNamesRequest: assocName = %s ",
5377 (const char*)assocPath->toString().getCString()));
5378 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5379 "handleAssociatorNamesRequest: resultClass = %s ",
5380 (const char*)request->resultClass.getString().getCString()));
5381 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5382 "handleAssociatorNamesRequest: role = %s ",
5383 (const char*)request->role.getCString()));
5384 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5385 "handleAssociatorNamesRequest: resultRole = %s ",
5386 (const char*)request->resultRole.getCString()));
|
5387 mark.hamzy 1.43 #endif
5388
|
5389 kumpf 1.55 StatProviderTimeMeasurement providerTime(response);
5390
|
5391 marek 1.68 jobjectArray jAr=(jobjectArray)env->CallObjectMethod(
5392 (jobject)pr.jProvider,
5393 id,
5394 jAssociationName,
5395 jPathName,
5396 jResultClass,
5397 jRole,
5398 jResultRole);
|
5399 mark.hamzy 1.43
5400 JMPIjvm::checkException(env);
5401
5402 handler.processing();
|
5403 mark.hamzy 1.45 if (jAr) {
5404 for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
|
5405 mark.hamzy 1.43 JMPIjvm::checkException(env);
5406
|
5407 mark.hamzy 1.45 jobject jcopRet = env->GetObjectArrayElement(jAr,i);
|
5408 mark.hamzy 1.43
5409 JMPIjvm::checkException(env);
5410
|
5411 marek 1.68 jlong jcopRetRef = env->CallLongMethod(
5412 jcopRet,
5413 JMPIjvm::jv.CIMObjectPathCInst);
5414 CIMObjectPath *copRet = DEBUG_ConvertJavaToC(
5415 jlong,
5416 CIMObjectPath*,
5417 jcopRetRef);
|
5418 mark.hamzy 1.43
5419 JMPIjvm::checkException(env);
5420
5421 handler.deliver(*copRet);
5422 }
5423 }
5424 handler.complete();
5425 break;
5426 }
5427
5428 case METHOD_CIMASSOCIATORPROVIDER2:
|
5429 mark.hamzy 1.24 {
|
5430 marek 1.68 jlong jocRef = DEBUG_ConvertCToJava(
5431 OperationContext*,
5432 jlong,
5433 &request->operationContext);
5434 jobject joc = env->NewObject(
5435 jv->OperationContextClassRef,
5436 jv->OperationContextNewJ,
5437 jocRef);
5438 jlong jAssociationNameRef = DEBUG_ConvertCToJava(
5439 CIMObjectPath*,
5440 jlong,
5441 assocPath);
5442 jobject jAssociationName = env->NewObject(
5443 jv->CIMObjectPathClassRef,
5444 jv->CIMObjectPathNewJ,
5445 jAssociationNameRef);
|
5446 mark.hamzy 1.25
5447 JMPIjvm::checkException(env);
5448
|
5449 marek 1.68 jlong jPathNameRef = DEBUG_ConvertCToJava(
5450 CIMObjectPath*,
5451 jlong,
5452 objectPath);
5453 jobject jPathName = env->NewObject(
5454 jv->CIMObjectPathClassRef,
5455 jv->CIMObjectPathNewJ,
5456 jPathNameRef);
|
5457 mark.hamzy 1.43
5458 JMPIjvm::checkException(env);
5459
|
5460 marek 1.68 jstring jResultClass =
5461 env->NewStringUTF(
5462 request->resultClass.getString().getCString());
5463 jstring jRole =
5464 env->NewStringUTF(request->role.getCString());
5465 jstring jResultRole =
5466 env->NewStringUTF(request->resultRole.getCString());
|
5467 mark.hamzy 1.25
5468 JMPIjvm::checkException(env);
5469
|
5470 mark.hamzy 1.29 #ifdef PEGASUS_DEBUG
|
5471 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5472 "handleAssociatorNamesRequest: assocName = %s ",
5473 (const char*)assocPath->toString().getCString()));
5474 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5475 "handleAssociatorNamesRequest: resultClass = %s ",
5476 (const char*)request->resultClass.getString().getCString()));
5477 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5478 "handleAssociatorNamesRequest: role = %s ",
5479 (const char*)request->role.getCString()));
5480 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5481 "handleAssociatorNamesRequest: resultRole = %s ",
5482 (const char*)request->resultRole.getCString()));
|
5483 mark.hamzy 1.29 #endif
5484
|
5485 kumpf 1.55 StatProviderTimeMeasurement providerTime(response);
5486
|
5487 marek 1.68 jobjectArray jAr=(jobjectArray)env->CallObjectMethod(
5488 (jobject)pr.jProvider,
5489 id,
5490 joc,
5491 jAssociationName,
5492 jPathName,
5493 jResultClass,
5494 jRole,
5495 jResultRole);
|
5496 mark.hamzy 1.25
|
5497 mark.hamzy 1.23 JMPIjvm::checkException(env);
5498
|
5499 mark.hamzy 1.43 if (joc)
5500 {
|
5501 marek 1.68 env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate);
|
5502 mark.hamzy 1.43
5503 JMPIjvm::checkException(env);
5504 }
5505
|
5506 mark.hamzy 1.23 handler.processing();
|
5507 mark.hamzy 1.45 if (jAr) {
5508 for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
|
5509 mark.hamzy 1.23 JMPIjvm::checkException(env);
5510
|
5511 mark.hamzy 1.45 jobject jcopRet = env->GetObjectArrayElement(jAr,i);
|
5512 mark.hamzy 1.24
|
5513 mark.hamzy 1.23 JMPIjvm::checkException(env);
5514
|
5515 marek 1.68 jlong jcopRetRef = env->CallLongMethod(
5516 jcopRet,
5517 JMPIjvm::jv.CIMObjectPathCInst);
5518 CIMObjectPath *copRet = DEBUG_ConvertJavaToC(
5519 jlong,
5520 CIMObjectPath*,
5521 jcopRetRef);
|
5522 mark.hamzy 1.23
5523 JMPIjvm::checkException(env);
5524
|
5525 mark.hamzy 1.29 handler.deliver(*copRet);
|
5526 mark.hamzy 1.23 }
5527 }
5528 handler.complete();
|
5529 mark.hamzy 1.24 break;
|
5530 mark.hamzy 1.23 }
|
5531 mark.hamzy 1.24
|
5532 mark.hamzy 1.43 case METHOD_ASSOCIATORPROVIDER:
5533 {
|
5534 marek 1.68 jlong jAssociationNameRef = DEBUG_ConvertCToJava(
5535 CIMObjectPath*,
5536 jlong,
5537 assocPath);
5538 jobject jAssociationName = env->NewObject(
5539 jv->CIMObjectPathClassRef,
5540 jv->CIMObjectPathNewJ,
5541 jAssociationNameRef);
|
5542 mark.hamzy 1.43
5543 JMPIjvm::checkException(env);
5544
|
5545 marek 1.68 jlong jPathNameRef = DEBUG_ConvertCToJava(
5546 CIMObjectPath*,
5547 jlong,
5548 objectPath);
5549 jobject jPathName = env->NewObject(
5550 jv->CIMObjectPathClassRef,
5551 jv->CIMObjectPathNewJ,
5552 jPathNameRef);
|
5553 mark.hamzy 1.43
5554 JMPIjvm::checkException(env);
5555
|
5556 marek 1.68 jstring jResultClass =
5557 env->NewStringUTF(
5558 request->resultClass.getString().getCString());
5559 jstring jRole =
5560 env->NewStringUTF(request->role.getCString());
5561 jstring jResultRole =
5562 env->NewStringUTF(request->resultRole.getCString());
|
5563 mark.hamzy 1.43
5564 JMPIjvm::checkException(env);
5565
5566 #ifdef PEGASUS_DEBUG
|
5567 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5568 "handleAssociatorNamesRequest: assocName = %s ",
5569 (const char*)assocPath->toString().getCString()));
5570 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5571 "handleAssociatorNamesRequest: pathName = %s ",
5572 (const char*)objectPath->toString().getCString()));
5573 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5574 "handleAssociatorNamesRequest: resultClass = %s ",
5575 (const char*)request->resultClass.getString().getCString()));
5576 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5577 "handleAssociatorNamesRequest: role = %s ",
5578 (const char*)request->role.getCString()));
5579 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5580 "handleAssociatorNamesRequest: resultRole = %s ",
5581 (const char*)request->resultRole.getCString()));
|
5582 mark.hamzy 1.43 #endif
5583
|
5584 kumpf 1.55 StatProviderTimeMeasurement providerTime(response);
5585
|
5586 marek 1.68 jobjectArray jVec=(jobjectArray)env->CallObjectMethod(
5587 (jobject)pr.jProvider,
5588 id,
5589 jAssociationName,
5590 jPathName,
5591 jResultClass,
5592 jRole,
5593 jResultRole);
|
5594 mark.hamzy 1.43
5595 JMPIjvm::checkException(env);
5596
5597 handler.processing();
5598 if (jVec) {
|
5599 marek 1.68 for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize);
5600 i<m; i++)
5601 {
|
5602 mark.hamzy 1.43 JMPIjvm::checkException(env);
5603
|
5604 marek 1.68 jobject jcopRet = env->CallObjectMethod(
5605 jVec,
5606 JMPIjvm::jv.VectorElementAt,
5607 i);
|
5608 mark.hamzy 1.43
5609 JMPIjvm::checkException(env);
5610
|
5611 marek 1.68 jlong jcopRetRef = env->CallLongMethod(
5612 jcopRet,
5613 JMPIjvm::jv.CIMObjectPathCInst);
5614 CIMObjectPath *copRet = DEBUG_ConvertJavaToC(
5615 jlong,
5616 CIMObjectPath*,
5617 jcopRetRef);
|
5618 mark.hamzy 1.43
5619 JMPIjvm::checkException(env);
5620
5621 handler.deliver(*copRet);
5622 }
5623 }
5624 handler.complete();
5625 break;
5626 }
5627
5628 case METHOD_ASSOCIATORPROVIDER2:
|
5629 mark.hamzy 1.24 {
|
5630 marek 1.68 jlong jocRef = DEBUG_ConvertCToJava(
5631 OperationContext*,
5632 jlong,
5633 &request->operationContext);
5634 jobject joc = env->NewObject(
5635 jv->OperationContextClassRef,
5636 jv->OperationContextNewJ,
5637 jocRef);
5638
5639 jlong jAssociationNameRef = DEBUG_ConvertCToJava(
5640 CIMObjectPath*,
5641 jlong,
5642 assocPath);
5643 jobject jAssociationName = env->NewObject(
5644 jv->CIMObjectPathClassRef,
5645 jv->CIMObjectPathNewJ,
5646 jAssociationNameRef);
|
5647 mark.hamzy 1.25
5648 JMPIjvm::checkException(env);
5649
|
5650 marek 1.68 jlong jPathNameRef = DEBUG_ConvertCToJava(
5651 CIMObjectPath*,
5652 jlong,
5653 objectPath);
5654 jobject jPathName = env->NewObject(
5655 jv->CIMObjectPathClassRef,
5656 jv->CIMObjectPathNewJ,
5657 jPathNameRef);
|
5658 mark.hamzy 1.24
5659 JMPIjvm::checkException(env);
5660
|
5661 marek 1.68 jstring jResultClass =
5662 env->NewStringUTF(
5663 request->resultClass.getString().getCString());
5664 jstring jRole =
5665 env->NewStringUTF(request->role.getCString());
5666 jstring jResultRole =
5667 env->NewStringUTF(request->resultRole.getCString());
|
5668 mark.hamzy 1.25
5669 JMPIjvm::checkException(env);
5670
|
5671 mark.hamzy 1.29 #ifdef PEGASUS_DEBUG
|
5672 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5673 "handleAssociatorNamesRequest: assocName = %s ",
5674 (const char*)assocPath->toString().getCString()));
5675 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5676 "handleAssociatorNamesRequest: pathName = %s ",
5677 (const char*)objectPath->toString().getCString()));
5678 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5679 "handleAssociatorNamesRequest: resultClass = %s ",
5680 (const char*)request->resultClass.getString().getCString()));
5681 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5682 "handleAssociatorNamesRequest: role = %s ",
5683 (const char*)request->role.getCString()));
5684 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5685 "handleAssociatorNamesRequest: resultRole = %s ",
5686 (const char*)request->resultRole.getCString()));
|
5687 mark.hamzy 1.29 #endif
5688
|
5689 kumpf 1.55 StatProviderTimeMeasurement providerTime(response);
5690
|
5691 marek 1.68 jobjectArray jVec=(jobjectArray)env->CallObjectMethod(
5692 (jobject)pr.jProvider,
5693 id,
5694 joc,
5695 jAssociationName,
5696 jPathName,
5697 jResultClass,
5698 jRole,
5699 jResultRole);
|
5700 mark.hamzy 1.25
|
5701 mark.hamzy 1.23 JMPIjvm::checkException(env);
5702
|
5703 mark.hamzy 1.43 if (joc)
5704 {
|
5705 marek 1.68 env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate);
|
5706 mark.hamzy 1.43
5707 JMPIjvm::checkException(env);
5708 }
5709
|
5710 mark.hamzy 1.23 handler.processing();
|
5711 mark.hamzy 1.24 if (jVec) {
|
5712 marek 1.68 for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize);
5713 i<m; i++)
5714 {
|
5715 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
5716 schuur 1.13
|
5717 marek 1.68 jobject jcopRet = env->CallObjectMethod(
5718 jVec,
5719 JMPIjvm::jv.VectorElementAt,
5720 i);
|
5721 mark.hamzy 1.24
|
5722 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
5723 schuur 1.13
|
5724 marek 1.68 jlong jcopRetRef = env->CallLongMethod(
5725 jcopRet,
5726 JMPIjvm::jv.CIMObjectPathCInst);
5727 CIMObjectPath *copRet = DEBUG_ConvertJavaToC(
5728 jlong,
5729 CIMObjectPath*,
5730 jcopRetRef);
|
5731 schuur 1.1
|
5732 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
5733 schuur 1.1
|
5734 mark.hamzy 1.29 handler.deliver(*copRet);
|
5735 mark.hamzy 1.23 }
5736 }
5737 handler.complete();
|
5738 mark.hamzy 1.24 break;
5739 }
5740
5741 case METHOD_UNKNOWN:
5742 {
|
5743 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
5744 "handleAssociatorNamesRequest: Unknown method provider!");
|
5745 mark.hamzy 1.24 break;
5746 }
|
5747 mark.hamzy 1.23 }
|
5748 schuur 1.1 }
5749 HandlerCatch(handler);
|
5750 schuur 1.12
|
5751 mark.hamzy 1.23 if (env) JMPIjvm::detachThread();
|
5752 schuur 1.12
|
5753 schuur 1.1 PEG_METHOD_EXIT();
5754
5755 return(response);
5756 }
5757
|
5758 marek 1.68 Message * JMPIProviderManager::handleReferencesRequest(
5759 const Message * message) throw()
|
5760 schuur 1.1 {
|
5761 marek 1.68 PEG_METHOD_ENTER(
5762 TRC_PROVIDERMANAGER,
5763 "JMPIProviderManager::handleReferencesRequest");
|
5764 mark.hamzy 1.23
|
5765 kumpf 1.55 HandlerIntro(References,message,request,response,handler);
|
5766 schuur 1.1
|
5767 mark.hamzy 1.24 typedef enum {
5768 METHOD_UNKNOWN = 0,
|
5769 mark.hamzy 1.43 METHOD_CIMASSOCIATORPROVIDER,
5770 METHOD_CIMASSOCIATORPROVIDER2,
5771 METHOD_ASSOCIATORPROVIDER,
5772 METHOD_ASSOCIATORPROVIDER2,
|
5773 mark.hamzy 1.24 } METHOD_VERSION;
5774 METHOD_VERSION eMethodFound = METHOD_UNKNOWN;
5775 JNIEnv *env = NULL;
|
5776 schuur 1.13
|
5777 marek 1.68 try
5778 {
|
5779 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL3,
5780 "handleReferencesRequest: "
5781 "name space = %s class name = %s",
5782 (const char*)request->nameSpace.getString().getCString(),
5783 (const char*)request->
5784 objectName.getClassName().getString().getCString()
5785 ));
|
5786 mark.hamzy 1.23
|
5787 schuur 1.1 // make target object path
|
5788 marek 1.68 CIMObjectPath *objectPath = new CIMObjectPath(
5789 System::getHostName(),
5790 request->nameSpace,
5791 request->objectName.getClassName(),
5792 request->objectName.getKeyBindings());
5793 CIMObjectPath *resultPath = new CIMObjectPath(
5794 System::getHostName(),
5795 request->nameSpace,
5796 request->resultClass.getString());
|
5797 schuur 1.1
5798 // resolve provider name
|
5799 kumpf 1.2 ProviderName name = _resolveProviderName(
5800 request->operationContext.get(ProviderIdContainer::NAME));
|
5801 schuur 1.1
|
5802 mark.hamzy 1.43 // get cached or load new provider module
|
5803 marek 1.68 JMPIProvider::OpProviderHolder ph =
5804 providerManager.getProvider(
5805 name.getPhysicalName(),
5806 name.getLogicalName(),
5807 String::EMPTY);
|
5808 mark.hamzy 1.43
5809 // convert arguments
5810 OperationContext context;
5811
|
5812 marek 1.68 context.insert(
5813 request->operationContext.get(IdentityContainer::NAME));
5814 context.insert(
5815 request->operationContext.get(AcceptLanguageListContainer::NAME));
5816 context.insert(
5817 request->operationContext.get(ContentLanguageListContainer::NAME));
|
5818 mark.hamzy 1.43
5819 // forward request
5820 JMPIProvider &pr = ph.GetProvider();
5821
|
5822 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3,
5823 "handleReferencesRequest: "
5824 "Calling provider: %s, role: %s, refCls: %s",
5825 (const char*)pr.getName().getCString(),
5826 (const char*)request->role.getCString(),
5827 (const char*)request->resultClass.getString().getCString()
5828 ));
|
5829 mark.hamzy 1.43
5830 JvmVector *jv = 0;
5831
5832 env = JMPIjvm::attachThread(&jv);
5833
5834 if (!env)
5835 {
|
5836 thilo.boehm 1.69 PEG_TRACE_CSTRING( TRC_PROVIDERMANAGER, Tracer::LEVEL2,
5837 "handleReferencesRequest: "
5838 "Could not initialize the JVM (Java Virtual Machine) "
5839 "runtime environment.");
5840
|
5841 mark.hamzy 1.43 PEG_METHOD_EXIT();
5842
|
5843 marek 1.68 throw PEGASUS_CIM_EXCEPTION_L(
5844 CIM_ERR_FAILED,
5845 MessageLoaderParms(
|
5846 thilo.boehm 1.69 "ProviderManager.JMPI.JMPIProviderManager.INIT_JVM_FAILED",
|
5847 marek 1.68 "Could not initialize the JVM (Java Virtual Machine) "
5848 "runtime environment."));
|
5849 mark.hamzy 1.43 }
5850
5851 JMPIProvider::pm_service_op_lock op_lock(&pr);
5852
5853 jmethodID id = NULL;
5854 String interfaceType;
5855 String interfaceVersion;
5856
|
5857 marek 1.68 getInterfaceType(
5858 request->operationContext.get(ProviderIdContainer::NAME),
5859 interfaceType,
5860 interfaceVersion);
|
5861 mark.hamzy 1.43
5862 if (interfaceType == "JMPI")
5863 {
|
5864 marek 1.68 id = env->GetMethodID(
5865 (jclass)pr.jProviderClass,
5866 "references",
5867 "(Lorg/pegasus/jmpi/CIMObjectPath;"
5868 "Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;"
5869 "ZZ[Ljava/lang/String;)Ljava/util/Vector;");
|
5870 mark.hamzy 1.43
5871 if (id != NULL)
5872 {
5873 eMethodFound = METHOD_ASSOCIATORPROVIDER;
|
5874 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5875 "handleReferencesRequest: "
5876 "Found METHOD_ASSOCIATORPROVIDER.");
|
5877 mark.hamzy 1.43 }
5878
5879 if (id == NULL)
5880 {
5881 env->ExceptionClear();
|
5882 marek 1.68 id = env->GetMethodID(
5883 (jclass)pr.jProviderClass,
5884 "references",
5885 "(Lorg/pegasus/jmpi/CIMObjectPath;"
5886 "Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;"
5887 "ZZ[Ljava/lang/String;)"
5888 "[Lorg/pegasus/jmpi/CIMInstance;");
|
5889 mark.hamzy 1.43
5890 if (id != NULL)
5891 {
5892 eMethodFound = METHOD_CIMASSOCIATORPROVIDER;
|
5893 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5894 "handleReferencesRequest: "
5895 "Found METHOD_CIMASSOCIATORPROVIDER.");
|
5896 mark.hamzy 1.43 }
5897 }
5898 }
5899 else if (interfaceType == "JMPIExperimental")
5900 {
|
5901 marek 1.68 id = env->GetMethodID(
5902 (jclass)pr.jProviderClass,
5903 "references",
5904 "(Lorg/pegasus/jmpi/OperationContext;"
5905 "Lorg/pegasus/jmpi/CIMObjectPath;"
5906 "Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;"
5907 "ZZ[Ljava/lang/String;)Ljava/util/Vector;");
|
5908 mark.hamzy 1.43
5909 if (id != NULL)
5910 {
5911 eMethodFound = METHOD_ASSOCIATORPROVIDER2;
|
5912 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5913 "handleReferencesRequest: "
5914 "Found METHOD_ASSOCIATORPROVIDER2.");
|
5915 mark.hamzy 1.43 }
5916
5917 if (id == NULL)
5918 {
5919 env->ExceptionClear();
|
5920 marek 1.68 id = env->GetMethodID(
5921 (jclass)pr.jProviderClass,
5922 "references",
5923 "(Lorg/pegasus/jmpi/OperationContext;"
5924 "Lorg/pegasus/jmpi/CIMObjectPath;"
5925 "Lorg/pegasus/jmpi/CIMObjectPath;"
5926 "Ljava/lang/String;ZZ[Ljava/lang/String;)"
5927 "[Lorg/pegasus/jmpi/CIMInstance;");
|
5928 mark.hamzy 1.43
5929 if (id != NULL)
5930 {
5931 eMethodFound = METHOD_CIMASSOCIATORPROVIDER2;
|
5932 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5933 "handleReferencesRequest: "
5934 "Found METHOD_CIMASSOCIATORPROVIDER2.");
|
5935 mark.hamzy 1.43 }
5936 }
5937 }
5938
5939 if (id == NULL)
5940 {
|
5941 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
5942 "handleReferencesRequest: No method provider found!");
|
5943 mark.hamzy 1.43
5944 PEG_METHOD_EXIT();
5945
|
5946 marek 1.68 throw PEGASUS_CIM_EXCEPTION_L(
5947 CIM_ERR_FAILED,
5948 MessageLoaderParms(
|
5949 thilo.boehm 1.69 "ProviderManager.JMPI.JMPIProviderManager.METHOD_NOT_FOUND",
|
5950 marek 1.68 "Could not find a method for the provider based on "
5951 "InterfaceType."));
|
5952 mark.hamzy 1.43 }
5953
5954 JMPIjvm::checkException(env);
5955
5956 switch (eMethodFound)
5957 {
5958 case METHOD_CIMASSOCIATORPROVIDER:
5959 {
|
5960 marek 1.68 jlong jAssociationNameRef = DEBUG_ConvertCToJava(
5961 CIMObjectPath*,
5962 jlong,
5963 resultPath);
5964 jobject jAssociationName = env->NewObject(
5965 jv->CIMObjectPathClassRef,
5966 jv->CIMObjectPathNewJ,
5967 jAssociationNameRef);
|
5968 mark.hamzy 1.43
5969 JMPIjvm::checkException(env);
5970
|
5971 marek 1.68 jlong jPathNameRef = DEBUG_ConvertCToJava(
5972 CIMObjectPath*,
5973 jlong,
5974 objectPath);
5975 jobject jPathName = env->NewObject(
5976 jv->CIMObjectPathClassRef,
5977 jv->CIMObjectPathNewJ,
5978 jPathNameRef);
|
5979 mark.hamzy 1.43
5980 JMPIjvm::checkException(env);
5981
5982 jstring jRole = env->NewStringUTF(request->role.getCString());
5983
5984 JMPIjvm::checkException(env);
5985
5986 jobjectArray jPropertyList = getList(jv,env,request->propertyList);
5987
5988 #ifdef PEGASUS_DEBUG
|
5989 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5990 "handleReferencesRequest: assocName = %s ",
5991 (const char*)resultPath->toString().getCString()));
5992 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5993 "handleReferencesRequest: role = %s ",
5994 (const char*)request->role.getCString()));
5995 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5996 "handleReferencesRequest: includeQualifiers = false");
5997 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5998 "handleReferencesRequest: includeClassOrigin = false");
|
5999 mark.hamzy 1.43 #endif
6000
|
6001 kumpf 1.55 StatProviderTimeMeasurement providerTime(response);
6002
|
6003 marek 1.68 jobjectArray jAr=(jobjectArray)env->CallObjectMethod(
6004 (jobject)pr.jProvider,
6005 id,
6006 jAssociationName,
6007 jPathName,
6008 jRole,
6009 JMPI_INCLUDE_QUALIFIERS,
6010 request->includeClassOrigin,
6011 jPropertyList);
|
6012 mark.hamzy 1.43
6013 JMPIjvm::checkException(env);
6014
6015 handler.processing();
|
6016 mark.hamzy 1.45 if (jAr) {
6017 for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
|
6018 mark.hamzy 1.43 JMPIjvm::checkException(env);
6019
|
6020 mark.hamzy 1.45 jobject jciRet = env->GetObjectArrayElement(jAr,i);
|
6021 mark.hamzy 1.43
6022 JMPIjvm::checkException(env);
6023
|
6024 marek 1.68 jlong jciRetRef = env->CallLongMethod(
6025 jciRet,
6026 JMPIjvm::jv.CIMInstanceCInst);
|
6027 mark.hamzy 1.43
6028 JMPIjvm::checkException(env);
6029
|
6030 marek 1.68 CIMInstance *ciRet = DEBUG_ConvertJavaToC(
6031 jlong,
6032 CIMInstance*,
6033 jciRetRef);
6034 CIMClass cls;
|
6035 mark.hamzy 1.43
6036 try
6037 {
|
6038 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6039 "handleReferencesRequest: "
6040 "enter(METHOD_CIMASSOCIATORPROVIDER): "
6041 "cimom_handle->getClass(%s).",
6042 (const char*)ciRet->
6043 getClassName().getString().getCString()
6044 ));
6045
|
6046 mark.hamzy 1.43 AutoMutex lock (pr._cimomMutex);
6047
6048 cls = pr._cimom_handle->getClass(context,
6049 request->nameSpace,
6050 ciRet->getClassName(),
6051 false,
6052 true,
6053 true,
6054 CIMPropertyList());
|
6055 thilo.boehm 1.69
6056 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6057 "handleReferencesRequest: "
6058 "exit(METHOD_CIMASSOCIATORPROVIDER): "
6059 "cimom_handle->getClass(%s).",
6060 (const char*)ciRet->
6061 getClassName().getString().getCString()
6062 ));
|
6063 mark.hamzy 1.43 }
6064 catch (CIMException e)
6065 {
|
6066 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL2,
6067 "handleReferencesRequest: "
6068 "Caught CIMExcetion(METHOD_CIMASSOCIATORPROVIDER) "
6069 "during cimom_handle->getClass(%s): %s ",
6070 (const char*)ciRet->
6071 getClassName().getString().getCString(),
6072 (const char*)e.getMessage().getCString()
6073 ));
6074
6075 PEG_METHOD_EXIT();
|
6076 mark.hamzy 1.43 throw;
6077 }
6078
6079 const CIMObjectPath& op = ciRet->getPath();
6080 CIMObjectPath iop = ciRet->buildPath(cls);
6081
6082 JMPIjvm::checkException(env);
6083
6084 iop.setNameSpace(op.getNameSpace());
6085 ciRet->setPath(iop);
6086
6087 handler.deliver(*ciRet);
6088 }
6089 }
6090 handler.complete();
6091 break;
6092 }
6093
6094 case METHOD_CIMASSOCIATORPROVIDER2:
6095 {
|
6096 marek 1.68 jlong jocRef = DEBUG_ConvertCToJava(
6097 OperationContext*,
6098 jlong,
6099 &request->operationContext);
6100 jobject joc = env->NewObject(
6101 jv->OperationContextClassRef,
6102 jv->OperationContextNewJ,
6103 jocRef);
6104
6105 jlong jAssociationNameRef = DEBUG_ConvertCToJava(
6106 CIMObjectPath*,
6107 jlong,
6108 resultPath);
6109 jobject jAssociationName = env->NewObject(
6110 jv->CIMObjectPathClassRef,
6111 jv->CIMObjectPathNewJ,
6112 jAssociationNameRef);
|
6113 mark.hamzy 1.43
6114 JMPIjvm::checkException(env);
6115
|
6116 marek 1.68 jlong jPathNameRef = DEBUG_ConvertCToJava(
6117 CIMObjectPath*,
6118 jlong,
6119 objectPath);
6120 jobject jPathName = env->NewObject(
6121 jv->CIMObjectPathClassRef,
6122 jv->CIMObjectPathNewJ,
6123 jPathNameRef);
|
6124 mark.hamzy 1.43
6125 JMPIjvm::checkException(env);
6126
6127 jstring jRole = env->NewStringUTF(request->role.getCString());
6128
6129 JMPIjvm::checkException(env);
6130
6131 jobjectArray jPropertyList = getList(jv,env,request->propertyList);
|
6132 schuur 1.1
|
6133 mark.hamzy 1.43 #ifdef PEGASUS_DEBUG
|
6134 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6135 "handleReferencesRequest: assocName = %s ",
6136 (const char*)resultPath->toString().getCString()));
6137 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6138 "handleReferencesRequest: role = %s ",
6139 (const char*)request->role.getCString()));
6140 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6141 "handleReferencesRequest: includeQualifiers = false");
6142 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6143 "handleReferencesRequest: includeClassOrigin = false");
|
6144 mark.hamzy 1.43 #endif
|
6145 schuur 1.1
|
6146 kumpf 1.55 StatProviderTimeMeasurement providerTime(response);
6147
|
6148 marek 1.68 jobjectArray jAr=(jobjectArray)env->CallObjectMethod(
6149 (jobject)pr.jProvider,
6150 id,
6151 joc,
6152 jAssociationName,
6153 jPathName,
6154 jRole,
6155 JMPI_INCLUDE_QUALIFIERS,
6156 request->includeClassOrigin,
6157 jPropertyList);
|
6158 schuur 1.1
|
6159 mark.hamzy 1.43 JMPIjvm::checkException(env);
|
6160 mark.hamzy 1.24
|
6161 mark.hamzy 1.43 if (joc)
6162 {
|
6163 marek 1.68 env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate);
|
6164 schuur 1.1
|
6165 mark.hamzy 1.43 JMPIjvm::checkException(env);
6166 }
|
6167 schuur 1.1
|
6168 mark.hamzy 1.43 handler.processing();
|
6169 mark.hamzy 1.45 if (jAr) {
6170 for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
|
6171 mark.hamzy 1.43 JMPIjvm::checkException(env);
|
6172 schuur 1.1
|
6173 mark.hamzy 1.45 jobject jciRet = env->GetObjectArrayElement(jAr,i);
|
6174 mark.hamzy 1.37
|
6175 mark.hamzy 1.43 JMPIjvm::checkException(env);
|
6176 mark.hamzy 1.37
|
6177 marek 1.68 jlong jciRetRef = env->CallLongMethod(
6178 jciRet,
6179 JMPIjvm::jv.CIMInstanceCInst);
|
6180 mark.hamzy 1.37
|
6181 mark.hamzy 1.43 JMPIjvm::checkException(env);
|
6182 schuur 1.1
|
6183 marek 1.68 CIMInstance *ciRet = DEBUG_ConvertJavaToC(
6184 jlong,
6185 CIMInstance*,
6186 jciRetRef);
|
6187 mark.hamzy 1.43 CIMClass cls;
|
6188 schuur 1.1
|
6189 mark.hamzy 1.43 try
6190 {
|
6191 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6192 "handleReferencesRequest: "
6193 "enter(METHOD_CIMASSOCIATORPROVIDER2): "
6194 "cimom_handle->getClass(%s).",
6195 (const char*)ciRet->
6196 getClassName().getString().getCString()
6197 ));
6198
|
6199 mark.hamzy 1.43 AutoMutex lock (pr._cimomMutex);
|
6200 mark.hamzy 1.24
|
6201 mark.hamzy 1.43 cls = pr._cimom_handle->getClass(context,
6202 request->nameSpace,
6203 ciRet->getClassName(),
6204 false,
6205 true,
6206 true,
6207 CIMPropertyList());
|
6208 thilo.boehm 1.69
6209 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6210 "handleReferencesRequest: "
6211 "exit(METHOD_CIMASSOCIATORPROVIDER2): "
6212 "cimom_handle->getClass(%s).",
6213 (const char*)ciRet->
6214 getClassName().getString().getCString()
6215 ));
|
6216 mark.hamzy 1.43 }
6217 catch (CIMException e)
6218 {
|
6219 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL2,
6220 "handleReferencesRequest: "
6221 "Caught CIMExcetion(METHOD_CIMASSOCIATORPROVIDER2) "
6222 "during cimom_handle->getClass(%s): %s ",
6223 (const char*)ciRet->
6224 getClassName().getString().getCString(),
6225 (const char*)e.getMessage().getCString()
6226 ));
6227
6228 PEG_METHOD_EXIT();
|
6229 mark.hamzy 1.43 throw;
6230 }
|
6231 mark.hamzy 1.24
|
6232 mark.hamzy 1.43 const CIMObjectPath& op = ciRet->getPath();
6233 CIMObjectPath iop = ciRet->buildPath(cls);
|
6234 mark.hamzy 1.24
|
6235 mark.hamzy 1.43 JMPIjvm::checkException(env);
|
6236 mark.hamzy 1.24
|
6237 mark.hamzy 1.43 iop.setNameSpace(op.getNameSpace());
6238 ciRet->setPath(iop);
|
6239 mark.hamzy 1.24
|
6240 mark.hamzy 1.43 handler.deliver(*ciRet);
6241 }
|
6242 mark.hamzy 1.24 }
|
6243 mark.hamzy 1.43 handler.complete();
6244 break;
|
6245 mark.hamzy 1.24 }
|
6246 schuur 1.12
|
6247 mark.hamzy 1.43 case METHOD_ASSOCIATORPROVIDER:
|
6248 mark.hamzy 1.24 {
|
6249 marek 1.68 jlong jAssociationNameRef = DEBUG_ConvertCToJava(
6250 CIMObjectPath*,
6251 jlong,
6252 resultPath);
6253 jobject jAssociationName = env->NewObject(
6254 jv->CIMObjectPathClassRef,
6255 jv->CIMObjectPathNewJ,
6256 jAssociationNameRef);
|
6257 mark.hamzy 1.24
|
6258 mark.hamzy 1.43 JMPIjvm::checkException(env);
|
6259 schuur 1.1
|
6260 marek 1.68 jlong jPathNameRef = DEBUG_ConvertCToJava(
6261 CIMObjectPath*,
6262 jlong,
6263 objectPath);
6264 jobject jPathName = env->NewObject(
6265 jv->CIMObjectPathClassRef,
6266 jv->CIMObjectPathNewJ,
6267 jPathNameRef);
|
6268 mark.hamzy 1.25
6269 JMPIjvm::checkException(env);
6270
6271 jstring jRole = env->NewStringUTF(request->role.getCString());
6272
6273 JMPIjvm::checkException(env);
6274
6275 jobjectArray jPropertyList = getList(jv,env,request->propertyList);
6276
|
6277 mark.hamzy 1.29 #ifdef PEGASUS_DEBUG
|
6278 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6279 "handleReferencesRequest: assocName = %s ",
6280 (const char*)resultPath->toString().getCString()));
6281 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6282 "handleReferencesRequest: pathName = %s ",
6283 (const char*)objectPath->toString().getCString()));
6284 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6285 "handleReferencesRequest: role = %s ",
6286 (const char*)request->role.getCString()));
6287 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6288 "handleReferencesRequest: includeQualifiers = false");
6289 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6290 "handleReferencesRequest: includeClassOrigin = false");
|
6291 mark.hamzy 1.29 #endif
|
6292 kumpf 1.55 StatProviderTimeMeasurement providerTime(response);
6293
|
6294 marek 1.68 jobjectArray jVec=(jobjectArray)env->CallObjectMethod(
6295 (jobject)pr.jProvider,
6296 id,
6297 jAssociationName,
6298 jPathName,
6299 jRole,
6300 JMPI_INCLUDE_QUALIFIERS,
6301 request->includeClassOrigin,
6302 jPropertyList);
|
6303 mark.hamzy 1.25
|
6304 mark.hamzy 1.23 JMPIjvm::checkException(env);
6305
6306 handler.processing();
6307 if (jVec) {
|
6308 marek 1.68 for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize);
6309 i<m; i++)
6310 {
|
6311 mark.hamzy 1.23 JMPIjvm::checkException(env);
6312
|
6313 marek 1.68 jobject jciRet = env->CallObjectMethod(
6314 jVec,
6315 JMPIjvm::jv.VectorElementAt,
6316 i);
|
6317 mark.hamzy 1.24
|
6318 mark.hamzy 1.23 JMPIjvm::checkException(env);
6319
|
6320 marek 1.68 jlong jciRetRef = env->CallLongMethod(
6321 jciRet,
6322 JMPIjvm::jv.CIMInstanceCInst);
6323 CIMInstance *ciRet = DEBUG_ConvertJavaToC(
6324 jlong,
6325 CIMInstance*,
6326 jciRetRef);
6327 CIMClass cls;
|
6328 mark.hamzy 1.40
6329 try
6330 {
|
6331 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6332 "handleReferencesRequest: "
6333 "enter(METHOD_ASSOCIATORPROVIDER): "
6334 "cimom_handle->getClass(%s).",
6335 (const char*)ciRet->
6336 getClassName().getString().getCString()
6337 ));
6338
|
6339 mark.hamzy 1.40 AutoMutex lock (pr._cimomMutex);
6340
6341 cls = pr._cimom_handle->getClass(context,
6342 request->nameSpace,
6343 ciRet->getClassName(),
6344 false,
6345 true,
6346 true,
6347 CIMPropertyList());
|
6348 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6349 "handleReferencesRequest: "
6350 "exit(METHOD_ASSOCIATORPROVIDER): "
6351 "cimom_handle->getClass(%s).",
6352 (const char*)ciRet->
6353 getClassName().getString().getCString()
6354 ));
|
6355 mark.hamzy 1.40 }
6356 catch (CIMException e)
6357 {
|
6358 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL2,
6359 "handleReferencesRequest: "
6360 "Caught CIMExcetion(METHOD_ASSOCIATORPROVIDER) "
6361 "during cimom_handle->getClass(%s): %s ",
6362 (const char*)ciRet->
6363 getClassName().getString().getCString(),
6364 (const char*)e.getMessage().getCString()
6365 ));
6366
6367 PEG_METHOD_EXIT();
|
6368 mark.hamzy 1.40 throw;
6369 }
6370
|
6371 mark.hamzy 1.43 const CIMObjectPath& op = ciRet->getPath();
6372 CIMObjectPath iop = ciRet->buildPath(cls);
|
6373 mark.hamzy 1.24
|
6374 mark.hamzy 1.27 JMPIjvm::checkException(env);
6375
|
6376 mark.hamzy 1.23 iop.setNameSpace(op.getNameSpace());
|
6377 mark.hamzy 1.29 ciRet->setPath(iop);
|
6378 schuur 1.13
|
6379 mark.hamzy 1.29 handler.deliver(*ciRet);
|
6380 mark.hamzy 1.23 }
6381 }
6382 handler.complete();
|
6383 mark.hamzy 1.24 break;
|
6384 mark.hamzy 1.23 }
|
6385 schuur 1.1
|
6386 mark.hamzy 1.43 case METHOD_ASSOCIATORPROVIDER2:
|
6387 mark.hamzy 1.24 {
|
6388 marek 1.68 jlong jocRef = DEBUG_ConvertCToJava(
6389 OperationContext*,
6390 jlong,
6391 &request->operationContext);
6392 jobject joc = env->NewObject(
6393 jv->OperationContextClassRef,
6394 jv->OperationContextNewJ,
6395 jocRef);
6396
6397 jlong jAssociationNameRef = DEBUG_ConvertCToJava(
6398 CIMObjectPath*,
6399 jlong,
6400 resultPath);
6401 jobject jAssociationName = env->NewObject(
6402 jv->CIMObjectPathClassRef,
6403 jv->CIMObjectPathNewJ,
6404 jAssociationNameRef);
|
6405 mark.hamzy 1.25
6406 JMPIjvm::checkException(env);
6407
|
6408 marek 1.68 jlong jPathNameRef = DEBUG_ConvertCToJava(
6409 CIMObjectPath*,
6410 jlong,
6411 objectPath);
6412 jobject jPathName = env->NewObject(
6413 jv->CIMObjectPathClassRef,
6414 jv->CIMObjectPathNewJ,
6415 jPathNameRef);
|
6416 mark.hamzy 1.24
6417 JMPIjvm::checkException(env);
6418
|
6419 mark.hamzy 1.25 jstring jRole = env->NewStringUTF(request->role.getCString());
6420
6421 JMPIjvm::checkException(env);
6422
6423 jobjectArray jPropertyList = getList(jv,env,request->propertyList);
6424
|
6425 mark.hamzy 1.29 #ifdef PEGASUS_DEBUG
|
6426 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6427 "handleReferencesRequest: assocName = %s ",
6428 (const char*)resultPath->toString().getCString()));
6429 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6430 "handleReferencesRequest: pathName = %s ",
6431 (const char*)objectPath->toString().getCString()));
6432 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6433 "handleReferencesRequest: role = %s ",
6434 (const char*)request->role.getCString()));
6435 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6436 "handleReferencesRequest: includeQualifiers = false");
6437 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6438 "handleReferencesRequest: includeClassOrigin = false");
|
6439 mark.hamzy 1.29 #endif
6440
|
6441 kumpf 1.55 StatProviderTimeMeasurement providerTime(response);
6442
|
6443 marek 1.68 jobjectArray jVec=(jobjectArray)env->CallObjectMethod(
6444 (jobject)pr.jProvider,
6445 id,
6446 joc,
6447 jAssociationName,
6448 jPathName,
6449 jRole,
6450 JMPI_INCLUDE_QUALIFIERS,
6451 request->includeClassOrigin,
6452 jPropertyList);
|
6453 mark.hamzy 1.25
|
6454 mark.hamzy 1.24 JMPIjvm::checkException(env);
6455
|
6456 mark.hamzy 1.43 if (joc)
6457 {
|
6458 marek 1.68 env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate);
|
6459 mark.hamzy 1.43
6460 JMPIjvm::checkException(env);
6461 }
6462
|
6463 mark.hamzy 1.24 handler.processing();
6464 if (jVec) {
|
6465 marek 1.68 for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize);
6466 i<m; i++)
6467 {
|
6468 mark.hamzy 1.24 JMPIjvm::checkException(env);
6469
|
6470 marek 1.68 jobject jciRet = env->CallObjectMethod(
6471 jVec,
6472 JMPIjvm::jv.VectorElementAt,
6473 i);
|
6474 mark.hamzy 1.24
6475 JMPIjvm::checkException(env);
6476
|
6477 marek 1.68 jlong jciRetRef = env->CallLongMethod(
6478 jciRet,
6479 JMPIjvm::jv.CIMInstanceCInst);
6480 CIMInstance *ciRet = DEBUG_ConvertJavaToC(
6481 jlong,
6482 CIMInstance*,
6483 jciRetRef);
6484 CIMClass cls;
|
6485 mark.hamzy 1.40
6486 try
6487 {
|
6488 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6489 "handleReferencesRequest: "
6490 "enter(METHOD_ASSOCIATORPROVIDER2): "
6491 "cimom_handle->getClass(%s).",
6492 (const char*)ciRet->
6493 getClassName().getString().getCString()
6494 ));
6495
|
6496 mark.hamzy 1.40 AutoMutex lock (pr._cimomMutex);
6497
6498 cls = pr._cimom_handle->getClass(context,
6499 request->nameSpace,
6500 ciRet->getClassName(),
6501 false,
6502 true,
6503 true,
6504 CIMPropertyList());
|
6505 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6506 "handleReferencesRequest: "
6507 "exit(METHOD_ASSOCIATORPROVIDER2): "
6508 "cimom_handle->getClass(%s).",
6509 (const char*)ciRet->
6510 getClassName().getString().getCString()
6511 ));
6512
|
6513 mark.hamzy 1.40 }
6514 catch (CIMException e)
6515 {
|
6516 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL2,
6517 "handleReferencesRequest: "
6518 "Caught CIMExcetion(METHOD_ASSOCIATORPROVIDER2) "
6519 "during cimom_handle->getClass(%s): %s ",
6520 (const char*)ciRet->
6521 getClassName().getString().getCString(),
6522 (const char*)e.getMessage().getCString()
6523 ));
6524
6525 PEG_METHOD_EXIT();
|
6526 mark.hamzy 1.40 throw;
6527 }
6528
|
6529 mark.hamzy 1.29 const CIMObjectPath& op = ciRet->getPath();
6530 CIMObjectPath iop = ciRet->buildPath(cls);
|
6531 schuur 1.1
|
6532 mark.hamzy 1.27 JMPIjvm::checkException(env);
6533
|
6534 mark.hamzy 1.24 iop.setNameSpace(op.getNameSpace());
|
6535 mark.hamzy 1.29 ciRet->setPath(iop);
|
6536 schuur 1.12
|
6537 mark.hamzy 1.29 handler.deliver(*ciRet);
|
6538 mark.hamzy 1.24 }
6539 }
6540 handler.complete();
6541 break;
6542 }
|
6543 mark.hamzy 1.23
|
6544 mark.hamzy 1.24 case METHOD_UNKNOWN:
6545 {
|
6546 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
6547 "handleReferencesRequest: Unknown method provider!");
|
6548 mark.hamzy 1.24 break;
6549 }
|
6550 mark.hamzy 1.23 }
|
6551 schuur 1.1 }
6552 HandlerCatch(handler);
|
6553 schuur 1.12
6554 if (env) JMPIjvm::detachThread();
6555
|
6556 schuur 1.1 PEG_METHOD_EXIT();
6557
6558 return(response);
6559 }
6560
|
6561 marek 1.68 Message * JMPIProviderManager::handleReferenceNamesRequest(
6562 const Message * message) throw()
|
6563 schuur 1.1 {
|
6564 marek 1.68 PEG_METHOD_ENTER(
6565 TRC_PROVIDERMANAGER,
6566 "JMPIProviderManager::handleReferenceNamesRequest");
|
6567 mark.hamzy 1.23
|
6568 kumpf 1.55 HandlerIntro(ReferenceNames,message,request,response,handler);
|
6569 schuur 1.1
|
6570 mark.hamzy 1.24 typedef enum {
6571 METHOD_UNKNOWN = 0,
|
6572 mark.hamzy 1.43 METHOD_CIMASSOCIATORPROVIDER,
6573 METHOD_CIMASSOCIATORPROVIDER2,
6574 METHOD_ASSOCIATORPROVIDER,
6575 METHOD_ASSOCIATORPROVIDER2,
|
6576 mark.hamzy 1.24 } METHOD_VERSION;
6577 METHOD_VERSION eMethodFound = METHOD_UNKNOWN;
6578 JNIEnv *env = NULL;
|
6579 schuur 1.13
|
6580 marek 1.68 try
6581 {
|
6582 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL3,
6583 "handleReferenceNamesRequest: "
6584 "name space = %s class name = %s",
6585 (const char*)request->nameSpace.getString().getCString(),
6586 (const char*)request->
6587 objectName.getClassName().getString().getCString()
6588 ));
|
6589 mark.hamzy 1.23
|
6590 schuur 1.1 // make target object path
|
6591 marek 1.68 CIMObjectPath *objectPath = new CIMObjectPath(
6592 System::getHostName(),
6593 request->nameSpace,
6594 request->objectName.getClassName(),
6595 request->objectName.getKeyBindings());
6596 CIMObjectPath *resultPath = new CIMObjectPath(
6597 System::getHostName(),
6598 request->nameSpace,
6599 request->resultClass.getString());
|
6600 schuur 1.1
6601 // resolve provider name
|
6602 kumpf 1.2 ProviderName name = _resolveProviderName(
6603 request->operationContext.get(ProviderIdContainer::NAME));
|
6604 schuur 1.1
6605 // get cached or load new provider module
|
6606 marek 1.68 JMPIProvider::OpProviderHolder ph = providerManager.getProvider(
6607 name.getPhysicalName(),
6608 name.getLogicalName(),
6609 String::EMPTY);
|
6610 schuur 1.1
|
6611 mark.hamzy 1.24 JMPIProvider &pr = ph.GetProvider();
|
6612 schuur 1.1
|
6613 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3,
6614 "handleReferenceNamesRequest: "
6615 "Calling provider: %s, role: %s, refCls: %s",
6616 (const char*)pr.getName().getCString(),
6617 (const char*)request->role.getCString(),
6618 (const char*)request->resultClass.getString().getCString()
6619 ));
|
6620 schuur 1.12
|
6621 mark.hamzy 1.24 JvmVector *jv = 0;
6622
6623 env = JMPIjvm::attachThread(&jv);
|
6624 schuur 1.1
|
6625 mark.hamzy 1.37 if (!env)
6626 {
|
6627 thilo.boehm 1.69 PEG_TRACE_CSTRING( TRC_PROVIDERMANAGER, Tracer::LEVEL2,
6628 "handleReferenceNamesRequest: "
6629 "Could not initialize the JVM (Java Virtual Machine) "
6630 "runtime environment.");
6631
|
6632 mark.hamzy 1.37 PEG_METHOD_EXIT();
6633
|
6634 marek 1.68 throw PEGASUS_CIM_EXCEPTION_L(
6635 CIM_ERR_FAILED,
6636 MessageLoaderParms(
|
6637 thilo.boehm 1.69 "ProviderManager.JMPI.JMPIProviderManager.INIT_JVM_FAILED",
|
6638 marek 1.68 "Could not initialize the JVM (Java Virtual Machine) "
6639 "runtime environment."));
|
6640 mark.hamzy 1.37 }
6641
|
6642 mark.hamzy 1.43 JMPIProvider::pm_service_op_lock op_lock(&pr);
6643
6644 jmethodID id = NULL;
6645 String interfaceType;
6646 String interfaceVersion;
6647
|
6648 marek 1.68 getInterfaceType(
6649 request->operationContext.get(ProviderIdContainer::NAME),
6650 interfaceType,
6651 interfaceVersion);
|
6652 mark.hamzy 1.43
6653 if (interfaceType == "JMPI")
6654 {
|
6655 marek 1.68 id = env->GetMethodID(
6656 (jclass)pr.jProviderClass,
6657 "referenceNames",
6658 "(Lorg/pegasus/jmpi/CIMObjectPath;"
6659 "Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;)"
6660 "Ljava/util/Vector;");
|
6661 mark.hamzy 1.43
6662 if (id != NULL)
6663 {
6664 eMethodFound = METHOD_ASSOCIATORPROVIDER;
|
6665 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6666 "handleReferencesRequest: "
6667 "Found METHOD_ASSOCIATORPROVIDER.");
|
6668 mark.hamzy 1.43 }
6669
6670 if (id == NULL)
6671 {
6672 env->ExceptionClear();
6673
|
6674 marek 1.68 id = env->GetMethodID(
6675 (jclass)pr.jProviderClass,
6676 "referenceNames",
6677 "(Lorg/pegasus/jmpi/CIMObjectPath;"
6678 "Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;"
6679 ")[Lorg/pegasus/jmpi/CIMObjectPath;");
|
6680 mark.hamzy 1.43
6681 if (id != NULL)
6682 {
6683 eMethodFound = METHOD_CIMASSOCIATORPROVIDER;
|
6684 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6685 "handleReferenceNamesRequest: "
6686 "Found METHOD_CIMASSOCIATORPROVIDER.");
|
6687 mark.hamzy 1.43 }
6688 }
6689 }
6690 else if (interfaceType == "JMPIExperimental")
6691 {
|
6692 marek 1.68 id = env->GetMethodID(
6693 (jclass)pr.jProviderClass,
6694 "referenceNames",
6695 "(Lorg/pegasus/jmpi/OperationContext;"
6696 "Lorg/pegasus/jmpi/CIMObjectPath;"
6697 "Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;"
6698 ")Ljava/util/Vector;");
|
6699 mark.hamzy 1.43
6700 if (id != NULL)
6701 {
6702 eMethodFound = METHOD_ASSOCIATORPROVIDER2;
|
6703 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6704 "handleReferenceNamesRequest: "
6705 "Found METHOD_ASSOCIATORPROVIDER2.");
|
6706 mark.hamzy 1.43 }
6707
6708 if (id == NULL)
6709 {
6710 env->ExceptionClear();
|
6711 marek 1.68 id = env->GetMethodID(
6712 (jclass)pr.jProviderClass,
6713 "referenceNames",
6714 "(Lorg/pegasus/jmpi/OperationContext;"
6715 "Lorg/pegasus/jmpi/CIMObjectPath;"
6716 "Lorg/pegasus/jmpi/CIMObjectPath;"
6717 "Ljava/lang/String;)"
6718 "[Lorg/pegasus/jmpi/CIMObjectPath;");
|
6719 mark.hamzy 1.43
6720 if (id != NULL)
6721 {
6722 eMethodFound = METHOD_CIMASSOCIATORPROVIDER2;
|
6723 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6724 "handleReferenceNamesRequest: "
6725 "Found METHOD_CIMASSOCIATORPROVIDER2.");
|
6726 mark.hamzy 1.43 }
6727 }
6728 }
6729
6730 if (id == NULL)
6731 {
|
6732 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
6733 "handleReferenceNames: No method found!");
|
6734 mark.hamzy 1.43
6735 PEG_METHOD_EXIT();
6736
|
6737 marek 1.68 throw PEGASUS_CIM_EXCEPTION_L(
6738 CIM_ERR_FAILED,
6739 MessageLoaderParms(
|
6740 thilo.boehm 1.69 "ProviderManager.JMPI.JMPIProviderManager.METHOD_NOT_FOUND",
|
6741 marek 1.68 "Could not find a method for the provider based on "
6742 "InterfaceType."));
|
6743 mark.hamzy 1.43 }
6744
6745 JMPIjvm::checkException(env);
6746
6747 switch (eMethodFound)
6748 {
6749 case METHOD_CIMASSOCIATORPROVIDER:
6750 {
|
6751 marek 1.68 jlong jAssociationNameRef = DEBUG_ConvertCToJava(
6752 CIMObjectPath*,
6753 jlong,
6754 resultPath);
6755 jobject jAssociationName = env->NewObject(
6756 jv->CIMObjectPathClassRef,
6757 jv->CIMObjectPathNewJ,
6758 jAssociationNameRef);
|
6759 mark.hamzy 1.43
6760 JMPIjvm::checkException(env);
6761
|
6762 marek 1.68 jlong jPathNameRef = DEBUG_ConvertCToJava(
6763 CIMObjectPath*,
6764 jlong,
6765 objectPath);
6766 jobject jPathName = env->NewObject(
6767 jv->CIMObjectPathClassRef,
6768 jv->CIMObjectPathNewJ,
6769 jPathNameRef);
|
6770 mark.hamzy 1.43
6771 JMPIjvm::checkException(env);
6772
6773 jstring jRole = env->NewStringUTF(request->role.getCString());
6774
6775 JMPIjvm::checkException(env);
6776
6777 #ifdef PEGASUS_DEBUG
|
6778 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6779 "handleReferenceNamesRequest: assocName = %s ",
6780 (const char*)objectPath->toString().getCString()));
6781 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6782 "handleReferenceNamesRequest: role = %s ",
6783 (const char*)request->role.getCString()));
|
6784 mark.hamzy 1.43 #endif
6785
|
6786 kumpf 1.55 StatProviderTimeMeasurement providerTime(response);
6787
|
6788 marek 1.68 jobjectArray jAr=(jobjectArray)env->CallObjectMethod(
6789 (jobject)pr.jProvider,
6790 id,
6791 jPathName,
6792 jAssociationName,
6793 jRole);
|
6794 mark.hamzy 1.43
6795 JMPIjvm::checkException(env);
6796
6797 handler.processing();
|
6798 mark.hamzy 1.45 if (jAr) {
6799 for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
|
6800 mark.hamzy 1.43 JMPIjvm::checkException(env);
6801
|
6802 mark.hamzy 1.45 jobject jcopRet = env->GetObjectArrayElement(jAr,i);
|
6803 mark.hamzy 1.43
6804 JMPIjvm::checkException(env);
6805
|
6806 marek 1.68 jlong jcopRetRef = env->CallLongMethod(
6807 jcopRet,
6808 JMPIjvm::jv.CIMObjectPathCInst);
|
6809 mark.hamzy 1.43
6810 JMPIjvm::checkException(env);
6811
|
6812 marek 1.68 CIMObjectPath *copRet = DEBUG_ConvertJavaToC(
6813 jlong,
6814 CIMObjectPath*,
6815 jcopRetRef);
|
6816 mark.hamzy 1.43
6817 handler.deliver(*copRet);
6818 }
6819 }
6820 handler.complete();
6821 break;
6822 }
6823
6824 case METHOD_CIMASSOCIATORPROVIDER2:
6825 {
|
6826 marek 1.68 jlong jocRef = DEBUG_ConvertCToJava(
6827 OperationContext*,
6828 jlong,
6829 &request->operationContext);
6830 jobject joc = env->NewObject(
6831 jv->OperationContextClassRef,
6832 jv->OperationContextNewJ,
6833 jocRef);
6834
6835 jlong jAssociationNameRef = DEBUG_ConvertCToJava(
6836 CIMObjectPath*,
6837 jlong,
6838 resultPath);
6839 jobject jAssociationName = env->NewObject(
6840 jv->CIMObjectPathClassRef,
6841 jv->CIMObjectPathNewJ,
6842 jAssociationNameRef);
|
6843 mark.hamzy 1.43
6844 JMPIjvm::checkException(env);
6845
|
6846 marek 1.68 jlong jPathNameRef = DEBUG_ConvertCToJava(
6847 CIMObjectPath*,
6848 jlong,
6849 objectPath);
6850 jobject jPathName = env->NewObject(
6851 jv->CIMObjectPathClassRef,
6852 jv->CIMObjectPathNewJ,
6853 jPathNameRef);
|
6854 mark.hamzy 1.43
6855 JMPIjvm::checkException(env);
6856
6857 jstring jRole = env->NewStringUTF(request->role.getCString());
6858
6859 JMPIjvm::checkException(env);
6860
6861 #ifdef PEGASUS_DEBUG
|
6862 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6863 "handleReferenceNamesRequest: assocName = %s ",
6864 (const char*)objectPath->toString().getCString()));
6865 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6866 "handleReferenceNamesRequest: role = %s ",
6867 (const char*)request->role.getCString()));
|
6868 mark.hamzy 1.43 #endif
6869
|
6870 kumpf 1.55 StatProviderTimeMeasurement providerTime(response);
6871
|
6872 marek 1.68 jobjectArray jAr=(jobjectArray)env->CallObjectMethod(
6873 (jobject)pr.jProvider,
6874 id,
6875 joc,
6876 jPathName,
6877 jAssociationName,
6878 jRole);
|
6879 mark.hamzy 1.43
6880 JMPIjvm::checkException(env);
6881
6882 if (joc)
6883 {
|
6884 marek 1.68 env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate);
|
6885 mark.hamzy 1.43
6886 JMPIjvm::checkException(env);
6887 }
6888
6889 handler.processing();
|
6890 mark.hamzy 1.45 if (jAr) {
6891 for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
|
6892 mark.hamzy 1.43 JMPIjvm::checkException(env);
|
6893 schuur 1.1
|
6894 mark.hamzy 1.45 jobject jcopRet = env->GetObjectArrayElement(jAr,i);
|
6895 schuur 1.1
|
6896 mark.hamzy 1.43 JMPIjvm::checkException(env);
|
6897 mark.hamzy 1.24
|
6898 marek 1.68 jlong jcopRetRef = env->CallLongMethod(
6899 jcopRet,
6900 JMPIjvm::jv.CIMObjectPathCInst);
|
6901 mark.hamzy 1.24
|
6902 mark.hamzy 1.43 JMPIjvm::checkException(env);
|
6903 mark.hamzy 1.24
|
6904 marek 1.68 CIMObjectPath *copRet = DEBUG_ConvertJavaToC(
6905 jlong,
6906 CIMObjectPath*,
6907 jcopRetRef);
|
6908 mark.hamzy 1.24
|
6909 mark.hamzy 1.43 handler.deliver(*copRet);
6910 }
|
6911 mark.hamzy 1.24 }
|
6912 mark.hamzy 1.43 handler.complete();
6913 break;
|
6914 mark.hamzy 1.24 }
|
6915 schuur 1.11
|
6916 mark.hamzy 1.43 case METHOD_ASSOCIATORPROVIDER:
|
6917 mark.hamzy 1.24 {
|
6918 marek 1.68 jlong jAssociationNameRef = DEBUG_ConvertCToJava(
6919 CIMObjectPath*,
6920 jlong,
6921 resultPath);
6922 jobject jAssociationName = env->NewObject(
6923 jv->CIMObjectPathClassRef,
6924 jv->CIMObjectPathNewJ,
6925 jAssociationNameRef);
|
6926 mark.hamzy 1.24
|
6927 mark.hamzy 1.43 JMPIjvm::checkException(env);
|
6928 schuur 1.1
|
6929 marek 1.68 jlong jPathNameRef = DEBUG_ConvertCToJava(
6930 CIMObjectPath*,
6931 jlong,
6932 objectPath);
6933 jobject jPathName = env->NewObject(
6934 jv->CIMObjectPathClassRef,
6935 jv->CIMObjectPathNewJ,
6936 jPathNameRef);
|
6937 mark.hamzy 1.25
6938 JMPIjvm::checkException(env);
6939
6940 jstring jRole = env->NewStringUTF(request->role.getCString());
6941
6942 JMPIjvm::checkException(env);
6943
|
6944 mark.hamzy 1.29 #ifdef PEGASUS_DEBUG
|
6945 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6946 "handleReferenceNamesRequest: assocName = %s ",
6947 (const char*)objectPath->toString().getCString()));
6948 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6949 "handleReferenceNamesRequest: pathName = %s ",
6950 (const char*)resultPath->toString().getCString()));
6951 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6952 "handleReferenceNamesRequest: role = %s ",
6953 (const char*)request->role.getCString()));
|
6954 mark.hamzy 1.29 #endif
6955
|
6956 kumpf 1.55 StatProviderTimeMeasurement providerTime(response);
6957
|
6958 marek 1.68 jobjectArray jVec=(jobjectArray)env->CallObjectMethod(
6959 (jobject)pr.jProvider,
6960 id,
6961 jAssociationName,
6962 jPathName,
6963 jRole);
|
6964 mark.hamzy 1.25
|
6965 mark.hamzy 1.23 JMPIjvm::checkException(env);
6966
6967 handler.processing();
6968 if (jVec) {
|
6969 marek 1.68 for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize);
6970 i<m; i++)
6971 {
|
6972 mark.hamzy 1.23 JMPIjvm::checkException(env);
6973
|
6974 marek 1.68 jobject jcopRet = env->CallObjectMethod(
6975 jVec,
6976 JMPIjvm::jv.VectorElementAt,
6977 i);
|
6978 mark.hamzy 1.24
|
6979 mark.hamzy 1.23 JMPIjvm::checkException(env);
6980
|
6981 marek 1.68 jlong jcopRetRef = env->CallLongMethod(
6982 jcopRet,
6983 JMPIjvm::jv.CIMObjectPathCInst);
|
6984 mark.hamzy 1.23
6985 JMPIjvm::checkException(env);
6986
|
6987 marek 1.68 CIMObjectPath *copRet = DEBUG_ConvertJavaToC(
6988 jlong,
6989 CIMObjectPath*,
6990 jcopRetRef);
|
6991 mark.hamzy 1.24
|
6992 mark.hamzy 1.29 handler.deliver(*copRet);
|
6993 mark.hamzy 1.23 }
6994 }
6995 handler.complete();
|
6996 mark.hamzy 1.24 break;
|
6997 mark.hamzy 1.23 }
|
6998 mark.hamzy 1.24
|
6999 mark.hamzy 1.43 case METHOD_ASSOCIATORPROVIDER2:
|
7000 mark.hamzy 1.24 {
|
7001 marek 1.68 jlong jocRef = DEBUG_ConvertCToJava(
7002 OperationContext*,
7003 jlong,
7004 &request->operationContext);
7005 jobject joc = env->NewObject(
7006 jv->OperationContextClassRef,
7007 jv->OperationContextNewJ,
7008 jocRef);
7009
7010 jlong jAssociationNameRef = DEBUG_ConvertCToJava(
7011 CIMObjectPath*,
7012 jlong,
7013 resultPath);
7014 jobject jAssociationName = env->NewObject(
7015 jv->CIMObjectPathClassRef,
7016 jv->CIMObjectPathNewJ,
7017 jAssociationNameRef);
|
7018 mark.hamzy 1.25
7019 JMPIjvm::checkException(env);
7020
|
7021 marek 1.68 jlong jPathNameRef = DEBUG_ConvertCToJava(
7022 CIMObjectPath*,
7023 jlong,
7024 objectPath);
7025 jobject jPathName = env->NewObject(
7026 jv->CIMObjectPathClassRef,
7027 jv->CIMObjectPathNewJ,
7028 jPathNameRef);
|
7029 mark.hamzy 1.24
7030 JMPIjvm::checkException(env);
7031
|
7032 mark.hamzy 1.25 jstring jRole = env->NewStringUTF(request->role.getCString());
7033
7034 JMPIjvm::checkException(env);
7035
|
7036 mark.hamzy 1.29 #ifdef PEGASUS_DEBUG
|
7037 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
7038 "handleReferenceNamesRequest: assocName = %s ",
7039 (const char*)objectPath->toString().getCString()));
7040 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
7041 "handleReferenceNamesRequest: pathName = %s ",
7042 (const char*)resultPath->toString().getCString()));
7043 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
7044 "handleReferenceNamesRequest: role = %s ",
7045 (const char*)request->role.getCString()));
|
7046 mark.hamzy 1.29 #endif
7047
|
7048 kumpf 1.55 StatProviderTimeMeasurement providerTime(response);
7049
|
7050 marek 1.68 jobjectArray jVec=(jobjectArray)env->CallObjectMethod(
7051 (jobject)pr.jProvider,
7052 id,
7053 joc,
7054 jAssociationName,
7055 jPathName,
7056 jRole);
|
7057 mark.hamzy 1.25
|
7058 mark.hamzy 1.23 JMPIjvm::checkException(env);
7059
|
7060 mark.hamzy 1.43 if (joc)
7061 {
|
7062 marek 1.68 env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate);
|
7063 mark.hamzy 1.43
7064 JMPIjvm::checkException(env);
7065 }
7066
|
7067 mark.hamzy 1.23 handler.processing();
|
7068 mark.hamzy 1.24 if (jVec) {
|
7069 marek 1.68 for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize);
7070 i<m; i++)
7071 {
|
7072 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
7073 marek 1.68 jobject jcopRet = env->CallObjectMethod(
7074 jVec,
7075 JMPIjvm::jv.VectorElementAt,
7076 i);
7077 JMPIjvm::checkException(env);
7078 jlong jcopRetRef = env->CallLongMethod(
7079 jcopRet,
7080 JMPIjvm::jv.CIMObjectPathCInst);
7081 JMPIjvm::checkException(env);
7082 CIMObjectPath *copRet = DEBUG_ConvertJavaToC(
7083 jlong,
7084 CIMObjectPath*,
7085 jcopRetRef);
|
7086 mark.hamzy 1.29 handler.deliver(*copRet);
|
7087 mark.hamzy 1.23 }
7088 }
7089 handler.complete();
|
7090 mark.hamzy 1.24 break;
7091 }
7092
7093 case METHOD_UNKNOWN:
7094 {
|
7095 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
7096 "handleReferenceNamesRequest: Unknown method provider!");
|
7097 mark.hamzy 1.24 break;
7098 }
|
7099 mark.hamzy 1.23 }
|
7100 schuur 1.1 }
7101 HandlerCatch(handler);
|
7102 schuur 1.11
7103 if (env) JMPIjvm::detachThread();
7104
|
7105 schuur 1.1 PEG_METHOD_EXIT();
7106
7107 return(response);
7108 }
7109
|
7110 marek 1.68 Message * JMPIProviderManager::handleGetPropertyRequest(
7111 const Message * message) throw()
|
7112 mark.hamzy 1.26 {
|
7113 marek 1.68 PEG_METHOD_ENTER(
7114 TRC_PROVIDERMANAGER,
7115 "JMPIProviderManager::handleGetPropertyRequest");
|
7116 mark.hamzy 1.26
|
7117 kumpf 1.55 HandlerIntro(GetProperty,message,request,response,handler);
|
7118 mark.hamzy 1.26
7119 typedef enum {
7120 METHOD_UNKNOWN = 0,
|
7121 mark.hamzy 1.43 METHOD_PROPERTYPROVIDER,
7122 METHOD_PROPERTYPROVIDER2,
|
7123 mark.hamzy 1.26 } METHOD_VERSION;
7124 METHOD_VERSION eMethodFound = METHOD_UNKNOWN;
7125 JNIEnv *env = NULL;
7126
7127 try {
|
7128 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL3,
7129 "handleGetPropertyRequest: "
7130 "name space = %s class name = %s",
7131 (const char*)request->nameSpace.getString().getCString(),
7132 (const char*)request->
7133 instanceName.getClassName().getString().getCString()
7134 ));
|
7135 mark.hamzy 1.26
7136 // make target object path
|
7137 marek 1.68 CIMObjectPath *objectPath = new CIMObjectPath(
7138 System::getHostName(),
7139 request->nameSpace,
7140 request->instanceName.getClassName(),
7141 request->instanceName.getKeyBindings());
|
7142 mark.hamzy 1.26
7143 // resolve provider name
7144 ProviderName name = _resolveProviderName(
7145 request->operationContext.get(ProviderIdContainer::NAME));
7146
7147 // get cached or load new provider module
|
7148 marek 1.68 JMPIProvider::OpProviderHolder ph = providerManager.getProvider(
7149 name.getPhysicalName(),
7150 name.getLogicalName(),
7151 String::EMPTY);
|
7152 mark.hamzy 1.26
7153 // forward request
7154 JMPIProvider &pr = ph.GetProvider();
7155
|
7156 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3,
7157 "handleReferenceNamesRequest: "
7158 "Calling provider: %s",
7159 (const char*)pr.getName().getCString()
7160 ));
|
7161 mark.hamzy 1.26
7162 JvmVector *jv = 0;
7163
7164 env = JMPIjvm::attachThread(&jv);
7165
|
7166 mark.hamzy 1.37 if (!env)
7167 {
|
7168 thilo.boehm 1.69 PEG_TRACE_CSTRING( TRC_PROVIDERMANAGER, Tracer::LEVEL2,
7169 "handleReferenceNamesRequest: "
7170 "Could not initialize the JVM (Java Virtual Machine) "
7171 "runtime environment.");
7172
|
7173 mark.hamzy 1.37 PEG_METHOD_EXIT();
7174
|
7175 marek 1.68 throw PEGASUS_CIM_EXCEPTION_L(
7176 CIM_ERR_FAILED,
7177 MessageLoaderParms(
|
7178 thilo.boehm 1.69 "ProviderManager.JMPI.JMPIProviderManager.INIT_JVM_FAILED",
|
7179 marek 1.68 "Could not initialize the JVM (Java Virtual Machine) "
7180 "runtime environment."));
|
7181 mark.hamzy 1.37 }
7182
|
7183 mark.hamzy 1.26 JMPIProvider::pm_service_op_lock op_lock(&pr);
7184
|
7185 mark.hamzy 1.43 jmethodID id = NULL;
7186 String interfaceType;
7187 String interfaceVersion;
7188
|
7189 marek 1.68 getInterfaceType(
7190 request->operationContext.get(ProviderIdContainer::NAME),
7191 interfaceType,
7192 interfaceVersion);
|
7193 mark.hamzy 1.43
7194 if (interfaceType == "JMPI")
7195 {
|
7196 marek 1.68 id = env->GetMethodID(
7197 (jclass)pr.jProviderClass,
7198 "getPropertyValue",
7199 "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;"
7200 "Ljava/lang/String;)Lorg/pegasus/jmpi/CIMValue;");
|
7201 mark.hamzy 1.26
|
7202 mark.hamzy 1.43 if (id != NULL)
7203 {
7204 eMethodFound = METHOD_PROPERTYPROVIDER;
|
7205 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
7206 "handleGetPropertyRequest: "
7207 "Found METHOD_PROPERTYPROVIDER.");
|
7208 mark.hamzy 1.43 }
7209 }
7210 else if (interfaceType == "JMPIExperimental")
7211 {
|
7212 marek 1.68 id = env->GetMethodID(
7213 (jclass)pr.jProviderClass,
7214 "getPropertyValue",
7215 "(Lorg/pegasus/jmpi/OperationContext;"
7216 "Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;"
7217 "Ljava/lang/String;)Lorg/pegasus/jmpi/CIMValue;");
|
7218 mark.hamzy 1.26
|
7219 mark.hamzy 1.43 if (id != NULL)
7220 {
7221 eMethodFound = METHOD_PROPERTYPROVIDER2;
|
7222 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
7223 "handleGetPropertyRequest: "
7224 "Found METHOD_PROPERTYPROVIDER2.");
|
7225 mark.hamzy 1.43 }
|
7226 mark.hamzy 1.26 }
7227
7228 if (id == NULL)
7229 {
|
7230 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
7231 "handleGetPropertyRequest: No method provider found!");
|
7232 mark.hamzy 1.43
7233 PEG_METHOD_EXIT();
7234
|
7235 marek 1.68 throw PEGASUS_CIM_EXCEPTION_L(
7236 CIM_ERR_FAILED,
7237 MessageLoaderParms(
|
7238 thilo.boehm 1.69 "ProviderManager.JMPI.JMPIProviderManager.METHOD_NOT_FOUND",
|
7239 marek 1.68 "Could not find a method for the provider based on "
7240 "InterfaceType."));
|
7241 mark.hamzy 1.26 }
7242
7243 JMPIjvm::checkException(env);
7244
7245 switch (eMethodFound)
7246 {
|
7247 mark.hamzy 1.43 case METHOD_PROPERTYPROVIDER:
|
7248 mark.hamzy 1.26 {
|
7249 marek 1.68 jlong jcopref = DEBUG_ConvertCToJava(
7250 CIMObjectPath*,
7251 jlong,
7252 objectPath);
7253 jobject jcop = env->NewObject(
7254 jv->CIMObjectPathClassRef,
7255 jv->CIMObjectPathNewJ,
7256 jcopref);
|
7257 mark.hamzy 1.26
7258 JMPIjvm::checkException(env);
7259
|
7260 marek 1.68 jstring joclass =
7261 env->NewStringUTF(
7262 request->instanceName.getClassName().getString().getCString());
|
7263 mark.hamzy 1.26
7264 JMPIjvm::checkException(env);
7265
|
7266 marek 1.68 jstring jpName =
7267 env->NewStringUTF(
7268 request->propertyName.getString().getCString());
|
7269 mark.hamzy 1.26
7270 JMPIjvm::checkException(env);
7271
|
7272 kumpf 1.55 StatProviderTimeMeasurement providerTime(response);
|
7273 mark.hamzy 1.26
|
7274 mark.hamzy 1.29 jobject jvalRet = env->CallObjectMethod ((jobject)pr.jProvider,
7275 id,
7276 jcop,
7277 joclass,
7278 jpName);
|
7279 mark.hamzy 1.26
7280 JMPIjvm::checkException(env);
7281
7282 handler.processing();
7283
|
7284 mark.hamzy 1.29 if (jvalRet)
|
7285 mark.hamzy 1.26 {
|
7286 marek 1.68 jlong jvalRetRef = env->CallLongMethod(
7287 jvalRet,
7288 JMPIjvm::jv.CIMValueCInst);
7289 CIMValue *valRet = DEBUG_ConvertJavaToC(
7290 jlong,
7291 CIMValue*,
7292 jvalRetRef);
|
7293 mark.hamzy 1.26
7294 JMPIjvm::checkException(env);
7295
|
7296 mark.hamzy 1.29 handler.deliver(*valRet);
|
7297 mark.hamzy 1.26 }
7298 handler.complete();
7299 break;
7300 }
7301
|
7302 mark.hamzy 1.43 case METHOD_PROPERTYPROVIDER2:
7303 {
|
7304 marek 1.68 jlong jocRef = DEBUG_ConvertCToJava(
7305 OperationContext*,
7306 jlong,
7307 &request->operationContext);
7308 jobject joc = env->NewObject(
7309 jv->OperationContextClassRef,
7310 jv->OperationContextNewJ,
7311 jocRef);
|
7312 mark.hamzy 1.43
|
7313 marek 1.68 jlong jcopref = DEBUG_ConvertCToJava(
7314 CIMObjectPath*,
7315 jlong,
7316 objectPath);
7317 jobject jcop = env->NewObject(
7318 jv->CIMObjectPathClassRef,
7319 jv->CIMObjectPathNewJ,
7320 jcopref);
|
7321 mark.hamzy 1.43
7322 JMPIjvm::checkException(env);
7323
|
7324 marek 1.68 jstring joclass = env->NewStringUTF(
7325 request->instanceName.getClassName().getString().getCString());
|
7326 mark.hamzy 1.43
7327 JMPIjvm::checkException(env);
7328
|
7329 marek 1.68 jstring jpName = env->NewStringUTF(
7330 request->propertyName.getString().getCString());
|
7331 mark.hamzy 1.43
7332 JMPIjvm::checkException(env);
7333
|
7334 kumpf 1.55 StatProviderTimeMeasurement providerTime(response);
|
7335 mark.hamzy 1.43
7336 jobject jvalRet = env->CallObjectMethod ((jobject)pr.jProvider,
7337 id,
7338 joc,
7339 jcop,
7340 joclass,
7341 jpName);
7342
7343 JMPIjvm::checkException(env);
7344
7345 if (joc)
7346 {
|
7347 marek 1.68 env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate);
|
7348 mark.hamzy 1.43
7349 JMPIjvm::checkException(env);
7350 }
7351
7352 handler.processing();
7353
7354 if (jvalRet)
7355 {
|
7356 marek 1.68 jlong jvalRetRef = env->CallLongMethod(
7357 jvalRet,
7358 JMPIjvm::jv.CIMValueCInst);
7359 CIMValue *valRet = DEBUG_ConvertJavaToC(
7360 jlong,
7361 CIMValue*,
7362 jvalRetRef);
|
7363 mark.hamzy 1.43
7364 JMPIjvm::checkException(env);
7365
7366 handler.deliver(*valRet);
7367 }
7368 handler.complete();
7369 break;
7370 }
7371
|
7372 mark.hamzy 1.26 case METHOD_UNKNOWN:
7373 {
|
7374 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
7375 "handleGetPropertyRequest: Unknown method provider!");
|
7376 mark.hamzy 1.26 break;
7377 }
7378 }
7379 }
7380 HandlerCatch(handler);
7381
7382 if (env) JMPIjvm::detachThread();
7383
7384 PEG_METHOD_EXIT();
7385
7386 return(response);
7387 }
7388
|
7389 marek 1.68 Message * JMPIProviderManager::handleSetPropertyRequest(
7390 const Message * message) throw()
|
7391 mark.hamzy 1.26 {
|
7392 marek 1.68 PEG_METHOD_ENTER(
7393 TRC_PROVIDERMANAGER,
7394 "JMPIProviderManager::handleSetPropertyRequest");
|
7395 mark.hamzy 1.26
|
7396 kumpf 1.55 HandlerIntro(SetProperty,message,request,response,handler);
|
7397 mark.hamzy 1.26
7398 typedef enum {
7399 METHOD_UNKNOWN = 0,
|
7400 mark.hamzy 1.43 METHOD_PROPERTYPROVIDER,
7401 METHOD_PROPERTYPROVIDER2,
|
7402 mark.hamzy 1.26 } METHOD_VERSION;
7403 METHOD_VERSION eMethodFound = METHOD_UNKNOWN;
7404 JNIEnv *env = NULL;
7405
|
7406 marek 1.68 try
7407 {
|
7408 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL3,
7409 "handleSetPropertyRequest: "
7410 "name space = %s class name = %s",
7411 (const char*)request->nameSpace.getString().getCString(),
7412 (const char*)request->
7413 instanceName.getClassName().getString().getCString()
7414 ));
|
7415 mark.hamzy 1.26
7416 // make target object path
|
7417 marek 1.68 CIMObjectPath *objectPath = new CIMObjectPath(
7418 System::getHostName(),
7419 request->nameSpace,
7420 request->instanceName.getClassName(),
7421 request->instanceName.getKeyBindings());
|
7422 mark.hamzy 1.26
7423 // resolve provider name
7424 ProviderName name = _resolveProviderName(
7425 request->operationContext.get(ProviderIdContainer::NAME));
7426
7427 // get cached or load new provider module
|
7428 marek 1.68 JMPIProvider::OpProviderHolder ph = providerManager.getProvider(
7429 name.getPhysicalName(),
7430 name.getLogicalName(),
7431 String::EMPTY);
|
7432 mark.hamzy 1.26
7433 // forward request
7434 JMPIProvider &pr = ph.GetProvider();
7435
|
7436 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3,
7437 "handleSetPropertyRequest: "
7438 "Calling provider. setPropertyValue: %s",
7439 (const char*)pr.getName().getCString()));
|
7440 mark.hamzy 1.26
7441 JvmVector *jv = 0;
7442
7443 env = JMPIjvm::attachThread(&jv);
7444
|
7445 mark.hamzy 1.37 if (!env)
7446 {
|
7447 thilo.boehm 1.69 PEG_TRACE_CSTRING( TRC_PROVIDERMANAGER, Tracer::LEVEL2,
7448 "Could not initialize the JVM (Java Virtual Machine) "
7449 "runtime environment.");
7450
|
7451 mark.hamzy 1.37 PEG_METHOD_EXIT();
7452
|
7453 marek 1.68 throw PEGASUS_CIM_EXCEPTION_L(
7454 CIM_ERR_FAILED,
7455 MessageLoaderParms(
|
7456 thilo.boehm 1.69 "ProviderManager.JMPI.JMPIProviderManager.INIT_JVM_FAILED",
|
7457 marek 1.68 "Could not initialize the JVM (Java Virtual Machine) "
7458 "runtime environment."));
|
7459 mark.hamzy 1.37 }
7460
|
7461 mark.hamzy 1.26 JMPIProvider::pm_service_op_lock op_lock(&pr);
7462
|
7463 mark.hamzy 1.43 jmethodID id = NULL;
7464 String interfaceType;
7465 String interfaceVersion;
7466
|
7467 marek 1.68 getInterfaceType(
7468 request->operationContext.get(ProviderIdContainer::NAME),
7469 interfaceType,
7470 interfaceVersion);
|
7471 mark.hamzy 1.43
7472 if (interfaceType == "JMPI")
7473 {
|
7474 marek 1.68 id = env->GetMethodID(
7475 (jclass)pr.jProviderClass,
7476 "setPropertyValue",
7477 "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;"
7478 "Ljava/lang/String;Lorg/pegasus/jmpi/CIMValue;)V");
|
7479 mark.hamzy 1.26
|
7480 mark.hamzy 1.43 if (id != NULL)
7481 {
7482 eMethodFound = METHOD_PROPERTYPROVIDER;
|
7483 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
7484 "handleSetPropertyRequest: "
7485 "Found METHOD_PROPERTYPROVIDER.");
|
7486 mark.hamzy 1.43 }
7487 }
7488 else if (interfaceType == "JMPIExperimental")
7489 {
|
7490 marek 1.68 id = env->GetMethodID(
7491 (jclass)pr.jProviderClass,
7492 "setPropertyValue",
7493 "(Lorg/pegasus/jmpi/OperationContext;"
7494 "Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;"
7495 "Ljava/lang/String;Lorg/pegasus/jmpi/CIMValue;)V");
|
7496 mark.hamzy 1.26
|
7497 mark.hamzy 1.43 if (id != NULL)
7498 {
7499 eMethodFound = METHOD_PROPERTYPROVIDER2;
|
7500 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
7501 "handleSetPropertyRequest: "
7502 "Found METHOD_PROPERTYPROVIDER2.");
|
7503 mark.hamzy 1.43 }
|
7504 mark.hamzy 1.26 }
7505
7506 if (id == NULL)
7507 {
|
7508 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
7509 "handleSetPropertyRequest: No method provider found!");
|
7510 mark.hamzy 1.43
7511 PEG_METHOD_EXIT();
7512
|
7513 marek 1.68 throw PEGASUS_CIM_EXCEPTION_L(
7514 CIM_ERR_FAILED,
7515 MessageLoaderParms(
|
7516 thilo.boehm 1.69 "ProviderManager.JMPI.JMPIProviderManager.METHOD_NOT_FOUND",
|
7517 marek 1.68 "Could not find a method for the provider based on "
7518 "InterfaceType."));
|
7519 mark.hamzy 1.26 }
7520
7521 JMPIjvm::checkException(env);
7522
7523 switch (eMethodFound)
7524 {
|
7525 mark.hamzy 1.43 case METHOD_PROPERTYPROVIDER:
7526 {
|
7527 marek 1.68 jlong jcopref = DEBUG_ConvertCToJava(
7528 CIMObjectPath*,
7529 jlong,
7530 objectPath);
7531 jobject jcop = env->NewObject(
7532 jv->CIMObjectPathClassRef,
7533 jv->CIMObjectPathNewJ,
7534 jcopref);
|
7535 mark.hamzy 1.43
7536 JMPIjvm::checkException(env);
7537
|
7538 marek 1.68 jstring joclass =
7539 env->NewStringUTF(
7540 request->instanceName.getClassName().getString().getCString());
|
7541 mark.hamzy 1.43
7542 JMPIjvm::checkException(env);
7543
|
7544 marek 1.68 jstring jpName =
7545 env->NewStringUTF(
7546 request->propertyName.getString().getCString());
|
7547 mark.hamzy 1.43
7548 JMPIjvm::checkException(env);
7549
7550 CIMValue *val = new CIMValue (request->newValue);
7551
7552 JMPIjvm::checkException(env);
7553
|
7554 marek 1.68 jlong jvalref = DEBUG_ConvertCToJava(CIMValue*, jlong, val);
7555 jobject jval = env->NewObject(
7556 jv->CIMValueClassRef,
7557 jv->CIMValueNewJ,
7558 jvalref);
|
7559 mark.hamzy 1.43
7560 JMPIjvm::checkException(env);
7561
|
7562 kumpf 1.55 StatProviderTimeMeasurement providerTime(response);
|
7563 mark.hamzy 1.43
7564 env->CallVoidMethod ((jobject)pr.jProvider,
7565 id,
7566 jcop,
7567 joclass,
7568 jpName,
7569 jval);
7570
7571 JMPIjvm::checkException(env);
7572 break;
7573 }
7574
7575 case METHOD_PROPERTYPROVIDER2:
|
7576 mark.hamzy 1.26 {
|
7577 marek 1.68 jlong jocRef = DEBUG_ConvertCToJava(
7578 OperationContext*,
7579 jlong,
7580 &request->operationContext);
7581 jobject joc = env->NewObject(
7582 jv->OperationContextClassRef,
7583 jv->OperationContextNewJ,
7584 jocRef);
7585
7586 jlong jcopref = DEBUG_ConvertCToJava(
7587 CIMObjectPath*,
7588 jlong,
7589 objectPath);
7590 jobject jcop = env->NewObject(
7591 jv->CIMObjectPathClassRef,
7592 jv->CIMObjectPathNewJ,
7593 jcopref);
|
7594 mark.hamzy 1.26
7595 JMPIjvm::checkException(env);
7596
|
7597 marek 1.68 jstring joclass =
7598 env->NewStringUTF(
7599 request->instanceName.getClassName().getString().getCString());
|
7600 mark.hamzy 1.26
7601 JMPIjvm::checkException(env);
7602
|
7603 marek 1.68 jstring jpName =
7604 env->NewStringUTF(
7605 request->propertyName.getString().getCString());
|
7606 mark.hamzy 1.26
7607 JMPIjvm::checkException(env);
7608
|
7609 mark.hamzy 1.27 CIMValue *val = new CIMValue (request->newValue);
|
7610 mark.hamzy 1.26
7611 JMPIjvm::checkException(env);
7612
|
7613 marek 1.68 jlong jvalref = DEBUG_ConvertCToJava (CIMValue*, jlong, val);
7614 jobject jval = env->NewObject(
7615 jv->CIMValueClassRef,
7616 jv->CIMValueNewJ,
7617 jvalref);
|
7618 mark.hamzy 1.26
7619 JMPIjvm::checkException(env);
7620
|
7621 kumpf 1.55 StatProviderTimeMeasurement providerTime(response);
|
7622 mark.hamzy 1.26
7623 env->CallVoidMethod ((jobject)pr.jProvider,
7624 id,
|
7625 mark.hamzy 1.43 joc,
|
7626 mark.hamzy 1.26 jcop,
7627 joclass,
7628 jpName,
7629 jval);
7630
7631 JMPIjvm::checkException(env);
7632
|
7633 mark.hamzy 1.43 if (joc)
7634 {
|
7635 marek 1.68 env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate);
|
7636 mark.hamzy 1.43
7637 JMPIjvm::checkException(env);
7638 }
|
7639 mark.hamzy 1.26 break;
7640 }
7641
7642 case METHOD_UNKNOWN:
7643 {
|
7644 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
7645 "handleSetPropertyRequest: Unknown method provider!");
|
7646 mark.hamzy 1.26 break;
7647 }
7648 }
7649 }
7650 HandlerCatch(handler);
7651
7652 if (env) JMPIjvm::detachThread();
7653
7654 PEG_METHOD_EXIT();
7655
7656 return(response);
7657 }
7658
|
7659 marek 1.68 Message * JMPIProviderManager::handleInvokeMethodRequest(
7660 const Message * message) throw()
|
7661 schuur 1.1 {
|
7662 marek 1.68 PEG_METHOD_ENTER(
7663 TRC_PROVIDERMANAGER,
7664 "JMPIProviderManager::handleInvokeMethodRequest");
|
7665 mark.hamzy 1.23
|
7666 kumpf 1.55 HandlerIntro(InvokeMethod,message,request,response,handler);
|
7667 schuur 1.1
|
7668 mark.hamzy 1.25 typedef enum {
7669 METHOD_UNKNOWN = 0,
|
7670 mark.hamzy 1.43 METHOD_CIMMETHODPROVIDER,
7671 METHOD_CIMMETHODPROVIDER2,
7672 METHOD_METHODPROVIDER,
7673 METHOD_METHODPROVIDER2,
|
7674 mark.hamzy 1.25 } METHOD_VERSION;
7675 METHOD_VERSION eMethodFound = METHOD_UNKNOWN;
7676 JNIEnv *env = NULL;
|
7677 schuur 1.13
|
7678 schuur 1.1 try {
|
7679 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL3,
7680 "handleInvokeMethodRequest: "
7681 "name space = %s class name = %s",
7682 (const char*)request->nameSpace.getString().getCString(),
7683 (const char*)request->
7684 instanceName.getClassName().getString().getCString()
7685 ));
|
7686 mark.hamzy 1.23
|
7687 schuur 1.1 // make target object path
|
7688 marek 1.68 CIMObjectPath *objectPath = new CIMObjectPath(
7689 System::getHostName(),
7690 request->nameSpace,
7691 request->instanceName.getClassName(),
7692 request->instanceName.getKeyBindings());
|
7693 schuur 1.1
7694 // resolve provider name
|
7695 kumpf 1.2 ProviderName name = _resolveProviderName(
7696 request->operationContext.get(ProviderIdContainer::NAME));
|
7697 schuur 1.1
7698 // get cached or load new provider module
|
7699 marek 1.68 JMPIProvider::OpProviderHolder ph = providerManager.getProvider(
7700 name.getPhysicalName(),
7701 name.getLogicalName(),
7702 String::EMPTY);
|
7703 schuur 1.1
|
7704 mark.hamzy 1.25 JMPIProvider &pr=ph.GetProvider();
|
7705 schuur 1.1
|
7706 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3,
7707 "handleInvokeMethodRequest: "
7708 "Calling provider: %s",
7709 (const char*)pr.getName().getCString()
7710 ));
|
7711 schuur 1.11
|
7712 mark.hamzy 1.25 JvmVector *jv = 0;
|
7713 mark.hamzy 1.23
|
7714 mark.hamzy 1.25 env = JMPIjvm::attachThread(&jv);
|
7715 schuur 1.11
|
7716 mark.hamzy 1.37 if (!env)
7717 {
|
7718 thilo.boehm 1.69 PEG_TRACE_CSTRING( TRC_PROVIDERMANAGER, Tracer::LEVEL2,
7719 "handleInvokeMethodRequest: "
7720 "Could not initialize the JVM (Java Virtual Machine) "
7721 "runtime environment.");
7722
|
7723 mark.hamzy 1.43 PEG_METHOD_EXIT();
7724
|
7725 marek 1.68 throw PEGASUS_CIM_EXCEPTION_L(
7726 CIM_ERR_FAILED,
7727 MessageLoaderParms(
|
7728 thilo.boehm 1.69 "ProviderManager.JMPI.JMPIProviderManager.INIT_JVM_FAILED",
|
7729 marek 1.68 "Could not initialize the JVM (Java Virtual Machine) "
7730 "runtime environment."));
|
7731 mark.hamzy 1.43 }
7732
7733 JMPIProvider::pm_service_op_lock op_lock(&pr);
7734
7735 jmethodID id = NULL;
7736 String interfaceType;
7737 String interfaceVersion;
7738
|
7739 marek 1.68 getInterfaceType(
7740 request->operationContext.get(ProviderIdContainer::NAME),
7741 interfaceType,
7742 interfaceVersion);
|
7743 mark.hamzy 1.43
7744 if (interfaceType == "JMPI")
7745 {
|
7746 marek 1.68 id = env->GetMethodID(
7747 (jclass)pr.jProviderClass,
7748 "invokeMethod",
7749 "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;"
7750 "Ljava/util/Vector;Ljava/util/Vector;)"
7751 "Lorg/pegasus/jmpi/CIMValue;");
|
7752 mark.hamzy 1.43
7753 if (id != NULL)
7754 {
7755 eMethodFound = METHOD_METHODPROVIDER;
|
7756 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
7757 "handleInvokeMethodRequest: "
7758 "Found METHOD_PROPERTYPROVIDER.");
|
7759 mark.hamzy 1.43 }
7760
7761 if (id == NULL)
7762 {
7763 env->ExceptionClear();
|
7764 marek 1.68 id = env->GetMethodID(
7765 (jclass)pr.jProviderClass,
7766 "invokeMethod",
7767 "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;"
7768 "[Lorg/pegasus/jmpi/CIMArgument;"
7769 "[Lorg/pegasus/jmpi/CIMArgument;)"
7770 "Lorg/pegasus/jmpi/CIMValue;");
|
7771 mark.hamzy 1.43
7772 if (id != NULL)
7773 {
7774 eMethodFound = METHOD_CIMMETHODPROVIDER;
|
7775 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
7776 "handleInvokeMethodRequest: "
7777 "Found METHOD_CIMMETHODPROVIDER.");
|
7778 mark.hamzy 1.43 }
7779 }
7780 }
7781 else if (interfaceType == "JMPIExperimental")
7782 {
|
7783 marek 1.68 id = env->GetMethodID(
7784 (jclass)pr.jProviderClass,
7785 "invokeMethod",
7786 "(Lorg/pegasus/jmpi/OperationContext;"
7787 "Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;"
7788 "Ljava/util/Vector;Ljava/util/Vector;)"
7789 "Lorg/pegasus/jmpi/CIMValue;");
|
7790 mark.hamzy 1.43
7791 if (id != NULL)
7792 {
7793 eMethodFound = METHOD_METHODPROVIDER2;
|
7794 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
7795 "handleInvokeMethodRequest: "
7796 "Found METHOD_METHODPROVIDER2.");
|
7797 mark.hamzy 1.43 }
7798
7799 if (id == NULL)
7800 {
7801 env->ExceptionClear();
7802
|
7803 marek 1.68 id = env->GetMethodID(
7804 (jclass)pr.jProviderClass,
7805 "invokeMethod",
7806 "(Lorg/pegasus/jmpi/OperationContext;"
7807 "Lorg/pegasus/jmpi/CIMObjectPath;"
7808 "Ljava/lang/String;"
7809 "[Lorg/pegasus/jmpi/CIMArgument;["
7810 "Lorg/pegasus/jmpi/CIMArgument;)"
7811 "Lorg/pegasus/jmpi/CIMValue;");
|
7812 mark.hamzy 1.43
7813 if (id != NULL)
7814 {
7815 eMethodFound = METHOD_CIMMETHODPROVIDER2;
|
7816 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
7817 "handleInvokeMethodRequest: "
7818 "Found METHOD_CIMMETHODPROVIDER2.");
|
7819 mark.hamzy 1.43 }
7820 }
7821 }
7822
7823 if (id == NULL)
7824 {
|
7825 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
7826 "handleInvokeMethod: No method provider found!");
|
7827 mark.hamzy 1.43
7828 PEG_METHOD_EXIT();
7829
|
7830 marek 1.68 throw PEGASUS_CIM_EXCEPTION_L(
7831 CIM_ERR_FAILED,
7832 MessageLoaderParms(
|
7833 thilo.boehm 1.69 "ProviderManager.JMPI.JMPIProviderManager.METHOD_NOT_FOUND",
|
7834 marek 1.68 "Could not find a method for the provider based on "
7835 "InterfaceType."));
|
7836 mark.hamzy 1.43 }
7837
7838 JMPIjvm::checkException(env);
7839
7840 switch (eMethodFound)
7841 {
7842 case METHOD_CIMMETHODPROVIDER:
7843 {
|
7844 marek 1.68 jlong jcopRef = DEBUG_ConvertCToJava(
7845 CIMObjectPath*,
7846 jlong,
7847 objectPath);
7848 jobject jcop = env->NewObject(
7849 jv->CIMObjectPathClassRef,
7850 jv->CIMObjectPathNewJ,
7851 jcopRef);
|
7852 mark.hamzy 1.43
7853 JMPIjvm::checkException(env);
7854
|
7855 marek 1.68 jstring jMethod =
7856 env->NewStringUTF(
7857 request->methodName.getString().getCString());
|
7858 mark.hamzy 1.43
7859 JMPIjvm::checkException(env);
7860
7861 Uint32 m=request->inParameters.size();
7862
|
7863 marek 1.68 jobjectArray jArIn=(jobjectArray)env->NewObjectArray(
7864 m,
7865 jv->CIMArgumentClassRef,
7866 NULL);
|
7867 mark.hamzy 1.43
7868 for (Uint32 i=0; i<m; i++) {
|
7869 marek 1.68 CIMParamValue *parm = new CIMParamValue(request->inParameters[i]);
7870 jlong jArgRef = DEBUG_ConvertCToJava(CIMParamValue*, jlong, parm);
7871 jobject jArg = env->NewObject(
7872 jv->CIMArgumentClassRef,
7873 jv->CIMArgumentNewJ,
7874 jArgRef);
|
7875 mark.hamzy 1.43
7876 env->SetObjectArrayElement(jArIn,i,jArg);
7877 }
7878
|
7879 marek 1.68 jobjectArray jArOut=(jobjectArray)env->NewObjectArray(
7880 24,
7881 jv->CIMArgumentClassRef,
7882 NULL);
|
7883 mark.hamzy 1.43
|
7884 kumpf 1.55 StatProviderTimeMeasurement providerTime(response);
7885
|
7886 mark.hamzy 1.43 jobject jValueRet = env->CallObjectMethod((jobject)pr.jProvider,
7887 id,
7888 jcop,
7889 jMethod,
7890 jArIn,
7891 jArOut);
7892 JMPIjvm::checkException(env);
|
7893 mark.hamzy 1.37
|
7894 mark.hamzy 1.43 handler.processing();
|
7895 mark.hamzy 1.37
|
7896 marek 1.68 jlong jValueRetRef = env->CallLongMethod(
7897 jValueRet,
7898 JMPIjvm::jv.CIMValueCInst);
7899 CIMValue *valueRet = DEBUG_ConvertJavaToC(
7900 jlong,
7901 CIMValue*,
7902 jValueRetRef);
|
7903 schuur 1.11
|
7904 mark.hamzy 1.43 handler.deliver(*valueRet);
|
7905 schuur 1.1
|
7906 mark.hamzy 1.43 for (int i=0; i<24; i++) {
7907 jobject jArg = env->GetObjectArrayElement(jArOut,i);
|
7908 mark.hamzy 1.25
|
7909 mark.hamzy 1.43 JMPIjvm::checkException(env);
|
7910 mark.hamzy 1.25
|
7911 mark.hamzy 1.43 if (jArg==NULL)
7912 break;
|
7913 mark.hamzy 1.25
|
7914 marek 1.68 jlong jpRef = env->CallLongMethod(
7915 jArg,
7916 JMPIjvm::jv.CIMArgumentCInst);
7917 CIMParamValue *p = DEBUG_ConvertJavaToC(
7918 jlong,
7919 CIMParamValue*,
7920 jpRef);
|
7921 mark.hamzy 1.25
|
7922 mark.hamzy 1.43 JMPIjvm::checkException(env);
|
7923 mark.hamzy 1.25
|
7924 mark.hamzy 1.43 handler.deliverParamValue(*p);
|
7925 mark.hamzy 1.25 }
|
7926 mark.hamzy 1.43
7927 handler.complete();
7928 break;
|
7929 mark.hamzy 1.23 }
|
7930 mark.hamzy 1.25
|
7931 mark.hamzy 1.43 case METHOD_CIMMETHODPROVIDER2:
7932 {
|
7933 marek 1.68 jlong jocRef = DEBUG_ConvertCToJava(
7934 OperationContext*,
7935 jlong,
7936 &request->operationContext);
7937 jobject joc = env->NewObject(
7938 jv->OperationContextClassRef,
7939 jv->OperationContextNewJ,
7940 jocRef);
7941
7942 jlong jcopRef = DEBUG_ConvertCToJava(
7943 CIMObjectPath*,
7944 jlong,
7945 objectPath);
7946 jobject jcop = env->NewObject(
7947 jv->CIMObjectPathClassRef,
7948 jv->CIMObjectPathNewJ,
7949 jcopRef);
|
7950 mark.hamzy 1.25
7951 JMPIjvm::checkException(env);
7952
|
7953 marek 1.68 jstring jMethod =
7954 env->NewStringUTF(request->methodName.getString().getCString());
|
7955 mark.hamzy 1.29
|
7956 mark.hamzy 1.23 JMPIjvm::checkException(env);
7957
|
7958 mark.hamzy 1.25 Uint32 m=request->inParameters.size();
7959
|
7960 marek 1.68 jobjectArray jArIn=(jobjectArray)env->NewObjectArray(
7961 m,
7962 jv->CIMArgumentClassRef,
7963 NULL);
|
7964 mark.hamzy 1.29
|
7965 mark.hamzy 1.25 for (Uint32 i=0; i<m; i++) {
|
7966 marek 1.68 CIMParamValue *parm = new CIMParamValue(request->inParameters[i]);
7967 jlong jArgRef = DEBUG_ConvertCToJava(CIMParamValue*, jlong, parm);
7968 jobject jArg = env->NewObject(
7969 jv->CIMArgumentClassRef,
7970 jv->CIMArgumentNewJ,
7971 jArgRef);
|
7972 mark.hamzy 1.23
|
7973 mark.hamzy 1.25 env->SetObjectArrayElement(jArIn,i,jArg);
7974 }
|
7975 mark.hamzy 1.23
|
7976 marek 1.68 jobjectArray jArOut=(jobjectArray)env->NewObjectArray(
7977 24,
7978 jv->CIMArgumentClassRef,
7979 NULL);
|
7980 mark.hamzy 1.23
|
7981 kumpf 1.55 StatProviderTimeMeasurement providerTime(response);
7982
|
7983 mark.hamzy 1.29 jobject jValueRet = env->CallObjectMethod((jobject)pr.jProvider,
7984 id,
|
7985 mark.hamzy 1.43 joc,
|
7986 mark.hamzy 1.29 jcop,
7987 jMethod,
7988 jArIn,
7989 jArOut);
|
7990 mark.hamzy 1.23 JMPIjvm::checkException(env);
7991
|
7992 mark.hamzy 1.43 if (joc)
7993 {
|
7994 marek 1.68 env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate);
|
7995 mark.hamzy 1.43
7996 JMPIjvm::checkException(env);
7997 }
7998
|
7999 mark.hamzy 1.23 handler.processing();
8000
|
8001 marek 1.68 jlong jValueRetRef = env->CallLongMethod(
8002 jValueRet,
8003 JMPIjvm::jv.CIMValueCInst);
8004 CIMValue *valueRet = DEBUG_ConvertJavaToC(
8005 jlong,
8006 CIMValue*,
8007 jValueRetRef);
|
8008 mark.hamzy 1.23
|
8009 mark.hamzy 1.29 handler.deliver(*valueRet);
|
8010 schuur 1.13
|
8011 mark.hamzy 1.25 for (int i=0; i<24; i++) {
|
8012 mark.hamzy 1.29 jobject jArg = env->GetObjectArrayElement(jArOut,i);
8013
|
8014 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
8015 schuur 1.13
|
8016 mark.hamzy 1.29 if (jArg==NULL)
8017 break;
|
8018 schuur 1.13
|
8019 marek 1.68 jlong jpRef = env->CallLongMethod(
8020 jArg,
8021 JMPIjvm::jv.CIMArgumentCInst);
8022 CIMParamValue *p = DEBUG_ConvertJavaToC(
8023 jlong,
8024 CIMParamValue*,
8025 jpRef);
|
8026 schuur 1.13
|
8027 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
8028 schuur 1.1
|
8029 mark.hamzy 1.25 handler.deliverParamValue(*p);
|
8030 mark.hamzy 1.23 }
|
8031 schuur 1.1
|
8032 mark.hamzy 1.23 handler.complete();
|
8033 mark.hamzy 1.25 break;
|
8034 mark.hamzy 1.23 }
|
8035 schuur 1.11
|
8036 mark.hamzy 1.43 case METHOD_METHODPROVIDER:
8037 {
|
8038 marek 1.68 jlong jcopRef = DEBUG_ConvertCToJava(
8039 CIMObjectPath*,
8040 jlong,
8041 objectPath);
8042 jobject jcop = env->NewObject(
8043 jv->CIMObjectPathClassRef,
8044 jv->CIMObjectPathNewJ,
8045 jcopRef);
|
8046 mark.hamzy 1.43
8047 JMPIjvm::checkException(env);
8048
|
8049 marek 1.68 jstring jMethod = env->NewStringUTF(
8050 request->methodName.getString().getCString());
|
8051 mark.hamzy 1.43
8052 JMPIjvm::checkException(env);
8053
8054 jobject jVecIn = env->NewObject(jv->VectorClassRef,jv->VectorNew);
8055
8056 JMPIjvm::checkException(env);
8057
8058 for (int i=0,m=request->inParameters.size(); i<m; i++)
8059 {
|
8060 marek 1.68 const CIMParamValue &parm = request->inParameters[i];
8061 const CIMValue v = parm.getValue();
8062 CIMProperty *p = new CIMProperty(
8063 parm.getParameterName(),
8064 v,
8065 v.getArraySize());
8066 jlong jpRef = DEBUG_ConvertCToJava (CIMProperty*, jlong, p);
8067 jobject jp = env->NewObject(
8068 jv->CIMPropertyClassRef,
8069 jv->CIMPropertyNewJ,
8070 jpRef);
|
8071 mark.hamzy 1.43
8072 env->CallVoidMethod(jVecIn,jv->VectorAddElement,jp);
8073 }
8074
8075 jobject jVecOut=env->NewObject(jv->VectorClassRef,jv->VectorNew);
8076 JMPIjvm::checkException(env);
8077
|
8078 kumpf 1.55 StatProviderTimeMeasurement providerTime(response);
8079
|
8080 mark.hamzy 1.43 jobject jValueRet = env->CallObjectMethod((jobject)pr.jProvider,
8081 id,
8082 jcop,
8083 jMethod,
8084 jVecIn,
8085 jVecOut);
8086 JMPIjvm::checkException(env);
8087
8088 handler.processing();
8089
|
8090 marek 1.68 jlong jValueRetRef = env->CallLongMethod(
8091 jValueRet,
8092 JMPIjvm::jv.CIMValueCInst);
8093 CIMValue *valueRet = DEBUG_ConvertJavaToC(
8094 jlong,
8095 CIMValue*,
8096 jValueRetRef);
|
8097 mark.hamzy 1.43
8098 handler.deliver(*valueRet);
8099
|
8100 marek 1.68 for (int i=0,m=env->CallIntMethod(jVecOut,JMPIjvm::jv.VectorSize);
8101 i<m;
8102 i++)
|
8103 mark.hamzy 1.43 {
8104 JMPIjvm::checkException(env);
8105
|
8106 marek 1.68 jobject jProp = env->CallObjectMethod(
8107 jVecOut,
8108 JMPIjvm::jv.VectorElementAt,
8109 i);
|
8110 mark.hamzy 1.43
8111 JMPIjvm::checkException(env);
8112
|
8113 marek 1.68 jlong jpRef = env->CallLongMethod(
8114 jProp,
8115 JMPIjvm::jv.CIMPropertyCInst);
8116 CIMProperty *p = DEBUG_ConvertJavaToC(
8117 jlong,
8118 CIMProperty*,
8119 jpRef);
|
8120 mark.hamzy 1.43
8121 JMPIjvm::checkException(env);
8122
|
8123 marek 1.68 handler.deliverParamValue(
8124 CIMParamValue(p->getName().getString(),
8125 p->getValue()));
|
8126 mark.hamzy 1.43 }
8127
8128 handler.complete();
8129 break;
8130 }
8131
8132 case METHOD_METHODPROVIDER2:
|
8133 mark.hamzy 1.25 {
|
8134 marek 1.68 jlong jocRef = DEBUG_ConvertCToJava(
8135 OperationContext*,
8136 jlong,
8137 &request->operationContext);
8138 jobject joc = env->NewObject(
8139 jv->OperationContextClassRef,
8140 jv->OperationContextNewJ,
8141 jocRef);
8142
8143 jlong jcopRef = DEBUG_ConvertCToJava(
8144 CIMObjectPath*,
8145 jlong,
8146 objectPath);
8147 jobject jcop = env->NewObject(
8148 jv->CIMObjectPathClassRef,
8149 jv->CIMObjectPathNewJ,
8150 jcopRef);
|
8151 mark.hamzy 1.25
8152 JMPIjvm::checkException(env);
8153
|
8154 marek 1.68 jstring jMethod = env->NewStringUTF(
8155 request->methodName.getString().getCString());
|
8156 mark.hamzy 1.29
|
8157 mark.hamzy 1.25 JMPIjvm::checkException(env);
8158
|
8159 mark.hamzy 1.29 jobject jVecIn = env->NewObject(jv->VectorClassRef,jv->VectorNew);
8160
|
8161 mark.hamzy 1.25 JMPIjvm::checkException(env);
8162
|
8163 mark.hamzy 1.29 for (int i=0,m=request->inParameters.size(); i<m; i++)
8164 {
8165 const CIMParamValue &parm = request->inParameters[i];
8166 const CIMValue v = parm.getValue();
|
8167 marek 1.68 CIMProperty *p = new CIMProperty(
8168 parm.getParameterName(),
8169 v,
8170 v.getArraySize());
8171 jlong jpRef = DEBUG_ConvertCToJava(CIMProperty*, jlong, p);
8172 jobject jp = env->NewObject(
8173 jv->CIMPropertyClassRef,
8174 jv->CIMPropertyNewJ,
8175 jpRef);
|
8176 mark.hamzy 1.23
|
8177 mark.hamzy 1.29 env->CallVoidMethod(jVecIn,jv->VectorAddElement,jp);
|
8178 mark.hamzy 1.25 }
|
8179 mark.hamzy 1.23
|
8180 mark.hamzy 1.25 jobject jVecOut=env->NewObject(jv->VectorClassRef,jv->VectorNew);
8181 JMPIjvm::checkException(env);
|
8182 mark.hamzy 1.23
|
8183 kumpf 1.55 StatProviderTimeMeasurement providerTime(response);
8184
|
8185 mark.hamzy 1.29 jobject jValueRet = env->CallObjectMethod((jobject)pr.jProvider,
8186 id,
|
8187 mark.hamzy 1.43 joc,
|
8188 mark.hamzy 1.29 jcop,
8189 jMethod,
8190 jVecIn,
8191 jVecOut);
|
8192 mark.hamzy 1.23 JMPIjvm::checkException(env);
8193
|
8194 mark.hamzy 1.43 if (joc)
8195 {
|
8196 marek 1.68 env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate);
|
8197 mark.hamzy 1.43
8198 JMPIjvm::checkException(env);
8199 }
8200
|
8201 mark.hamzy 1.23 handler.processing();
|
8202 schuur 1.1
|
8203 marek 1.68 jlong jValueRetRef = env->CallLongMethod(
8204 jValueRet,
8205 JMPIjvm::jv.CIMValueCInst);
8206 CIMValue *valueRet = DEBUG_ConvertJavaToC(
8207 jlong,
8208 CIMValue*,
8209 jValueRetRef);
|
8210 mark.hamzy 1.23
|
8211 mark.hamzy 1.29 handler.deliver(*valueRet);
|
8212 mark.hamzy 1.23
|
8213 marek 1.68 for (int i=0,m=env->CallIntMethod(jVecOut,JMPIjvm::jv.VectorSize);
8214 i<m;
8215 i++)
|
8216 mark.hamzy 1.29 {
|
8217 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
8218 schuur 1.13
|
8219 marek 1.68 jobject jProp = env->CallObjectMethod(
8220 jVecOut,
8221 JMPIjvm::jv.VectorElementAt,
8222 i);
|
8223 mark.hamzy 1.29
|
8224 mark.hamzy 1.25 JMPIjvm::checkException(env);
|
8225 schuur 1.13
|
8226 marek 1.68 jlong jpRef = env->CallLongMethod(
8227 jProp,
8228 JMPIjvm::jv.CIMPropertyCInst);
8229 CIMProperty *p = DEBUG_ConvertJavaToC(
8230 jlong,
8231 CIMProperty*,
8232 jpRef);
|
8233 schuur 1.13
|
8234 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
8235 schuur 1.13
|
8236 marek 1.68 handler.deliverParamValue(
8237 CIMParamValue(p->getName().getString(),
8238 p->getValue()));
|
8239 mark.hamzy 1.25 }
8240
8241 handler.complete();
8242 break;
8243 }
|
8244 mark.hamzy 1.23
|
8245 mark.hamzy 1.25 case METHOD_UNKNOWN:
8246 {
|
8247 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
8248 "handleInvokeMethodRequest: Unknown method provider!");
|
8249 mark.hamzy 1.25 break;
8250 }
|
8251 mark.hamzy 1.23 }
|
8252 schuur 1.1 }
8253 HandlerCatch(handler);
|
8254 schuur 1.11
8255 if (env) JMPIjvm::detachThread();
8256
|
8257 schuur 1.1 PEG_METHOD_EXIT();
8258
|
8259 schuur 1.11 return(response);
|
8260 schuur 1.1 }
|
8261 mark.hamzy 1.23
|
8262 marek 1.68 int LocateIndicationProviderNames(
8263 const CIMInstance& pInstance,
8264 const CIMInstance& pmInstance,
8265 String& providerName,
8266 String& location)
|
8267 schuur 1.1 {
8268 Uint32 pos = pInstance.findProperty(CIMName ("Name"));
8269 pInstance.getProperty(pos).getValue().get(providerName);
8270
8271 pos = pmInstance.findProperty(CIMName ("Location"));
8272 pmInstance.getProperty(pos).getValue().get(location);
8273 return 0;
8274 }
8275
|
8276 mark.hamzy 1.52 WQLSelectStatement *
8277 newSelectExp (String& query,
8278 String& queryLanguage)
|
8279 mark.hamzy 1.44 {
|
8280 mark.hamzy 1.52 WQLSelectStatement *stmt = new WQLSelectStatement (queryLanguage, query);
|
8281 mark.hamzy 1.44
|
8282 mark.hamzy 1.52 try
|
8283 mark.hamzy 1.44 {
|
8284 mark.hamzy 1.52 WQLParser::parse (query, *stmt);
|
8285 mark.hamzy 1.44 }
|
8286 mark.hamzy 1.52 catch (const Exception &e)
|
8287 mark.hamzy 1.44 {
|
8288 mark.hamzy 1.52 cerr << "Error: newSelectExp caught: " << e.getMessage () << endl;
|
8289 mark.hamzy 1.44 }
8290
|
8291 mark.hamzy 1.52 return stmt;
|
8292 mark.hamzy 1.44 }
8293
|
8294 marek 1.68 Message * JMPIProviderManager::handleCreateSubscriptionRequest(
8295 const Message * message) throw()
|
8296 schuur 1.1 {
|
8297 marek 1.68 PEG_METHOD_ENTER(
8298 TRC_PROVIDERMANAGER,
8299 "JMPIProviderManager::handleCreateSubscriptionRequest");
|
8300 schuur 1.1
|
8301 mark.hamzy 1.23 HandlerIntroInd(CreateSubscription,message,request,response,handler);
8302
|
8303 mark.hamzy 1.25 typedef enum {
8304 METHOD_UNKNOWN = 0,
|
8305 mark.hamzy 1.43 METHOD_EVENTPROVIDER,
8306 METHOD_EVENTPROVIDER2,
|
8307 mark.hamzy 1.25 } METHOD_VERSION;
|
8308 mark.hamzy 1.44 METHOD_VERSION eMethodFound = METHOD_UNKNOWN;
8309 JNIEnv *env = NULL;
|
8310 mark.hamzy 1.25
|
8311 schuur 1.1 try {
|
8312 mark.hamzy 1.44 String fileName,
8313 providerName,
|
8314 mark.hamzy 1.25 providerLocation;
8315 CIMInstance req_provider,
8316 req_providerModule;
|
8317 marek 1.68 ProviderIdContainer pidc =
8318 (ProviderIdContainer) request->operationContext.get(
8319 ProviderIdContainer::NAME);
|
8320 mark.hamzy 1.25
|
8321 marek 1.68 req_provider = pidc.getProvider ();
|
8322 mark.hamzy 1.44 req_providerModule = pidc.getModule ();
|
8323 mark.hamzy 1.25
|
8324 marek 1.68 LocateIndicationProviderNames(
8325 req_provider,
8326 req_providerModule,
8327 providerName,
8328 providerLocation);
8329
8330 fileName = resolveFileName(providerLocation);
8331
|
8332 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL3,
8333 "handleCreateSubscriptionRequest: "
8334 "name space = %s provider name = %s provider filename = %s",
|
8335 thilo.boehm 1.70 (const char*)request->nameSpace.getString().getCString(),
8336 (const char*)providerName.getCString(),
8337 (const char*)fileName.getCString()
|
8338 thilo.boehm 1.69 ));
|
8339 schuur 1.1
8340 // get cached or load new provider module
|
8341 marek 1.68 JMPIProvider::OpProviderHolder ph =
8342 providerManager.getProvider(
8343 fileName,
8344 providerName,
8345 String::EMPTY);
|
8346 schuur 1.1
|
8347 carolann.graves 1.21 //
8348 // Save the provider instance from the request
8349 //
8350 ph.GetProvider ().setProviderInstance (req_provider);
8351
|
8352 mark.hamzy 1.44 JMPIProvider &pr = ph.GetProvider ();
|
8353 mark.hamzy 1.25
|
8354 mark.hamzy 1.44 //
8355 // Increment count of current subscriptions for this provider
8356 //
8357 pr.testIfZeroAndIncrementSubscriptions ();
|
8358 schuur 1.1
|
8359 marek 1.68 SubscriptionFilterConditionContainer sub_cntr =
8360 request->operationContext.get(
8361 SubscriptionFilterConditionContainer::NAME);
8362 indProvRecord *prec = NULL;
8363 bool fNewPrec = false;
|
8364 schuur 1.1
|
8365 mark.hamzy 1.25 {
|
8366 mark.hamzy 1.44 AutoMutex lock (mutexProvTab);
8367
8368 provTab.lookup (providerName, prec);
|
8369 schuur 1.12
|
8370 mark.hamzy 1.44 if (!prec)
8371 {
8372 fNewPrec = true;
|
8373 schuur 1.1
|
8374 mark.hamzy 1.44 prec = new indProvRecord ();
|
8375 schuur 1.1
|
8376 mark.hamzy 1.44 // convert arguments
8377 prec->ctx = new OperationContext ();
|
8378 schuur 1.12
|
8379 marek 1.68 prec->ctx->insert(
8380 request->operationContext.get(
8381 IdentityContainer::NAME));
8382 prec->ctx->insert(
8383 request->operationContext.get(
8384 AcceptLanguageListContainer::NAME));
8385 prec->ctx->insert(
8386 request->operationContext.get(
8387 ContentLanguageListContainer::NAME));
8388 prec->ctx->insert(
8389 request->operationContext.get(
8390 SubscriptionInstanceContainer::NAME));
8391 prec->ctx->insert(
8392 request->operationContext.get(
8393 SubscriptionFilterConditionContainer::NAME));
|
8394 konrad.r 1.22
|
8395 mark.hamzy 1.44 prec->enabled = true;
|
8396 konrad.r 1.22
|
8397 marek 1.68 prec->handler = new EnableIndicationsResponseHandler(
8398 0,
8399 0,
8400 req_provider,
8401 _indicationCallback,
8402 _responseChunkCallback);
8403
|
8404 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
|
8405 marek 1.68 "handleCreateSubscriptionRequest: "
|
8406 thilo.boehm 1.69 "Adding %s to provTab.",
8407 (const char*)providerName.getCString()));
|
8408 schuur 1.1
|
8409 mark.hamzy 1.44 provTab.insert (providerName, prec);
8410 }
8411 }
|
8412 schuur 1.1
|
8413 mark.hamzy 1.44 {
8414 AutoMutex lock (prec->mutex);
|
8415 schuur 1.1
|
8416 mark.hamzy 1.44 prec->count++;
|
8417 schuur 1.1 }
8418
|
8419 mark.hamzy 1.44 // Add a selection record for JNI CIMOMHandle deliverEvent calls
8420 indSelectRecord *srec = new indSelectRecord ();
|
8421 mark.hamzy 1.29
8422 {
|
8423 mark.hamzy 1.44 srec->query = request->query;
8424 srec->queryLanguage = sub_cntr.getQueryLanguage ();
8425 srec->propertyList = request->propertyList;
8426
|
8427 marek 1.68 CIMOMHandleQueryContext *qContext =
8428 new CIMOMHandleQueryContext(
8429 CIMNamespaceName(
8430 request->nameSpace.getString()),
8431 *pr._cimom_handle);
|
8432 mark.hamzy 1.44 srec->qContext = qContext;
8433
|
8434 marek 1.68 CIMObjectPath sPath = request->subscriptionInstance.getPath();
|
8435 dave.sudlik 1.62 Array<CIMKeyBinding> kb;
|
8436 mark.hamzy 1.44
|
8437 dave.sudlik 1.62 // Technically we only need Name and Handler for uniqueness
8438 kb = sPath.getKeyBindings ();
8439
8440 // Add an entry for every provider.
8441 kb.append (CIMKeyBinding ("Provider",
8442 pr.getName (),
8443 CIMKeyBinding::STRING));
8444
8445 sPath.setKeyBindings (kb);
|
8446 mark.hamzy 1.29
|
8447 mark.hamzy 1.44 AutoMutex lock (mutexSelxTab);
|
8448 mark.hamzy 1.29
|
8449 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
8450 "handleCreateSubscriptionRequest: "
8451 "Adding %s to selxTab.",
8452 (const char*)sPath.toString().getCString()));
|
8453 mark.hamzy 1.44
8454 selxTab.insert (sPath.toString (), srec);
8455
|
8456 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
8457 "handleCreateSubscriptionRequest: "
|
8458 thilo.boehm 1.70 "For selxTab %s , srec = %p, qContext = %p",
|
8459 thilo.boehm 1.69 (const char*)sPath.toString().getCString(),
|
8460 thilo.boehm 1.70 srec,qContext));
|
8461 schuur 1.1 }
8462
|
8463 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL4,
8464 "handleCreateSubscriptionRequest: Calling provider: %s",
8465 (const char*)pr.getName().getCString()));
|
8466 mark.hamzy 1.44
|
8467 mark.hamzy 1.25 JvmVector *jv = 0;
8468
8469 env = JMPIjvm::attachThread(&jv);
8470
|
8471 mark.hamzy 1.37 if (!env)
8472 {
|
8473 thilo.boehm 1.69 PEG_TRACE_CSTRING( TRC_PROVIDERMANAGER, Tracer::LEVEL2,
8474 "handleCreateSubscriptionRequest: "
8475 "Could not initialize the JVM (Java Virtual Machine) "
8476 "runtime environment.");
8477
|
8478 mark.hamzy 1.37 PEG_METHOD_EXIT();
8479
|
8480 marek 1.68 throw PEGASUS_CIM_EXCEPTION_L(
8481 CIM_ERR_FAILED,
8482 MessageLoaderParms(
|
8483 thilo.boehm 1.69 "ProviderManager.JMPI.JMPIProviderManager.INIT_JVM_FAILED",
|
8484 marek 1.68 "Could not initialize the JVM (Java Virtual Machine) "
8485 "runtime environment."));
|
8486 mark.hamzy 1.37 }
8487
|
8488 mark.hamzy 1.25 JMPIProvider::pm_service_op_lock op_lock(&pr);
8489
|
8490 mark.hamzy 1.43 jmethodID id = NULL;
8491 String interfaceType;
8492 String interfaceVersion;
8493
|
8494 mark.hamzy 1.44 getInterfaceType (pidc,
|
8495 mark.hamzy 1.43 interfaceType,
8496 interfaceVersion);
8497
8498 if (interfaceType == "JMPI")
8499 {
|
8500 marek 1.68 id = env->GetMethodID(
8501 (jclass)pr.jProviderClass,
8502 "activateFilter",
8503 "(Lorg/pegasus/jmpi/SelectExp;Ljava/lang/String;"
8504 "Lorg/pegasus/jmpi/CIMObjectPath;Z)V");
|
8505 mark.hamzy 1.43
8506 if (id != NULL)
8507 {
8508 eMethodFound = METHOD_EVENTPROVIDER;
|
8509 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
8510 "handleCreateSubscriptionRequest: "
8511 "Found METHOD_EVENTPROVIDER.");
|
8512 mark.hamzy 1.43 }
8513 }
8514 else if (interfaceType == "JMPIExperimental")
8515 {
|
8516 marek 1.68 id = env->GetMethodID(
8517 (jclass)pr.jProviderClass,
8518 "activateFilter",
8519 "(Lorg/pegasus/jmpi/OperationContext;"
8520 "Lorg/pegasus/jmpi/SelectExp;Ljava/lang/String;"
8521 "Lorg/pegasus/jmpi/CIMObjectPath;Z)V");
|
8522 mark.hamzy 1.25
|
8523 mark.hamzy 1.43 if (id != NULL)
8524 {
8525 eMethodFound = METHOD_EVENTPROVIDER2;
|
8526 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
8527 "handleCreateSubscriptionRequest: "
8528 "Found METHOD_EVENTPROVIDER2.");
|
8529 mark.hamzy 1.43 }
8530 }
|
8531 schuur 1.12
|
8532 mark.hamzy 1.43 if (id == NULL)
|
8533 mark.hamzy 1.25 {
|
8534 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
8535 "handleCreateSubscriptionRequest: No method provider found!");
|
8536 mark.hamzy 1.43
8537 PEG_METHOD_EXIT();
8538
|
8539 marek 1.68 throw PEGASUS_CIM_EXCEPTION_L(
8540 CIM_ERR_FAILED,
8541 MessageLoaderParms(
|
8542 thilo.boehm 1.69 "ProviderManager.JMPI.JMPIProviderManager.METHOD_NOT_FOUND",
|
8543 marek 1.68 "Could not find a method for the provider based on"
8544 " InterfaceType."));
|
8545 mark.hamzy 1.25 }
|
8546 mark.hamzy 1.23
8547 JMPIjvm::checkException(env);
8548
|
8549 mark.hamzy 1.25 switch (eMethodFound)
8550 {
|
8551 mark.hamzy 1.43 case METHOD_EVENTPROVIDER:
8552 {
|
8553 marek 1.68 WQLSelectStatement *stmt = newSelectExp(
8554 srec->query,
8555 srec->queryLanguage);
8556 jlong jStmtRef = DEBUG_ConvertCToJava(
8557 WQLSelectStatement *,
8558 jlong,
8559 stmt);
8560 jobject jSelectExp = env->NewObject(
8561 jv->SelectExpClassRef,
8562 jv->SelectExpNewJ,
8563 jStmtRef);
|
8564 mark.hamzy 1.43
8565 JMPIjvm::checkException(env);
8566
|
8567 marek 1.68 jstring jType = env->NewStringUTF(
8568 request->nameSpace.getString().getCString());
|
8569 mark.hamzy 1.43
8570 JMPIjvm::checkException(env);
8571
|
8572 mark.hamzy 1.44 CIMObjectPath *cop = new CIMObjectPath (System::getHostName(),
8573 request->nameSpace,
8574 request->classNames[0]);
|
8575 marek 1.68 jlong jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jlong, cop);
8576 jobject jcop = env->NewObject(
8577 jv->CIMObjectPathClassRef,
8578 jv->CIMObjectPathNewJ,jcopRef);
|
8579 mark.hamzy 1.43
8580 JMPIjvm::checkException(env);
8581
|
8582 kumpf 1.55 StatProviderTimeMeasurement providerTime(response);
8583
|
8584 mark.hamzy 1.44 env->CallVoidMethod ((jobject)pr.jProvider,
8585 id,
|
8586 mark.hamzy 1.52 jSelectExp,
|
8587 mark.hamzy 1.44 jType,
8588 jcop,
8589 (jboolean)fNewPrec);
|
8590 mark.hamzy 1.43
8591 JMPIjvm::checkException(env);
8592 break;
8593 }
8594
8595 case METHOD_EVENTPROVIDER2:
|
8596 mark.hamzy 1.25 {
|
8597 marek 1.68 jlong jocRef = DEBUG_ConvertCToJava(
8598 OperationContext*,
8599 jlong,
8600 &request->operationContext);
8601 jobject joc = env->NewObject(
8602 jv->OperationContextClassRef,
8603 jv->OperationContextNewJ,jocRef);
8604
8605 WQLSelectStatement *stmt = newSelectExp(srec->query,
8606 srec->queryLanguage);
8607 jlong jStmtRef = DEBUG_ConvertCToJava(
8608 WQLSelectStatement *,
8609 jlong,
8610 stmt);
8611 jobject jSelectExp = env->NewObject(
8612 jv->SelectExpClassRef,
8613 jv->SelectExpNewJ,
8614 jStmtRef);
|
8615 mark.hamzy 1.25
8616 JMPIjvm::checkException(env);
8617
|
8618 marek 1.68 jstring jType = env->NewStringUTF(
8619 request->nameSpace.getString().getCString());
|
8620 schuur 1.12
|
8621 mark.hamzy 1.25 JMPIjvm::checkException(env);
|
8622 schuur 1.1
|
8623 marek 1.68 CIMObjectPath *cop = new CIMObjectPath (System::getHostName(),
8624 request->nameSpace,
8625 request->classNames[0]);
8626 jlong jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jlong, cop);
8627 jobject jcop = env->NewObject(
8628 jv->CIMObjectPathClassRef,
8629 jv->CIMObjectPathNewJ,jcopRef);
|
8630 schuur 1.1
|
8631 mark.hamzy 1.25 JMPIjvm::checkException(env);
|
8632 schuur 1.1
|
8633 kumpf 1.55 StatProviderTimeMeasurement providerTime(response);
8634
|
8635 mark.hamzy 1.44 env->CallVoidMethod ((jobject)pr.jProvider,
8636 id,
8637 joc,
|
8638 mark.hamzy 1.52 jSelectExp,
|
8639 mark.hamzy 1.44 jType,
8640 jcop,
8641 (jboolean)fNewPrec);
|
8642 schuur 1.12
|
8643 mark.hamzy 1.25 JMPIjvm::checkException(env);
|
8644 schuur 1.1
|
8645 mark.hamzy 1.43 if (joc)
8646 {
|
8647 marek 1.68 env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate);
|
8648 mark.hamzy 1.43
8649 JMPIjvm::checkException(env);
8650 }
|
8651 mark.hamzy 1.25 break;
|
8652 carolann.graves 1.21 }
8653
|
8654 mark.hamzy 1.25 case METHOD_UNKNOWN:
8655 {
|
8656 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
8657 "handleCreateSubscriptionRequest: Unknown method provider!");
|
8658 mark.hamzy 1.25 break;
8659 }
8660 }
|
8661 schuur 1.1 }
8662 HandlerCatch(handler);
|
8663 schuur 1.12
|
8664 mark.hamzy 1.23 if (env) JMPIjvm::detachThread();
8665
|
8666 schuur 1.1 PEG_METHOD_EXIT();
8667
8668 return(response);
8669 }
8670
|
8671 marek 1.68 Message * JMPIProviderManager::handleDeleteSubscriptionRequest(
8672 const Message * message) throw()
|
8673 schuur 1.1 {
|
8674 marek 1.68 PEG_METHOD_ENTER(
8675 TRC_PROVIDERMANAGER,
8676 "JMPIProviderManager::handleDeleteSubscriptionRequest");
|
8677 schuur 1.1
|
8678 mark.hamzy 1.23 HandlerIntroInd(DeleteSubscription,message,request,response,handler);
8679
|
8680 mark.hamzy 1.25 typedef enum {
8681 METHOD_UNKNOWN = 0,
|
8682 mark.hamzy 1.43 METHOD_EVENTPROVIDER,
8683 METHOD_EVENTPROVIDER2,
|
8684 mark.hamzy 1.25 } METHOD_VERSION;
|
8685 mark.hamzy 1.44 METHOD_VERSION eMethodFound = METHOD_UNKNOWN;
8686 JNIEnv *env = NULL;
8687 bool fFreePrec = false;
8688 indProvRecord *prec = NULL;
8689 indSelectRecord *srec = NULL;
|
8690 mark.hamzy 1.25
|
8691 schuur 1.1 try {
|
8692 mark.hamzy 1.44 String fileName,
8693 providerName,
|
8694 mark.hamzy 1.25 providerLocation;
8695 CIMInstance req_provider,
8696 req_providerModule;
|
8697 marek 1.68 ProviderIdContainer pidc = (ProviderIdContainer)
8698 request->operationContext.get(
8699 ProviderIdContainer::NAME);
|
8700 mark.hamzy 1.25
|
8701 mark.hamzy 1.44 req_provider = pidc.getProvider ();
8702 req_providerModule = pidc.getModule ();
8703
8704 LocateIndicationProviderNames (req_provider,
8705 req_providerModule,
8706 providerName,
8707 providerLocation);
8708
8709 fileName = resolveFileName (providerLocation);
8710
|
8711 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL3,
8712 "handleDeleteSubscriptionRequest: "
8713 "name space = %s provider name = %s provider filename = %s",
8714 (const char*)request->nameSpace.getString().getCString(),
|
8715 thilo.boehm 1.70 (const char*)providerName.getCString(),
8716 (const char*)fileName.getCString()
|
8717 thilo.boehm 1.69 ));
|
8718 se.gupta 1.9
|
8719 mark.hamzy 1.44 // get cached or load new provider module
|
8720 marek 1.68 JMPIProvider::OpProviderHolder ph = providerManager.getProvider(
8721 fileName,
8722 providerName,
8723 String::EMPTY);
|
8724 schuur 1.1
|
8725 mark.hamzy 1.44 JMPIProvider &pr = ph.GetProvider ();
8726
8727 {
8728 AutoMutex lock (mutexProvTab);
8729
8730 provTab.lookup (providerName, prec);
8731 }
|
8732 schuur 1.1
|
8733 mark.hamzy 1.44 {
8734 AutoMutex lock (prec->mutex);
|
8735 mark.hamzy 1.23
|
8736 mark.hamzy 1.44 if (--prec->count <= 0)
8737 {
|
8738 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
8739 "handleDeleteSubscriptionRequest: "
8740 "Removing %s from provTab.",
8741 (const char*)providerName.getCString()));
|
8742 schuur 1.1
|
8743 mark.hamzy 1.44 provTab.remove (providerName);
|
8744 schuur 1.1
|
8745 mark.hamzy 1.44 fFreePrec = true;
8746 }
8747 }
|
8748 mark.hamzy 1.25
8749 {
|
8750 marek 1.68 CIMObjectPath sPath = request->subscriptionInstance.getPath();
|
8751 dave.sudlik 1.62 Array<CIMKeyBinding> kb;
8752
8753 // Technically we only need Name and Handler for uniqueness
8754 kb = sPath.getKeyBindings ();
|
8755 mark.hamzy 1.44
|
8756 dave.sudlik 1.62 // Add an entry for every provider.
8757 kb.append (CIMKeyBinding ("Provider",
8758 pr.getName (),
8759 CIMKeyBinding::STRING));
8760
8761 sPath.setKeyBindings (kb);
|
8762 schuur 1.1
|
8763 mark.hamzy 1.44 String sPathString = sPath.toString ();
|
8764 mark.hamzy 1.25
|
8765 mark.hamzy 1.44 AutoMutex lock (mutexSelxTab);
|
8766 schuur 1.1
|
8767 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
8768 "handleDeleteSubscriptionRequest: "
8769 "Removing %s from selxTab.",
8770 (const char*)sPathString.getCString()));
|
8771 konrad.r 1.22
|
8772 dave.sudlik 1.62 if (!selxTab.lookup (sPathString, srec))
8773 {
8774 PEGASUS_ASSERT(0);
8775 }
|
8776 schuur 1.1
|
8777 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
8778 "handleDeleteSubscriptionRequest: "
|
8779 thilo.boehm 1.70 "For selxTab %s , srec = %p, qContext = %p",
|
8780 thilo.boehm 1.69 (const char*)sPathString.getCString(),
|
8781 thilo.boehm 1.70 srec,srec->qContext));
|
8782 schuur 1.1
|
8783 mark.hamzy 1.44 selxTab.remove (sPathString);
8784 }
|
8785 schuur 1.1
|
8786 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3,
8787 "handleDeleteSubscriptionRequest: "
8788 "Calling provider: %s",
8789 (const char*)pr.getName().getCString()));
|
8790 schuur 1.1
|
8791 mark.hamzy 1.25 JvmVector *jv = 0;
8792
8793 env = JMPIjvm::attachThread(&jv);
8794
|
8795 mark.hamzy 1.37 if (!env)
8796 {
|
8797 thilo.boehm 1.69 PEG_TRACE_CSTRING( TRC_PROVIDERMANAGER, Tracer::LEVEL2,
8798 "handleDeleteSubscriptionRequest: "
8799 "Could not initialize the JVM (Java Virtual Machine) "
8800 "runtime environment.");
8801
|
8802 mark.hamzy 1.37 PEG_METHOD_EXIT();
8803
|
8804 marek 1.68 throw PEGASUS_CIM_EXCEPTION_L(
8805 CIM_ERR_FAILED,
8806 MessageLoaderParms(
|
8807 thilo.boehm 1.69 "ProviderManager.JMPI.JMPIProviderManager.INIT_JVM_FAILED",
|
8808 marek 1.68 "Could not initialize the JVM (Java Virtual Machine) "
8809 "runtime environment."));
|
8810 mark.hamzy 1.37 }
8811
|
8812 mark.hamzy 1.25 JMPIProvider::pm_service_op_lock op_lock(&pr);
8813
|
8814 mark.hamzy 1.43 jmethodID id = NULL;
8815 String interfaceType;
8816 String interfaceVersion;
8817
|
8818 marek 1.68 getInterfaceType(
8819 request->operationContext.get(ProviderIdContainer::NAME),
8820 interfaceType,
8821 interfaceVersion);
|
8822 mark.hamzy 1.43
8823 if (interfaceType == "JMPI")
8824 {
|
8825 marek 1.68 id = env->GetMethodID(
8826 (jclass)pr.jProviderClass,
8827 "deActivateFilter",
8828 "(Lorg/pegasus/jmpi/SelectExp;Ljava/lang/String;"
8829 "Lorg/pegasus/jmpi/CIMObjectPath;Z)V");
|
8830 mark.hamzy 1.43
8831 if (id != NULL)
8832 {
8833 eMethodFound = METHOD_EVENTPROVIDER;
|
8834 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
8835 "handleDeleteSubscriptionRequest: "
8836 "Found METHOD_EVENTPROVIDER.");
|
8837 mark.hamzy 1.43 }
8838 }
8839 else if (interfaceType == "JMPIExperimental")
8840 {
|
8841 marek 1.68 id = env->GetMethodID(
8842 (jclass)pr.jProviderClass,
8843 "deActivateFilter",
8844 "(Lorg/pegasus/jmpi/OperationContext;"
8845 "Lorg/pegasus/jmpi/SelectExp;Ljava/lang/String;"
8846 "Lorg/pegasus/jmpi/CIMObjectPath;Z)V");
|
8847 mark.hamzy 1.25
|
8848 mark.hamzy 1.43 if (id != NULL)
8849 {
8850 eMethodFound = METHOD_EVENTPROVIDER2;
|
8851 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
8852 "handleDeleteSubscriptionRequest: "
8853 "Found METHOD_EVENTPROVIDER2.");
|
8854 mark.hamzy 1.43 }
8855 }
|
8856 schuur 1.12
|
8857 mark.hamzy 1.43 if (id == NULL)
|
8858 mark.hamzy 1.25 {
|
8859 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
8860 "handleDeleteSubscriptionRequest: No method provider found!");
|
8861 mark.hamzy 1.43
8862 PEG_METHOD_EXIT();
8863
|
8864 marek 1.68 throw PEGASUS_CIM_EXCEPTION_L(
8865 CIM_ERR_FAILED,
8866 MessageLoaderParms(
|
8867 thilo.boehm 1.69 "ProviderManager.JMPI.JMPIProviderManager.METHOD_NOT_FOUND",
|
8868 marek 1.68 "Could not find a method for the provider based on"
8869 " InterfaceType."));
|
8870 mark.hamzy 1.25 }
|
8871 mark.hamzy 1.23
8872 JMPIjvm::checkException(env);
8873
|
8874 mark.hamzy 1.25 switch (eMethodFound)
8875 {
|
8876 mark.hamzy 1.43 case METHOD_EVENTPROVIDER:
8877 {
|
8878 marek 1.68 WQLSelectStatement *stmt = newSelectExp(
8879 srec->query,
8880 srec->queryLanguage);
8881 jlong jStmtRef = DEBUG_ConvertCToJava(
8882 WQLSelectStatement *,
8883 jlong,
8884 stmt);
8885 jobject jSelectExp = env->NewObject(
8886 jv->SelectExpClassRef,
8887 jv->SelectExpNewJ,jStmtRef);
|
8888 mark.hamzy 1.43
8889 JMPIjvm::checkException(env);
8890
|
8891 marek 1.68 jstring jType = env->NewStringUTF(
8892 request->nameSpace.getString().getCString());
|
8893 mark.hamzy 1.43
8894 JMPIjvm::checkException(env);
8895
|
8896 marek 1.68 CIMObjectPath *cop = new CIMObjectPath(
8897 System::getHostName(),
8898 request->nameSpace,
8899 request->classNames[0]);
8900 jlong jcopRef = DEBUG_ConvertCToJava(CIMObjectPath*, jlong, cop);
8901 jobject jcop = env->NewObject(
8902 jv->CIMObjectPathClassRef,
8903 jv->CIMObjectPathNewJ,jcopRef);
|
8904 mark.hamzy 1.43
8905 JMPIjvm::checkException(env);
8906
|
8907 kumpf 1.55 StatProviderTimeMeasurement providerTime(response);
8908
|
8909 mark.hamzy 1.44 env->CallVoidMethod ((jobject)pr.jProvider,
8910 id,
|
8911 mark.hamzy 1.52 jSelectExp,
|
8912 mark.hamzy 1.44 jType,
8913 jcop,
8914 (jboolean)fFreePrec);
|
8915 mark.hamzy 1.43
8916 JMPIjvm::checkException(env);
8917 break;
8918 }
8919
8920 case METHOD_EVENTPROVIDER2:
|
8921 mark.hamzy 1.25 {
|
8922 marek 1.68 jlong jocRef = DEBUG_ConvertCToJava(
8923 OperationContext*,
8924 jlong,
8925 &request->operationContext);
8926 jobject joc = env->NewObject(
8927 jv->OperationContextClassRef,
8928 jv->OperationContextNewJ,jocRef);
|
8929 mark.hamzy 1.43
|
8930 mark.hamzy 1.52 WQLSelectStatement *stmt = newSelectExp (srec->query,
8931 srec->queryLanguage);
|
8932 marek 1.68 jlong jStmtRef = DEBUG_ConvertCToJava(
8933 WQLSelectStatement *,
8934 jlong,
8935 stmt);
8936 jobject jSelectExp = env->NewObject(
8937 jv->SelectExpClassRef,
8938 jv->SelectExpNewJ,
8939 jStmtRef);
|
8940 mark.hamzy 1.25
8941 JMPIjvm::checkException(env);
8942
|
8943 marek 1.68 jstring jType = env->NewStringUTF(
8944 request->nameSpace.getString().getCString());
|
8945 schuur 1.12
|
8946 mark.hamzy 1.25 JMPIjvm::checkException(env);
|
8947 schuur 1.12
|
8948 marek 1.68 CIMObjectPath *cop = new CIMObjectPath (System::getHostName(),
8949 request->nameSpace,
8950 request->classNames[0]);
8951 jlong jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jlong, cop);
8952 jobject jcop = env->NewObject(
8953 jv->CIMObjectPathClassRef,
8954 jv->CIMObjectPathNewJ,jcopRef);
|
8955 schuur 1.1
|
8956 mark.hamzy 1.25 JMPIjvm::checkException(env);
|
8957 schuur 1.1
|
8958 kumpf 1.55 StatProviderTimeMeasurement providerTime(response);
8959
|
8960 mark.hamzy 1.44 env->CallVoidMethod ((jobject)pr.jProvider,
8961 id,
8962 joc,
|
8963 mark.hamzy 1.52 jSelectExp,
|
8964 mark.hamzy 1.44 jType,
8965 jcop,
8966 (jboolean)fFreePrec);
|
8967 schuur 1.1
|
8968 mark.hamzy 1.25 JMPIjvm::checkException(env);
|
8969 schuur 1.1
|
8970 mark.hamzy 1.43 if (joc)
8971 {
|
8972 marek 1.68 env->CallVoidMethod(
8973 joc,
8974 JMPIjvm::jv.OperationContextUnassociate);
|
8975 mark.hamzy 1.43
8976 JMPIjvm::checkException(env);
8977 }
|
8978 mark.hamzy 1.25 break;
8979 }
|
8980 schuur 1.12
|
8981 mark.hamzy 1.25 case METHOD_UNKNOWN:
8982 {
|
8983 thilo.boehm 1.69 PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
8984 "handleDeleteSubscriptionRequest: Unknown method provider!");
|
8985 mark.hamzy 1.25 break;
8986 }
8987 }
|
8988 mark.hamzy 1.44
8989 //
8990 // Decrement count of current subscriptions for this provider
8991 //
8992 pr.decrementSubscriptionsAndTestIfZero ();
|
8993 schuur 1.1 }
8994 HandlerCatch(handler);
|
8995 schuur 1.12
|
8996 mark.hamzy 1.44 if (srec)
8997 {
8998 delete srec->qContext;
8999 }
9000 delete srec;
9001
9002 if (fFreePrec)
9003 {
9004 delete prec->ctx;
9005 delete prec->handler;
9006 delete prec;
9007 }
9008
|
9009 mark.hamzy 1.23 if (env) JMPIjvm::detachThread();
9010
|
9011 schuur 1.1 PEG_METHOD_EXIT();
9012
9013 return(response);
9014 }
9015
|
9016 marek 1.68 Message * JMPIProviderManager::handleDisableModuleRequest(
9017 const Message * message) throw()
|
9018 schuur 1.1 {
|
9019 marek 1.68 PEG_METHOD_ENTER(
9020 TRC_PROVIDERMANAGER,
9021 "JMPIProviderManager::handleDisableModuleRequest");
|
9022 schuur 1.1
9023 CIMDisableModuleRequestMessage * request =
|
9024 marek 1.68 dynamic_cast<CIMDisableModuleRequestMessage *>
9025 (const_cast<Message *>(message));
|
9026 schuur 1.1
9027 PEGASUS_ASSERT(request != 0);
9028
9029 // get provider module name
9030 String moduleName;
9031 CIMInstance mInstance = request->providerModule;
9032 Uint32 pos = mInstance.findProperty(CIMName ("Name"));
9033
9034 if(pos != PEG_NOT_FOUND)
9035 {
9036 mInstance.getProperty(pos).getValue().get(moduleName);
9037 }
9038
9039 Boolean disableProviderOnly = request->disableProviderOnly;
9040
9041 Array<Uint16> operationalStatus;
|
9042 kumpf 1.2 // Assume success.
|
9043 kumpf 1.10 operationalStatus.append(CIM_MSE_OPSTATUS_VALUE_STOPPED);
|
9044 schuur 1.1
|
9045 kumpf 1.2 //
|
9046 schuur 1.1 // Unload providers
|
9047 kumpf 1.2 //
|
9048 schuur 1.1 Array<CIMInstance> _pInstances = request->providers;
9049
|
9050 kumpf 1.67 CIMDisableModuleResponseMessage* response =
9051 dynamic_cast<CIMDisableModuleResponseMessage*>(
9052 request->buildResponse());
|
9053 schuur 1.1 PEGASUS_ASSERT(response != 0);
|
9054 kumpf 1.67 response->operationalStatus = operationalStatus;
|
9055 schuur 1.1
9056 PEG_METHOD_EXIT();
9057
9058 return(response);
9059 }
9060
|
9061 marek 1.68 Message * JMPIProviderManager::handleEnableModuleRequest(
9062 const Message * message) throw()
|
9063 schuur 1.1 {
|
9064 marek 1.68 PEG_METHOD_ENTER(
9065 TRC_PROVIDERMANAGER,
9066 "JMPIProviderManager::handleEnableModuleRequest");
|
9067 schuur 1.1
9068 CIMEnableModuleRequestMessage * request =
|
9069 marek 1.68 dynamic_cast<CIMEnableModuleRequestMessage *>
9070 (const_cast<Message *>(message));
|
9071 schuur 1.1
9072 PEGASUS_ASSERT(request != 0);
9073
9074 Array<Uint16> operationalStatus;
|
9075 kumpf 1.67 operationalStatus.append(CIM_MSE_OPSTATUS_VALUE_STOPPED);
|
9076 schuur 1.1
|
9077 kumpf 1.67 CIMEnableModuleResponseMessage* response =
9078 dynamic_cast<CIMEnableModuleResponseMessage*>(
9079 request->buildResponse());
|
9080 schuur 1.1 PEGASUS_ASSERT(response != 0);
|
9081 kumpf 1.67 response->operationalStatus = operationalStatus;
|
9082 schuur 1.1
9083 PEG_METHOD_EXIT();
9084
9085 return(response);
9086 }
9087
|
9088 marek 1.68 Message * JMPIProviderManager::handleStopAllProvidersRequest(
9089 const Message * message) throw()
|
9090 schuur 1.1 {
|
9091 marek 1.68 PEG_METHOD_ENTER(
9092 TRC_PROVIDERMANAGER,
9093 "JMPIProviderManager::handleStopAllProvidersRequest");
|
9094 schuur 1.1
9095 CIMStopAllProvidersRequestMessage * request =
|
9096 marek 1.68 dynamic_cast<CIMStopAllProvidersRequestMessage *>
9097 (const_cast<Message *>(message));
|
9098 schuur 1.1
9099 PEGASUS_ASSERT(request != 0);
9100
|
9101 kumpf 1.67 CIMStopAllProvidersResponseMessage* response =
9102 dynamic_cast<CIMStopAllProvidersResponseMessage*>(
9103 request->buildResponse());
|
9104 schuur 1.1 PEGASUS_ASSERT(response != 0);
9105
9106 // tell the provider manager to shutdown all the providers
9107 providerManager.shutdownAllProviders();
9108
9109 PEG_METHOD_EXIT();
9110
9111 return(response);
9112 }
9113
|
9114 marek 1.68 Message * JMPIProviderManager::handleSubscriptionInitCompleteRequest(
9115 const Message * message)
|
9116 carolann.graves 1.21 {
9117 PEG_METHOD_ENTER (TRC_PROVIDERMANAGER,
9118 "JMPIProviderManager::handleSubscriptionInitCompleteRequest");
9119
9120 CIMSubscriptionInitCompleteRequestMessage * request =
9121 dynamic_cast <CIMSubscriptionInitCompleteRequestMessage *>
9122 (const_cast <Message *> (message));
9123
9124 PEGASUS_ASSERT (request != 0);
9125
9126 CIMSubscriptionInitCompleteResponseMessage * response =
9127 dynamic_cast <CIMSubscriptionInitCompleteResponseMessage *>
9128 (request->buildResponse ());
9129
9130 PEGASUS_ASSERT (response != 0);
9131
9132 //
9133 // Set indicator
9134 //
9135 _subscriptionInitComplete = true;
9136
9137 carolann.graves 1.21 //
9138 // For each provider that has at least one subscription, call
9139 // provider's enableIndications method
9140 //
9141 Array <JMPIProvider *> enableProviders;
|
9142 mark.hamzy 1.44
|
9143 carolann.graves 1.21 enableProviders = providerManager.getIndicationProvidersToEnable ();
9144
9145 Uint32 numProviders = enableProviders.size ();
|
9146 mark.hamzy 1.44
|
9147 thilo.boehm 1.69 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
9148 "handleSubscriptionInitCompleteRequest: numProviders = %d ",
9149 numProviders));
|
9150 carolann.graves 1.21
9151 PEG_METHOD_EXIT ();
9152 return (response);
9153 }
9154
|
9155 marek 1.68 Message * JMPIProviderManager::handleUnsupportedRequest(
9156 const Message * message) throw()
|
9157 schuur 1.1 {
|
9158 marek 1.68 PEG_METHOD_ENTER(
9159 TRC_PROVIDERMANAGER,
9160 "JMPIProviderManager::handleUnsupportedRequest");
|
9161 mark.hamzy 1.23
|
9162 konrad.r 1.16 CIMRequestMessage* request =
9163 dynamic_cast<CIMRequestMessage *>(const_cast<Message *>(message));
9164 PEGASUS_ASSERT(request != 0 );
9165
9166 CIMResponseMessage* response = request->buildResponse();
9167 response->cimException =
9168 PEGASUS_CIM_EXCEPTION(CIM_ERR_NOT_SUPPORTED, String::EMPTY);
|
9169 schuur 1.1
9170 PEG_METHOD_EXIT();
|
9171 konrad.r 1.16 return response;
|
9172 schuur 1.1 }
9173
|
9174 kumpf 1.2 ProviderName JMPIProviderManager::_resolveProviderName(
9175 const ProviderIdContainer & providerId)
|
9176 schuur 1.1 {
|
9177 kumpf 1.2 String providerName;
9178 String fileName;
|
9179 dmitry.mikulin 1.63 String moduleName;
|
9180 kumpf 1.2 CIMValue genericValue;
9181
|
9182 dmitry.mikulin 1.63 genericValue = providerId.getModule().getProperty(
9183 providerId.getModule().findProperty("Name")).getValue();
9184 genericValue.get(moduleName);
9185
|
9186 kumpf 1.2 genericValue = providerId.getProvider().getProperty(
9187 providerId.getProvider().findProperty("Name")).getValue();
9188 genericValue.get(providerName);
9189
9190 genericValue = providerId.getModule().getProperty(
9191 providerId.getModule().findProperty("Location")).getValue();
9192 genericValue.get(fileName);
9193 fileName = resolveFileName(fileName);
9194
|
9195 dmitry.mikulin 1.63 return ProviderName(moduleName, providerName, fileName);
|
9196 schuur 1.1 }
9197
9198 String JMPIProviderManager::resolveFileName(String fileName)
9199 {
|
9200 marek 1.68 String name = ConfigManager::getHomedPath(
9201 ConfigManager::getInstance()->getCurrentValue("providerDir"));
|
9202 marek 1.54 // physfilename = everything up to the delimiter pointing at class start
9203 // in case there is no delimiter anymore, it takes the entire filename
9204 String physfilename = fileName.subString(0, fileName.find(":"));
9205 // look in all(multiple) homed pathes for the physical file
9206 name = FileSystem::getAbsoluteFileName(name, physfilename);
9207 // construct back the fully specified jar:<classname> provider name
9208 name = FileSystem::extractFilePath(name) + fileName;
|
9209 schuur 1.1 return name;
9210 }
9211
9212 PEGASUS_NAMESPACE_END
|