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 mark.hamzy 1.23 // Author: Adrian Schuur, schuur@de.ibm.com
|
33 schuur 1.1 //
|
34 se.gupta 1.9 // Modified By: Seema Gupta (gseema@in.ibm.com) for PEP135
|
35 joyce.j 1.19 // Josephine Eskaline Joyce, IBM (jojustin@in.ibm.com) for PEP#101
|
36 schuur 1.1 //
37 //%/////////////////////////////////////////////////////////////////////////////
38
39 #include "JMPIProviderManager.h"
40
41 #include "JMPIImpl.h"
42
43 #include <Pegasus/Common/CIMMessage.h>
44 #include <Pegasus/Common/OperationContext.h>
45 #include <Pegasus/Common/Tracer.h>
46 #include <Pegasus/Common/StatisticalData.h>
47 #include <Pegasus/Common/Logger.h>
48 #include <Pegasus/Common/MessageLoader.h> //l10n
|
49 kumpf 1.10 #include <Pegasus/Common/Constants.h>
|
50 schuur 1.1
51 #include <Pegasus/Config/ConfigManager.h>
52
53 #include <Pegasus/ProviderManager2/ProviderName.h>
54 #include <Pegasus/ProviderManager2/JMPI/JMPIProvider.h>
|
55 konrad.r 1.22 #include <Pegasus/ProviderManager2/JMPI/JMPIProviderModule.h>
|
56 schuur 1.1 #include <Pegasus/ProviderManager2/ProviderManagerService.h>
57
|
58 schuur 1.12 #include <Pegasus/ProviderManager2/CMPI/CMPI_SelectExp.h>
59
|
60 schuur 1.1
61 PEGASUS_USING_STD;
62 PEGASUS_NAMESPACE_BEGIN
63
|
64 mark.hamzy 1.23 int JMPIProviderManager::trace=0;
|
65 mark.hamzy 1.24
66 #ifdef PEGASUS_DEBUG
|
67 mark.hamzy 1.23 #define DDD(x) if (JMPIProviderManager::trace) x;
|
68 mark.hamzy 1.24 #else
69 #define DDD(x)
70 #endif
|
71 mark.hamzy 1.36
72 // request->localOnly is replaced with JMPI_LOCALONLY for getInstance () and enumerateInstances ()
|
73 mark.hamzy 1.30 #define JMPI_LOCALONLY false
|
74 mark.hamzy 1.36
|
75 mark.hamzy 1.32 /* Fix for 4092 */
|
76 mark.hamzy 1.36 // request->includeQualifiers is replaced with JMPI_INCLUDE_QUALIFIERS for getInstance (),
77 // setInstance (), enumerateInstances (), associators (), and references ()
|
78 mark.hamzy 1.32 #define JMPI_INCLUDE_QUALIFIERS false
|
79 mark.hamzy 1.23
80 #include "Convert.h"
|
81 schuur 1.1
|
82 mark.hamzy 1.23 void JMPIProviderManager::debugPrintMethodPointers (JNIEnv *env, jclass jc)
83 {
84 // cd ${PEGAUSE_HOME}/src/Pegasus/ProviderManager2/JMPI/org/pegasus/jmpi/tests/JMPI_TestPropertyTypes
85 // javap -s -p JMPI_TestPropertyTypes
|
86 mark.hamzy 1.35 static const char *methodNames[][3] = {
|
87 mark.hamzy 1.24 // CIMProvider
88 // cimom-2003-11-24/org/snia/wbem/provider/CIMProvider.java
89 // src/Pegasus/ProviderManager2/JMPI/org/pegasus/jmpi/CIMProvider.java
|
90 mark.hamzy 1.36 {"snia 2.0","initialize","(Lorg/pegasus/jmpi/CIMOMHandle;)V"},
91 {"snia 2.0","cleanup","()V"},
|
92 mark.hamzy 1.24 // InstanceProvider
93 // cimom-2003-11-24/org/snia/wbem/provider/InstanceProvider.java
94 // src/Pegasus/ProviderManager2/JMPI/org/pegasus/jmpi/CIMInstanceProvider.java
|
95 mark.hamzy 1.36 {"snia 2.0","enumInstances","(Lorg/pegasus/jmpi/CIMObjectPath;ZLorg/pegasus/jmpi/CIMClass;Z)Ljava/util/Vector;"},
96 {"pegasus 2.4","enumInstances","(Lorg/pegasus/jmpi/CIMObjectPath;ZZZ[Ljava/lang/String;Lorg/pegasus/jmpi/CIMClass;)[Lorg/pegasus/jmpi/CIMInstance;"},
|
97 mark.hamzy 1.35 /* Begin Fix for 4189 */
|
98 mark.hamzy 1.38 {"pegasus 2.5","enumerateInstances","(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;ZZ[Ljava/lang/String;)Ljava/util/Vector;"},
|
99 mark.hamzy 1.35 /* End Fix for 4189 */
|
100 mark.hamzy 1.36 {"snia 2.0","enumInstances","(Lorg/pegasus/jmpi/CIMObjectPath;ZLorg/pegasus/jmpi/CIMClass;)Ljava/util/Vector;"},
101 {"pegasus 2.4","enumerateInstanceNames","(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;)[Lorg/pegasus/jmpi/CIMObjectPath;"},
102 {"pegasus 2.5","enumerateInstanceNames","(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;)Ljava/util/Vector;"},
103 {"snia 2.0","getInstance","(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;Z)Lorg/pegasus/jmpi/CIMInstance;"},
104 {"pegasus 2.4","getInstance","(Lorg/pegasus/jmpi/CIMObjectPath;ZZZ[Ljava/lang/String;Lorg/pegasus/jmpi/CIMClass;)Lorg/pegasus/jmpi/CIMInstance;"},
|
105 mark.hamzy 1.35 /* Begin Fix for 4238 */
|
106 mark.hamzy 1.38 {"pegasus 2.5","getInstance","(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;ZZ[Ljava/lang/String;)Lorg/pegasus/jmpi/CIMInstance;"},
|
107 mark.hamzy 1.35 /* End Fix for 4238 */
|
108 mark.hamzy 1.36 {"snia 2.0","createInstance","(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMInstance;)Lorg/pegasus/jmpi/CIMObjectPath;"},
109 {"snia 2.0","setInstance","(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMInstance;)V"},
110 {"pegasus 2.4","setInstance","(Lorg/pegasus/jmpi/CIMObjectPath;Z[Ljava/lang/String)V"},
111 {"snia 2.0","deleteInstance","(Lorg/pegasus/jmpi/CIMObjectPath;)V"},
112 {"snia 2.0","execQuery","(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;ILorg/pegasus/jmpi/CIMClass;)Ljava/util/Vector;"},
113 {"pegasus 2.4","execQuery","(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Lorg/pegasus/jmpi/CIMClass;)[Lorg/pegasus/jmpi/CIMInstance;"},
114 {"pegasus 2.5","execQuery","(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;Ljava/lang/String;Ljava/lang/String;)Ljava/util/Vector;"},
|
115 mark.hamzy 1.24 // MethodProvider
116 // cimom-2003-11-24/org/snia/wbem/provider/MethodProvider.java
117 // src/Pegasus/ProviderManager2/JMPI/org/pegasus/jmpi/CIMMethodProvider.java
|
118 mark.hamzy 1.36 {"snia 2.0","invokeMethod","(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/util/Vector;Ljava/util/Vector;)Lorg/pegasus/jmpi/CIMValue;"},
119 {"pegasus 2.4","invokeMethod","(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;[Lorg/pegasus/jmpi/CIMArgument;[Lorg/pegasus/jmpi/CIMArgument;)Lorg/pegasus/jmpi/CIMValue;"},
|
120 mark.hamzy 1.24 // PropertyProvider
121 // cimom-2003-11-24/org/snia/wbem/provider/PropertyProvider.java
|
122 mark.hamzy 1.36 // src/Pegasus/ProviderManager2/JMPI/org/pegasus/jmpi/PropertyProvider.java
123 {"snia 2.0","getPropertyValue","(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;)Lorg/pegasus/jmpi/CIMValue;"},
124 {"snia 2.0","setPropertyValue","(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Lorg/pegasus/jmpi/CIMValue;)V"},
|
125 mark.hamzy 1.24 // AssociatorProvider
126 // cimom-2003-11-24/org/snia/wbem/provider20/AssociatorProvider.java
|
127 mark.hamzy 1.36 // src/Pegasus/ProviderManager2/JMPI/org/pegasus/jmpi/AssociatorProvider.java
128 {"snia 2.0","associators","(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZ[Ljava/lang/String;)Ljava/util/Vector;"},
129 {"pegasus 2.4","associators","(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZ[Ljava/lang/String;)Ljava/util/Vector;"},
130 {"snia 2.0","associatorNames","(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/util/Vector;"},
131 {"pegasus 2.4","associatorNames","(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/util/Vector;"},
132 {"snia 2.0","references","(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;ZZ[Ljava/lang/String;)Ljava/util/Vector;"},
133 {"pegasus 2.4","references","(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;ZZ[Ljava/lang/String;)Ljava/util/Vector;"},
134 {"snia 2.0","referenceNames","(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;)Ljava/util/Vector;"},
135 {"pegasus 2.4","referenceNames","(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;)Ljava/util/Vector;"},
|
136 mark.hamzy 1.24 // CIMProviderRouter
137 // cimom-2003-11-24/org/snia/wbem/provider20/CIMProviderRouter.java
138 // EventProvider
139 // cimom-2003-11-24/org/snia/wbem/provider20/EventProvider.java
140 // src/Pegasus/ProviderManager2/JMPI/org/pegasus/jmpi/EventProvider.java
|
141 mark.hamzy 1.36 {"snia 2.0","activateFilter","(Lorg/pegasus/jmpi/SelectExp;Ljava/lang/String;Lorg/pegasus/jmpi/CIMObjectPath;Z)V"},
142 {"snia 2.0","deActivateFilter","(Lorg/pegasus/jmpi/SelectExp;Ljava/lang/String;Lorg/pegasus/jmpi/CIMObjectPath;Z)V"},
|
143 mark.hamzy 1.24 // IndicationHandler
144 // cimom-2003-11-24/org/snia/wbem/provider20/IndicationHandler.java
145 // ProviderAdapter
146 // cimom-2003-11-24/org/snia/wbem/provider20/ProviderAdapter.java
147 // JMPI_TestPropertyTypes
|
148 mark.hamzy 1.36 {"JMPI_TestPropertyTypes","findObjectPath","(Lorg/pegasus/jmpi/CIMObjectPath;)I"},
149 {"JMPI_TestPropertyTypes","testPropertyTypesValue","(Lorg/pegasus/jmpi/CIMInstance;)V"}
|
150 mark.hamzy 1.23 };
151
152 if (!env)
153 {
154 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::debugPrintMethodPointers: env is NULL!"<<PEGASUS_STD(endl));
155 return;
156 }
157 if (!jc)
158 {
159 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::debugPrintMethodPointers: jc is NULL!"<<PEGASUS_STD(endl));
160 return;
161 }
162
163 for (int i = 0; i < (int)(sizeof (methodNames)/sizeof (methodNames[0])); i++)
164 {
|
165 mark.hamzy 1.35 jmethodID id = env->GetMethodID(jc,methodNames[i][1], methodNames[i][2]);
166 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::debugPrintMethodPointers: "<<methodNames[i][0]<<", "<<methodNames[i][1]<<", id = "<<PEGASUS_STD(hex)<<(int)id<<PEGASUS_STD(dec)<<PEGASUS_STD(endl));
|
167 mark.hamzy 1.23 env->ExceptionClear();
168 }
|
169 mark.hamzy 1.29
170 env->ExceptionClear();
171 }
172
173 void
174 debugIntrospectJavaObject (JNIEnv *env, jobject jInst)
175 {
176 jclass jInstClass = env->GetObjectClass(jInst);
177 jclass jInstSuperClass = env->GetSuperclass(jInstClass);
178 jmethodID jmidGetDeclaredMethods = env->GetMethodID(jInstClass, "getDeclaredMethods", "()[Ljava/lang/reflect/Method;");
179
180 if (!jmidGetDeclaredMethods)
181 {
182 env->ExceptionClear();
183 jmidGetDeclaredMethods = env->GetMethodID(jInstSuperClass, "getDeclaredMethods", "()[Ljava/lang/reflect/Method;");
184 }
185
186 if (jmidGetDeclaredMethods)
187 {
188 jobjectArray jarrayDeclaredMethods = (jobjectArray)env->CallObjectMethod(jInstClass,
189 jmidGetDeclaredMethods);
190 mark.hamzy 1.29
191 if (jarrayDeclaredMethods)
192 {
193 for (int i = 0, iLen = env->GetArrayLength (jarrayDeclaredMethods); i < iLen; i++)
194 {
195 JMPIjvm::checkException(env);
196
197 jobject jDeclaredMethod = env->GetObjectArrayElement (jarrayDeclaredMethods, i);
198 jclass jDeclaredMethodClass = env->GetObjectClass (jDeclaredMethod);
199
200 JMPIjvm::checkException(env);
201
202 jmethodID jmidToString = env->GetMethodID (jDeclaredMethodClass, "toString", "()Ljava/lang/String;");
203 jstring jstringResult = (jstring)env->CallObjectMethod (jDeclaredMethod, jmidToString);
204 const char *pszResult = env->GetStringUTFChars(jstringResult, 0);
205
206 PEGASUS_STD(cout)<<"--- JMPIProviderManager::debugIntrospectJavaObject: "<<pszResult<<PEGASUS_STD(endl);
207
208 env->ReleaseStringUTFChars (jstringResult, pszResult);
209 }
210 }
211 mark.hamzy 1.29 }
212
213
214 env->ExceptionClear();
215 }
216
217 void
218 debugDumpJavaObject (JNIEnv *env, jobject jInst)
219 {
220 jclass jInstClass = env->GetObjectClass(jInst);
221 jclass jInstSuperClass = env->GetSuperclass(jInstClass);
222 jmethodID jmidToString1 = env->GetMethodID(jInstClass, "toString", "()Ljava/lang/String;");
223 jmethodID jmidToString2 = env->GetMethodID(jInstSuperClass, "toString", "()Ljava/lang/String;");
224 if (!jmidToString1 || !jmidToString2)
225 {
226 env->ExceptionClear();
227 return;
228 }
229 jstring jstringResult1 = (jstring)env->CallObjectMethod(jInstClass, jmidToString1);
230 jstring jstringResult2 = (jstring)env->CallObjectMethod(jInstSuperClass, jmidToString2);
231 jstring jstringResult3 = (jstring)env->CallObjectMethod(jInst, jmidToString1);
232 mark.hamzy 1.29 const char *pszResult1 = env->GetStringUTFChars(jstringResult1, 0);
233 const char *pszResult2 = env->GetStringUTFChars(jstringResult2, 0);
234 const char *pszResult3 = env->GetStringUTFChars(jstringResult3, 0);
235
236 jmethodID jmidCInst = env->GetMethodID(env->GetObjectClass(jInst),JMPIjvm::jv.instanceMethodNames[22].methodName, JMPIjvm::jv.instanceMethodNames[22].signature);
237
238 PEGASUS_STD(cout)<<"--- JMPIProviderManager::debugIntrospectJavaObject: jInstClass = "<<jInstClass<<", jInstSuperClass = "<<jInstSuperClass<<", jClassShouldBe = "<<JMPIjvm::jv.classRefs[18]<<", jmidCInst = "<<jmidCInst<<PEGASUS_STD(endl);
239 PEGASUS_STD(cout)<<"pszResult1 = "<<pszResult1<<PEGASUS_STD(endl);
240 PEGASUS_STD(cout)<<"pszResult2 = "<<pszResult2<<PEGASUS_STD(endl);
241 PEGASUS_STD(cout)<<"pszResult3 = "<<pszResult3<<PEGASUS_STD(endl);
242
243 env->ReleaseStringUTFChars (jstringResult1, pszResult1);
244 env->ReleaseStringUTFChars (jstringResult2, pszResult2);
245 env->ReleaseStringUTFChars (jstringResult3, pszResult3);
246
247 env->ExceptionClear();
|
248 mark.hamzy 1.23 }
|
249 schuur 1.1
|
250 mark.hamzy 1.43 bool JMPIProviderManager::getInterfaceType (ProviderIdContainer pidc,
251 String& interfaceType,
252 String& interfaceVersion)
253 {
254 ///CIMInstance ciProvider = pidc.getProvider ();
255 CIMInstance ciProviderModule = pidc.getModule ();
256 Uint32 idx;
257 bool fRet = true;
258
259 ///PEGASUS_STD(cout)<<"--- JMPIProviderManager::getInterfaceType: ciProvider = "<<ciProvider.getPath ().toString ()<<PEGASUS_STD(endl);
260 ///PEGASUS_STD(cout)<<"--- JMPIProviderManager::getInterfaceType: ciProviderModule = "<<ciProviderModule.getPath ().toString ()<<PEGASUS_STD(endl);
261
262 idx = ciProviderModule.findProperty ("InterfaceType");
263
264 if (idx != PEG_NOT_FOUND)
265 {
266 CIMValue itValue;
267
268 itValue = ciProviderModule.getProperty (idx).getValue ();
269
270 itValue.get (interfaceType);
271 mark.hamzy 1.43
272 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::getInterfaceType: interfaceType = "<<interfaceType<<PEGASUS_STD(endl));
273 }
274 else
275 {
276 fRet = false;
277 }
278
279 idx = ciProviderModule.findProperty ("InterfaceVersion");
280
281 if (idx != PEG_NOT_FOUND)
282 {
283 CIMValue itValue;
284
285 itValue = ciProviderModule.getProperty (idx).getValue ();
286
287 itValue.get (interfaceVersion);
288
289 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::getInterfaceType: interfaceVersion = "<<interfaceVersion<<PEGASUS_STD(endl));
290 }
291 else
292 mark.hamzy 1.43 {
293 fRet = false;
294 }
295
296 return fRet;
297 }
298
299 bool JMPIProviderManager::interfaceIsUsed (JNIEnv *env,
300 jobject jObject,
301 String searchInterfaceName)
302 {
303 jobjectArray jInterfaces = 0;
304 jsize jInterfacesLength = 0;
305 bool fFound = false;
306
307 if (!jObject)
308 {
309 return false;
310 }
311
312 jInterfaces = (jobjectArray)env->CallObjectMethod (env->GetObjectClass (jObject),
313 mark.hamzy 1.43 JMPIjvm::jv.ClassGetInterfaces);
314
315 if (!jInterfaces)
316 {
317 return false;
318 }
319
320 jInterfacesLength = env->GetArrayLength (jInterfaces);
321
322 for (jsize i = 0; !fFound && i < jInterfacesLength; i++)
323 {
324 jobject jInterface = env->GetObjectArrayElement (jInterfaces, i);
325
326 if (jInterface)
327 {
328 jstring jInterfaceName = (jstring)env->CallObjectMethod (jInterface,
329 JMPIjvm::jv.ClassGetName);
330
331 if (jInterfaceName)
332 {
333 const char *pszInterfaceName = env->GetStringUTFChars (jInterfaceName,
334 mark.hamzy 1.43 0);
335 String interfaceName = pszInterfaceName;
336
337 if (String::equal (interfaceName, searchInterfaceName))
338 {
339 fFound = true;
340 }
341
342 env->ReleaseStringUTFChars (jInterfaceName, pszInterfaceName);
343 }
344 }
345 }
346
347 return fFound;
348 }
349
|
350 schuur 1.1 JMPIProviderManager::IndProvTab JMPIProviderManager::provTab;
|
351 mark.hamzy 1.44 Mutex JMPIProviderManager::mutexProvTab;
|
352 schuur 1.1 JMPIProviderManager::IndSelectTab JMPIProviderManager::selxTab;
|
353 mark.hamzy 1.44 Mutex JMPIProviderManager::mutexSelxTab;
|
354 schuur 1.1 JMPIProviderManager::ProvRegistrar JMPIProviderManager::provReg;
|
355 mark.hamzy 1.44 Mutex JMPIProviderManager::mutexProvReg;
|
356 schuur 1.1
357 JMPIProviderManager::JMPIProviderManager(Mode m)
358 {
359 mode=m;
|
360 carolann.graves 1.21 _subscriptionInitComplete = false;
|
361 mark.hamzy 1.23
362 #ifdef PEGASUS_DEBUG
363 if (getenv("PEGASUS_JMPI_TRACE"))
364 JMPIProviderManager::trace = 1;
365 else
366 JMPIProviderManager::trace = 0;
367 #else
368 JMPIProviderManager::trace = 0;
369 #endif
|
370 schuur 1.1 }
371
372 JMPIProviderManager::~JMPIProviderManager(void)
373 {
374 }
375
|
376 schuur 1.12 Boolean JMPIProviderManager::insertProvider(const ProviderName & name,
|
377 schuur 1.1 const String &ns, const String &cn)
378 {
379 String key(ns+String("::")+cn+String("::")+CIMValue(name.getCapabilitiesMask()).toString());
|
380 mark.hamzy 1.23
381 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::insertProvider: "<<key<<PEGASUS_STD(endl));
382
|
383 mark.hamzy 1.44 Boolean ret = false;
384
385 {
386 AutoMutex lock (mutexProvReg);
387
388 ret = provReg.insert(key,name);
389 }
390
391 return ret;
|
392 schuur 1.1 }
|
393 mark.hamzy 1.23
|
394 schuur 1.1 Message * JMPIProviderManager::processMessage(Message * request) throw()
395 {
|
396 mark.hamzy 1.23 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager::processMessage()");
|
397 schuur 1.1
398 Message * response = 0;
|
399 mark.hamzy 1.23
|
400 schuur 1.1 // pass the request message to a handler method based on message type
401 switch(request->getType())
402 {
403 case CIM_GET_INSTANCE_REQUEST_MESSAGE:
404 response = handleGetInstanceRequest(request);
|
405 mark.hamzy 1.25 break;
|
406 schuur 1.1
407 case CIM_ENUMERATE_INSTANCES_REQUEST_MESSAGE:
408 response = handleEnumerateInstancesRequest(request);
|
409 mark.hamzy 1.25 break;
|
410 schuur 1.1
411 case CIM_ENUMERATE_INSTANCE_NAMES_REQUEST_MESSAGE:
412 response = handleEnumerateInstanceNamesRequest(request);
|
413 mark.hamzy 1.25 break;
|
414 schuur 1.1
415 case CIM_CREATE_INSTANCE_REQUEST_MESSAGE:
416 response = handleCreateInstanceRequest(request);
|
417 mark.hamzy 1.25 break;
|
418 schuur 1.1
419 case CIM_MODIFY_INSTANCE_REQUEST_MESSAGE:
420 response = handleModifyInstanceRequest(request);
|
421 mark.hamzy 1.25 break;
|
422 schuur 1.1
423 case CIM_DELETE_INSTANCE_REQUEST_MESSAGE:
424 response = handleDeleteInstanceRequest(request);
|
425 mark.hamzy 1.25 break;
|
426 schuur 1.1
|
427 mark.hamzy 1.25 case CIM_EXEC_QUERY_REQUEST_MESSAGE:
428 response = handleExecQueryRequest(request);
|
429 schuur 1.1 break;
430
431 case CIM_ASSOCIATORS_REQUEST_MESSAGE:
432 response = handleAssociatorsRequest(request);
|
433 mark.hamzy 1.25 break;
|
434 schuur 1.1
435 case CIM_ASSOCIATOR_NAMES_REQUEST_MESSAGE:
436 response = handleAssociatorNamesRequest(request);
|
437 mark.hamzy 1.25 break;
|
438 schuur 1.1
439 case CIM_REFERENCES_REQUEST_MESSAGE:
440 response = handleReferencesRequest(request);
|
441 mark.hamzy 1.25 break;
|
442 schuur 1.1
443 case CIM_REFERENCE_NAMES_REQUEST_MESSAGE:
444 response = handleReferenceNamesRequest(request);
|
445 mark.hamzy 1.25 break;
|
446 schuur 1.1
|
447 mark.hamzy 1.26 case CIM_GET_PROPERTY_REQUEST_MESSAGE:
448 response = handleGetPropertyRequest(request);
449 break;
450
451 case CIM_SET_PROPERTY_REQUEST_MESSAGE:
452 response = handleSetPropertyRequest(request);
453 break;
454
|
455 schuur 1.11 case CIM_INVOKE_METHOD_REQUEST_MESSAGE:
|
456 schuur 1.1 response = handleInvokeMethodRequest(request);
|
457 mark.hamzy 1.25 break;
|
458 schuur 1.1
|
459 schuur 1.12 case CIM_CREATE_SUBSCRIPTION_REQUEST_MESSAGE:
|
460 schuur 1.1 response = handleCreateSubscriptionRequest(request);
|
461 mark.hamzy 1.25 break;
|
462 schuur 1.1
|
463 mark.hamzy 1.25 /* case CIM_MODIFY_SUBSCRIPTION_REQUEST_MESSAGE:
|
464 schuur 1.1 response = handleModifySubscriptionRequest(request);
465 break;
|
466 schuur 1.12 */
|
467 schuur 1.1 case CIM_DELETE_SUBSCRIPTION_REQUEST_MESSAGE:
468 response = handleDeleteSubscriptionRequest(request);
|
469 mark.hamzy 1.25 break;
|
470 schuur 1.1
|
471 mark.hamzy 1.26 /* case CIM_EXPORT_INDICATION_REQUEST_MESSAGE:
|
472 kumpf 1.7 response = handleExportIndicationRequest(request);
|
473 schuur 1.1 break;
|
474 schuur 1.12 */
|
475 schuur 1.1 case CIM_DISABLE_MODULE_REQUEST_MESSAGE:
476 response = handleDisableModuleRequest(request);
|
477 mark.hamzy 1.25 break;
|
478 schuur 1.1
479 case CIM_ENABLE_MODULE_REQUEST_MESSAGE:
480 response = handleEnableModuleRequest(request);
|
481 mark.hamzy 1.25 break;
|
482 schuur 1.1
483 case CIM_STOP_ALL_PROVIDERS_REQUEST_MESSAGE:
484 response = handleStopAllProvidersRequest(request);
|
485 mark.hamzy 1.25 break;
|
486 schuur 1.1
|
487 kumpf 1.4 case CIM_INITIALIZE_PROVIDER_REQUEST_MESSAGE:
|
488 mark.hamzy 1.23 response = handleInitializeProviderRequest(request);
|
489 mark.hamzy 1.25 break;
|
490 kumpf 1.4
|
491 carolann.graves 1.21 case CIM_SUBSCRIPTION_INIT_COMPLETE_REQUEST_MESSAGE:
492 response = handleSubscriptionInitCompleteRequest (request);
|
493 mark.hamzy 1.25 break;
|
494 carolann.graves 1.21
|
495 schuur 1.1 default:
|
496 mark.hamzy 1.23 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
497 "*** Unsupported Request "+request->getType());
498 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::processMessage: Unsupported request "<<request->getType ()<<PEGASUS_STD(endl));
|
499 mark.hamzy 1.25
|
500 schuur 1.1 response = handleUnsupportedRequest(request);
501 break;
502 }
503
504 PEG_METHOD_EXIT();
505
506 return(response);
507 }
508
|
509 kumpf 1.6 Boolean JMPIProviderManager::hasActiveProviders()
510 {
511 return providerManager.hasActiveProviders();
512 }
513
514 void JMPIProviderManager::unloadIdleProviders()
|
515 schuur 1.1 {
|
516 kumpf 1.6 providerManager.unloadIdleProviders();
|
517 schuur 1.1 }
518
519 #define STRDUPA(s,o) \
520 if (s) { \
521 o=(const char*)alloca(strlen(s)); \
522 strcpy((char*)(o),(s)); \
523 } \
524 else o=NULL;
525
526 #define CHARS(cstring) (char*)(strlen(cstring)?(const char*)cstring:NULL)
527
528
529 #define HandlerIntroBase(type,type1,message,request,response,handler,respType) \
530 CIM##type##RequestMessage * request = \
531 dynamic_cast<CIM##type##RequestMessage *>(const_cast<Message *>(message)); \
532 PEGASUS_ASSERT(request != 0); \
533 CIM##type##ResponseMessage * response = \
534 new CIM##type##ResponseMessage( \
535 request->messageId, \
536 CIMException(), \
537 request->queueIds.copyAndPop() \
538 schuur 1.1 respType \
539 PEGASUS_ASSERT(response != 0); \
540 response->setKey(request->getKey()); \
541 response->setHttpMethod(request->getHttpMethod()); \
|
542 kumpf 1.42 type1##ResponseHandler handler(request, response, _responseChunkCallback);
|
543 schuur 1.1
544 #define VOIDINTRO );
545 #define NOVOIDINTRO(type) ,type);
546 #define METHODINTRO ,CIMValue(), Array<CIMParamValue>(), request->methodName );
547
548
549 #define HandlerIntroVoid(type,message,request,response,handler) \
550 HandlerIntroBase(type,type,message,request,response,handler,VOIDINTRO)
551
552 #define HandlerIntroMethod(type,message,request,response,handler) \
553 HandlerIntroBase(type,type,message,request,response,handler,METHODINTRO)
554
555 #define HandlerIntroInd(type,message,request,response,handler) \
556 HandlerIntroBase(type,Operation,message,request,response,handler,VOIDINTRO)
557
|
558 kumpf 1.4 #define HandlerIntroInit(type,message,request,response,handler) \
559 HandlerIntroBase(type,Operation,message,request,response,handler,VOIDINTRO)
560
|
561 schuur 1.1 #define HandlerIntro(type,message,request,response,handler,respType) \
562 HandlerIntroBase(type,type,message,request,response,handler,NOVOIDINTRO(respType))
563
564 #define HandlerCatch(handler) \
565 catch(CIMException & e) \
566 { PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, \
567 "Exception: " + e.getMessage()); \
568 handler.setStatus(e.getCode(), e.getContentLanguages(), e.getMessage()); \
569 } \
570 catch(Exception & e) \
571 { PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, \
572 "Exception: " + e.getMessage()); \
573 handler.setStatus(CIM_ERR_FAILED, e.getContentLanguages(), e.getMessage()); \
574 } \
575 catch(...) \
576 { PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, \
577 "Exception: Unknown"); \
578 handler.setStatus(CIM_ERR_FAILED, "Unknown error."); \
579 }
580
|
581 schuur 1.13 static jobjectArray getList(JvmVector *jv, JNIEnv *env, CIMPropertyList &list)
582 {
583 Uint32 s=list.size();
584 jobjectArray pl=NULL;
585 if (s) {
586 jstring initial=env->NewString(NULL,0);
|
587 mark.hamzy 1.23 pl=(jobjectArray)env->NewObjectArray(s,jv->StringClassRef,initial);
|
588 schuur 1.13 for (Uint32 i=0; i<s; i++) {
589 env->SetObjectArrayElement
590 (pl,i,env->NewStringUTF(list[i].getString().getCString()));
591 }
592 }
593 return pl;
594 }
|
595 schuur 1.1
596 Message * JMPIProviderManager::handleGetInstanceRequest(const Message * message) throw()
597 {
|
598 mark.hamzy 1.23 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleGetInstanceRequest");
|
599 schuur 1.1
600 HandlerIntro(GetInstance,message,request,response,handler,CIMInstance());
601
|
602 mark.hamzy 1.25 typedef enum {
603 METHOD_UNKNOWN = 0,
|
604 mark.hamzy 1.43 METHOD_CIMINSTANCEPROVIDER,
605 METHOD_INSTANCEPROVIDER,
606 METHOD_INSTANCEPROVIDER2, // same as METHOD_CIMINSTANCEPROVIDER2
|
607 mark.hamzy 1.25 } METHOD_VERSION;
608 METHOD_VERSION eMethodFound = METHOD_UNKNOWN;
609 JNIEnv *env = NULL;
|
610 schuur 1.13
|
611 schuur 1.1 try {
|
612 mark.hamzy 1.23 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
|
613 schuur 1.1 "JMPIProviderManager::handleGetInstanceRequest - Host name: $0 Name space: $1 Class name: $2",
614 System::getHostName(),
615 request->nameSpace.getString(),
616 request->instanceName.getClassName().getString());
617
|
618 mark.hamzy 1.23 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleGetInstanceRequest: hostname = "<<System::getHostName()<<", namespace = "<<request->nameSpace.getString()<<", classname = "<<request->instanceName.getClassName().getString()<<PEGASUS_STD(endl));
619
|
620 schuur 1.1 // make target object path
|
621 mark.hamzy 1.27 CIMObjectPath *objectPath = new CIMObjectPath (System::getHostName(),
622 request->nameSpace,
623 request->instanceName.getClassName(),
624 request->instanceName.getKeyBindings());
|
625 schuur 1.1
626 // resolve provider name
|
627 kumpf 1.2 ProviderName name = _resolveProviderName(
628 request->operationContext.get(ProviderIdContainer::NAME));
|
629 schuur 1.1
630 // get cached or load new provider module
|
631 mark.hamzy 1.43 JMPIProvider::OpProviderHolder ph = providerManager.getProvider (name.getPhysicalName(),
632 name.getLogicalName());
|
633 schuur 1.1 OperationContext context;
634
|
635 mark.hamzy 1.43 context.insert(request->operationContext.get(IdentityContainer::NAME));
636 context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME));
637 context.insert(request->operationContext.get(ContentLanguageListContainer::NAME));
638
|
639 mark.hamzy 1.23 // forward request
|
640 mark.hamzy 1.25 JMPIProvider &pr=ph.GetProvider();
|
641 schuur 1.1
|
642 mark.hamzy 1.25 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, "Calling provider.getInstance: " + pr.getName());
|
643 schuur 1.1
|
644 mark.hamzy 1.23 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleGetInstanceRequest: Calling provider getInstance: "<<pr.getName()<<PEGASUS_STD(endl));
|
645 schuur 1.1
|
646 mark.hamzy 1.25 JvmVector *jv = 0;
647
648 env = JMPIjvm::attachThread(&jv);
649
|
650 mark.hamzy 1.37 if (!env)
651 {
652 PEG_METHOD_EXIT();
653
654 STAT_COPYDISPATCHER
655
656 throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
657 MessageLoaderParms("ProviderManager.JMPI.INIT_JVM_FAILED",
658 "Could not initialize the JVM (Java Virtual Machine) runtime environment."));
659 }
660
661 ////////DDD(debugPrintMethodPointers (env, (jclass)pr.jProviderClass));
662
|
663 mark.hamzy 1.25 JMPIProvider::pm_service_op_lock op_lock(&pr);
664
665 STAT_GETSTARTTIME;
666
|
667 mark.hamzy 1.43 jmethodID id = NULL;
668 String interfaceType;
669 String interfaceVersion;
670
671 getInterfaceType (request->operationContext.get (ProviderIdContainer::NAME),
672 interfaceType,
673 interfaceVersion);
674
675 if (interfaceType == "JMPI")
676 {
677 // public org.pegasus.jmpi.CIMInstance getInstance (org.pegasus.jmpi.CIMObjectPath cop,
678 // org.pegasus.jmpi.CIMClass cimClass,
679 // boolean localOnly)
680 // throws org.pegasus.jmpi.CIMException
681 id = env->GetMethodID((jclass)pr.jProviderClass,
682 "getInstance",
683 "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;Z)Lorg/pegasus/jmpi/CIMInstance;");
|
684 mark.hamzy 1.25
|
685 mark.hamzy 1.43 if (id != NULL)
686 {
687 eMethodFound = METHOD_INSTANCEPROVIDER;
688 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleGetInstanceRequest: found METHOD_INSTANCEPROVIDER."<<PEGASUS_STD(endl));
689 }
690
691 if (id == NULL)
692 {
693 env->ExceptionClear();
|
694 mark.hamzy 1.25
|
695 mark.hamzy 1.43 // public org.pegasus.jmpi.CIMInstance getInstance (org.pegasus.jmpi.CIMObjectPath op,
696 // boolean localOnly,
697 // boolean includeQualifiers,
698 // boolean includeClassOrigin,
699 // java.lang.String[] propertyList,
700 // org.pegasus.jmpi.CIMClass cc)
701 // throws org.pegasus.jmpi.CIMException
702 id = env->GetMethodID((jclass)pr.jProviderClass,
703 "getInstance",
704 "(Lorg/pegasus/jmpi/CIMObjectPath;ZZZ[Ljava/lang/String;Lorg/pegasus/jmpi/CIMClass;)Lorg/pegasus/jmpi/CIMInstance;");
705
706 if (id != NULL)
707 {
708 eMethodFound = METHOD_CIMINSTANCEPROVIDER;
709 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleGetInstanceRequest: found METHOD_CIMINSTANCEPROVIDER."<<PEGASUS_STD(endl));
710 }
711 }
|
712 mark.hamzy 1.34 }
|
713 mark.hamzy 1.43 else if (interfaceType == "JMPIExperimental")
|
714 mark.hamzy 1.34 {
|
715 mark.hamzy 1.43 /* Fix for 4238 */
716 // public org.pegasus.jmpi.CIMInstance getInstance (org.pegasus.jmpi.OperationContext oc
717 // org.pegasus.jmpi.CIMObjectPath cop,
718 // org.pegasus.jmpi.CIMClass cimClass,
719 // boolean includeQualifiers,
720 // boolean includeClassOrigin,
721 // String propertyList[])
722 // throws org.pegasus.jmpi.CIMException
723 id = env->GetMethodID((jclass)pr.jProviderClass,
724 "getInstance",
725 "(Lorg/pegasus/jmpi/OperationContext;Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;ZZ[Ljava/lang/String;)Lorg/pegasus/jmpi/CIMInstance;");
|
726 mark.hamzy 1.34
|
727 mark.hamzy 1.43 if (id != NULL)
728 {
729 eMethodFound = METHOD_INSTANCEPROVIDER2;
730 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleGetInstanceRequest: found METHOD_INSTANCEPROVIDER2."<<PEGASUS_STD(endl));
731 }
732 /* Fix for 4238 */
|
733 mark.hamzy 1.25 }
734
735 if (id == NULL)
736 {
|
737 mark.hamzy 1.43 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleGetInstanceRequest: No method found!"<<PEGASUS_STD(endl));
738
739 PEG_METHOD_EXIT();
|
740 mark.hamzy 1.25
|
741 mark.hamzy 1.43 STAT_COPYDISPATCHER
|
742 mark.hamzy 1.25
|
743 mark.hamzy 1.43 throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
744 MessageLoaderParms ("ProviderManager.JMPI.METHOD_NOT_FOUND",
745 "Could not find a method for the provider based on InterfaceType."));
|
746 mark.hamzy 1.25 }
747
|
748 schuur 1.1 JMPIjvm::checkException(env);
|
749 mark.hamzy 1.23
|
750 mark.hamzy 1.25 switch (eMethodFound)
751 {
|
752 mark.hamzy 1.43 case METHOD_CIMINSTANCEPROVIDER:
|
753 mark.hamzy 1.25 {
|
754 mark.hamzy 1.29 jint jopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
755 jobject jop = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jopRef);
|
756 mark.hamzy 1.25
757 JMPIjvm::checkException(env);
758
|
759 mark.hamzy 1.40 CIMClass cls;
760
761 try
762 {
763 DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<request->instanceName.getClassName()<<PEGASUS_STD(endl));
764 AutoMutex lock (pr._cimomMutex);
765
766 cls = pr._cimom_handle->getClass(context,
767 request->nameSpace,
768 request->instanceName.getClassName(),
769 false,
770 true,
771 true,
772 CIMPropertyList());
773 DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<request->instanceName.getClassName()<<PEGASUS_STD(endl));
774 }
775 catch (CIMException e)
776 {
777 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleGetInstanceRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
778 throw;
779 }
780 mark.hamzy 1.40
|
781 mark.hamzy 1.27 CIMClass *pcls = new CIMClass (cls);
782
783 JMPIjvm::checkException(env);
|
784 mark.hamzy 1.25
|
785 mark.hamzy 1.29 jint jcimClassRef = DEBUG_ConvertCToJava (CIMClass*, jint, pcls);
786 jobject jcimClass = env->NewObject(jv->CIMClassClassRef,jv->CIMClassNewI,jcimClassRef);
|
787 mark.hamzy 1.25
788 JMPIjvm::checkException(env);
|
789 mark.hamzy 1.23
|
790 mark.hamzy 1.25 jobjectArray jPropertyList = getList(jv,env,request->propertyList);
|
791 schuur 1.1
|
792 mark.hamzy 1.29 jobject jciRet = env->CallObjectMethod((jobject)pr.jProvider,
793 id,
794 jop,
|
795 mark.hamzy 1.36 JMPI_LOCALONLY,
796 JMPI_INCLUDE_QUALIFIERS,
|
797 mark.hamzy 1.29 request->includeClassOrigin,
798 jPropertyList,
799 jcimClass);
|
800 mark.hamzy 1.23
|
801 mark.hamzy 1.25 JMPIjvm::checkException(env);
|
802 mark.hamzy 1.23
|
803 mark.hamzy 1.25 STAT_PMS_PROVIDEREND;
|
804 schuur 1.1
|
805 mark.hamzy 1.25 handler.processing();
|
806 schuur 1.1
|
807 mark.hamzy 1.29 if (jciRet) {
808 jint jciRetRef = env->CallIntMethod(jciRet,JMPIjvm::jv.CIMInstanceCInst);
809 CIMInstance *ciRet = DEBUG_ConvertJavaToC (jint, CIMInstance*, jciRetRef);
|
810 schuur 1.13
|
811 mark.hamzy 1.29 handler.deliver(*ciRet);
|
812 mark.hamzy 1.25 }
813 handler.complete();
814 break;
|
815 mark.hamzy 1.23 }
|
816 schuur 1.13
|
817 mark.hamzy 1.34 /* Fix for 4238 */
|
818 mark.hamzy 1.43 case METHOD_INSTANCEPROVIDER2:
|
819 mark.hamzy 1.34 {
|
820 mark.hamzy 1.43 jint jocRef = DEBUG_ConvertCToJava (OperationContext*, jint, &request->operationContext);
821 jobject joc = env->NewObject(jv->OperationContextClassRef,jv->OperationContextNewI,jocRef);
822
|
823 mark.hamzy 1.34 jint jopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
824 jobject jop = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jopRef);
825
826 JMPIjvm::checkException(env);
827
|
828 mark.hamzy 1.40 CIMClass cls;
829
830 try
831 {
832 DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<request->instanceName.getClassName()<<PEGASUS_STD(endl));
833 AutoMutex lock (pr._cimomMutex);
834
835 cls = pr._cimom_handle->getClass(context,
836 request->nameSpace,
837 request->instanceName.getClassName(),
838 false,
839 true,
840 true,
841 CIMPropertyList());
842 DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<request->instanceName.getClassName()<<PEGASUS_STD(endl));
843 }
844 catch (CIMException e)
845 {
846 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleGetInstanceRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
847 throw;
848 }
849 mark.hamzy 1.40
|
850 mark.hamzy 1.34 CIMClass *pcls = new CIMClass (cls);
851
852 JMPIjvm::checkException(env);
853
854 jint jcimClassRef = DEBUG_ConvertCToJava (CIMClass*, jint, pcls);
855 jobject jcimClass = env->NewObject(jv->CIMClassClassRef,jv->CIMClassNewI,jcimClassRef);
856
857 JMPIjvm::checkException(env);
858
859 jobjectArray jPropertyList = getList(jv,env,request->propertyList);
860 jobject jciRet = env->CallObjectMethod((jobject)pr.jProvider,
861 id,
|
862 mark.hamzy 1.43 joc,
|
863 mark.hamzy 1.34 jop,
864 jcimClass,
865 JMPI_INCLUDE_QUALIFIERS,
866 request->includeClassOrigin,
867 jPropertyList);
868
869 JMPIjvm::checkException(env);
870
871 STAT_PMS_PROVIDEREND;
872
|
873 mark.hamzy 1.43 if (joc)
874 {
875 env->CallVoidMethod (joc, JMPIjvm::jv.OperationContextUnassociate);
876
877 JMPIjvm::checkException(env);
878 }
879
|
880 mark.hamzy 1.34 handler.processing();
881
882 if (jciRet) {
883 jint jciRetRef = env->CallIntMethod(jciRet,JMPIjvm::jv.CIMInstanceCInst);
884 CIMInstance *ciRet = DEBUG_ConvertJavaToC (jint, CIMInstance*, jciRetRef);
885
886 handler.deliver(*ciRet);
887 }
888 handler.complete();
889 break;
890 }
891 /* Fix for 4238 */
892
|
893 mark.hamzy 1.43 case METHOD_INSTANCEPROVIDER:
|
894 mark.hamzy 1.25 {
|
895 mark.hamzy 1.29 jint jopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
896 jobject jop = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jopRef);
|
897 mark.hamzy 1.25
898 JMPIjvm::checkException(env);
899
|
900 mark.hamzy 1.40 CIMClass cls;
901
902 try
903 {
904 DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<request->instanceName.getClassName()<<PEGASUS_STD(endl));
905 AutoMutex lock (pr._cimomMutex);
906
907 cls = pr._cimom_handle->getClass(context,
908 request->nameSpace,
909 request->instanceName.getClassName(),
910 false,
911 true,
912 true,
913 CIMPropertyList());
914 DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<request->instanceName.getClassName()<<PEGASUS_STD(endl));
915 }
916 catch (CIMException e)
917 {
918 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleGetInstancesRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
919 throw;
920 }
921 mark.hamzy 1.40
|
922 mark.hamzy 1.27 CIMClass *pcls = new CIMClass (cls);
|
923 mark.hamzy 1.25
|
924 mark.hamzy 1.27 JMPIjvm::checkException(env);
925
|
926 mark.hamzy 1.29 jint jcimClassRef = DEBUG_ConvertCToJava (CIMClass*, jint, pcls);
927 jobject jcimClass = env->NewObject(jv->CIMClassClassRef,jv->CIMClassNewI,jcimClassRef);
|
928 mark.hamzy 1.25
929 JMPIjvm::checkException(env);
930
|
931 mark.hamzy 1.30 // Modified for Bugzilla# 3679
|
932 mark.hamzy 1.29 jobject jciRet = env->CallObjectMethod((jobject)pr.jProvider,
933 id,
934 jop,
935 jcimClass,
|
936 mark.hamzy 1.30 JMPI_LOCALONLY);
|
937 mark.hamzy 1.25
938 JMPIjvm::checkException(env);
939
940 STAT_PMS_PROVIDEREND;
|
941 schuur 1.1
|
942 mark.hamzy 1.25 handler.processing();
|
943 schuur 1.13
|
944 mark.hamzy 1.29 if (jciRet) {
945 jint jciRetRef = env->CallIntMethod(jciRet,JMPIjvm::jv.CIMInstanceCInst);
946 CIMInstance *ciRet = DEBUG_ConvertJavaToC (jint, CIMInstance*, jciRetRef);
|
947 schuur 1.13
|
948 mark.hamzy 1.29 handler.deliver(*ciRet);
|
949 mark.hamzy 1.25 }
950 handler.complete();
951 break;
952 }
|
953 mark.hamzy 1.23
|
954 mark.hamzy 1.25 case METHOD_UNKNOWN:
955 {
956 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleGetInstanceRequest: should not be here!"<<PEGASUS_STD(endl));
957 break;
958 }
|
959 schuur 1.1 }
|
960 schuur 1.13 }
|
961 schuur 1.1 HandlerCatch(handler);
|
962 schuur 1.13
|
963 schuur 1.1 if (env) JMPIjvm::detachThread();
|
964 schuur 1.13
|
965 schuur 1.1 PEG_METHOD_EXIT();
966
|
967 w.white 1.31 STAT_COPYDISPATCHER
968
|
969 schuur 1.1 return(response);
970 }
971
972 Message * JMPIProviderManager::handleEnumerateInstancesRequest(const Message * message) throw()
973 {
|
974 mark.hamzy 1.23 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleEnumerateInstanceRequest");
975
976 HandlerIntro(EnumerateInstances,message,request,response,handler,Array<CIMInstance>());
|
977 schuur 1.1
|
978 mark.hamzy 1.25 typedef enum {
979 METHOD_UNKNOWN = 0,
|
980 mark.hamzy 1.43 METHOD_CIMINSTANCEPROVIDER,
981 METHOD_CIMINSTANCEPROVIDER2,
982 METHOD_INSTANCEPROVIDER,
983 METHOD_INSTANCEPROVIDER2,
|
984 mark.hamzy 1.25 } METHOD_VERSION;
985 METHOD_VERSION eMethodFound = METHOD_UNKNOWN;
986 JNIEnv *env = NULL;
|
987 schuur 1.13
988 try {
|
989 schuur 1.1 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
990 "JMPIProviderManager::handleEnumerateInstancesRequest - Host name: $0 Name space: $1 Class name: $2",
991 System::getHostName(),
992 request->nameSpace.getString(),
993 request->className.getString());
994
|
995 mark.hamzy 1.23 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstancesRequest: hostname = "<<System::getHostName()<<", namespace = "<<request->nameSpace.getString()<<", classname = "<<request->className.getString()<<PEGASUS_STD(endl));
996
|
997 schuur 1.1 // make target object path
|
998 mark.hamzy 1.27 CIMObjectPath *objectPath = new CIMObjectPath (System::getHostName(),
999 request->nameSpace,
1000 request->className);
|
1001 schuur 1.1
1002 // resolve provider name
|
1003 kumpf 1.2 ProviderName name = _resolveProviderName(
1004 request->operationContext.get(ProviderIdContainer::NAME));
|
1005 schuur 1.1
1006 // get cached or load new provider module
|
1007 mark.hamzy 1.43 JMPIProvider::OpProviderHolder ph = providerManager.getProvider (name.getPhysicalName(),
1008 name.getLogicalName(),
1009 String::EMPTY);
|
1010 schuur 1.1
|
1011 schuur 1.12 // convert arguments
|
1012 schuur 1.1 OperationContext context;
1013
|
1014 schuur 1.12 context.insert(request->operationContext.get(IdentityContainer::NAME));
1015 context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME));
1016 context.insert(request->operationContext.get(ContentLanguageListContainer::NAME));
|
1017 schuur 1.1
1018 // forward request
|
1019 mark.hamzy 1.25 JMPIProvider &pr = ph.GetProvider();
|
1020 schuur 1.1
|
1021 mark.hamzy 1.25 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, "Calling provider.enumerateInstances: " + pr.getName());
|
1022 schuur 1.1
|
1023 mark.hamzy 1.23 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstancesRequest: Calling provider enumerateInstances: "<<pr.getName()<<PEGASUS_STD(endl));
|
1024 schuur 1.12
|
1025 mark.hamzy 1.25 JvmVector *jv = 0;
1026
1027 env = JMPIjvm::attachThread(&jv);
1028
|
1029 mark.hamzy 1.37 if (!env)
1030 {
1031 PEG_METHOD_EXIT();
1032
1033 STAT_COPYDISPATCHER
1034
1035 throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
1036 MessageLoaderParms("ProviderManager.JMPI.INIT_JVM_FAILED",
1037 "Could not initialize the JVM (Java Virtual Machine) runtime environment."));
1038 }
1039
|
1040 mark.hamzy 1.25 JMPIProvider::pm_service_op_lock op_lock(&pr);
1041
1042 STAT_GETSTARTTIME;
1043
|
1044 mark.hamzy 1.43 jmethodID id = NULL;
1045 String interfaceType;
1046 String interfaceVersion;
1047
1048 getInterfaceType (request->operationContext.get (ProviderIdContainer::NAME),
1049 interfaceType,
1050 interfaceVersion);
1051
1052 if (interfaceType == "JMPI")
1053 {
1054 // public abstract java.util.Vector enumInstances (org.pegasus.jmpi.CIMObjectPath cop,
1055 // boolean deep,
1056 // org.pegasus.jmpi.CIMClass cimClass,
1057 // boolean localOnly)
1058 // throws org.pegasus.jmpi.CIMException
1059 id = env->GetMethodID((jclass)pr.jProviderClass,
1060 "enumInstances",
1061 "(Lorg/pegasus/jmpi/CIMObjectPath;ZLorg/pegasus/jmpi/CIMClass;Z)Ljava/util/Vector;");
|
1062 mark.hamzy 1.25
|
1063 mark.hamzy 1.43 if (id != NULL)
1064 {
1065 eMethodFound = METHOD_INSTANCEPROVIDER;
1066 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstancesRequest: found METHOD_INSTANCEPROVIDER."<<PEGASUS_STD(endl));
1067 }
1068
1069 if (id == NULL)
1070 {
1071 env->ExceptionClear();
|
1072 mark.hamzy 1.25
|
1073 mark.hamzy 1.43 // public org.pegasus.jmpi.CIMInstance[] enumInstances (org.pegasus.jmpi.CIMObjectPath cop,
1074 // boolean localOnly,
1075 // boolean includeQualifiers,
1076 // boolean includeClassOrigin,
1077 // java.lang.String[] propertyList,
1078 // org.pegasus.jmpi.CIMClass cimClass)
1079 // throws org.pegasus.jmpi.CIMException
1080 id = env->GetMethodID((jclass)pr.jProviderClass,
1081 "enumInstances",
1082 "(Lorg/pegasus/jmpi/CIMObjectPath;ZZZ[Ljava/lang/String;Lorg/pegasus/jmpi/CIMClass;)[Lorg/pegasus/jmpi/CIMInstance;");
1083
1084 if (id != NULL)
1085 {
1086 eMethodFound = METHOD_CIMINSTANCEPROVIDER;
1087 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstancesRequest: found METHOD_CIMINSTANCEPROVIDER."<<PEGASUS_STD(endl));
1088 }
1089 }
1090 }
1091 else if (interfaceType == "JMPIExperimental")
|
1092 mark.hamzy 1.25 {
|
1093 mark.hamzy 1.43 /* Fix for 4189 */
1094 // public abstract java.util.Vector enumerateInstances (org.pegasus.jmpi.OperationContext oc
1095 // org.pegasus.jmpi.CIMObjectPath cop,
1096 // org.pegasus.jmpi.CIMClass cimClass,
1097 // boolean includeQualifiers,
1098 // boolean includeClassOrigin,
1099 // java.lang.String[] propertyList)
1100 // throws org.pegasus.jmpi.CIMException
1101 id = env->GetMethodID((jclass)pr.jProviderClass,
1102 "enumerateInstances",
1103 "(Lorg/pegasus/jmpi/OperationContext;Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;ZZ[Ljava/lang/String;)Ljava/util/Vector;");
|
1104 mark.hamzy 1.33
|
1105 mark.hamzy 1.43 if (id != NULL)
1106 {
1107 eMethodFound = METHOD_INSTANCEPROVIDER2;
1108 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstancesRequest: found METHOD_INSTANCEPROVIDER2."<<PEGASUS_STD(endl));
1109 }
1110 /* Fix for 4189 */
|
1111 mark.hamzy 1.33
|
1112 mark.hamzy 1.43 if (id == NULL)
1113 {
1114 env->ExceptionClear();
|
1115 mark.hamzy 1.33
|
1116 mark.hamzy 1.43 // public abstract org.pegasus.jmpi.CIMInstance[] enumerateInstances (org.pegasus.jmpi.OperationContext oc
1117 // org.pegasus.jmpi.CIMObjectPath cop,
1118 // org.pegasus.jmpi.CIMClass cimClass,
1119 // boolean includeQualifiers,
1120 // boolean includeClassOrigin,
1121 // java.lang.String[] propertyList)
1122 // throws org.pegasus.jmpi.CIMException
1123 id = env->GetMethodID((jclass)pr.jProviderClass,
1124 "enumInstances",
1125 "(Lorg/pegasus/jmpi/OperationContext;Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;ZZ[Ljava/lang/String;)[Lorg/pegasus/jmpi/CIMInstance;");
1126
1127 if (id != NULL)
1128 {
1129 eMethodFound = METHOD_CIMINSTANCEPROVIDER2;
1130 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstancesRequest: found METHOD_CIMINSTANCEPROVIDER2."<<PEGASUS_STD(endl));
1131 }
1132 }
|
1133 mark.hamzy 1.25 }
1134
1135 if (id == NULL)
1136 {
|
1137 mark.hamzy 1.43 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstancesRequest: No method found!"<<PEGASUS_STD(endl));
1138
1139 PEG_METHOD_EXIT();
|
1140 schuur 1.1
|
1141 mark.hamzy 1.43 STAT_COPYDISPATCHER
|
1142 mark.hamzy 1.23
|
1143 mark.hamzy 1.43 throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
1144 MessageLoaderParms ("ProviderManager.JMPI.METHOD_NOT_FOUND",
1145 "Could not find a method for the provider based on InterfaceType."));
|
1146 mark.hamzy 1.25 }
|
1147 schuur 1.12
1148 JMPIjvm::checkException(env);
|
1149 mark.hamzy 1.23
|
1150 mark.hamzy 1.25 switch (eMethodFound)
1151 {
|
1152 mark.hamzy 1.43 case METHOD_CIMINSTANCEPROVIDER:
|
1153 mark.hamzy 1.25 {
|
1154 mark.hamzy 1.29 jint jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
1155 jobject jcop = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
|
1156 mark.hamzy 1.23
|
1157 mark.hamzy 1.25 JMPIjvm::checkException(env);
|
1158 schuur 1.1
|
1159 mark.hamzy 1.40 CIMClass cls;
1160
1161 try
1162 {
1163 DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
1164 AutoMutex lock (pr._cimomMutex);
1165
1166 cls = pr._cimom_handle->getClass(context,
1167 request->nameSpace,
1168 request->className,
1169 false,
1170 true,
1171 true,
1172 CIMPropertyList());
1173 DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
1174 }
1175 catch (CIMException e)
1176 {
1177 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstancesRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
1178 throw;
1179 }
1180 mark.hamzy 1.40
|
1181 mark.hamzy 1.27 CIMClass *pcls = new CIMClass (cls);
1182
|
1183 mark.hamzy 1.25 JMPIjvm::checkException(env);
|
1184 schuur 1.1
|
1185 mark.hamzy 1.29 jint jccRef = DEBUG_ConvertCToJava (CIMClass*, jint, pcls);
1186 jobject jcc = env->NewObject(jv->CIMClassClassRef,jv->CIMClassNewI,jccRef);
|
1187 schuur 1.13
|
1188 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
1189 schuur 1.1
|
1190 mark.hamzy 1.25 jobjectArray jPropertyList = getList(jv,env,request->propertyList);
|
1191 mark.hamzy 1.36 jobjectArray jAr = (jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
1192 id,
1193 jcop,
1194 JMPI_LOCALONLY,
1195 JMPI_INCLUDE_QUALIFIERS,
1196 request->includeClassOrigin,
1197 jPropertyList,
1198 jcc);
|
1199 mark.hamzy 1.25
|
1200 mark.hamzy 1.23 JMPIjvm::checkException(env);
1201
1202 STAT_PMS_PROVIDEREND;
1203
1204 handler.processing();
|
1205 mark.hamzy 1.25 if (jAr) {
1206 for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
|
1207 mark.hamzy 1.23 JMPIjvm::checkException(env);
1208
|
1209 mark.hamzy 1.29 jobject jciRet = env->GetObjectArrayElement(jAr,i);
1210
|
1211 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
1212 schuur 1.13
|
1213 mark.hamzy 1.29 jint jciRetRef = env->CallIntMethod(jciRet,JMPIjvm::jv.CIMInstanceCInst);
1214 CIMInstance *ciRet = DEBUG_ConvertJavaToC (jint, CIMInstance*, jciRetRef);
|
1215 schuur 1.13
|
1216 mark.hamzy 1.36 /* Fix for 4237 */
|
1217 mark.hamzy 1.40 CIMClass cls;
1218
1219 try
1220 {
1221 DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
1222 AutoMutex lock (pr._cimomMutex);
1223
1224 cls = pr._cimom_handle->getClass(context,
1225 request->nameSpace,
1226 ciRet->getClassName(),
1227 false,
1228 true,
1229 true,
1230 CIMPropertyList());
1231 DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
1232 }
1233 catch (CIMException e)
1234 {
1235 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstancesRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
1236 throw;
1237 }
1238 mark.hamzy 1.40
|
1239 mark.hamzy 1.36 const CIMObjectPath& op = ciRet->getPath();
1240 CIMObjectPath iop = ciRet->buildPath(cls);
1241
|
1242 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
1243 schuur 1.13
|
1244 mark.hamzy 1.29 handler.deliver(*ciRet);
|
1245 mark.hamzy 1.23 }
1246 }
1247 handler.complete();
|
1248 mark.hamzy 1.25 break;
|
1249 schuur 1.13 }
|
1250 mark.hamzy 1.25
|
1251 mark.hamzy 1.43 case METHOD_CIMINSTANCEPROVIDER2:
1252 {
1253 jint jocRef = DEBUG_ConvertCToJava (OperationContext*, jint, &request->operationContext);
1254 jobject joc = env->NewObject(jv->OperationContextClassRef,jv->OperationContextNewI,jocRef);
1255
1256 jint jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
1257 jobject jcop = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
1258
1259 JMPIjvm::checkException(env);
1260
1261 CIMClass cls;
1262
1263 try
1264 {
1265 DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
1266 AutoMutex lock (pr._cimomMutex);
1267
1268 cls = pr._cimom_handle->getClass(context,
1269 request->nameSpace,
1270 request->className,
1271 false,
1272 mark.hamzy 1.43 true,
1273 true,
1274 CIMPropertyList());
1275 DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
1276 }
1277 catch (CIMException e)
1278 {
1279 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstancesRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
1280 throw;
1281 }
1282
1283 CIMClass *pcls = new CIMClass (cls);
1284
1285 JMPIjvm::checkException(env);
1286
1287 jint jccRef = DEBUG_ConvertCToJava (CIMClass*, jint, pcls);
1288 jobject jcc = env->NewObject(jv->CIMClassClassRef,jv->CIMClassNewI,jccRef);
1289
1290 JMPIjvm::checkException(env);
1291
1292 jobjectArray jPropertyList = getList(jv,env,request->propertyList);
1293 mark.hamzy 1.43 jobjectArray jAr = (jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
1294 id,
1295 joc,
1296 jcop,
1297 jcc,
1298 JMPI_INCLUDE_QUALIFIERS,
1299 request->includeClassOrigin,
1300 jPropertyList);
1301
1302 JMPIjvm::checkException(env);
1303
1304 STAT_PMS_PROVIDEREND;
1305
1306 if (joc)
1307 {
1308 env->CallVoidMethod (joc, JMPIjvm::jv.OperationContextUnassociate);
1309
1310 JMPIjvm::checkException(env);
1311 }
1312
1313 handler.processing();
1314 mark.hamzy 1.43 if (jAr) {
1315 for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
1316 JMPIjvm::checkException(env);
1317
1318 jobject jciRet = env->GetObjectArrayElement(jAr,i);
1319
1320 JMPIjvm::checkException(env);
1321
1322 jint jciRetRef = env->CallIntMethod(jciRet,JMPIjvm::jv.CIMInstanceCInst);
1323 CIMInstance *ciRet = DEBUG_ConvertJavaToC (jint, CIMInstance*, jciRetRef);
1324
1325 /* Fix for 4237 */
1326 CIMClass cls;
1327
1328 try
1329 {
1330 DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
1331 AutoMutex lock (pr._cimomMutex);
1332
1333 cls = pr._cimom_handle->getClass(context,
1334 request->nameSpace,
1335 mark.hamzy 1.43 ciRet->getClassName(),
1336 false,
1337 true,
1338 true,
1339 CIMPropertyList());
1340 DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
1341 }
1342 catch (CIMException e)
1343 {
1344 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstancesRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
1345 throw;
1346 }
1347
1348 const CIMObjectPath& op = ciRet->getPath();
1349 CIMObjectPath iop = ciRet->buildPath(cls);
1350
1351 JMPIjvm::checkException(env);
1352
1353 handler.deliver(*ciRet);
1354 }
1355 }
1356 mark.hamzy 1.43 handler.complete();
1357 break;
1358 }
1359
|
1360 mark.hamzy 1.33 /* Fix for 4189 */
|
1361 mark.hamzy 1.43 case METHOD_INSTANCEPROVIDER2:
|
1362 mark.hamzy 1.33 {
|
1363 mark.hamzy 1.43 jint jocRef = DEBUG_ConvertCToJava (OperationContext*, jint, &request->operationContext);
1364 jobject joc = env->NewObject(jv->OperationContextClassRef,jv->OperationContextNewI,jocRef);
1365
|
1366 mark.hamzy 1.33 jint jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
1367 jobject jcop = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
1368
1369 JMPIjvm::checkException(env);
1370
|
1371 mark.hamzy 1.40 CIMClass cls;
1372
1373 try
1374 {
1375 DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
1376 AutoMutex lock (pr._cimomMutex);
1377
1378 cls = pr._cimom_handle->getClass (context,
1379 request->nameSpace,
1380 request->className,
1381 false,
1382 true,
1383 true,
1384 CIMPropertyList());
1385 DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
1386 }
1387 catch (CIMException e)
1388 {
1389 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstancesRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
1390 throw;
1391 }
1392 mark.hamzy 1.40
|
1393 mark.hamzy 1.33 CIMClass *pcls = new CIMClass (cls);
1394
1395 JMPIjvm::checkException(env);
1396
1397 jint jccRef = DEBUG_ConvertCToJava (CIMClass*, jint, pcls);
1398 jobject jcc = env->NewObject(jv->CIMClassClassRef,jv->CIMClassNewI,jccRef);
1399
1400 JMPIjvm::checkException(env);
1401
1402 jobjectArray jPropertyList = getList(jv,env,request->propertyList);
1403 jobject jVec = env->CallObjectMethod((jobject)pr.jProvider,
1404 id,
|
1405 mark.hamzy 1.43 joc,
|
1406 mark.hamzy 1.33 jcop,
|
1407 mark.hamzy 1.35 jcc,
|
1408 mark.hamzy 1.33 JMPI_INCLUDE_QUALIFIERS,
1409 request->includeClassOrigin,
1410 jPropertyList);
1411
1412 JMPIjvm::checkException(env);
1413
1414 STAT_PMS_PROVIDEREND;
1415
|
1416 mark.hamzy 1.43 if (joc)
1417 {
1418 env->CallVoidMethod (joc, JMPIjvm::jv.OperationContextUnassociate);
1419
1420 JMPIjvm::checkException(env);
1421 }
1422
|
1423 mark.hamzy 1.33 handler.processing();
1424 if (jVec) {
1425 for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); i<m; i++) {
1426 JMPIjvm::checkException(env);
1427
1428 jobject jciRet = env->CallObjectMethod(jVec,JMPIjvm::jv.VectorElementAt,i);
1429
1430 JMPIjvm::checkException(env);
1431
1432 jint jciRetRef = env->CallIntMethod(jciRet,JMPIjvm::jv.CIMInstanceCInst);
1433 CIMInstance *ciRet = DEBUG_ConvertJavaToC (jint, CIMInstance*, jciRetRef);
1434
1435 /* Fix for 4237 */
|
1436 mark.hamzy 1.40 CIMClass cls;
1437
1438 try
1439 {
1440 DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
1441 AutoMutex lock (pr._cimomMutex);
1442
1443 cls = pr._cimom_handle->getClass(context,
1444 request->nameSpace,
1445 ciRet->getClassName(),
1446 false,
1447 true,
1448 true,
1449 CIMPropertyList());
1450 DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
1451 }
1452 catch (CIMException e)
1453 {
1454 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstancesRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
1455 throw;
1456 }
1457 mark.hamzy 1.40
|
1458 mark.hamzy 1.33 const CIMObjectPath& op = ciRet->getPath();
1459 CIMObjectPath iop = ciRet->buildPath(cls);
1460
1461 JMPIjvm::checkException(env);
1462
1463 iop.setNameSpace(op.getNameSpace());
1464
1465 ciRet->setPath(iop);
1466 /* Fix for 4237*/
1467
1468 handler.deliver(*ciRet);
1469 }
1470 }
1471 handler.complete();
1472 break;
1473 }
1474 /* Fix for 4189 */
1475
|
1476 mark.hamzy 1.43 case METHOD_INSTANCEPROVIDER:
|
1477 mark.hamzy 1.25 {
|
1478 mark.hamzy 1.29 jint jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
1479 jobject jcop = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
|
1480 mark.hamzy 1.25
1481 JMPIjvm::checkException(env);
1482
|
1483 mark.hamzy 1.40 CIMClass cls;
1484
1485 try
1486 {
1487 DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
1488 AutoMutex lock (pr._cimomMutex);
1489
1490 cls = pr._cimom_handle->getClass(context,
1491 request->nameSpace,
1492 request->className,
1493 false,
1494 true,
1495 true,
1496 CIMPropertyList());
1497 DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
1498 }
1499 catch (CIMException e)
1500 {
1501 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstancesRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
1502 throw;
1503 }
1504 mark.hamzy 1.40
|
1505 mark.hamzy 1.27 CIMClass *pcls = new CIMClass (cls);
1506
|
1507 mark.hamzy 1.25 JMPIjvm::checkException(env);
1508
|
1509 mark.hamzy 1.29 jint jccRef = DEBUG_ConvertCToJava (CIMClass*, jint, pcls);
1510 jobject jcc = env->NewObject(jv->CIMClassClassRef,jv->CIMClassNewI,jccRef);
|
1511 mark.hamzy 1.25
1512 JMPIjvm::checkException(env);
1513
|
1514 mark.hamzy 1.30 // Modified for Bugzilla# 3679
|
1515 mark.hamzy 1.25 jobject jVec = env->CallObjectMethod((jobject)pr.jProvider,
1516 id,
|
1517 mark.hamzy 1.29 jcop,
|
1518 mark.hamzy 1.33 request->deepInheritance,
|
1519 mark.hamzy 1.29 jcc,
|
1520 mark.hamzy 1.30 JMPI_LOCALONLY);
|
1521 mark.hamzy 1.25
|
1522 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
1523 schuur 1.12
|
1524 mark.hamzy 1.23 STAT_PMS_PROVIDEREND;
1525
1526 handler.processing();
|
1527 mark.hamzy 1.25 if (jVec) {
1528 for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); i<m; i++) {
|
1529 mark.hamzy 1.23 JMPIjvm::checkException(env);
1530
|
1531 mark.hamzy 1.29 jobject jciRet = env->CallObjectMethod(jVec,JMPIjvm::jv.VectorElementAt,i);
1532
|
1533 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
1534 schuur 1.12
|
1535 mark.hamzy 1.29 jint jciRetRef = env->CallIntMethod(jciRet,JMPIjvm::jv.CIMInstanceCInst);
1536 CIMInstance *ciRet = DEBUG_ConvertJavaToC (jint, CIMInstance*, jciRetRef);
|
1537 schuur 1.12
|
1538 mark.hamzy 1.33 /* Fix for 4237 */
|
1539 mark.hamzy 1.40 CIMClass cls;
1540
1541 try
1542 {
1543 DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
1544 AutoMutex lock (pr._cimomMutex);
1545
1546 cls = pr._cimom_handle->getClass(context,
1547 request->nameSpace,
1548 ciRet->getClassName(),
1549 false,
1550 true,
1551 true,
1552 CIMPropertyList());
1553 DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
1554 }
1555 catch (CIMException e)
1556 {
1557 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstancesRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
1558 throw;
1559 }
1560 mark.hamzy 1.40
|
1561 mark.hamzy 1.33 const CIMObjectPath& op = ciRet->getPath();
1562 CIMObjectPath iop = ciRet->buildPath(cls);
1563
1564 JMPIjvm::checkException(env);
1565
1566 iop.setNameSpace(op.getNameSpace());
1567
1568 ciRet->setPath(iop);
1569 /* Fix for 4237*/
1570
|
1571 mark.hamzy 1.29 handler.deliver(*ciRet);
|
1572 mark.hamzy 1.23 }
1573 }
1574 handler.complete();
|
1575 mark.hamzy 1.25 break;
1576 }
1577
1578 case METHOD_UNKNOWN:
1579 {
1580 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstancesRequest: should not be here!"<<PEGASUS_STD(endl));
1581 break;
1582 }
|
1583 schuur 1.1 }
1584 }
1585 HandlerCatch(handler);
|
1586 schuur 1.12
|
1587 schuur 1.11 if (env) JMPIjvm::detachThread();
|
1588 schuur 1.12
|
1589 schuur 1.1 PEG_METHOD_EXIT();
1590
|
1591 w.white 1.31 STAT_COPYDISPATCHER
1592
|
1593 schuur 1.1 return(response);
1594 }
1595
1596 Message * JMPIProviderManager::handleEnumerateInstanceNamesRequest(const Message * message) throw()
1597 {
1598 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager::handleEnumerateInstanceNamesRequest");
1599
|
1600 mark.hamzy 1.23 HandlerIntro(EnumerateInstanceNames,message,request,response, handler,Array<CIMObjectPath>());
1601
|
1602 mark.hamzy 1.25 typedef enum {
1603 METHOD_UNKNOWN = 0,
|
1604 mark.hamzy 1.43 METHOD_CIMINSTANCEPROVIDER,
1605 METHOD_CIMINSTANCEPROVIDER2,
1606 METHOD_INSTANCEPROVIDER,
1607 METHOD_INSTANCEPROVIDER2,
|
1608 mark.hamzy 1.25 } METHOD_VERSION;
1609 METHOD_VERSION eMethodFound = METHOD_UNKNOWN;
1610 JNIEnv *env = NULL;
|
1611 schuur 1.13
|
1612 schuur 1.1 try {
1613 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
1614 "JMPIProviderManager::handleEnumerateInstanceNamesRequest - Host name: $0 Name space: $1 Class name: $2",
1615 System::getHostName(),
1616 request->nameSpace.getString(),
1617 request->className.getString());
|
1618 mark.hamzy 1.23
1619 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstanceNamesRequest: hostname = "<<System::getHostName()<<", namespace = "<<request->nameSpace.getString()<<", classname = "<<request->className.getString()<<PEGASUS_STD(endl));
1620
|
1621 mark.hamzy 1.25 // make target object path
|
1622 mark.hamzy 1.27 CIMObjectPath *objectPath = new CIMObjectPath (System::getHostName(),
1623 request->nameSpace,
1624 request->className);
|
1625 schuur 1.1
1626 // resolve provider name
|
1627 kumpf 1.2 ProviderName name = _resolveProviderName(
1628 request->operationContext.get(ProviderIdContainer::NAME));
|
1629 schuur 1.1
1630 // get cached or load new provider module
|
1631 mark.hamzy 1.43 JMPIProvider::OpProviderHolder ph = providerManager.getProvider (name.getPhysicalName(),
1632 name.getLogicalName());
|
1633 schuur 1.1
1634 // convert arguments
1635 OperationContext context;
1636
|
1637 mark.hamzy 1.23 context.insert(request->operationContext.get(IdentityContainer::NAME));
1638 context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME));
1639 context.insert(request->operationContext.get(ContentLanguageListContainer::NAME));
|
1640 schuur 1.1
|
1641 mark.hamzy 1.25 JMPIProvider &pr = ph.GetProvider();
|
1642 schuur 1.1
|
1643 mark.hamzy 1.25 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, "Calling provider.enumerateInstanceNames: " + pr.getName());
|
1644 schuur 1.1
|
1645 mark.hamzy 1.37 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstanceNamesRequest: Calling provider : enumerateInstanceNames: "<<pr.getName()<<PEGASUS_STD(endl));
|
1646 schuur 1.1
|
1647 mark.hamzy 1.25 JvmVector *jv = 0;
|
1648 schuur 1.12
|
1649 mark.hamzy 1.25 env = JMPIjvm::attachThread(&jv);
|
1650 schuur 1.1
|
1651 mark.hamzy 1.37 if (!env)
1652 {
1653 PEG_METHOD_EXIT();
1654
1655 STAT_COPYDISPATCHER
1656
1657 throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
1658 MessageLoaderParms("ProviderManager.JMPI.INIT_JVM_FAILED",
1659 "Could not initialize the JVM (Java Virtual Machine) runtime environment."));
1660 }
1661
|
1662 mark.hamzy 1.25 JMPIProvider::pm_service_op_lock op_lock(&pr);
|
1663 schuur 1.12
|
1664 mark.hamzy 1.25 STAT_GETSTARTTIME;
|
1665 mark.hamzy 1.23
|
1666 mark.hamzy 1.43 jmethodID id = NULL;
1667 String interfaceType;
1668 String interfaceVersion;
1669
1670 getInterfaceType (request->operationContext.get (ProviderIdContainer::NAME),
1671 interfaceType,
1672 interfaceVersion);
1673
1674 if (interfaceType == "JMPI")
1675 {
1676 // public abstract java.util.Vector enumInstances (org.pegasus.jmpi.CIMObjectPath cop,
1677 // boolean deep,
1678 // org.pegasus.jmpi.CIMClass cimClass)
1679 // throws org.pegasus.jmpi.CIMException
1680 id = env->GetMethodID((jclass)pr.jProviderClass,
1681 "enumInstances",
1682 "(Lorg/pegasus/jmpi/CIMObjectPath;ZLorg/pegasus/jmpi/CIMClass;)Ljava/util/Vector;");
1683
1684 if (id != NULL)
1685 {
1686 eMethodFound = METHOD_INSTANCEPROVIDER;
1687 mark.hamzy 1.43 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstanceNamesRequest: found METHOD_INSTANCEPROVIDER."<<PEGASUS_STD(endl));
1688 }
|
1689 mark.hamzy 1.23
|
1690 mark.hamzy 1.43 if (id == NULL)
1691 {
1692 env->ExceptionClear();
|
1693 schuur 1.1
|
1694 mark.hamzy 1.43 // public org.pegasus.jmpi.CIMObjectPath[] enumerateInstanceNames (org.pegasus.jmpi.CIMObjectPath op,
1695 // org.pegasus.jmpi.CIMClass cc)
1696 // throws org.pegasus.jmpi.CIMException
1697 id = env->GetMethodID((jclass)pr.jProviderClass,
1698 "enumerateInstanceNames",
1699 "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;)[Lorg/pegasus/jmpi/CIMObjectPath;");
1700
1701 if (id != NULL)
1702 {
1703 eMethodFound = METHOD_CIMINSTANCEPROVIDER;
1704 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstanceNamesRequest: found METHOD_CIMINSTANCEPROVIDER."<<PEGASUS_STD(endl));
1705 }
1706 }
1707 }
1708 else if (interfaceType == "JMPIExperimental")
|
1709 mark.hamzy 1.25 {
|
1710 mark.hamzy 1.43 // public abstract java.util.Vector enumerateInstanceNames (org.pegasus.jmpi.OperationContext oc
1711 // org.pegasus.jmpi.CIMObjectPath cop,
1712 // org.pegasus.jmpi.CIMClass cimClass)
1713 // throws org.pegasus.jmpi.CIMException
1714 id = env->GetMethodID((jclass)pr.jProviderClass,
1715 "enumerateInstanceNames",
1716 "(Lorg/pegasus/jmpi/OperationContext;Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;)Ljava/util/Vector;");
|
1717 schuur 1.1
|
1718 mark.hamzy 1.43 if (id != NULL)
1719 {
1720 eMethodFound = METHOD_INSTANCEPROVIDER2;
1721 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstanceNamesRequest: found METHOD_INSTANCEPROVIDER2."<<PEGASUS_STD(endl));
1722 }
|
1723 schuur 1.1
|
1724 mark.hamzy 1.43 if (id == NULL)
1725 {
1726 env->ExceptionClear();
|
1727 schuur 1.13
|
1728 mark.hamzy 1.43 // public abstract org.pegasus.jmpi.CIMObjectPath[] enumerateInstanceNames (org.pegasus.jmpi.OperationContext oc
1729 // org.pegasus.jmpi.CIMObjectPath cop,
1730 // org.pegasus.jmpi.CIMClass cimClass)
1731 // throws org.pegasus.jmpi.CIMException
1732 id = env->GetMethodID((jclass)pr.jProviderClass,
1733 "enumerateInstanceNames",
1734 "(Lorg/pegasus/jmpi/OperationContext;Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;)[Lorg/pegasus/jmpi/CIMObjectPath;");
1735
1736 if (id != NULL)
1737 {
1738 eMethodFound = METHOD_CIMINSTANCEPROVIDER2;
1739 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstanceNamesRequest: found METHOD_CIMINSTANCEPROVIDER2."<<PEGASUS_STD(endl));
1740 }
1741 }
|
1742 mark.hamzy 1.23 }
|
1743 mark.hamzy 1.25
|
1744 mark.hamzy 1.36 if (id == NULL)
1745 {
|
1746 mark.hamzy 1.43 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstanceNamesRequest: No method found!"<<PEGASUS_STD(endl));
|
1747 mark.hamzy 1.36
|
1748 mark.hamzy 1.43 PEG_METHOD_EXIT();
|
1749 mark.hamzy 1.36
|
1750 mark.hamzy 1.43 STAT_COPYDISPATCHER
|
1751 mark.hamzy 1.36
|
1752 mark.hamzy 1.43 throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
1753 MessageLoaderParms ("ProviderManager.JMPI.METHOD_NOT_FOUND",
1754 "Could not find a method for the provider based on InterfaceType."));
|
1755 mark.hamzy 1.36 }
1756
|
1757 schuur 1.1 JMPIjvm::checkException(env);
1758
|
1759 mark.hamzy 1.25 switch (eMethodFound)
1760 {
|
1761 mark.hamzy 1.43 case METHOD_CIMINSTANCEPROVIDER:
|
1762 mark.hamzy 1.25 {
|
1763 mark.hamzy 1.29 jint jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
1764 jobject jcop = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
|
1765 mark.hamzy 1.25
1766 JMPIjvm::checkException(env);
1767
|
1768 mark.hamzy 1.40 CIMClass cls;
1769
1770 try
1771 {
1772 DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
1773 AutoMutex lock (pr._cimomMutex);
1774
1775 cls = pr._cimom_handle->getClass(context,
1776 request->nameSpace,
1777 request->className,
1778 false,
1779 true,
1780 true,
1781 CIMPropertyList());
1782 DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
1783 }
1784 catch (CIMException e)
1785 {
1786 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstanceNamesRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
1787 throw;
1788 }
1789 mark.hamzy 1.40
|
1790 mark.hamzy 1.27 CIMClass *pcls = new CIMClass (cls);
|
1791 mark.hamzy 1.25
1792 JMPIjvm::checkException(env);
1793
|
1794 mark.hamzy 1.29 jint jcimClassRef = DEBUG_ConvertCToJava (CIMClass*, jint, pcls);
1795 jobject jcimClass = env->NewObject(jv->CIMClassClassRef,jv->CIMClassNewI,jcimClassRef);
|
1796 mark.hamzy 1.25
1797 JMPIjvm::checkException(env);
1798
1799 jobjectArray jAr = (jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
1800 id,
|
1801 mark.hamzy 1.29 jcop,
1802 jcimClass);
|
1803 mark.hamzy 1.25
|
1804 mark.hamzy 1.23 JMPIjvm::checkException(env);
1805
1806 STAT_PMS_PROVIDEREND;
1807
1808 handler.processing();
|
1809 mark.hamzy 1.25 if (jAr) {
1810 for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
|
1811 mark.hamzy 1.23 JMPIjvm::checkException(env);
1812
|
1813 mark.hamzy 1.29 jobject jcopRet = env->GetObjectArrayElement(jAr,i);
1814
|
1815 mark.hamzy 1.23 JMPIjvm::checkException(env);
1816
|
1817 mark.hamzy 1.29 jint jcopRetRef = env->CallIntMethod(jcopRet,JMPIjvm::jv.CIMObjectPathCInst);
1818 CIMObjectPath *copRet = DEBUG_ConvertJavaToC (jint, CIMObjectPath*, jcopRetRef);
|
1819 schuur 1.13
|
1820 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
1821 schuur 1.13
|
1822 mark.hamzy 1.29 handler.deliver(*copRet);
|
1823 mark.hamzy 1.23 }
1824 }
1825 handler.complete();
|
1826 mark.hamzy 1.25 break;
|
1827 schuur 1.13 }
|
1828 mark.hamzy 1.25
|
1829 mark.hamzy 1.43 case METHOD_CIMINSTANCEPROVIDER2:
|
1830 mark.hamzy 1.36 {
|
1831 mark.hamzy 1.43 jint jocRef = DEBUG_ConvertCToJava (OperationContext*, jint, &request->operationContext);
1832 jobject joc = env->NewObject(jv->OperationContextClassRef,jv->OperationContextNewI,jocRef);
1833
|
1834 mark.hamzy 1.36 jint jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
1835 jobject jcop = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
1836
1837 JMPIjvm::checkException(env);
1838
|
1839 mark.hamzy 1.40 CIMClass cls;
1840
1841 try
1842 {
1843 DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
1844 AutoMutex lock (pr._cimomMutex);
1845
1846 cls = pr._cimom_handle->getClass(context,
1847 request->nameSpace,
1848 request->className,
1849 false,
1850 true,
1851 true,
1852 CIMPropertyList());
1853 DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
1854 }
1855 catch (CIMException e)
1856 {
1857 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstanceNamesRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
1858 throw;
1859 }
1860 mark.hamzy 1.40
|
1861 mark.hamzy 1.36 CIMClass *pcls = new CIMClass (cls);
1862
1863 JMPIjvm::checkException(env);
1864
1865 jint jcimClassRef = DEBUG_ConvertCToJava (CIMClass*, jint, pcls);
1866 jobject jcimClass = env->NewObject(jv->CIMClassClassRef,jv->CIMClassNewI,jcimClassRef);
1867
1868 JMPIjvm::checkException(env);
1869
|
1870 mark.hamzy 1.43 jobjectArray jAr = (jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
1871 id,
1872 joc,
1873 jcop,
1874 jcimClass);
|
1875 mark.hamzy 1.36
1876 JMPIjvm::checkException(env);
1877
1878 STAT_PMS_PROVIDEREND;
1879
|
1880 mark.hamzy 1.43 if (joc)
1881 {
1882 env->CallVoidMethod (joc, JMPIjvm::jv.OperationContextUnassociate);
1883
1884 JMPIjvm::checkException(env);
1885 }
1886
|
1887 mark.hamzy 1.36 handler.processing();
|
1888 mark.hamzy 1.43 if (jAr) {
1889 for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
|
1890 mark.hamzy 1.36 JMPIjvm::checkException(env);
1891
|
1892 mark.hamzy 1.43 jobject jcopRet = env->GetObjectArrayElement(jAr,i);
|
1893 mark.hamzy 1.36
1894 JMPIjvm::checkException(env);
1895
1896 jint jcopRetRef = env->CallIntMethod(jcopRet,JMPIjvm::jv.CIMObjectPathCInst);
1897 CIMObjectPath *copRet = DEBUG_ConvertJavaToC (jint, CIMObjectPath*, jcopRetRef);
1898
1899 JMPIjvm::checkException(env);
1900
1901 handler.deliver(*copRet);
1902 }
1903 }
1904 handler.complete();
1905 break;
1906 }
1907
|
1908 mark.hamzy 1.43 case METHOD_INSTANCEPROVIDER2:
|
1909 mark.hamzy 1.25 {
|
1910 mark.hamzy 1.43 jint jocRef = DEBUG_ConvertCToJava (OperationContext*, jint, &request->operationContext);
1911 jobject joc = env->NewObject(jv->OperationContextClassRef,jv->OperationContextNewI,jocRef);
1912
|
1913 mark.hamzy 1.29 jint jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
1914 jobject jcop = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
|
1915 mark.hamzy 1.25
1916 JMPIjvm::checkException(env);
1917
|
1918 mark.hamzy 1.40 CIMClass cls;
1919
1920 try
1921 {
1922 DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
1923 AutoMutex lock (pr._cimomMutex);
1924
1925 cls = pr._cimom_handle->getClass(context,
1926 request->nameSpace,
1927 request->className,
1928 false,
1929 true,
1930 true,
1931 CIMPropertyList());
1932 DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
1933 }
1934 catch (CIMException e)
1935 {
1936 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstanceNamesRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
1937 throw;
1938 }
1939 mark.hamzy 1.40
|
1940 mark.hamzy 1.27 CIMClass *pcls = new CIMClass (cls);
|
1941 mark.hamzy 1.25
1942 JMPIjvm::checkException(env);
1943
|
1944 mark.hamzy 1.29 jint jcimClassRef = DEBUG_ConvertCToJava (CIMClass*, jint, pcls);
1945 jobject jcimClass = env->NewObject(jv->CIMClassClassRef,jv->CIMClassNewI,jcimClassRef);
|
1946 mark.hamzy 1.25
1947 JMPIjvm::checkException(env);
1948
1949 jobject jVec = env->CallObjectMethod((jobject)pr.jProvider,
1950 id,
|
1951 mark.hamzy 1.43 joc,
|
1952 mark.hamzy 1.29 jcop,
1953 jcimClass);
|
1954 mark.hamzy 1.25
|
1955 mark.hamzy 1.23 JMPIjvm::checkException(env);
1956
1957 STAT_PMS_PROVIDEREND;
1958
|
1959 mark.hamzy 1.43 if (joc)
1960 {
1961 env->CallVoidMethod (joc, JMPIjvm::jv.OperationContextUnassociate);
1962
1963 JMPIjvm::checkException(env);
1964 }
1965
|
1966 mark.hamzy 1.23 handler.processing();
|
1967 mark.hamzy 1.25 if (jVec) {
1968 for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); i<m; i++) {
|
1969 mark.hamzy 1.23 JMPIjvm::checkException(env);
1970
|
1971 mark.hamzy 1.29 jobject jcopRet = env->CallObjectMethod(jVec,JMPIjvm::jv.VectorElementAt,i);
1972
|
1973 mark.hamzy 1.23 JMPIjvm::checkException(env);
1974
|
1975 mark.hamzy 1.29 jint jcopRetRef = env->CallIntMethod(jcopRet,JMPIjvm::jv.CIMObjectPathCInst);
1976 CIMObjectPath *copRet = DEBUG_ConvertJavaToC (jint, CIMObjectPath*, jcopRetRef);
|
1977 schuur 1.13
|
1978 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
1979 schuur 1.13
|
1980 mark.hamzy 1.29 handler.deliver(*copRet);
|
1981 mark.hamzy 1.23 }
1982 }
1983 handler.complete();
|
1984 mark.hamzy 1.25 break;
1985 }
1986
|
1987 mark.hamzy 1.43 case METHOD_INSTANCEPROVIDER:
|
1988 mark.hamzy 1.25 {
|
1989 mark.hamzy 1.43 jint jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
1990 jobject jcop = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
|
1991 mark.hamzy 1.23
|
1992 mark.hamzy 1.43 JMPIjvm::checkException(env);
|
1993 schuur 1.1
|
1994 mark.hamzy 1.43 CIMClass cls;
|
1995 schuur 1.1
|
1996 mark.hamzy 1.43 try
1997 {
1998 DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
1999 AutoMutex lock (pr._cimomMutex);
2000
2001 cls = pr._cimom_handle->getClass(context,
2002 request->nameSpace,
2003 request->className,
2004 false,
2005 true,
2006 true,
2007 CIMPropertyList());
2008 DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
2009 }
2010 catch (CIMException e)
2011 {
2012 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstanceNamesRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
2013 throw;
2014 }
2015
2016 CIMClass *pcls = new CIMClass (cls);
2017 mark.hamzy 1.43
2018 JMPIjvm::checkException(env);
2019
2020 jint jcimClassRef = DEBUG_ConvertCToJava (CIMClass*, jint, pcls);
2021 jobject jcimClass = env->NewObject(jv->CIMClassClassRef,jv->CIMClassNewI,jcimClassRef);
2022
2023 JMPIjvm::checkException(env);
2024
2025 jobject jVec = env->CallObjectMethod((jobject)pr.jProvider,
2026 id,
2027 jcop,
2028 true,
2029 jcimClass);
2030
2031 JMPIjvm::checkException(env);
2032
2033 STAT_PMS_PROVIDEREND;
2034
2035 handler.processing();
2036 if (jVec) {
2037 for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); i<m; i++) {
2038 mark.hamzy 1.43 JMPIjvm::checkException(env);
2039
2040 jobject jcopRet = env->CallObjectMethod(jVec,JMPIjvm::jv.VectorElementAt,i);
2041
2042 JMPIjvm::checkException(env);
2043
2044 jint jcopRetRef = env->CallIntMethod(jcopRet,JMPIjvm::jv.CIMObjectPathCInst);
2045 CIMObjectPath *copRet = DEBUG_ConvertJavaToC (jint, CIMObjectPath*, jcopRetRef);
2046
2047 JMPIjvm::checkException(env);
2048
2049 handler.deliver(*copRet);
2050 }
2051 }
2052 handler.complete();
2053 break;
2054 }
2055
2056 case METHOD_UNKNOWN:
2057 {
2058 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstanceNamesRequest: should not be here!"<<PEGASUS_STD(endl));
2059 mark.hamzy 1.43 break;
2060 }
2061 }
2062 }
2063 HandlerCatch(handler);
2064
2065 if (env) JMPIjvm::detachThread();
2066
2067 PEG_METHOD_EXIT();
2068
2069 STAT_COPYDISPATCHER
|
2070 w.white 1.31
|
2071 schuur 1.1 return(response);
2072 }
2073
2074 Message * JMPIProviderManager::handleCreateInstanceRequest(const Message * message) throw()
2075 {
|
2076 mark.hamzy 1.23 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleCreateInstanceRequest");
2077
2078 HandlerIntro(CreateInstance,message,request,response,handler,CIMObjectPath());
|
2079 schuur 1.1
|
2080 mark.hamzy 1.25 typedef enum {
2081 METHOD_UNKNOWN = 0,
|
2082 mark.hamzy 1.43 METHOD_INSTANCEPROVIDER, // same as METHOD_CIMINSTANCEPROVIDER
2083 METHOD_INSTANCEPROVIDER2 // same as METHOD_CIMINSTANCEPROVIDER2
|
2084 mark.hamzy 1.25 } METHOD_VERSION;
2085 METHOD_VERSION eMethodFound = METHOD_UNKNOWN;
2086 JNIEnv *env = NULL;
2087
|
2088 schuur 1.1 try {
2089 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
2090 "JMPIProviderManager::handleCreateInstanceRequest - Host name: $0 Name space: $1 Class name: $2",
2091 System::getHostName(),
2092 request->nameSpace.getString(),
2093 request->newInstance.getPath().getClassName().getString());
2094
|
2095 mark.hamzy 1.23 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleCreateInstanceRequest: hostname = "<<System::getHostName()<<", namespace = "<<request->nameSpace.getString()<<", classname = "<<request->newInstance.getPath().getClassName().getString()<<PEGASUS_STD(endl));
2096
|
2097 schuur 1.1 // make target object path
|
2098 mark.hamzy 1.27 CIMObjectPath *objectPath = new CIMObjectPath (System::getHostName(),
2099 request->nameSpace,
2100 request->newInstance.getPath().getClassName(),
2101 request->newInstance.getPath().getKeyBindings());
|
2102 schuur 1.1
2103 // resolve provider name
|
2104 kumpf 1.2 ProviderName name = _resolveProviderName(
2105 request->operationContext.get(ProviderIdContainer::NAME));
|
2106 schuur 1.1
2107 // get cached or load new provider module
|
2108 mark.hamzy 1.43 JMPIProvider::OpProviderHolder ph = providerManager.getProvider (name.getPhysicalName(),
2109 name.getLogicalName(),
2110 String::EMPTY);
|
2111 schuur 1.1
2112 // forward request
|
2113 mark.hamzy 1.25 JMPIProvider &pr = ph.GetProvider();
|
2114 schuur 1.1
|
2115 mark.hamzy 1.25 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, "Calling provider.createInstance: " + ph.GetProvider().getName());
|
2116 schuur 1.1
|
2117 mark.hamzy 1.23 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleCreateInstanceRequest: Calling provider createInstance: "<<pr.getName()<<PEGASUS_STD(endl));
|
2118 schuur 1.12
|
2119 mark.hamzy 1.25 JvmVector *jv = 0;
2120
2121 env = JMPIjvm::attachThread(&jv);
2122
|
2123 mark.hamzy 1.37 if (!env)
2124 {
2125 PEG_METHOD_EXIT();
2126
2127 STAT_COPYDISPATCHER
2128
2129 throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
2130 MessageLoaderParms("ProviderManager.JMPI.INIT_JVM_FAILED",
2131 "Could not initialize the JVM (Java Virtual Machine) runtime environment."));
2132 }
2133
|
2134 mark.hamzy 1.25 JMPIProvider::pm_service_op_lock op_lock(&pr);
2135
2136 STAT_GETSTARTTIME;
2137
|
2138 mark.hamzy 1.43 jmethodID id = NULL;
2139 String interfaceType;
2140 String interfaceVersion;
2141
2142 getInterfaceType (request->operationContext.get (ProviderIdContainer::NAME),
2143 interfaceType,
2144 interfaceVersion);
2145
2146 if (interfaceType == "JMPI")
2147 {
2148 // public org.pegasus.jmpi.CIMObjectPath createInstance (org.pegasus.jmpi.CIMObjectPath cop,
2149 // org.pegasus.jmpi.CIMInstance cimInstance)
2150 // throws org.pegasus.jmpi.CIMException
2151 id = env->GetMethodID((jclass)pr.jProviderClass,
2152 "createInstance",
2153 "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMInstance;)Lorg/pegasus/jmpi/CIMObjectPath;");
2154
2155 if (id != NULL)
2156 {
2157 eMethodFound = METHOD_INSTANCEPROVIDER;
2158 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleCreateInstanceRequest: found METHOD_INSTANCEPROVIDER."<<PEGASUS_STD(endl));
2159 mark.hamzy 1.43 }
2160 }
2161 else if (interfaceType == "JMPIExperimental")
2162 {
2163 // public org.pegasus.jmpi.CIMObjectPath createInstance (org.pegasus.jmpi.OperationContext oc
2164 // org.pegasus.jmpi.CIMObjectPath cop,
2165 // org.pegasus.jmpi.CIMInstance cimInstance)
2166 // throws org.pegasus.jmpi.CIMException
2167 id = env->GetMethodID((jclass)pr.jProviderClass,
2168 "createInstance",
2169 "(Lorg/pegasus/jmpi/OperationContext;Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMInstance;)Lorg/pegasus/jmpi/CIMObjectPath;");
|
2170 mark.hamzy 1.25
|
2171 mark.hamzy 1.43 if (id != NULL)
2172 {
2173 eMethodFound = METHOD_INSTANCEPROVIDER2;
2174 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleCreateInstanceRequest: found METHOD_INSTANCEPROVIDER2."<<PEGASUS_STD(endl));
2175 }
2176 }
|
2177 schuur 1.1
|
2178 mark.hamzy 1.43 if (id == NULL)
|
2179 mark.hamzy 1.25 {
|
2180 mark.hamzy 1.43 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleCreateInstanceRequest: No method found!"<<PEGASUS_STD(endl));
2181
2182 PEG_METHOD_EXIT();
2183
2184 STAT_COPYDISPATCHER
2185
2186 throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
2187 MessageLoaderParms ("ProviderManager.JMPI.METHOD_NOT_FOUND",
2188 "Could not find a method for the provider based on InterfaceType."));
|
2189 mark.hamzy 1.25 }
|
2190 mark.hamzy 1.23
2191 JMPIjvm::checkException(env);
2192
|
2193 mark.hamzy 1.25 switch (eMethodFound)
2194 {
|
2195 mark.hamzy 1.43 case METHOD_INSTANCEPROVIDER:
2196 {
2197 jint jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
2198 jobject jcop = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
2199
2200 JMPIjvm::checkException(env);
2201
2202 CIMInstance *ci = new CIMInstance (request->newInstance);
2203 jint jciRef = DEBUG_ConvertCToJava (CIMInstance*, jint, ci);
2204 jobject jci = env->NewObject(jv->CIMInstanceClassRef,jv->CIMInstanceNewI,jciRef);
2205
2206 JMPIjvm::checkException(env);
2207
2208 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleCreateInstanceRequest: id = "<<id<<", jcop = "<<jcop<<", jci = "<<jci<<PEGASUS_STD(endl));
2209
2210 jobject jcopRet = env->CallObjectMethod((jobject)pr.jProvider,
2211 id,
2212 jcop,
2213 jci);
2214
2215 JMPIjvm::checkException(env);
2216 mark.hamzy 1.43
2217 STAT_PMS_PROVIDEREND;
2218
2219 handler.processing();
2220
2221 if (jcopRet) {
2222 jint jCopRetRef = env->CallIntMethod(jcopRet,JMPIjvm::jv.CIMObjectPathCInst);
2223 CIMObjectPath *copRet = DEBUG_ConvertJavaToC (jint, CIMObjectPath*, jCopRetRef);
2224
2225 handler.deliver(*copRet);
2226 }
2227 handler.complete();
2228 break;
2229 }
2230
2231 case METHOD_INSTANCEPROVIDER2:
|
2232 mark.hamzy 1.25 {
|
2233 mark.hamzy 1.43 jint jocRef = DEBUG_ConvertCToJava (OperationContext*, jint, &request->operationContext);
2234 jobject joc = env->NewObject(jv->OperationContextClassRef,jv->OperationContextNewI,jocRef);
2235
|
2236 mark.hamzy 1.29 jint jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
2237 jobject jcop = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
|
2238 mark.hamzy 1.25
2239 JMPIjvm::checkException(env);
2240
|
2241 mark.hamzy 1.29 CIMInstance *ci = new CIMInstance (request->newInstance);
2242 jint jciRef = DEBUG_ConvertCToJava (CIMInstance*, jint, ci);
2243 jobject jci = env->NewObject(jv->CIMInstanceClassRef,jv->CIMInstanceNewI,jciRef);
|
2244 mark.hamzy 1.25
2245 JMPIjvm::checkException(env);
|
2246 schuur 1.1
|
2247 mark.hamzy 1.29 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleCreateInstanceRequest: id = "<<id<<", jcop = "<<jcop<<", jci = "<<jci<<PEGASUS_STD(endl));
|
2248 schuur 1.1
|
2249 mark.hamzy 1.29 jobject jcopRet = env->CallObjectMethod((jobject)pr.jProvider,
2250 id,
|
2251 mark.hamzy 1.43 joc,
|
2252 mark.hamzy 1.29 jcop,
2253 jci);
|
2254 schuur 1.1
|
2255 mark.hamzy 1.25 JMPIjvm::checkException(env);
|
2256 schuur 1.1
|
2257 mark.hamzy 1.25 STAT_PMS_PROVIDEREND;
|
2258 mark.hamzy 1.23
|
2259 mark.hamzy 1.43 if (joc)
2260 {
2261 env->CallVoidMethod (joc, JMPIjvm::jv.OperationContextUnassociate);
2262
2263 JMPIjvm::checkException(env);
2264 }
2265
|
2266 mark.hamzy 1.25 handler.processing();
|
2267 mark.hamzy 1.23
|
2268 mark.hamzy 1.29 if (jcopRet) {
2269 jint jCopRetRef = env->CallIntMethod(jcopRet,JMPIjvm::jv.CIMObjectPathCInst);
2270 CIMObjectPath *copRet = DEBUG_ConvertJavaToC (jint, CIMObjectPath*, jCopRetRef);
|
2271 mark.hamzy 1.23
|
2272 mark.hamzy 1.29 handler.deliver(*copRet);
|
2273 mark.hamzy 1.25 }
2274 handler.complete();
2275 break;
2276 }
|
2277 mark.hamzy 1.23
|
2278 mark.hamzy 1.25 case METHOD_UNKNOWN:
2279 {
2280 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleCreateInstanceRequest: should not be here!"<<PEGASUS_STD(endl));
2281 break;
2282 }
|
2283 schuur 1.1 }
2284 }
2285 HandlerCatch(handler);
|
2286 mark.hamzy 1.23
|
2287 schuur 1.1 if (env) JMPIjvm::detachThread();
|
2288 mark.hamzy 1.23
|
2289 schuur 1.1 PEG_METHOD_EXIT();
2290
|
2291 w.white 1.31 STAT_COPYDISPATCHER
2292
|
2293 schuur 1.1 return(response);
2294 }
2295
2296 Message * JMPIProviderManager::handleModifyInstanceRequest(const Message * message) throw()
2297 {
|
2298 mark.hamzy 1.23 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleModifyInstanceRequest");
|
2299 schuur 1.1
2300 HandlerIntroVoid(ModifyInstance,message,request,response,handler);
|
2301 mark.hamzy 1.23
|
2302 mark.hamzy 1.25 typedef enum {
2303 METHOD_UNKNOWN = 0,
|
2304 mark.hamzy 1.43 METHOD_CIMINSTANCEPROVIDER,
2305 METHOD_INSTANCEPROVIDER,
2306 METHOD_INSTANCEPROVIDER2, // same as METHOD_CIMINSTANCEPROVIDER2
|
2307 mark.hamzy 1.25 } METHOD_VERSION;
2308 METHOD_VERSION eMethodFound = METHOD_UNKNOWN;
2309 JNIEnv *env = NULL;
|
2310 schuur 1.13
|
2311 schuur 1.1 try {
2312 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
|
2313 konrad.r 1.15 "JMPIProviderManager::handleModifyInstanceRequest - Host name: $0 Name space: $1 Class name: $2",
|
2314 schuur 1.1 System::getHostName(),
2315 request->nameSpace.getString(),
2316 request->modifiedInstance.getPath().getClassName().getString());
2317
|
2318 mark.hamzy 1.23 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleModifyInstanceRequest: hostname = "<<System::getHostName()<<", namespace = "<<request->nameSpace.getString()<<", classname = "<<request->modifiedInstance.getPath().getClassName().getString()<<PEGASUS_STD(endl));
2319
|
2320 schuur 1.1 // make target object path
|
2321 mark.hamzy 1.27 CIMObjectPath *objectPath = new CIMObjectPath (System::getHostName(),
2322 request->nameSpace,
2323 request->modifiedInstance.getPath ().getClassName(),
2324 request->modifiedInstance.getPath ().getKeyBindings());
|
2325 schuur 1.1
2326 // resolve provider name
|
2327 kumpf 1.2 ProviderName name = _resolveProviderName(
2328 request->operationContext.get(ProviderIdContainer::NAME));
|
2329 schuur 1.1
|
2330 mark.hamzy 1.23 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleModifyInstanceRequest: provider name physical = "<<name.getPhysicalName()<<", logical = "<<name.getLogicalName()<<PEGASUS_STD(endl));
2331
|
2332 schuur 1.1 // get cached or load new provider module
|
2333 mark.hamzy 1.43 JMPIProvider::OpProviderHolder ph = providerManager.getProvider (name.getPhysicalName(),
2334 name.getLogicalName(),
2335 String::EMPTY);
|
2336 schuur 1.1
2337 // forward request
|
2338 mark.hamzy 1.25 JMPIProvider &pr = ph.GetProvider();
|
2339 mark.hamzy 1.23
2340 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,"Calling provider.modifyInstance: " + pr.getName());
2341
|
2342 mark.hamzy 1.25 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleModifyInstanceRequest: Calling provider "<<PEGASUS_STD(hex)<<(int)&pr<<PEGASUS_STD(dec)<<", name = "<<pr.getName ()<<", module = "<<pr.getModule()<<" modifyInstance: "<<pr.getName()<<PEGASUS_STD(endl));
2343
2344 JvmVector *jv = 0;
2345
2346 env = JMPIjvm::attachThread(&jv);
2347
|
2348 mark.hamzy 1.37 if (!env)
2349 {
2350 PEG_METHOD_EXIT();
2351
2352 STAT_COPYDISPATCHER
2353
2354 throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
2355 MessageLoaderParms("ProviderManager.JMPI.INIT_JVM_FAILED",
2356 "Could not initialize the JVM (Java Virtual Machine) runtime environment."));
2357 }
2358
|
2359 mark.hamzy 1.25 JMPIProvider::pm_service_op_lock op_lock(&pr);
|
2360 mark.hamzy 1.23
|
2361 mark.hamzy 1.25 STAT_GETSTARTTIME;
2362
|
2363 mark.hamzy 1.43 jmethodID id = NULL;
2364 String interfaceType;
2365 String interfaceVersion;
2366
2367 getInterfaceType (request->operationContext.get (ProviderIdContainer::NAME),
2368 interfaceType,
2369 interfaceVersion);
2370
2371 if (interfaceType == "JMPI")
2372 {
2373 // public abstract void setInstance (org.pegasus.jmpi.CIMObjectPath cop,
2374 // org.pegasus.jmpi.CIMInstance cimInstance)
2375 // org.pegasus.jmpi.throws CIMException
2376 id = env->GetMethodID((jclass)pr.jProviderClass,
2377 "setInstance",
2378 "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMInstance;)V");
2379
2380 if (id != NULL)
2381 {
2382 eMethodFound = METHOD_INSTANCEPROVIDER;
2383 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleModifyInstanceRequest: found METHOD_INSTANCEPROVIDER."<<PEGASUS_STD(endl));
2384 mark.hamzy 1.43 }
|
2385 mark.hamzy 1.25
|
2386 mark.hamzy 1.43 if (id == NULL)
2387 {
2388 env->ExceptionClear();
|
2389 mark.hamzy 1.25
|
2390 mark.hamzy 1.43 // public void setInstance (org.pegasus.jmpi.CIMObjectPath op,
2391 // org.pegasus.jmpi.CIMInstance ci,
2392 // boolean includeQualifiers,
2393 // java.lang.String[] propertyList)
2394 // throws org.pegasus.jmpi.CIMException
2395 id = env->GetMethodID((jclass)pr.jProviderClass,
2396 "setInstance",
2397 "(Lorg/pegasus/jmpi/CIMObjectPath;Z[Ljava/lang/String)V");
2398
2399 if (id != NULL)
2400 {
2401 eMethodFound = METHOD_CIMINSTANCEPROVIDER;
2402 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleModifyInstanceRequest: found METHOD_CIMINSTANCEPROVIDER."<<PEGASUS_STD(endl));
2403 }
2404 }
2405 }
2406 else if (interfaceType == "JMPIExperimental")
|
2407 mark.hamzy 1.25 {
|
2408 mark.hamzy 1.43 // public abstract void setInstance (org.pegasus.jmpi.OperationContext oc,
2409 // org.pegasus.jmpi.CIMObjectPath op,
2410 // org.pegasus.jmpi.CIMInstance cimInstance);
2411 // throws org.pegasus.jmpi.CIMException
2412 id = env->GetMethodID((jclass)pr.jProviderClass,
2413 "setInstance",
2414 "(Lorg/pegasus/jmpi/OperationContext;Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMInstance;)V");
2415
2416 if (id != NULL)
2417 {
2418 eMethodFound = METHOD_INSTANCEPROVIDER2;
2419 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleModifyInstanceRequest: found METHOD_INSTANCEPROVIDER2."<<PEGASUS_STD(endl));
2420 }
|
2421 mark.hamzy 1.25 }
2422
2423 if (id == NULL)
2424 {
|
2425 mark.hamzy 1.43 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleModifyInstanceRequest: No method found!"<<PEGASUS_STD(endl));
|
2426 mark.hamzy 1.25
|
2427 mark.hamzy 1.43 PEG_METHOD_EXIT();
|
2428 schuur 1.1
|
2429 mark.hamzy 1.43 STAT_COPYDISPATCHER
2430
2431 throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
2432 MessageLoaderParms ("ProviderManager.JMPI.METHOD_NOT_FOUND",
2433 "Could not find a method for the provider based on InterfaceType."));
|
2434 mark.hamzy 1.25 }
|
2435 schuur 1.1
|
2436 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
2437 schuur 1.1
|
2438 mark.hamzy 1.25 switch (eMethodFound)
2439 {
|
2440 mark.hamzy 1.43 case METHOD_INSTANCEPROVIDER2:
2441 {
2442 jint jocRef = DEBUG_ConvertCToJava (OperationContext*, jint, &request->operationContext);
2443 jobject joc = env->NewObject(jv->OperationContextClassRef,jv->OperationContextNewI,jocRef);
2444
2445 jint jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
2446 jobject jcop = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
2447
2448 JMPIjvm::checkException(env);
2449
2450 CIMInstance *ci = new CIMInstance (request->modifiedInstance);
2451 jint jciRef = DEBUG_ConvertCToJava (CIMInstance*, jint, ci);
2452 jobject jci = env->NewObject(jv->CIMInstanceClassRef,jv->CIMInstanceNewI,jciRef);
2453
2454 JMPIjvm::checkException(env);
2455
2456 jobjectArray jPropertyList = getList(jv,env,request->propertyList);
2457
2458 env->CallVoidMethod((jobject)pr.jProvider,
2459 id,
2460 joc,
2461 mark.hamzy 1.43 jcop,
2462 jci);
2463
2464 JMPIjvm::checkException(env);
2465
2466 STAT_PMS_PROVIDEREND;
2467
2468 if (joc)
2469 {
2470 env->CallVoidMethod (joc, JMPIjvm::jv.OperationContextUnassociate);
2471
2472 JMPIjvm::checkException(env);
2473 }
2474 break;
2475 }
2476
2477 case METHOD_CIMINSTANCEPROVIDER:
|
2478 mark.hamzy 1.25 {
|
2479 mark.hamzy 1.29 jint jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
2480 jobject jcop = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
|
2481 mark.hamzy 1.25
2482 JMPIjvm::checkException(env);
2483
|
2484 mark.hamzy 1.29 CIMInstance *ci = new CIMInstance (request->modifiedInstance);
2485 jint jciRef = DEBUG_ConvertCToJava (CIMInstance*, jint, ci);
2486 jobject jci = env->NewObject(jv->CIMInstanceClassRef,jv->CIMInstanceNewI,jciRef);
|
2487 mark.hamzy 1.25
2488 JMPIjvm::checkException(env);
|
2489 schuur 1.1
|
2490 mark.hamzy 1.25 jobjectArray jPropertyList = getList(jv,env,request->propertyList);
|
2491 schuur 1.1
|
2492 mark.hamzy 1.25 env->CallVoidMethod((jobject)pr.jProvider,
2493 id,
|
2494 mark.hamzy 1.29 jcop,
2495 jci,
|
2496 mark.hamzy 1.36 JMPI_INCLUDE_QUALIFIERS,
|
2497 mark.hamzy 1.25 jPropertyList);
|
2498 schuur 1.1
|
2499 mark.hamzy 1.25 JMPIjvm::checkException(env);
|
2500 schuur 1.13
|
2501 mark.hamzy 1.25 STAT_PMS_PROVIDEREND;
2502 break;
|
2503 schuur 1.13 }
|
2504 schuur 1.1
|
2505 mark.hamzy 1.43 case METHOD_INSTANCEPROVIDER:
|
2506 mark.hamzy 1.25 {
|
2507 mark.hamzy 1.29 jint jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
2508 jobject jcop = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
|
2509 mark.hamzy 1.25
2510 JMPIjvm::checkException(env);
2511
|
2512 mark.hamzy 1.29 CIMInstance *ci = new CIMInstance (request->modifiedInstance);
2513 jint jciRef = DEBUG_ConvertCToJava (CIMInstance*, jint, ci);
2514 jobject jci = env->NewObject(jv->CIMInstanceClassRef,jv->CIMInstanceNewI,jciRef);
|
2515 mark.hamzy 1.25
2516 JMPIjvm::checkException(env);
2517
2518 env->CallVoidMethod((jobject)pr.jProvider,
2519 id,
|
2520 mark.hamzy 1.29 jcop,
2521 jci);
|
2522 mark.hamzy 1.25
2523 JMPIjvm::checkException(env);
|
2524 schuur 1.13
|
2525 mark.hamzy 1.25 STAT_PMS_PROVIDEREND;
2526 break;
2527 }
|
2528 mark.hamzy 1.23
|
2529 mark.hamzy 1.25 case METHOD_UNKNOWN:
2530 {
2531 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleModifyInstanceRequest: should not be here!"<<PEGASUS_STD(endl));
2532 break;
2533 }
2534 }
|
2535 schuur 1.1 }
2536 HandlerCatch(handler);
|
2537 mark.hamzy 1.23
|
2538 schuur 1.1 if (env) JMPIjvm::detachThread();
|
2539 mark.hamzy 1.23
|
2540 schuur 1.1 PEG_METHOD_EXIT();
2541
|
2542 w.white 1.31 STAT_COPYDISPATCHER
2543
|
2544 schuur 1.1 return(response);
2545 }
2546
2547 Message * JMPIProviderManager::handleDeleteInstanceRequest(const Message * message) throw()
2548 {
|
2549 mark.hamzy 1.23 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleDeleteInstanceRequest");
2550
2551 HandlerIntroVoid(DeleteInstance,message,request,response,handler);
|
2552 schuur 1.1
|
2553 mark.hamzy 1.25 typedef enum {
2554 METHOD_UNKNOWN = 0,
|
2555 mark.hamzy 1.43 METHOD_INSTANCEPROVIDER, // same as METHOD_CIMINSTANCEPROVIDER
2556 METHOD_INSTANCEPROVIDER2, // same as METHOD_CIMINSTANCEPROVIDER2
|
2557 mark.hamzy 1.25 } METHOD_VERSION;
2558 METHOD_VERSION eMethodFound = METHOD_UNKNOWN;
2559 JNIEnv *env = NULL;
2560
|
2561 schuur 1.1 try {
2562 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
|
2563 konrad.r 1.15 "JMPIProviderManager::handleDeleteInstanceRequest - Host name: $0 Name space: $1 Class name: $2",
|
2564 schuur 1.1 System::getHostName(),
2565 request->nameSpace.getString(),
2566 request->instanceName.getClassName().getString());
2567
|
2568 mark.hamzy 1.23 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleDeleteInstanceRequest: hostname = "<<System::getHostName()<<", namespace = "<<request->nameSpace.getString()<<", classname = "<<request->instanceName.getClassName().getString()<<PEGASUS_STD(endl));
2569
|
2570 schuur 1.1 // make target object path
|
2571 mark.hamzy 1.27 CIMObjectPath *objectPath = new CIMObjectPath (System::getHostName(),
2572 request->nameSpace,
2573 request->instanceName.getClassName(),
2574 request->instanceName.getKeyBindings());
|
2575 schuur 1.1
2576 // resolve provider name
|
2577 kumpf 1.2 ProviderName name = _resolveProviderName(
2578 request->operationContext.get(ProviderIdContainer::NAME));
|
2579 schuur 1.1
2580 // get cached or load new provider module
|
2581 mark.hamzy 1.43 JMPIProvider::OpProviderHolder ph = providerManager.getProvider (name.getPhysicalName(),
2582 name.getLogicalName(),
2583 String::EMPTY);
|
2584 schuur 1.1
2585 // forward request
|
2586 mark.hamzy 1.25 JMPIProvider &pr = ph.GetProvider();
|
2587 schuur 1.1
|
2588 mark.hamzy 1.25 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, "Calling provider.deleteInstance: " + pr.getName());
|
2589 schuur 1.1
|
2590 mark.hamzy 1.23 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleDeleteInstanceRequest: Calling provider deleteInstance: "<<pr.getName()<<PEGASUS_STD(endl));
|
2591 schuur 1.1
|
2592 mark.hamzy 1.25 JvmVector *jv = 0;
2593
2594 env = JMPIjvm::attachThread(&jv);
2595
|
2596 mark.hamzy 1.37 if (!env)
2597 {
2598 PEG_METHOD_EXIT();
2599
2600 STAT_COPYDISPATCHER
2601
2602 throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
2603 MessageLoaderParms("ProviderManager.JMPI.INIT_JVM_FAILED",
2604 "Could not initialize the JVM (Java Virtual Machine) runtime environment."));
2605 }
2606
|
2607 mark.hamzy 1.25 JMPIProvider::pm_service_op_lock op_lock(&pr);
2608
2609 STAT_GETSTARTTIME;
2610
|
2611 mark.hamzy 1.43 jmethodID id = NULL;
2612 String interfaceType;
2613 String interfaceVersion;
2614
2615 getInterfaceType (request->operationContext.get (ProviderIdContainer::NAME),
2616 interfaceType,
2617 interfaceVersion);
2618
2619 if (interfaceType == "JMPI")
2620 {
2621 // public abstract void deleteInstance (org.pegasus.jmpi.CIMObjectPath cop)
2622 // throws org.pegasus.jmpi.CIMException
2623 id = env->GetMethodID((jclass)pr.jProviderClass,
2624 "deleteInstance",
2625 "(Lorg/pegasus/jmpi/CIMObjectPath;)V");
2626
2627 if (id != NULL)
2628 {
2629 eMethodFound = METHOD_INSTANCEPROVIDER;
2630 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleDeleteInstanceRequest: found METHOD_INSTANCEPROVIDER."<<PEGASUS_STD(endl));
2631 }
2632 mark.hamzy 1.43 }
2633 else if (interfaceType == "JMPIExperimental")
2634 {
2635 // public abstract void deleteInstance (org.pegasus.jmpi.OperationContext oc,
2636 // org.pegasus.jmpi.CIMObjectPath cop)
2637 // throws org.pegasus.jmpi.CIMException
2638 id = env->GetMethodID((jclass)pr.jProviderClass,
2639 "deleteInstance",
2640 "(Lorg/pegasus/jmpi/OperationContext;Lorg/pegasus/jmpi/CIMObjectPath;)V");
|
2641 mark.hamzy 1.25
|
2642 mark.hamzy 1.43 if (id != NULL)
2643 {
2644 eMethodFound = METHOD_INSTANCEPROVIDER2;
2645 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleDeleteInstanceRequest: found METHOD_INSTANCEPROVIDER2."<<PEGASUS_STD(endl));
2646 }
2647 }
|
2648 schuur 1.1
|
2649 mark.hamzy 1.43 if (id == NULL)
|
2650 mark.hamzy 1.25 {
|
2651 mark.hamzy 1.43 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleDeleteInstanceRequest: No method found!"<<PEGASUS_STD(endl));
2652
2653 PEG_METHOD_EXIT();
2654
2655 STAT_COPYDISPATCHER
2656
2657 throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
2658 MessageLoaderParms ("ProviderManager.JMPI.METHOD_NOT_FOUND",
2659 "Could not find a method for the provider based on InterfaceType."));
|
2660 mark.hamzy 1.25 }
|
2661 mark.hamzy 1.23
2662 JMPIjvm::checkException(env);
|
2663 schuur 1.1
|
2664 mark.hamzy 1.25 switch (eMethodFound)
2665 {
|
2666 mark.hamzy 1.43 case METHOD_INSTANCEPROVIDER2:
2667 {
2668 jint jocRef = DEBUG_ConvertCToJava (OperationContext*, jint, &request->operationContext);
2669 jobject joc = env->NewObject(jv->OperationContextClassRef,jv->OperationContextNewI,jocRef);
2670
2671 jint jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
2672 jobject jcop = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
2673
2674 JMPIjvm::checkException(env);
2675
2676 env->CallVoidMethod((jobject)pr.jProvider,
2677 id,
2678 joc,
2679 jcop);
2680
2681 JMPIjvm::checkException(env);
2682
2683 STAT_PMS_PROVIDEREND;
2684
2685 if (joc)
2686 {
2687 mark.hamzy 1.43 env->CallVoidMethod (joc, JMPIjvm::jv.OperationContextUnassociate);
2688
2689 JMPIjvm::checkException(env);
2690 }
2691 break;
2692 }
2693
2694 case METHOD_INSTANCEPROVIDER:
|
2695 mark.hamzy 1.25 {
|
2696 mark.hamzy 1.29 jint jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
2697 jobject jcop = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
|
2698 mark.hamzy 1.25
2699 JMPIjvm::checkException(env);
2700
|
2701 mark.hamzy 1.36 env->CallVoidMethod((jobject)pr.jProvider,
2702 id,
2703 jcop);
|
2704 mark.hamzy 1.25
2705 JMPIjvm::checkException(env);
2706
2707 STAT_PMS_PROVIDEREND;
2708 break;
2709 }
2710
2711 case METHOD_UNKNOWN:
2712 {
2713 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleDeleteInstanceRequest: should not be here!"<<PEGASUS_STD(endl));
2714 break;
2715 }
2716 }
2717 }
2718 HandlerCatch(handler);
2719
2720 if (env) JMPIjvm::detachThread();
2721
2722 PEG_METHOD_EXIT();
2723
|
2724 w.white 1.31 STAT_COPYDISPATCHER
2725
|
2726 mark.hamzy 1.25 return(response);
2727 }
2728
2729 Message * JMPIProviderManager::handleExecQueryRequest(const Message * message) throw()
2730 {
2731 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleExecQueryRequest");
2732
2733 HandlerIntro(ExecQuery,message,request,response,handler,Array<CIMObject>());
2734
2735 typedef enum {
2736 METHOD_UNKNOWN = 0,
|
2737 mark.hamzy 1.43 METHOD_CIMINSTANCEPROVIDER,
2738 METHOD_CIMINSTANCEPROVIDER2,
2739 METHOD_INSTANCEPROVIDER,
2740 METHOD_INSTANCEPROVIDER2,
|
2741 mark.hamzy 1.25 } METHOD_VERSION;
2742 METHOD_VERSION eMethodFound = METHOD_UNKNOWN;
2743 JNIEnv *env = NULL;
2744
2745 try {
2746 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
2747 "JMPIProviderManager::handleExecQueryRequest - Host name: $0 Name space: $1 Class name: $2",
2748 System::getHostName(),
2749 request->nameSpace.getString(),
2750 request->className.getString());
2751
2752 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleExecQueryRequest: hostname = "<<System::getHostName()<<", namespace = "<<request->nameSpace.getString()<<", classname = "<<request->className.getString()<<PEGASUS_STD(endl));
2753
2754 // make target object path
|
2755 mark.hamzy 1.27 CIMObjectPath *objectPath = new CIMObjectPath (System::getHostName(),
2756 request->nameSpace,
2757 request->className);
|
2758 mark.hamzy 1.25
2759 // resolve provider name
2760 ProviderName name = _resolveProviderName(
2761 request->operationContext.get(ProviderIdContainer::NAME));
2762
2763 // get cached or load new provider module
|
2764 mark.hamzy 1.43 JMPIProvider::OpProviderHolder ph = providerManager.getProvider (name.getPhysicalName(),
2765 name.getLogicalName(),
2766 String::EMPTY);
|
2767 mark.hamzy 1.25
2768 // convert arguments
2769 OperationContext context;
2770
2771 context.insert(request->operationContext.get(IdentityContainer::NAME));
2772 context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME));
2773 context.insert(request->operationContext.get(ContentLanguageListContainer::NAME));
2774
2775 // forward request
2776 JMPIProvider &pr = ph.GetProvider();
2777
2778 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,"Calling provider.execQuery: " + pr.getName());
2779
2780 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleExecQueryRequest: Calling provider execQuery: "<<pr.getName()<<", queryLanguage: "<<request->queryLanguage<<", query: "<<request->query<<PEGASUS_STD(endl));
2781
2782 JvmVector *jv = 0;
2783
2784 env = JMPIjvm::attachThread(&jv);
2785
|
2786 mark.hamzy 1.37 if (!env)
2787 {
2788 PEG_METHOD_EXIT();
2789
2790 STAT_COPYDISPATCHER
2791
2792 throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
2793 MessageLoaderParms("ProviderManager.JMPI.INIT_JVM_FAILED",
2794 "Could not initialize the JVM (Java Virtual Machine) runtime environment."));
2795 }
2796
|
2797 mark.hamzy 1.23 JMPIProvider::pm_service_op_lock op_lock(&pr);
|
2798 schuur 1.1
|
2799 mark.hamzy 1.23 STAT_GETSTARTTIME;
|
2800 schuur 1.1
|
2801 mark.hamzy 1.43 jmethodID id = NULL;
2802 String interfaceType;
2803 String interfaceVersion;
2804
2805 getInterfaceType (request->operationContext.get (ProviderIdContainer::NAME),
2806 interfaceType,
2807 interfaceVersion);
2808
2809 if (interfaceType == "JMPI")
2810 {
2811 // public abstract java.util.Vector execQuery (org.pegasus.jmpi.CIMObjectPath cop,
2812 // java.lang.String queryStatement,
2813 // int ql,
2814 // org.pegasus.jmpi.CIMClass cimClass)
2815 // throws org.pegasus.jmpi.CIMException
2816 //
2817 id = env->GetMethodID((jclass)pr.jProviderClass,
2818 "execQuery",
2819 "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;ILorg/pegasus/jmpi/CIMClass;)Ljava/util/Vector;");
2820
2821 if (id != NULL)
2822 mark.hamzy 1.43 {
2823 eMethodFound = METHOD_INSTANCEPROVIDER;
2824 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleExecQueryRequest: found METHOD_INSTANCEPROVIDER."<<PEGASUS_STD(endl));
2825 }
|
2826 mark.hamzy 1.25
|
2827 mark.hamzy 1.43 if (id == NULL)
2828 {
2829 env->ExceptionClear();
|
2830 mark.hamzy 1.25
|
2831 mark.hamzy 1.43 // public abstract org.pegasus.jmpi.CIMInstance[] execQuery(org.pegasus.jmpi.CIMObjectPath cop,
2832 // java.lang.String query,
2833 // java.lang.String ql,
2834 // org.pegasus.jmpi.CIMClass cimClass)
2835 // throws org.pegasus.jmpi.CIMException
2836 id = env->GetMethodID((jclass)pr.jProviderClass,
2837 "execQuery",
2838 "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Lorg/pegasus/jmpi/CIMClass;)[Lorg/pegasus/jmpi/CIMInstance;");
2839
2840 if (id != NULL)
2841 {
2842 eMethodFound = METHOD_CIMINSTANCEPROVIDER;
2843 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleExecQueryRequest: found METHOD_CIMINSTANCEPROVIDER."<<PEGASUS_STD(endl));
2844 }
2845 }
2846 }
2847 else if (interfaceType == "JMPIExperimental")
|
2848 mark.hamzy 1.25 {
|
2849 mark.hamzy 1.43 // public abstract java.util.Vector execQuery (org.pegasus.jmpi.OperationContext oc,
2850 // org.pegasus.jmpi.CIMObjectPath cop,
2851 // org.pegasus.jmpi.CIMClass cimClass,
2852 // java.lang.String queryStatement,
2853 // java.lang.String queryLanguage)
2854 // throws org.pegasus.jmpi.CIMException
2855 id = env->GetMethodID((jclass)pr.jProviderClass,
2856 "execQuery",
2857 "(Lorg/pegasus/jmpi/OperationContext;Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;Ljava/lang/String;Ljava/lang/String;)Ljava/util/Vector;");
|
2858 mark.hamzy 1.25
|
2859 mark.hamzy 1.43 if (id != NULL)
2860 {
2861 eMethodFound = METHOD_INSTANCEPROVIDER2;
2862 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleExecQueryRequest: found METHOD_INSTANCEPROVIDER2."<<PEGASUS_STD(endl));
2863 }
|
2864 mark.hamzy 1.25
|
2865 mark.hamzy 1.43 if (id == NULL)
2866 {
2867 env->ExceptionClear();
|
2868 mark.hamzy 1.25
|
2869 mark.hamzy 1.43 // public abstract org.pegasus.jmpi.CIMInstance[] execQuery (org.pegasus.jmpi.OperationContext oc,
2870 // org.pegasus.jmpi.CIMObjectPath cop,
2871 // org.pegasus.jmpi.CIMClass cimClass,
2872 // java.lang.String queryStatement,
2873 // java.lang.String queryLanguage)
2874 // throws org.pegasus.jmpi.CIMException
2875 id = env->GetMethodID((jclass)pr.jProviderClass,
2876 "execQuery",
2877 "(Lorg/pegasus/jmpi/OperationContext;Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;Ljava/lang/String;Ljava/lang/String;)[Lorg/pegasus/jmpi/CIMInstance;");
2878
2879 if (id != NULL)
2880 {
2881 eMethodFound = METHOD_CIMINSTANCEPROVIDER2;
2882 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleExecQueryRequest: found METHOD_CIMINSTANCEPROVIDER2."<<PEGASUS_STD(endl));
2883 }
2884 }
|
2885 mark.hamzy 1.25 }
2886
2887 if (id == NULL)
2888 {
|
2889 mark.hamzy 1.43 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleExecQueryRequest: found no method!"<<PEGASUS_STD(endl));
|
2890 mark.hamzy 1.36
|
2891 mark.hamzy 1.43 PEG_METHOD_EXIT();
|
2892 mark.hamzy 1.36
|
2893 mark.hamzy 1.43 STAT_COPYDISPATCHER
|
2894 mark.hamzy 1.36
|
2895 mark.hamzy 1.43 throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
2896 MessageLoaderParms ("ProviderManager.JMPI.METHOD_NOT_FOUND",
2897 "Could not find a method for the provider based on InterfaceType."));
|
2898 mark.hamzy 1.25 }
2899
|
2900 schuur 1.1 JMPIjvm::checkException(env);
2901
|
2902 mark.hamzy 1.25 switch (eMethodFound)
2903 {
|
2904 mark.hamzy 1.43 case METHOD_CIMINSTANCEPROVIDER:
|
2905 mark.hamzy 1.25 {
|
2906 mark.hamzy 1.27 jint jcopref = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
|
2907 mark.hamzy 1.25 jobject jcop = env->NewObject(jv->CIMObjectPathClassRef, jv->CIMObjectPathNewI, jcopref);
2908
2909 JMPIjvm::checkException(env);
2910
2911 jstring jqueryLanguage = env->NewStringUTF(request->queryLanguage.getCString());
2912 jstring jquery = env->NewStringUTF(request->query.getCString());
2913
|
2914 mark.hamzy 1.40 CIMClass cls;
2915
2916 try
2917 {
2918 DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
2919 AutoMutex lock (pr._cimomMutex);
2920
2921 cls = pr._cimom_handle->getClass(context,
2922 request->nameSpace,
2923 request->className,
2924 false,
2925 true,
2926 true,
2927 CIMPropertyList());
2928 DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
2929 }
2930 catch (CIMException e)
2931 {
2932 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleExecQueryRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
2933 throw;
2934 }
2935 mark.hamzy 1.40
|
2936 mark.hamzy 1.27 CIMClass *pcls = new CIMClass (cls);
2937
|
2938 mark.hamzy 1.25 JMPIjvm::checkException(env);
2939
|
2940 mark.hamzy 1.27 jint jcls = DEBUG_ConvertCToJava (CIMClass*, jint, pcls);
|
2941 mark.hamzy 1.25
2942 jobject jCc=env->NewObject(jv->CIMClassClassRef,jv->CIMClassNewI,jcls);
2943
2944 JMPIjvm::checkException(env);
2945
2946 jobjectArray jAr = (jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
2947 id,
2948 jcop,
2949 jquery,
2950 jqueryLanguage,
2951 jCc);
|
2952 mark.hamzy 1.23
|
2953 mark.hamzy 1.25 JMPIjvm::checkException(env);
2954
2955 STAT_PMS_PROVIDEREND;
2956
2957 handler.processing();
2958 if (jAr) {
2959 for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
2960 JMPIjvm::checkException(env);
2961
|
2962 mark.hamzy 1.29 jobject jciRet = env->GetObjectArrayElement(jAr,i);
2963
|
2964 mark.hamzy 1.25 JMPIjvm::checkException(env);
|
2965 mark.hamzy 1.23
|
2966 mark.hamzy 1.29 jint jciRetRef = env->CallIntMethod(jciRet,JMPIjvm::jv.CIMInstanceCInst);
2967 CIMInstance *ciRet = DEBUG_ConvertJavaToC (jint, CIMInstance*, jciRetRef);
|
2968 mark.hamzy 1.25
2969 JMPIjvm::checkException(env);
2970
|
2971 mark.hamzy 1.29 handler.deliver(*ciRet);
|
2972 mark.hamzy 1.25 }
2973 }
2974 handler.complete();
2975 break;
2976 }
2977
|
2978 mark.hamzy 1.43 case METHOD_CIMINSTANCEPROVIDER2:
|
2979 mark.hamzy 1.36 {
|
2980 mark.hamzy 1.43 jint jocRef = DEBUG_ConvertCToJava (OperationContext*, jint, &request->operationContext);
2981 jobject joc = env->NewObject(jv->OperationContextClassRef,jv->OperationContextNewI,jocRef);
2982
|
2983 mark.hamzy 1.36 jint jcopref = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
2984 jobject jcop = env->NewObject(jv->CIMObjectPathClassRef, jv->CIMObjectPathNewI, jcopref);
2985
2986 JMPIjvm::checkException(env);
2987
2988 jstring jqueryLanguage = env->NewStringUTF(request->queryLanguage.getCString());
2989 jstring jquery = env->NewStringUTF(request->query.getCString());
2990
|
2991 mark.hamzy 1.40 CIMClass cls;
2992
2993 try
2994 {
2995 DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
2996 AutoMutex lock (pr._cimomMutex);
2997
2998 cls = pr._cimom_handle->getClass(context,
2999 request->nameSpace,
3000 request->className,
3001 false,
3002 true,
3003 true,
3004 CIMPropertyList());
3005 DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
3006 }
3007 catch (CIMException e)
3008 {
3009 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleExecQueryRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
3010 throw;
3011 }
3012 mark.hamzy 1.40
|
3013 mark.hamzy 1.36 CIMClass *pcls = new CIMClass (cls);
3014
3015 JMPIjvm::checkException(env);
3016
3017 jint jcls = DEBUG_ConvertCToJava (CIMClass*, jint, pcls);
3018
3019 jobject jCc=env->NewObject(jv->CIMClassClassRef,jv->CIMClassNewI,jcls);
3020
3021 JMPIjvm::checkException(env);
3022
|
3023 mark.hamzy 1.43 jobjectArray jAr = (jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
|
3024 mark.hamzy 1.36 id,
|
3025 mark.hamzy 1.43 joc,
|
3026 mark.hamzy 1.36 jcop,
3027 jquery,
|
3028 mark.hamzy 1.43 jqueryLanguage,
3029 jCc);
|
3030 mark.hamzy 1.36
3031 JMPIjvm::checkException(env);
3032
3033 STAT_PMS_PROVIDEREND;
3034
|
3035 mark.hamzy 1.43 if (joc)
3036 {
3037 env->CallVoidMethod (joc, JMPIjvm::jv.OperationContextUnassociate);
3038
3039 JMPIjvm::checkException(env);
3040 }
3041
3042 handler.processing();
3043 if (jAr) {
3044 for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
3045 JMPIjvm::checkException(env);
3046
3047 jobject jciRet = env->GetObjectArrayElement(jAr,i);
3048
3049 JMPIjvm::checkException(env);
3050
3051 jint jciRetRef = env->CallIntMethod(jciRet,JMPIjvm::jv.CIMInstanceCInst);
3052 CIMInstance *ciRet = DEBUG_ConvertJavaToC (jint, CIMInstance*, jciRetRef);
3053
3054 JMPIjvm::checkException(env);
3055
3056 mark.hamzy 1.43 handler.deliver(*ciRet);
3057 }
3058 }
3059 handler.complete();
3060 break;
3061 }
3062
3063 case METHOD_INSTANCEPROVIDER2:
3064 {
3065 jint jocRef = DEBUG_ConvertCToJava (OperationContext*, jint, &request->operationContext);
3066 jobject joc = env->NewObject(jv->OperationContextClassRef,jv->OperationContextNewI,jocRef);
3067
3068 jint jcopref = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
3069 jobject jcop = env->NewObject(jv->CIMObjectPathClassRef, jv->CIMObjectPathNewI, jcopref);
3070
3071 JMPIjvm::checkException(env);
3072
3073 jstring jqueryLanguage = env->NewStringUTF(request->queryLanguage.getCString());
3074 jstring jquery = env->NewStringUTF(request->query.getCString());
3075
3076 CIMClass cls;
3077 mark.hamzy 1.43
3078 try
3079 {
3080 DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
3081 AutoMutex lock (pr._cimomMutex);
3082
3083 cls = pr._cimom_handle->getClass(context,
3084 request->nameSpace,
3085 request->className,
3086 false,
3087 true,
3088 true,
3089 CIMPropertyList());
3090 DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
3091 }
3092 catch (CIMException e)
3093 {
3094 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleExecQueryRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
3095 throw;
3096 }
3097
3098 mark.hamzy 1.43 CIMClass *pcls = new CIMClass (cls);
3099
3100 JMPIjvm::checkException(env);
3101
3102 jint jcls = DEBUG_ConvertCToJava (CIMClass*, jint, pcls);
3103
3104 jobject jCc=env->NewObject(jv->CIMClassClassRef,jv->CIMClassNewI,jcls);
3105
3106 JMPIjvm::checkException(env);
3107
3108 jobjectArray jVec = (jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
3109 id,
3110 joc,
3111 jcop,
3112 jCc,
3113 jquery,
3114 jqueryLanguage);
3115
3116 JMPIjvm::checkException(env);
3117
3118 STAT_PMS_PROVIDEREND;
3119 mark.hamzy 1.43
3120 if (joc)
3121 {
3122 env->CallVoidMethod (joc, JMPIjvm::jv.OperationContextUnassociate);
3123
3124 JMPIjvm::checkException(env);
3125 }
3126
|
3127 mark.hamzy 1.36 handler.processing();
3128 if (jVec) {
3129 for (int i=0,m=env->GetArrayLength(jVec); i<m; i++) {
3130 JMPIjvm::checkException(env);
3131
3132 jobject jciRet = env->GetObjectArrayElement(jVec,i);
3133
3134 JMPIjvm::checkException(env);
3135
3136 jint jciRetRef = env->CallIntMethod(jciRet,JMPIjvm::jv.CIMInstanceCInst);
3137 CIMInstance *ciRet = DEBUG_ConvertJavaToC (jint, CIMInstance*, jciRetRef);
3138
3139 JMPIjvm::checkException(env);
3140
3141 handler.deliver(*ciRet);
3142 }
3143 }
3144 handler.complete();
3145 break;
3146 }
3147
|
3148 mark.hamzy 1.43 case METHOD_INSTANCEPROVIDER:
|
3149 mark.hamzy 1.25 {
|
3150 mark.hamzy 1.27 jint jcopref = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
|
3151 mark.hamzy 1.25 jobject jcop = env->NewObject(jv->CIMObjectPathClassRef, jv->CIMObjectPathNewI, jcopref);
3152
3153 JMPIjvm::checkException(env);
3154
3155 jstring jqueryLanguage = env->NewStringUTF(request->queryLanguage.getCString());
3156 jstring jquery = env->NewStringUTF(request->query.getCString());
3157
|
3158 mark.hamzy 1.40 CIMClass cls;
3159
3160 try
3161 {
3162 DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
3163 AutoMutex lock (pr._cimomMutex);
3164
3165 cls = pr._cimom_handle->getClass(context,
3166 request->nameSpace,
3167 request->className,
3168 false,
3169 true,
3170 true,
3171 CIMPropertyList());
3172 DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
3173 }
3174 catch (CIMException e)
3175 {
3176 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleExecQueryRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
3177 throw;
3178 }
3179 mark.hamzy 1.40
|
3180 mark.hamzy 1.27 CIMClass *pcls = new CIMClass (cls);
3181
|
3182 mark.hamzy 1.25 JMPIjvm::checkException(env);
3183
|
3184 mark.hamzy 1.27 jint jcls = DEBUG_ConvertCToJava (CIMClass*, jint, pcls);
|
3185 mark.hamzy 1.25
3186 jobject jCc=env->NewObject(jv->CIMClassClassRef,jv->CIMClassNewI,jcls);
3187
3188 JMPIjvm::checkException(env);
3189
3190 jint jql = 0; // @BUG - how to convert?
3191
3192 jobjectArray jVec = (jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
3193 id,
3194 jcop,
3195 jquery,
3196 jql,
3197 jCc);
3198
3199 JMPIjvm::checkException(env);
3200
3201 STAT_PMS_PROVIDEREND;
3202
3203 handler.processing();
3204 if (jVec) {
3205 for (int i=0,m=env->GetArrayLength(jVec); i<m; i++) {
3206 mark.hamzy 1.25 JMPIjvm::checkException(env);
3207
|
3208 mark.hamzy 1.29 jobject jciRet = env->GetObjectArrayElement(jVec,i);
3209
|
3210 mark.hamzy 1.25 JMPIjvm::checkException(env);
3211
|
3212 mark.hamzy 1.29 jint jciRetRef = env->CallIntMethod(jciRet,JMPIjvm::jv.CIMInstanceCInst);
3213 CIMInstance *ciRet = DEBUG_ConvertJavaToC (jint, CIMInstance*, jciRetRef);
|
3214 mark.hamzy 1.25
3215 JMPIjvm::checkException(env);
3216
|
3217 mark.hamzy 1.29 handler.deliver(*ciRet);
|
3218 mark.hamzy 1.25 }
3219 }
3220 handler.complete();
3221 break;
3222 }
3223
3224 case METHOD_UNKNOWN:
3225 {
3226 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleExecQueryRequest: should not be here!"<<PEGASUS_STD(endl));
3227 break;
3228 }
3229 }
|
3230 schuur 1.1 }
3231 HandlerCatch(handler);
|
3232 mark.hamzy 1.23
|
3233 schuur 1.1 if (env) JMPIjvm::detachThread();
|
3234 mark.hamzy 1.23
|
3235 schuur 1.1 PEG_METHOD_EXIT();
3236
|
3237 w.white 1.31 STAT_COPYDISPATCHER
3238
|
3239 schuur 1.1 return(response);
3240 }
3241
3242 Message * JMPIProviderManager::handleAssociatorsRequest(const Message * message) throw()
3243 {
|
3244 mark.hamzy 1.23 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleAssociatorsRequest");
3245
3246 HandlerIntro(Associators,message,request,response,handler,Array<CIMObject>());
|
3247 schuur 1.1
|
3248 mark.hamzy 1.24 typedef enum {
3249 METHOD_UNKNOWN = 0,
|
3250 mark.hamzy 1.43 METHOD_CIMASSOCIATORPROVIDER,
3251 METHOD_CIMASSOCIATORPROVIDER2,
3252 METHOD_ASSOCIATORPROVIDER,
3253 METHOD_ASSOCIATORPROVIDER2,
|
3254 mark.hamzy 1.24 } METHOD_VERSION;
3255 METHOD_VERSION eMethodFound = METHOD_UNKNOWN;
3256 JNIEnv *env = NULL;
|
3257 schuur 1.13
|
3258 schuur 1.1 try {
3259 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
3260 "JMPIProviderManager::handleAssociatorsRequest - Host name: $0 Name space: $1 Class name: $2",
3261 System::getHostName(),
3262 request->nameSpace.getString(),
3263 request->objectName.getClassName().getString());
3264
|
3265 mark.hamzy 1.25 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorsRequest: hostname = "<<System::getHostName()<<", namespace = "<<request->nameSpace.getString()<<", classname = "<<request->objectName.getClassName().getString()<<PEGASUS_STD(endl));
|
3266 mark.hamzy 1.23
|
3267 schuur 1.1 // make target object path
|
3268 mark.hamzy 1.27 CIMObjectPath *objectPath = new CIMObjectPath (System::getHostName(),
3269 request->nameSpace,
3270 request->objectName.getClassName(),
3271 request->objectName.getKeyBindings());
3272 CIMObjectPath *assocPath = new CIMObjectPath (System::getHostName(),
3273 request->nameSpace,
3274 request->assocClass.getString());
|
3275 schuur 1.1
3276 // resolve provider name
|
3277 kumpf 1.2 ProviderName name = _resolveProviderName(
3278 request->operationContext.get(ProviderIdContainer::NAME));
|
3279 schuur 1.1
3280 // get cached or load new provider module
|
3281 mark.hamzy 1.43 JMPIProvider::OpProviderHolder ph = providerManager.getProvider (name.getPhysicalName(),
3282 name.getLogicalName(),
3283 String::EMPTY);
|
3284 schuur 1.1
|
3285 mark.hamzy 1.24 // convert arguments
|
3286 schuur 1.1 OperationContext context;
3287
|
3288 mark.hamzy 1.23 context.insert(request->operationContext.get(IdentityContainer::NAME));
3289 context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME));
3290 context.insert(request->operationContext.get(ContentLanguageListContainer::NAME));
|
3291 schuur 1.1
3292 // forward request
|
3293 mark.hamzy 1.24 JMPIProvider &pr = ph.GetProvider();
3294
3295 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,"Calling provider.associators: " + pr.getName());
|
3296 schuur 1.1
|
3297 mark.hamzy 1.24 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorsRequest: Calling provider associators: "<<pr.getName()<<", role: "<<request->role<<", aCls: "<<request->assocClass<<PEGASUS_STD(endl));
|
3298 schuur 1.1
|
3299 mark.hamzy 1.24 JvmVector *jv = 0;
|
3300 schuur 1.1
|
3301 mark.hamzy 1.24 env = JMPIjvm::attachThread(&jv);
|
3302 schuur 1.1
|
3303 mark.hamzy 1.37 if (!env)
3304 {
3305 PEG_METHOD_EXIT();
3306
3307 STAT_COPYDISPATCHER
3308
3309 throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
3310 MessageLoaderParms("ProviderManager.JMPI.INIT_JVM_FAILED",
3311 "Could not initialize the JVM (Java Virtual Machine) runtime environment."));
3312 }
3313
|
3314 schuur 1.1 JMPIProvider::pm_service_op_lock op_lock(&pr);
3315
3316 STAT_GETSTARTTIME;
3317
|
3318 mark.hamzy 1.43 jmethodID id = NULL;
3319 String interfaceType;
3320 String interfaceVersion;
3321
3322 getInterfaceType (request->operationContext.get (ProviderIdContainer::NAME),
3323 interfaceType,
3324 interfaceVersion);
3325
3326 if (interfaceType == "JMPI")
3327 {
3328 // public java.util.Vector associators (org.pegasus.jmpi.CIMObjectPath assocName,
3329 // org.pegasus.jmpi.CIMObjectPath pathName,
3330 // java.lang.String resultClass,
3331 // java.lang.String role,
3332 // java.lang.String resultRole,
3333 // boolean includeQualifiers,
3334 // boolean includeClassOrigin,
3335 // java.lang.String[] propertyList)
3336 // throws org.pegasus.jmpi.CIMException
3337 //
3338 id = env->GetMethodID((jclass)pr.jProviderClass,
3339 mark.hamzy 1.43 "associators",
3340 "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZ[Ljava/lang/String;)Ljava/util/Vector;");
|
3341 mark.hamzy 1.24
|
3342 mark.hamzy 1.43 if (id != NULL)
3343 {
3344 eMethodFound = METHOD_ASSOCIATORPROVIDER;
3345 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorsRequest: found METHOD_ASSOCIATORPROVIDER."<<PEGASUS_STD(endl));
3346 }
3347
3348 if (id == NULL)
3349 {
3350 env->ExceptionClear();
|
3351 mark.hamzy 1.24
|
3352 mark.hamzy 1.43 // public org.pegasus.jmpi.CIMInstance[] associators (org.pegasus.jmpi.CIMObjectPath assocName,
3353 // org.pegasus.jmpi.CIMObjectPath pathName,
3354 // java.lang.String resultClass,
3355 // java.lang.String role,
3356 // java.lang.String resultRole,
3357 // boolean includeQualifiers,
3358 // boolean includeClassOrigin,
3359 // java.lang.String[] propertyList)
3360 // throws org.pegasus.jmpi.CIMException
3361 //
3362 id = env->GetMethodID((jclass)pr.jProviderClass,
3363 "associators",
3364 "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZ[Ljava/lang/String;)[Lorg/pegasus/jmpi/CIMInstance;");
3365
3366 if (id != NULL)
3367 {
3368 eMethodFound = METHOD_CIMASSOCIATORPROVIDER;
3369 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorsRequest: found METHOD_CIMASSOCIATORPROVIDER."<<PEGASUS_STD(endl));
3370 }
3371 }
3372 }
3373 mark.hamzy 1.43 else if (interfaceType == "JMPIExperimental")
|
3374 mark.hamzy 1.24 {
|
3375 mark.hamzy 1.43 // public java.util.Vector associators (org.pegasus.jmpi.OperationContext oc,
3376 // org.pegasus.jmpi.CIMObjectPath assocName,
3377 // org.pegasus.jmpi.CIMObjectPath pathName,
3378 // java.lang.String resultClass,
3379 // java.lang.String role,
3380 // java.lang.String resultRole,
3381 // boolean includeQualifiers,
3382 // boolean includeClassOrigin,
3383 // java.lang.String[] propertyList)
3384 // throws org.pegasus.jmpi.CIMException
3385 //
3386 id = env->GetMethodID((jclass)pr.jProviderClass,
3387 "associators",
3388 "(Lorg/pegasus/jmpi/OperationContext;Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZ[Ljava/lang/String;)Ljava/util/Vector;");
|
3389 schuur 1.12
|
3390 mark.hamzy 1.43 if (id != NULL)
3391 {
3392 eMethodFound = METHOD_ASSOCIATORPROVIDER2;
3393 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorsRequest: found METHOD_ASSOCIATORPROVIDER2."<<PEGASUS_STD(endl));
3394 }
|
3395 mark.hamzy 1.24
|
3396 mark.hamzy 1.43 if (id == NULL)
3397 {
3398 env->ExceptionClear();
|
3399 mark.hamzy 1.24
|
3400 mark.hamzy 1.43 // public org.pegasus.jmpi.CIMInstance[] associators (org.pegasus.jmpi.OperationContext oc,
3401 // org.pegasus.jmpi.CIMObjectPath assocName,
3402 // org.pegasus.jmpi.CIMObjectPath pathName,
3403 // java.lang.String resultClass,
3404 // java.lang.String role,
3405 // java.lang.String resultRole,
3406 // boolean includeQualifiers,
3407 // boolean includeClassOrigin,
3408 // java.lang.String[] propertyList)
3409 // throws org.pegasus.jmpi.CIMException
3410 //
3411 id = env->GetMethodID((jclass)pr.jProviderClass,
3412 "associators",
3413 "(Lorg/pegasus/jmpi/OperationContext;Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZ[Ljava/lang/String;)[Lorg/pegasus/jmpi/CIMInstance;");
3414
3415 if (id != NULL)
3416 {
3417 eMethodFound = METHOD_CIMASSOCIATORPROVIDER2;
3418 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorsRequest: found METHOD_CIMASSOCIATORPROVIDER2."<<PEGASUS_STD(endl));
3419 }
3420 }
|
3421 mark.hamzy 1.24 }
3422
3423 if (id == NULL)
3424 {
3425 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorsRequest: found no method!"<<PEGASUS_STD(endl));
|
3426 mark.hamzy 1.43
3427 PEG_METHOD_EXIT();
3428
3429 STAT_COPYDISPATCHER
3430
3431 throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
3432 MessageLoaderParms ("ProviderManager.JMPI.METHOD_NOT_FOUND",
3433 "Could not find a method for the provider based on InterfaceType."));
|
3434 mark.hamzy 1.23 }
|
3435 mark.hamzy 1.24
|
3436 schuur 1.1 JMPIjvm::checkException(env);
3437
|
3438 mark.hamzy 1.24 switch (eMethodFound)
3439 {
|
3440 mark.hamzy 1.43 case METHOD_CIMASSOCIATORPROVIDER:
|
3441 mark.hamzy 1.24 {
|
3442 mark.hamzy 1.29 jint jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, assocPath);
|
3443 mark.hamzy 1.25 jobject jAssociationName = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
3444
3445 JMPIjvm::checkException(env);
3446
|
3447 mark.hamzy 1.43 jint jPathNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
3448 jobject jPathName = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jPathNameRef);
3449
3450 JMPIjvm::checkException(env);
3451
|
3452 mark.hamzy 1.25 jstring jResultClass = env->NewStringUTF(request->resultClass.getString().getCString());
3453 jstring jRole = env->NewStringUTF(request->role.getCString());
3454 jstring jResultRole = env->NewStringUTF(request->resultRole.getCString());
3455
3456 JMPIjvm::checkException(env);
3457
3458 jobjectArray jPropertyList = getList(jv,env,request->propertyList);
3459
|
3460 mark.hamzy 1.29 #ifdef PEGASUS_DEBUG
3461 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: assocName = "<<assocPath->toString ()<<PEGASUS_STD(endl));
3462 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: resultClass = "<<request->resultClass<<PEGASUS_STD(endl));
3463 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: role = "<<request->role<<PEGASUS_STD(endl));
3464 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: resultRole = "<<request->resultRole<<PEGASUS_STD(endl));
3465 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: includeQualifiers = "<<false<<PEGASUS_STD(endl));
3466 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: includeClassOrigin = "<<false<<PEGASUS_STD(endl));
3467 #endif
3468
|
3469 mark.hamzy 1.24 jobjectArray jVec=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
3470 id,
3471 jAssociationName,
|
3472 mark.hamzy 1.43 jPathName,
|
3473 mark.hamzy 1.24 jResultClass,
3474 jRole,
3475 jResultRole,
|
3476 mark.hamzy 1.36 JMPI_INCLUDE_QUALIFIERS,
3477 request->includeClassOrigin,
|
3478 mark.hamzy 1.24 jPropertyList);
|
3479 mark.hamzy 1.25
|
3480 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
3481 schuur 1.13
|
3482 mark.hamzy 1.23 STAT_PMS_PROVIDEREND;
|
3483 schuur 1.1
|
3484 mark.hamzy 1.23 handler.processing();
3485 if (jVec) {
|
3486 mark.hamzy 1.24 for (int i=0,m=env->GetArrayLength(jVec); i<m; i++) {
|
3487 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
3488 schuur 1.1
|
3489 mark.hamzy 1.29 jobject jciRet = env->GetObjectArrayElement(jVec,i);
|
3490 mark.hamzy 1.24
|
3491 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
3492 schuur 1.13
|
3493 mark.hamzy 1.29 jint jciRetRef = env->CallIntMethod(jciRet,JMPIjvm::jv.CIMInstanceCInst);
|
3494 schuur 1.13
|
3495 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
3496 schuur 1.13
|
3497 mark.hamzy 1.29 CIMInstance *ciRet = DEBUG_ConvertJavaToC (jint, CIMInstance*, jciRetRef);
|
3498 mark.hamzy 1.40 CIMClass cls;
3499
3500 try
3501 {
3502 DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
3503 AutoMutex lock (pr._cimomMutex);
3504
3505 cls = pr._cimom_handle->getClass(context,
3506 request->nameSpace,
3507 ciRet->getClassName(),
3508 false,
3509 true,
3510 true,
3511 CIMPropertyList());
3512 DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
3513 }
3514 catch (CIMException e)
3515 {
3516 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorsRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
3517 throw;
3518 }
3519 mark.hamzy 1.40
|
3520 mark.hamzy 1.29 const CIMObjectPath& op = ciRet->getPath();
3521 CIMObjectPath iop = ciRet->buildPath(cls);
|
3522 mark.hamzy 1.24
|
3523 mark.hamzy 1.27 JMPIjvm::checkException(env);
3524
|
3525 mark.hamzy 1.23 iop.setNameSpace(op.getNameSpace());
|
3526 mark.hamzy 1.29 ciRet->setPath(iop);
|
3527 schuur 1.13
|
3528 mark.hamzy 1.29 handler.deliver(*ciRet);
|
3529 mark.hamzy 1.23 }
3530 }
|
3531 mark.hamzy 1.24 handler.complete();
3532 break;
|
3533 mark.hamzy 1.23 }
|
3534 mark.hamzy 1.24
|
3535 mark.hamzy 1.43 case METHOD_CIMASSOCIATORPROVIDER2:
|
3536 mark.hamzy 1.24 {
|
3537 mark.hamzy 1.43 jint jocRef = DEBUG_ConvertCToJava (OperationContext*, jint, &request->operationContext);
3538 jobject joc = env->NewObject(jv->OperationContextClassRef,jv->OperationContextNewI,jocRef);
3539
|
3540 mark.hamzy 1.29 jint jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, assocPath);
|
3541 mark.hamzy 1.25 jobject jAssociationName = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
3542
3543 JMPIjvm::checkException(env);
3544
|
3545 mark.hamzy 1.29 jint jPathNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
|
3546 mark.hamzy 1.24 jobject jPathName = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jPathNameRef);
3547
3548 JMPIjvm::checkException(env);
3549
|
3550 mark.hamzy 1.25 jstring jResultClass = env->NewStringUTF(request->resultClass.getString().getCString());
3551 jstring jRole = env->NewStringUTF(request->role.getCString());
3552 jstring jResultRole = env->NewStringUTF(request->resultRole.getCString());
3553
3554 JMPIjvm::checkException(env);
3555
3556 jobjectArray jPropertyList = getList(jv,env,request->propertyList);
3557
|
3558 mark.hamzy 1.29 #ifdef PEGASUS_DEBUG
3559 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: assocName = "<<assocPath->toString ()<<PEGASUS_STD(endl));
3560 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: resultClass = "<<request->resultClass<<PEGASUS_STD(endl));
3561 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: role = "<<request->role<<PEGASUS_STD(endl));
3562 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: resultRole = "<<request->resultRole<<PEGASUS_STD(endl));
3563 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: includeQualifiers = "<<false<<PEGASUS_STD(endl));
3564 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: includeClassOrigin = "<<false<<PEGASUS_STD(endl));
3565 #endif
3566
|
3567 mark.hamzy 1.24 jobjectArray jVec=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
|
3568 mark.hamzy 1.43 id,
3569 joc,
3570 jAssociationName,
3571 jPathName,
3572 jResultClass,
3573 jRole,
3574 jResultRole,
3575 JMPI_INCLUDE_QUALIFIERS,
3576 request->includeClassOrigin,
3577 jPropertyList);
|
3578 mark.hamzy 1.25
|
3579 mark.hamzy 1.23 JMPIjvm::checkException(env);
3580
3581 STAT_PMS_PROVIDEREND;
3582
|
3583 mark.hamzy 1.43 if (joc)
3584 {
3585 env->CallVoidMethod (joc, JMPIjvm::jv.OperationContextUnassociate);
3586
3587 JMPIjvm::checkException(env);
3588 }
3589
|
3590 mark.hamzy 1.23 handler.processing();
|
3591 mark.hamzy 1.24 if (jVec) {
|
3592 mark.hamzy 1.43 for (int i=0,m=env->GetArrayLength(jVec); i<m; i++) {
3593 JMPIjvm::checkException(env);
3594
3595 jobject jciRet = env->GetObjectArrayElement(jVec,i);
3596
|
3597 mark.hamzy 1.23 JMPIjvm::checkException(env);
3598
|
3599 mark.hamzy 1.43 jint jciRetRef = env->CallIntMethod(jciRet,JMPIjvm::jv.CIMInstanceCInst);
|
3600 mark.hamzy 1.24
|
3601 mark.hamzy 1.23 JMPIjvm::checkException(env);
3602
|
3603 mark.hamzy 1.43 CIMInstance *ciRet = DEBUG_ConvertJavaToC (jint, CIMInstance*, jciRetRef);
|
3604 mark.hamzy 1.40 CIMClass cls;
3605
3606 try
3607 {
3608 DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
3609 AutoMutex lock (pr._cimomMutex);
3610
3611 cls = pr._cimom_handle->getClass(context,
3612 request->nameSpace,
3613 ciRet->getClassName(),
3614 false,
3615 true,
3616 true,
3617 CIMPropertyList());
3618 DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
3619 }
3620 catch (CIMException e)
3621 {
3622 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorsRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
3623 throw;
3624 }
3625 mark.hamzy 1.40
|
3626 mark.hamzy 1.43 const CIMObjectPath& op = ciRet->getPath();
3627 CIMObjectPath iop = ciRet->buildPath(cls);
|
3628 mark.hamzy 1.24
|
3629 mark.hamzy 1.27 JMPIjvm::checkException(env);
3630
|
3631 mark.hamzy 1.23 iop.setNameSpace(op.getNameSpace());
|
3632 mark.hamzy 1.29 ciRet->setPath(iop);
|
3633 schuur 1.13
|
3634 mark.hamzy 1.29 handler.deliver(*ciRet);
|
3635 mark.hamzy 1.23 }
3636 }
|
3637 mark.hamzy 1.24 handler.complete();
3638 break;
3639 }
3640
|
3641 mark.hamzy 1.43 case METHOD_ASSOCIATORPROVIDER2:
|
3642 mark.hamzy 1.24 {
|
3643 mark.hamzy 1.43 jint jocRef = DEBUG_ConvertCToJava (OperationContext*, jint, &request->operationContext);
3644 jobject joc = env->NewObject(jv->OperationContextClassRef,jv->OperationContextNewI,jocRef);
|
3645 schuur 1.13
|
3646 mark.hamzy 1.43 jint jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, assocPath);
3647 jobject jAssociationName = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
|
3648 schuur 1.13
|
3649 mark.hamzy 1.43 JMPIjvm::checkException(env);
|
3650 schuur 1.1
|
3651 mark.hamzy 1.43 jint jPathNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
3652 jobject jPathName = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jPathNameRef);
|
3653 w.white 1.31
|
3654 mark.hamzy 1.43 JMPIjvm::checkException(env);
|
3655 schuur 1.13
|
3656 mark.hamzy 1.43 jstring jResultClass = env->NewStringUTF(request->resultClass.getString().getCString());
3657 jstring jRole = env->NewStringUTF(request->role.getCString());
3658 jstring jResultRole = env->NewStringUTF(request->resultRole.getCString());
|
3659 mark.hamzy 1.23
|
3660 mark.hamzy 1.43 JMPIjvm::checkException(env);
|
3661 schuur 1.1
|
3662 mark.hamzy 1.43 jobjectArray jPropertyList = getList(jv,env,request->propertyList);
|
3663 schuur 1.13
|
3664 mark.hamzy 1.43 #ifdef PEGASUS_DEBUG
3665 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: assocName = "<<assocPath->toString ()<<PEGASUS_STD(endl));
3666 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: resultClass = "<<request->resultClass<<PEGASUS_STD(endl));
3667 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: role = "<<request->role<<PEGASUS_STD(endl));
3668 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: resultRole = "<<request->resultRole<<PEGASUS_STD(endl));
3669 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: includeQualifiers = "<<false<<PEGASUS_STD(endl));
3670 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: includeClassOrigin = "<<false<<PEGASUS_STD(endl));
3671 #endif
|
3672 schuur 1.1
|
3673 mark.hamzy 1.43 jobjectArray jVec=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
3674 id,
3675 joc,
3676 jAssociationName,
3677 jPathName,
3678 jResultClass,
3679 jRole,
3680 jResultRole,
3681 JMPI_INCLUDE_QUALIFIERS,
3682 request->includeClassOrigin,
3683 jPropertyList);
|
3684 mark.hamzy 1.23
|
3685 mark.hamzy 1.43 JMPIjvm::checkException(env);
|
3686 mark.hamzy 1.23
|
3687 mark.hamzy 1.43 STAT_PMS_PROVIDEREND;
|
3688 schuur 1.1
|
3689 mark.hamzy 1.43 if (joc)
3690 {
3691 env->CallVoidMethod (joc, JMPIjvm::jv.OperationContextUnassociate);
|
3692 schuur 1.1
|
3693 mark.hamzy 1.43 JMPIjvm::checkException(env);
3694 }
|
3695 schuur 1.1
|
3696 mark.hamzy 1.43 handler.processing();
3697 if (jVec) {
3698 for (int i=0,m=env->GetArrayLength(jVec); i<m; i++) {
3699 JMPIjvm::checkException(env);
|
3700 schuur 1.1
|
3701 mark.hamzy 1.43 jobject jciRet = env->GetObjectArrayElement(jVec,i);
|
3702 schuur 1.1
|
3703 mark.hamzy 1.43 JMPIjvm::checkException(env);
|
3704 schuur 1.1
|
3705 mark.hamzy 1.43 jint jciRetRef = env->CallIntMethod(jciRet,JMPIjvm::jv.CIMInstanceCInst);
|
3706 schuur 1.1
|
3707 mark.hamzy 1.43 JMPIjvm::checkException(env);
|
3708 mark.hamzy 1.24
|
3709 mark.hamzy 1.43 CIMInstance *ciRet = DEBUG_ConvertJavaToC (jint, CIMInstance*, jciRetRef);
3710 CIMClass cls;
|
3711 schuur 1.1
|
3712 mark.hamzy 1.43 try
3713 {
3714 DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
3715 AutoMutex lock (pr._cimomMutex);
3716
3717 cls = pr._cimom_handle->getClass(context,
3718 request->nameSpace,
3719 ciRet->getClassName(),
3720 false,
3721 true,
3722 true,
3723 CIMPropertyList());
3724 DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
3725 }
3726 catch (CIMException e)
3727 {
3728 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorsRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
3729 throw;
3730 }
3731
3732 const CIMObjectPath& op = ciRet->getPath();
3733 mark.hamzy 1.43 CIMObjectPath iop = ciRet->buildPath(cls);
3734
3735 JMPIjvm::checkException(env);
3736
3737 iop.setNameSpace(op.getNameSpace());
3738 ciRet->setPath(iop);
3739
3740 handler.deliver(*ciRet);
3741 }
3742 }
3743 handler.complete();
3744 break;
3745 }
3746
3747 case METHOD_ASSOCIATORPROVIDER:
3748 {
3749 jint jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, assocPath);
3750 jobject jAssociationName = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
3751
3752 JMPIjvm::checkException(env);
3753
3754 mark.hamzy 1.43 jint jPathNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
3755 jobject jPathName = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jPathNameRef);
3756
3757 JMPIjvm::checkException(env);
3758
3759 jstring jResultClass = env->NewStringUTF(request->resultClass.getString().getCString());
3760 jstring jRole = env->NewStringUTF(request->role.getCString());
3761 jstring jResultRole = env->NewStringUTF(request->resultRole.getCString());
3762
3763 JMPIjvm::checkException(env);
3764
3765 jobjectArray jPropertyList = getList(jv,env,request->propertyList);
3766
3767 #ifdef PEGASUS_DEBUG
3768 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: assocName = "<<assocPath->toString ()<<PEGASUS_STD(endl));
3769 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: pathName = "<<objectPath->toString ()<<PEGASUS_STD(endl));
3770 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: resultClass = "<<request->resultClass<<PEGASUS_STD(endl));
3771 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: role = "<<request->role<<PEGASUS_STD(endl));
3772 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: resultRole = "<<request->resultRole<<PEGASUS_STD(endl));
3773 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: includeQualifiers = "<<false<<PEGASUS_STD(endl));
3774 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: includeClassOrigin = "<<false<<PEGASUS_STD(endl));
3775 mark.hamzy 1.43 #endif
3776
3777 jobjectArray jVec=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
3778 id,
3779 jAssociationName,
3780 jPathName,
3781 jResultClass,
3782 jRole,
3783 jResultRole,
3784 JMPI_INCLUDE_QUALIFIERS,
3785 request->includeClassOrigin,
3786 jPropertyList);
3787
3788 JMPIjvm::checkException(env);
3789
3790 STAT_PMS_PROVIDEREND;
3791
3792 handler.processing();
3793 if (jVec) {
3794 for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); i<m; i++) {
3795 JMPIjvm::checkException(env);
3796 mark.hamzy 1.43
3797 jobject jciRet = env->CallObjectMethod(jVec,JMPIjvm::jv.VectorElementAt,i);
3798
3799 JMPIjvm::checkException(env);
3800
3801 jint jciRetRef = env->CallIntMethod(jciRet,JMPIjvm::jv.CIMInstanceCInst);
3802 CIMInstance *ciRet = DEBUG_ConvertJavaToC (jint, CIMInstance*, jciRetRef);
3803 CIMClass cls;
3804
3805 try
3806 {
3807 DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
3808 AutoMutex lock (pr._cimomMutex);
3809
3810 cls = pr._cimom_handle->getClass(context,
3811 request->nameSpace,
3812 ciRet->getClassName(),
3813 false,
3814 true,
3815 true,
3816 CIMPropertyList());
3817 mark.hamzy 1.43 DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
3818 }
3819 catch (CIMException e)
3820 {
3821 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorsRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
3822 throw;
3823 }
3824
3825 const CIMObjectPath& op = ciRet->getPath();
3826 CIMObjectPath iop = ciRet->buildPath(cls);
3827
3828 JMPIjvm::checkException(env);
3829
3830 iop.setNameSpace(op.getNameSpace());
3831 ciRet->setPath(iop);
3832
3833 handler.deliver(*ciRet);
3834 }
3835 }
3836 handler.complete();
3837 break;
3838 mark.hamzy 1.43 }
3839
3840 case METHOD_UNKNOWN:
3841 {
3842 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorsRequest: should not be here!"<<PEGASUS_STD(endl));
3843 break;
3844 }
3845 }
3846 }
3847 HandlerCatch(handler);
3848
3849 if (env) JMPIjvm::detachThread();
3850
3851 PEG_METHOD_EXIT();
3852
3853 STAT_COPYDISPATCHER
3854
3855 return(response);
3856 }
3857
3858 Message * JMPIProviderManager::handleAssociatorNamesRequest(const Message * message) throw()
3859 mark.hamzy 1.43 {
3860 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleAssociatorNamesRequest");
3861
3862 HandlerIntro(AssociatorNames,message,request,response,handler,Array<CIMObjectPath>());
3863
3864 typedef enum {
3865 METHOD_UNKNOWN = 0,
3866 METHOD_CIMASSOCIATORPROVIDER,
3867 METHOD_CIMASSOCIATORPROVIDER2,
3868 METHOD_ASSOCIATORPROVIDER,
3869 METHOD_ASSOCIATORPROVIDER2
3870 } METHOD_VERSION;
3871 METHOD_VERSION eMethodFound = METHOD_UNKNOWN;
3872 JNIEnv *env = NULL;
3873
3874 try {
3875 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
3876 "JMPIProviderManager::handleAssociatorNamesRequest - Host name: $0 Name space: $1 Class name: $2",
3877 System::getHostName(),
3878 request->nameSpace.getString(),
3879 request->objectName.getClassName().getString());
3880 mark.hamzy 1.43
3881 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: hostname = "<<System::getHostName()<<", namespace = "<<request->nameSpace.getString()<<", classname = "<<request->objectName.getClassName().getString()<<", assocName = "<<request->assocClass.getString()<<PEGASUS_STD(endl));
3882
3883 // make target object path
3884 CIMObjectPath *objectPath = new CIMObjectPath (System::getHostName(),
3885 request->nameSpace,
3886 request->objectName.getClassName(),
3887 request->objectName.getKeyBindings());
3888 CIMObjectPath *assocPath = new CIMObjectPath (System::getHostName(),
3889 request->nameSpace,
3890 request->assocClass.getString());
3891
3892 // resolve provider name
3893 ProviderName name = _resolveProviderName(
3894 request->operationContext.get(ProviderIdContainer::NAME));
3895
3896 // get cached or load new provider module
3897 JMPIProvider::OpProviderHolder ph = providerManager.getProvider (name.getPhysicalName(),
3898 name.getLogicalName(),
3899 String::EMPTY);
3900
3901 mark.hamzy 1.43 // forward request
3902 JMPIProvider &pr = ph.GetProvider();
3903
3904 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,"Calling provider.associatorNames: " + pr.getName());
3905
3906 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: Calling provider associatorNames: "<<pr.getName()<<", role: "<<request->role<<", aCls: "<<request->assocClass<<PEGASUS_STD(endl));
3907
3908 JvmVector *jv = 0;
3909
3910 env = JMPIjvm::attachThread(&jv);
3911
3912 if (!env)
3913 {
3914 PEG_METHOD_EXIT();
|
3915 mark.hamzy 1.37
3916 STAT_COPYDISPATCHER
3917
3918 throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
3919 MessageLoaderParms("ProviderManager.JMPI.INIT_JVM_FAILED",
3920 "Could not initialize the JVM (Java Virtual Machine) runtime environment."));
3921 }
3922
|
3923 schuur 1.1 JMPIProvider::pm_service_op_lock op_lock(&pr);
3924
3925 STAT_GETSTARTTIME;
3926
|
3927 mark.hamzy 1.43 jmethodID id = NULL;
3928 String interfaceType;
3929 String interfaceVersion;
3930
3931 getInterfaceType (request->operationContext.get (ProviderIdContainer::NAME),
3932 interfaceType,
3933 interfaceVersion);
3934
3935 if (interfaceType == "JMPI")
3936 {
3937 // public java.util.Vector associatorNames (org.pegasus.jmpi.CIMObjectPath assocName,
3938 // org.pegasus.jmpi.CIMObjectPath pathName,
3939 // java.lang.String resultClass,
3940 // java.lang.String role,
3941 // java.lang.String resultRole)
3942 // throws org.pegasus.jmpi.CIMException
3943 id = env->GetMethodID((jclass)pr.jProviderClass,
3944 "associatorNames",
3945 "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/util/Vector;");
3946
3947 if (id != NULL)
3948 mark.hamzy 1.43 {
3949 eMethodFound = METHOD_ASSOCIATORPROVIDER;
3950 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: found METHOD_ASSOCIATORPROVIDER."<<PEGASUS_STD(endl));
3951 }
|
3952 mark.hamzy 1.24
|
3953 mark.hamzy 1.43 if (id == NULL)
3954 {
3955 env->ExceptionClear();
|
3956 mark.hamzy 1.24
|
3957 mark.hamzy 1.43 // public org.pegasus.jmpi.CIMObjectPath[] associatorNames (org.pegasus.jmpi.CIMObjectPath assocName,
3958 // org.pegasus.jmpi.CIMObjectPath pathName,
3959 // java.lang.String resultClass,
3960 // java.lang.String role,
3961 // java.lang.String resultRole)
3962 // throws org.pegasus.jmpi.CIMException
3963 id = env->GetMethodID((jclass)pr.jProviderClass,
3964 "associatorNames",
3965 "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)[Lorg/pegasus/jmpi/CIMObjectPath;");
3966
3967 if (id != NULL)
3968 {
3969 eMethodFound = METHOD_CIMASSOCIATORPROVIDER;
3970 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: found METHOD_CIMASSOCIATORPROVIDER."<<PEGASUS_STD(endl));
3971 }
3972 }
3973 }
3974 else if (interfaceType == "JMPIExperimental")
|
3975 mark.hamzy 1.24 {
|
3976 mark.hamzy 1.43 // public java.util.Vector associatorNames (org.pegasus.jmpi.OperationContext oc,
3977 // org.pegasus.jmpi.CIMObjectPath assocName,
3978 // org.pegasus.jmpi.CIMObjectPath pathName,
3979 // java.lang.String resultClass,
3980 // java.lang.String role,
3981 // java.lang.String resultRole)
3982 // throws org.pegasus.jmpi.CIMException
3983 id = env->GetMethodID((jclass)pr.jProviderClass,
3984 "associatorNames",
3985 "(Lorg/pegasus/jmpi/OperationContext;Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/util/Vector;");
|
3986 mark.hamzy 1.24
|
3987 mark.hamzy 1.43 if (id != NULL)
3988 {
3989 eMethodFound = METHOD_ASSOCIATORPROVIDER2;
3990 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: found METHOD_ASSOCIATORPROVIDER2."<<PEGASUS_STD(endl));
3991 }
|
3992 mark.hamzy 1.24
|
3993 mark.hamzy 1.43 if (id == NULL)
3994 {
3995 env->ExceptionClear();
|
3996 mark.hamzy 1.24
|
3997 mark.hamzy 1.43 // public org.pegasus.jmpi.CIMObjectPath[] associatorNames (org.pegasus.jmpi.OperationContext oc,
3998 // org.pegasus.jmpi.CIMObjectPath assocName,
3999 // org.pegasus.jmpi.CIMObjectPath pathName,
4000 // java.lang.String resultClass,
4001 // java.lang.String role,
4002 // java.lang.String resultRole)
4003 // throws org.pegasus.jmpi.CIMException
4004 id = env->GetMethodID((jclass)pr.jProviderClass,
4005 "associatorNames",
4006 "(Lorg/pegasus/jmpi/OperationContext;Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)[Lorg/pegasus/jmpi/CIMObjectPath;");
4007
4008 if (id != NULL)
4009 {
4010 eMethodFound = METHOD_CIMASSOCIATORPROVIDER2;
4011 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: found METHOD_CIMASSOCIATORPROVIDER2."<<PEGASUS_STD(endl));
4012 }
4013 }
|
4014 mark.hamzy 1.24 }
|
4015 schuur 1.13
|
4016 mark.hamzy 1.24 if (id == NULL)
4017 {
4018 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: found no method!"<<PEGASUS_STD(endl));
|
4019 mark.hamzy 1.43
4020 PEG_METHOD_EXIT();
4021
4022 STAT_COPYDISPATCHER
4023
4024 throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
4025 MessageLoaderParms ("ProviderManager.JMPI.METHOD_NOT_FOUND",
4026 "Could not find a method for the provider based on InterfaceType."));
|
4027 mark.hamzy 1.23 }
|
4028 mark.hamzy 1.24
|
4029 schuur 1.1 JMPIjvm::checkException(env);
4030
|
4031 mark.hamzy 1.24 switch (eMethodFound)
4032 {
|
4033 mark.hamzy 1.43 case METHOD_CIMASSOCIATORPROVIDER:
4034 {
4035 jint jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, assocPath);
4036 jobject jAssociationName = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
4037
4038 JMPIjvm::checkException(env);
4039
4040 jint jPathNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
4041 jobject jPathName = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jPathNameRef);
4042
4043 JMPIjvm::checkException(env);
4044
4045 jstring jResultClass = env->NewStringUTF(request->resultClass.getString().getCString());
4046 jstring jRole = env->NewStringUTF(request->role.getCString());
4047 jstring jResultRole = env->NewStringUTF(request->resultRole.getCString());
4048
4049 JMPIjvm::checkException(env);
4050
4051 #ifdef PEGASUS_DEBUG
4052 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: assocName = "<<assocPath->toString ()<<PEGASUS_STD(endl));
4053 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: resultClass = "<<request->resultClass<<PEGASUS_STD(endl));
4054 mark.hamzy 1.43 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: role = "<<request->role<<PEGASUS_STD(endl));
4055 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: resultRole = "<<request->resultRole<<PEGASUS_STD(endl));
4056 #endif
4057
4058 jobjectArray jVec=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
4059 id,
4060 jAssociationName,
4061 jPathName,
4062 jResultClass,
4063 jRole,
4064 jResultRole);
4065
4066 JMPIjvm::checkException(env);
4067
4068 STAT_PMS_PROVIDEREND;
4069
4070 handler.processing();
4071 if (jVec) {
4072 for (int i=0,m=env->GetArrayLength(jVec); i<m; i++) {
4073 JMPIjvm::checkException(env);
4074
4075 mark.hamzy 1.43 jobject jcopRet = env->GetObjectArrayElement(jVec,i);
4076
4077 JMPIjvm::checkException(env);
4078
4079 jint jcopRetRef = env->CallIntMethod(jcopRet,JMPIjvm::jv.CIMObjectPathCInst);
4080 CIMObjectPath *copRet = DEBUG_ConvertJavaToC (jint, CIMObjectPath*, jcopRet);
4081
4082 JMPIjvm::checkException(env);
4083
4084 handler.deliver(*copRet);
4085 }
4086 }
4087 handler.complete();
4088 break;
4089 }
4090
4091 case METHOD_CIMASSOCIATORPROVIDER2:
|
4092 mark.hamzy 1.24 {
|
4093 mark.hamzy 1.43 jint jocRef = DEBUG_ConvertCToJava (OperationContext*, jint, &request->operationContext);
4094 jobject joc = env->NewObject(jv->OperationContextClassRef,jv->OperationContextNewI,jocRef);
|
4095 mark.hamzy 1.29 jint jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, assocPath);
|
4096 mark.hamzy 1.25 jobject jAssociationName = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
4097
4098 JMPIjvm::checkException(env);
4099
|
4100 mark.hamzy 1.43 jint jPathNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
4101 jobject jPathName = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jPathNameRef);
4102
4103 JMPIjvm::checkException(env);
4104
|
4105 mark.hamzy 1.25 jstring jResultClass = env->NewStringUTF(request->resultClass.getString().getCString());
4106 jstring jRole = env->NewStringUTF(request->role.getCString());
4107 jstring jResultRole = env->NewStringUTF(request->resultRole.getCString());
4108
4109 JMPIjvm::checkException(env);
4110
|
4111 mark.hamzy 1.29 #ifdef PEGASUS_DEBUG
4112 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: assocName = "<<assocPath->toString ()<<PEGASUS_STD(endl));
4113 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: resultClass = "<<request->resultClass<<PEGASUS_STD(endl));
4114 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: role = "<<request->role<<PEGASUS_STD(endl));
4115 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: resultRole = "<<request->resultRole<<PEGASUS_STD(endl));
4116 #endif
4117
|
4118 mark.hamzy 1.24 jobjectArray jVec=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
4119 id,
|
4120 mark.hamzy 1.43 joc,
|
4121 mark.hamzy 1.24 jAssociationName,
|
4122 mark.hamzy 1.43 jPathName,
|
4123 mark.hamzy 1.24 jResultClass,
4124 jRole,
4125 jResultRole);
|
4126 mark.hamzy 1.25
|
4127 mark.hamzy 1.23 JMPIjvm::checkException(env);
4128
4129 STAT_PMS_PROVIDEREND;
4130
|
4131 mark.hamzy 1.43 if (joc)
4132 {
4133 env->CallVoidMethod (joc, JMPIjvm::jv.OperationContextUnassociate);
4134
4135 JMPIjvm::checkException(env);
4136 }
4137
|
4138 mark.hamzy 1.23 handler.processing();
4139 if (jVec) {
|
4140 mark.hamzy 1.24 for (int i=0,m=env->GetArrayLength(jVec); i<m; i++) {
|
4141 mark.hamzy 1.23 JMPIjvm::checkException(env);
4142
|
4143 mark.hamzy 1.29 jobject jcopRet = env->GetObjectArrayElement(jVec,i);
|
4144 mark.hamzy 1.24
|
4145 mark.hamzy 1.23 JMPIjvm::checkException(env);
4146
|
4147 mark.hamzy 1.29 jint jcopRetRef = env->CallIntMethod(jcopRet,JMPIjvm::jv.CIMObjectPathCInst);
4148 CIMObjectPath *copRet = DEBUG_ConvertJavaToC (jint, CIMObjectPath*, jcopRet);
|
4149 mark.hamzy 1.23
4150 JMPIjvm::checkException(env);
4151
|
4152 mark.hamzy 1.29 handler.deliver(*copRet);
|
4153 mark.hamzy 1.23 }
4154 }
4155 handler.complete();
|
4156 mark.hamzy 1.24 break;
|
4157 mark.hamzy 1.23 }
|
4158 mark.hamzy 1.24
|
4159 mark.hamzy 1.43 case METHOD_ASSOCIATORPROVIDER:
4160 {
4161 jint jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, assocPath);
4162 jobject jAssociationName = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
4163
4164 JMPIjvm::checkException(env);
4165
4166 jint jPathNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
4167 jobject jPathName = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jPathNameRef);
4168
4169 JMPIjvm::checkException(env);
4170
4171 jstring jResultClass = env->NewStringUTF(request->resultClass.getString().getCString());
4172 jstring jRole = env->NewStringUTF(request->role.getCString());
4173 jstring jResultRole = env->NewStringUTF(request->resultRole.getCString());
4174
4175 JMPIjvm::checkException(env);
4176
4177 #ifdef PEGASUS_DEBUG
4178 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: assocName = "<<assocPath->toString ()<<PEGASUS_STD(endl));
4179 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: pathName = "<<objectPath->toString ()<<PEGASUS_STD(endl));
4180 mark.hamzy 1.43 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: resultClass = "<<request->resultClass<<PEGASUS_STD(endl));
4181 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: role = "<<request->role<<PEGASUS_STD(endl));
4182 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: resultRole = "<<request->resultRole<<PEGASUS_STD(endl));
4183 #endif
4184
4185 jobjectArray jVec=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
4186 id,
4187 jAssociationName,
4188 jPathName,
4189 jResultClass,
4190 jRole,
4191 jResultRole);
4192
4193 JMPIjvm::checkException(env);
4194
4195 STAT_PMS_PROVIDEREND;
4196
4197 handler.processing();
4198 if (jVec) {
4199 for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); i<m; i++) {
4200 JMPIjvm::checkException(env);
4201 mark.hamzy 1.43
4202 jobject jcopRet = env->CallObjectMethod(jVec,JMPIjvm::jv.VectorElementAt,i);
4203
4204 JMPIjvm::checkException(env);
4205
4206 jint jcopRetRef = env->CallIntMethod(jcopRet,JMPIjvm::jv.CIMObjectPathCInst);
4207 CIMObjectPath *copRet = DEBUG_ConvertJavaToC (jint, CIMObjectPath*, jcopRetRef);
4208
4209 JMPIjvm::checkException(env);
4210
4211 handler.deliver(*copRet);
4212 }
4213 }
4214 handler.complete();
4215 break;
4216 }
4217
4218 case METHOD_ASSOCIATORPROVIDER2:
|
4219 mark.hamzy 1.24 {
|
4220 mark.hamzy 1.43 jint jocRef = DEBUG_ConvertCToJava (OperationContext*, jint, &request->operationContext);
4221 jobject joc = env->NewObject(jv->OperationContextClassRef,jv->OperationContextNewI,jocRef);
4222
|
4223 mark.hamzy 1.29 jint jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, assocPath);
|
4224 mark.hamzy 1.25 jobject jAssociationName = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
4225
4226 JMPIjvm::checkException(env);
4227
|
4228 mark.hamzy 1.29 jint jPathNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
|
4229 mark.hamzy 1.24 jobject jPathName = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jPathNameRef);
4230
4231 JMPIjvm::checkException(env);
4232
|
4233 mark.hamzy 1.25 jstring jResultClass = env->NewStringUTF(request->resultClass.getString().getCString());
4234 jstring jRole = env->NewStringUTF(request->role.getCString());
4235 jstring jResultRole = env->NewStringUTF(request->resultRole.getCString());
4236
4237 JMPIjvm::checkException(env);
4238
|
4239 mark.hamzy 1.29 #ifdef PEGASUS_DEBUG
4240 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: assocName = "<<assocPath->toString ()<<PEGASUS_STD(endl));
4241 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: pathName = "<<objectPath->toString ()<<PEGASUS_STD(endl));
4242 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: resultClass = "<<request->resultClass<<PEGASUS_STD(endl));
4243 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: role = "<<request->role<<PEGASUS_STD(endl));
4244 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: resultRole = "<<request->resultRole<<PEGASUS_STD(endl));
4245 #endif
4246
|
4247 mark.hamzy 1.24 jobjectArray jVec=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
4248 id,
|
4249 mark.hamzy 1.43 joc,
|
4250 mark.hamzy 1.24 jAssociationName,
|
4251 mark.hamzy 1.29 jPathName,
|
4252 mark.hamzy 1.24 jResultClass,
4253 jRole,
4254 jResultRole);
|
4255 mark.hamzy 1.25
|
4256 mark.hamzy 1.23 JMPIjvm::checkException(env);
4257
4258 STAT_PMS_PROVIDEREND;
|
4259 schuur 1.13
|
4260 mark.hamzy 1.43 if (joc)
4261 {
4262 env->CallVoidMethod (joc, JMPIjvm::jv.OperationContextUnassociate);
4263
4264 JMPIjvm::checkException(env);
4265 }
4266
|
4267 mark.hamzy 1.23 handler.processing();
|
4268 mark.hamzy 1.24 if (jVec) {
|
4269 mark.hamzy 1.29 for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); i<m; i++) {
|
4270 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
4271 schuur 1.13
|
4272 mark.hamzy 1.29 jobject jcopRet = env->CallObjectMethod(jVec,JMPIjvm::jv.VectorElementAt,i);
|
4273 mark.hamzy 1.24
|
4274 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
4275 schuur 1.13
|
4276 mark.hamzy 1.29 jint jcopRetRef = env->CallIntMethod(jcopRet,JMPIjvm::jv.CIMObjectPathCInst);
4277 CIMObjectPath *copRet = DEBUG_ConvertJavaToC (jint, CIMObjectPath*, jcopRetRef);
|
4278 schuur 1.1
|
4279 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
4280 schuur 1.1
|
4281 mark.hamzy 1.29 handler.deliver(*copRet);
|
4282 mark.hamzy 1.23 }
4283 }
4284 handler.complete();
|
4285 mark.hamzy 1.24 break;
4286 }
4287
4288 case METHOD_UNKNOWN:
4289 {
4290 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: should not be here!"<<PEGASUS_STD(endl));
4291 break;
4292 }
|
4293 mark.hamzy 1.23 }
|
4294 schuur 1.1 }
4295 HandlerCatch(handler);
|
4296 schuur 1.12
|
4297 mark.hamzy 1.23 if (env) JMPIjvm::detachThread();
|
4298 schuur 1.12
|
4299 schuur 1.1 PEG_METHOD_EXIT();
4300
|
4301 w.white 1.31 STAT_COPYDISPATCHER
4302
|
4303 schuur 1.1 return(response);
4304 }
4305
4306 Message * JMPIProviderManager::handleReferencesRequest(const Message * message) throw()
4307 {
|
4308 mark.hamzy 1.23 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleReferencesRequest");
4309
4310 HandlerIntro(References,message,request,response,handler,Array<CIMObject>());
|
4311 schuur 1.1
|
4312 mark.hamzy 1.24 typedef enum {
4313 METHOD_UNKNOWN = 0,
|
4314 mark.hamzy 1.43 METHOD_CIMASSOCIATORPROVIDER,
4315 METHOD_CIMASSOCIATORPROVIDER2,
4316 METHOD_ASSOCIATORPROVIDER,
4317 METHOD_ASSOCIATORPROVIDER2,
|
4318 mark.hamzy 1.24 } METHOD_VERSION;
4319 METHOD_VERSION eMethodFound = METHOD_UNKNOWN;
4320 JNIEnv *env = NULL;
|
4321 schuur 1.13
|
4322 schuur 1.1 try {
4323 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
|
4324 konrad.r 1.15 "JMPIProviderManager::handleReferencesRequest - Host name: $0 Name space: $1 Class name: $2",
|
4325 schuur 1.1 System::getHostName(),
4326 request->nameSpace.getString(),
4327 request->objectName.getClassName().getString());
4328
|
4329 mark.hamzy 1.29 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferencesRequest: hostname = "<<System::getHostName()<<", namespace = "<<request->nameSpace.getString()<<", classname = "<<request->objectName.getClassName().getString()<<", result = "<<request->resultClass.getString()<<PEGASUS_STD(endl));
|
4330 mark.hamzy 1.23
|
4331 schuur 1.1 // make target object path
|
4332 mark.hamzy 1.27 CIMObjectPath *objectPath = new CIMObjectPath (System::getHostName(),
4333 request->nameSpace,
4334 request->objectName.getClassName(),
4335 request->objectName.getKeyBindings());
4336 CIMObjectPath *resultPath = new CIMObjectPath (System::getHostName(),
4337 request->nameSpace,
4338 request->resultClass.getString());
|
4339 schuur 1.1
4340 // resolve provider name
|
4341 kumpf 1.2 ProviderName name = _resolveProviderName(
4342 request->operationContext.get(ProviderIdContainer::NAME));
|
4343 schuur 1.1
|
4344 mark.hamzy 1.43 // get cached or load new provider module
4345 JMPIProvider::OpProviderHolder ph = providerManager.getProvider (name.getPhysicalName(),
4346 name.getLogicalName(),
4347 String::EMPTY);
4348
4349 // convert arguments
4350 OperationContext context;
4351
4352 context.insert(request->operationContext.get(IdentityContainer::NAME));
4353 context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME));
4354 context.insert(request->operationContext.get(ContentLanguageListContainer::NAME));
4355
4356 // forward request
4357 JMPIProvider &pr = ph.GetProvider();
4358
4359 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,"Calling provider.references: " + pr.getName());
4360
4361 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferencesRequest: Calling provider references: "<<pr.getName()<<", role: "<<request->role<<" aCls: "<<request->resultClass<<PEGASUS_STD(endl));
4362
4363 JvmVector *jv = 0;
4364
4365 mark.hamzy 1.43 env = JMPIjvm::attachThread(&jv);
4366
4367 if (!env)
4368 {
4369 PEG_METHOD_EXIT();
4370
4371 STAT_COPYDISPATCHER
4372
4373 throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
4374 MessageLoaderParms("ProviderManager.JMPI.INIT_JVM_FAILED",
4375 "Could not initialize the JVM (Java Virtual Machine) runtime environment."));
4376 }
4377
4378 JMPIProvider::pm_service_op_lock op_lock(&pr);
4379
4380 STAT_GETSTARTTIME;
4381
4382 jmethodID id = NULL;
4383 String interfaceType;
4384 String interfaceVersion;
4385
4386 mark.hamzy 1.43 getInterfaceType (request->operationContext.get (ProviderIdContainer::NAME),
4387 interfaceType,
4388 interfaceVersion);
4389
4390 if (interfaceType == "JMPI")
4391 {
4392 // public java.util.Vector references (org.pegasus.jmpi.CIMObjectPath assocName,
4393 // org.pegasus.jmpi.CIMObjectPath pathName,
4394 // java.lang.String role,
4395 // boolean includeQualifiers,
4396 // boolean includeClassOrigin,
4397 // java.lang.String[] propertyList)
4398 // throws org.pegasus.jmpi.CIMException
4399 id = env->GetMethodID((jclass)pr.jProviderClass,
4400 "references",
4401 "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;ZZ[Ljava/lang/String;)Ljava/util/Vector;");
4402
4403 if (id != NULL)
4404 {
4405 eMethodFound = METHOD_ASSOCIATORPROVIDER;
4406 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferencesRequest: found METHOD_ASSOCIATORPROVIDER."<<PEGASUS_STD(endl));
4407 mark.hamzy 1.43 }
4408
4409 if (id == NULL)
4410 {
4411 env->ExceptionClear();
4412
4413 // public org.pegasus.jmpi.CIMInstance[] references (org.pegasus.jmpi.CIMObjectPath assocName,
4414 // org.pegasus.jmpi.CIMObjectPath pathName,
4415 // java.lang.String role,
4416 // boolean includeQualifiers,
4417 // boolean includeClassOrigin,
4418 // java.lang.String[] propertyList)
4419 // throws org.pegasus.jmpi.CIMException
4420 id = env->GetMethodID((jclass)pr.jProviderClass,
4421 "references",
4422 "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;ZZ[Ljava/lang/String;)[Lorg/pegasus/jmpi/CIMInstance;");
4423
4424 if (id != NULL)
4425 {
4426 eMethodFound = METHOD_CIMASSOCIATORPROVIDER;
4427 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferencesRequest: found METHOD_CIMASSOCIATORPROVIDER."<<PEGASUS_STD(endl));
4428 mark.hamzy 1.43 }
4429 }
4430 }
4431 else if (interfaceType == "JMPIExperimental")
4432 {
4433 // public java.util.Vector references (org.pegasus.jmpi.OperationContext oc,
4434 // org.pegasus.jmpi.CIMObjectPath assocName,
4435 // org.pegasus.jmpi.CIMObjectPath pathName,
4436 // java.lang.String role,
4437 // boolean includeQualifiers,
4438 // boolean includeClassOrigin,
4439 // java.lang.String[] propertyList)
4440 // throws org.pegasus.jmpi.CIMException
4441 id = env->GetMethodID((jclass)pr.jProviderClass,
4442 "references",
4443 " (Lorg/pegasus/jmpi/OperationContext;Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;ZZ[Ljava/lang/String;)Ljava/util/Vector;");
4444
4445 if (id != NULL)
4446 {
4447 eMethodFound = METHOD_ASSOCIATORPROVIDER2;
4448 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferencesRequest: found METHOD_ASSOCIATORPROVIDER2."<<PEGASUS_STD(endl));
4449 mark.hamzy 1.43 }
4450
4451 if (id == NULL)
4452 {
4453 env->ExceptionClear();
4454
4455 // public org.pegasus.jmpi.CIMInstance[] references (org.pegasus.jmpi.OperationContext oc,
4456 // org.pegasus.jmpi.CIMObjectPath assocName,
4457 // org.pegasus.jmpi.CIMObjectPath pathName,
4458 // java.lang.String role,
4459 // boolean includeQualifiers,
4460 // boolean includeClassOrigin,
4461 // java.lang.String[] propertyList)
4462 // throws org.pegasus.jmpi.CIMException
4463 id = env->GetMethodID((jclass)pr.jProviderClass,
4464 "references",
4465 "(Lorg/pegasus/jmpi/OperationContext;Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;ZZ[Ljava/lang/String;)[Lorg/pegasus/jmpi/CIMInstance;");
4466
4467 if (id != NULL)
4468 {
4469 eMethodFound = METHOD_CIMASSOCIATORPROVIDER2;
4470 mark.hamzy 1.43 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferencesRequest: found METHOD_CIMASSOCIATORPROVIDER2."<<PEGASUS_STD(endl));
4471 }
4472 }
4473 }
4474
4475 if (id == NULL)
4476 {
4477 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferencesRequest: found no method!"<<PEGASUS_STD(endl));
4478
4479 PEG_METHOD_EXIT();
4480
4481 STAT_COPYDISPATCHER
4482
4483 throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
4484 MessageLoaderParms ("ProviderManager.JMPI.METHOD_NOT_FOUND",
4485 "Could not find a method for the provider based on InterfaceType."));
4486 }
4487
4488 JMPIjvm::checkException(env);
4489
4490 switch (eMethodFound)
4491 mark.hamzy 1.43 {
4492 case METHOD_CIMASSOCIATORPROVIDER:
4493 {
4494 jint jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, resultPath);
4495 jobject jAssociationName = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
4496
4497 JMPIjvm::checkException(env);
4498
4499 jint jPathNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
4500 jobject jPathName = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jPathNameRef);
4501
4502 JMPIjvm::checkException(env);
4503
4504 jstring jRole = env->NewStringUTF(request->role.getCString());
4505
4506 JMPIjvm::checkException(env);
4507
4508 jobjectArray jPropertyList = getList(jv,env,request->propertyList);
4509
4510 #ifdef PEGASUS_DEBUG
4511 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferencesRequest: assocName = "<<resultPath->toString ()<<PEGASUS_STD(endl));
4512 mark.hamzy 1.43 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferencesRequest: role = "<<request->role<<PEGASUS_STD(endl));
4513 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferencesRequest: includeQualifiers = "<<false<<PEGASUS_STD(endl));
4514 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferencesRequest: includeClassOrigin = "<<false<<PEGASUS_STD(endl));
4515 #endif
4516
4517 jobjectArray jVec=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
4518 id,
4519 jAssociationName,
4520 jPathName,
4521 jRole,
4522 JMPI_INCLUDE_QUALIFIERS,
4523 request->includeClassOrigin,
4524 jPropertyList);
4525
4526 JMPIjvm::checkException(env);
4527
4528 STAT_PMS_PROVIDEREND;
4529
4530 handler.processing();
4531 if (jVec) {
4532 for (int i=0,m=env->GetArrayLength(jVec); i<m; i++) {
4533 mark.hamzy 1.43 JMPIjvm::checkException(env);
4534
4535 jobject jciRet = env->GetObjectArrayElement(jVec,i);
4536
4537 JMPIjvm::checkException(env);
4538
4539 jint jciRetRef = env->CallIntMethod(jciRet,JMPIjvm::jv.CIMInstanceCInst);
4540
4541 JMPIjvm::checkException(env);
4542
4543 CIMInstance *ciRet = DEBUG_ConvertJavaToC (jint, CIMInstance*, jciRetRef);
4544 CIMClass cls;
4545
4546 try
4547 {
4548 DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
4549 AutoMutex lock (pr._cimomMutex);
4550
4551 cls = pr._cimom_handle->getClass(context,
4552 request->nameSpace,
4553 ciRet->getClassName(),
4554 mark.hamzy 1.43 false,
4555 true,
4556 true,
4557 CIMPropertyList());
4558 DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
4559 }
4560 catch (CIMException e)
4561 {
4562 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferencesRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
4563 throw;
4564 }
4565
4566 const CIMObjectPath& op = ciRet->getPath();
4567 CIMObjectPath iop = ciRet->buildPath(cls);
4568
4569 JMPIjvm::checkException(env);
4570
4571 iop.setNameSpace(op.getNameSpace());
4572 ciRet->setPath(iop);
4573
4574 handler.deliver(*ciRet);
4575 mark.hamzy 1.43 }
4576 }
4577 handler.complete();
4578 break;
4579 }
4580
4581 case METHOD_CIMASSOCIATORPROVIDER2:
4582 {
4583 jint jocRef = DEBUG_ConvertCToJava (OperationContext*, jint, &request->operationContext);
4584 jobject joc = env->NewObject(jv->OperationContextClassRef,jv->OperationContextNewI,jocRef);
4585
4586 jint jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, resultPath);
4587 jobject jAssociationName = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
4588
4589 JMPIjvm::checkException(env);
4590
4591 jint jPathNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
4592 jobject jPathName = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jPathNameRef);
4593
4594 JMPIjvm::checkException(env);
4595
4596 mark.hamzy 1.43 jstring jRole = env->NewStringUTF(request->role.getCString());
4597
4598 JMPIjvm::checkException(env);
4599
4600 jobjectArray jPropertyList = getList(jv,env,request->propertyList);
|
4601 schuur 1.1
|
4602 mark.hamzy 1.43 #ifdef PEGASUS_DEBUG
4603 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferencesRequest: assocName = "<<resultPath->toString ()<<PEGASUS_STD(endl));
4604 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferencesRequest: role = "<<request->role<<PEGASUS_STD(endl));
4605 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferencesRequest: includeQualifiers = "<<false<<PEGASUS_STD(endl));
4606 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferencesRequest: includeClassOrigin = "<<false<<PEGASUS_STD(endl));
4607 #endif
|
4608 schuur 1.1
|
4609 mark.hamzy 1.43 jobjectArray jVec=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
4610 id,
4611 joc,
4612 jAssociationName,
4613 jPathName,
4614 jRole,
4615 JMPI_INCLUDE_QUALIFIERS,
4616 request->includeClassOrigin,
4617 jPropertyList);
|
4618 schuur 1.1
|
4619 mark.hamzy 1.43 JMPIjvm::checkException(env);
|
4620 mark.hamzy 1.24
|
4621 mark.hamzy 1.43 STAT_PMS_PROVIDEREND;
|
4622 schuur 1.1
|
4623 mark.hamzy 1.43 if (joc)
4624 {
4625 env->CallVoidMethod (joc, JMPIjvm::jv.OperationContextUnassociate);
|
4626 schuur 1.1
|
4627 mark.hamzy 1.43 JMPIjvm::checkException(env);
4628 }
|
4629 schuur 1.1
|
4630 mark.hamzy 1.43 handler.processing();
4631 if (jVec) {
4632 for (int i=0,m=env->GetArrayLength(jVec); i<m; i++) {
4633 JMPIjvm::checkException(env);
|
4634 schuur 1.1
|
4635 mark.hamzy 1.43 jobject jciRet = env->GetObjectArrayElement(jVec,i);
|
4636 mark.hamzy 1.37
|
4637 mark.hamzy 1.43 JMPIjvm::checkException(env);
|
4638 mark.hamzy 1.37
|
4639 mark.hamzy 1.43 jint jciRetRef = env->CallIntMethod(jciRet,JMPIjvm::jv.CIMInstanceCInst);
|
4640 mark.hamzy 1.37
|
4641 mark.hamzy 1.43 JMPIjvm::checkException(env);
|
4642 schuur 1.1
|
4643 mark.hamzy 1.43 CIMInstance *ciRet = DEBUG_ConvertJavaToC (jint, CIMInstance*, jciRetRef);
4644 CIMClass cls;
|
4645 schuur 1.1
|
4646 mark.hamzy 1.43 try
4647 {
4648 DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
4649 AutoMutex lock (pr._cimomMutex);
|
4650 mark.hamzy 1.24
|
4651 mark.hamzy 1.43 cls = pr._cimom_handle->getClass(context,
4652 request->nameSpace,
4653 ciRet->getClassName(),
4654 false,
4655 true,
4656 true,
4657 CIMPropertyList());
4658 DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
4659 }
4660 catch (CIMException e)
4661 {
4662 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferencesRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
4663 throw;
4664 }
|
4665 mark.hamzy 1.24
|
4666 mark.hamzy 1.43 const CIMObjectPath& op = ciRet->getPath();
4667 CIMObjectPath iop = ciRet->buildPath(cls);
|
4668 mark.hamzy 1.24
|
4669 mark.hamzy 1.43 JMPIjvm::checkException(env);
|
4670 mark.hamzy 1.24
|
4671 mark.hamzy 1.43 iop.setNameSpace(op.getNameSpace());
4672 ciRet->setPath(iop);
|
4673 mark.hamzy 1.24
|
4674 mark.hamzy 1.43 handler.deliver(*ciRet);
4675 }
|
4676 mark.hamzy 1.24 }
|
4677 mark.hamzy 1.43 handler.complete();
4678 break;
|
4679 mark.hamzy 1.24 }
|
4680 schuur 1.12
|
4681 mark.hamzy 1.43 case METHOD_ASSOCIATORPROVIDER:
|
4682 mark.hamzy 1.24 {
|
4683 mark.hamzy 1.43 jint jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, resultPath);
4684 jobject jAssociationName = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
|
4685 mark.hamzy 1.24
|
4686 mark.hamzy 1.43 JMPIjvm::checkException(env);
|
4687 schuur 1.1
|
4688 mark.hamzy 1.43 jint jPathNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
4689 jobject jPathName = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jPathNameRef);
|
4690 mark.hamzy 1.25
4691 JMPIjvm::checkException(env);
4692
4693 jstring jRole = env->NewStringUTF(request->role.getCString());
4694
4695 JMPIjvm::checkException(env);
4696
4697 jobjectArray jPropertyList = getList(jv,env,request->propertyList);
4698
|
4699 mark.hamzy 1.29 #ifdef PEGASUS_DEBUG
4700 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferencesRequest: assocName = "<<resultPath->toString ()<<PEGASUS_STD(endl));
|
4701 mark.hamzy 1.43 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferencesRequest: pathName = "<<objectPath->toString ()<<PEGASUS_STD(endl));
|
4702 mark.hamzy 1.29 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferencesRequest: role = "<<request->role<<PEGASUS_STD(endl));
4703 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferencesRequest: includeQualifiers = "<<false<<PEGASUS_STD(endl));
4704 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferencesRequest: includeClassOrigin = "<<false<<PEGASUS_STD(endl));
4705 #endif
4706
|
4707 mark.hamzy 1.24 jobjectArray jVec=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
4708 id,
4709 jAssociationName,
|
4710 mark.hamzy 1.43 jPathName,
|
4711 mark.hamzy 1.24 jRole,
|
4712 mark.hamzy 1.36 JMPI_INCLUDE_QUALIFIERS,
4713 request->includeClassOrigin,
|
4714 mark.hamzy 1.24 jPropertyList);
|
4715 mark.hamzy 1.25
|
4716 mark.hamzy 1.23 JMPIjvm::checkException(env);
4717
4718 STAT_PMS_PROVIDEREND;
4719
4720 handler.processing();
4721 if (jVec) {
|
4722 mark.hamzy 1.43 for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); i<m; i++) {
|
4723 mark.hamzy 1.23 JMPIjvm::checkException(env);
4724
|
4725 mark.hamzy 1.43 jobject jciRet = env->CallObjectMethod(jVec,JMPIjvm::jv.VectorElementAt,i);
|
4726 mark.hamzy 1.24
|
4727 mark.hamzy 1.23 JMPIjvm::checkException(env);
4728
|
4729 mark.hamzy 1.43 jint jciRetRef = env->CallIntMethod(jciRet,JMPIjvm::jv.CIMInstanceCInst);
4730 CIMInstance *ciRet = DEBUG_ConvertJavaToC (jint, CIMInstance*, jciRetRef);
|
4731 mark.hamzy 1.40 CIMClass cls;
4732
4733 try
4734 {
4735 DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
4736 AutoMutex lock (pr._cimomMutex);
4737
4738 cls = pr._cimom_handle->getClass(context,
4739 request->nameSpace,
4740 ciRet->getClassName(),
4741 false,
4742 true,
4743 true,
4744 CIMPropertyList());
4745 DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
4746 }
4747 catch (CIMException e)
4748 {
4749 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferencesRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
4750 throw;
4751 }
4752 mark.hamzy 1.40
|
4753 mark.hamzy 1.43 const CIMObjectPath& op = ciRet->getPath();
4754 CIMObjectPath iop = ciRet->buildPath(cls);
|
4755 mark.hamzy 1.24
|
4756 mark.hamzy 1.27 JMPIjvm::checkException(env);
4757
|
4758 mark.hamzy 1.23 iop.setNameSpace(op.getNameSpace());
|
4759 mark.hamzy 1.29 ciRet->setPath(iop);
|
4760 schuur 1.13
|
4761 mark.hamzy 1.29 handler.deliver(*ciRet);
|
4762 mark.hamzy 1.23 }
4763 }
4764 handler.complete();
|
4765 mark.hamzy 1.24 break;
|
4766 mark.hamzy 1.23 }
|
4767 schuur 1.1
|
4768 mark.hamzy 1.43 case METHOD_ASSOCIATORPROVIDER2:
|
4769 mark.hamzy 1.24 {
|
4770 mark.hamzy 1.43 jint jocRef = DEBUG_ConvertCToJava (OperationContext*, jint, &request->operationContext);
4771 jobject joc = env->NewObject(jv->OperationContextClassRef,jv->OperationContextNewI,jocRef);
4772
|
4773 mark.hamzy 1.29 jint jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, resultPath);
|
4774 mark.hamzy 1.25 jobject jAssociationName = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
4775
4776 JMPIjvm::checkException(env);
4777
|
4778 mark.hamzy 1.29 jint jPathNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
|
4779 mark.hamzy 1.24 jobject jPathName = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jPathNameRef);
4780
4781 JMPIjvm::checkException(env);
4782
|
4783 mark.hamzy 1.25 jstring jRole = env->NewStringUTF(request->role.getCString());
4784
4785 JMPIjvm::checkException(env);
4786
4787 jobjectArray jPropertyList = getList(jv,env,request->propertyList);
4788
|
4789 mark.hamzy 1.29 #ifdef PEGASUS_DEBUG
4790 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferencesRequest: assocName = "<<resultPath->toString ()<<PEGASUS_STD(endl));
4791 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferencesRequest: pathName = "<<objectPath->toString ()<<PEGASUS_STD(endl));
4792 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferencesRequest: role = "<<request->role<<PEGASUS_STD(endl));
4793 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferencesRequest: includeQualifiers = "<<false<<PEGASUS_STD(endl));
4794 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferencesRequest: includeClassOrigin = "<<false<<PEGASUS_STD(endl));
4795 #endif
4796
|
4797 mark.hamzy 1.24 jobjectArray jVec=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
4798 id,
|
4799 mark.hamzy 1.43 joc,
|
4800 mark.hamzy 1.24 jAssociationName,
4801 jPathName,
4802 jRole,
|
4803 mark.hamzy 1.32 JMPI_INCLUDE_QUALIFIERS,
4804 request->includeClassOrigin,
|
4805 mark.hamzy 1.24 jPropertyList);
|
4806 mark.hamzy 1.25
|
4807 mark.hamzy 1.24 JMPIjvm::checkException(env);
4808
4809 STAT_PMS_PROVIDEREND;
4810
|
4811 mark.hamzy 1.43 if (joc)
4812 {
4813 env->CallVoidMethod (joc, JMPIjvm::jv.OperationContextUnassociate);
4814
4815 JMPIjvm::checkException(env);
4816 }
4817
|
4818 mark.hamzy 1.24 handler.processing();
4819 if (jVec) {
|
4820 mark.hamzy 1.29 for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); i<m; i++) {
|
4821 mark.hamzy 1.24 JMPIjvm::checkException(env);
4822
|
4823 mark.hamzy 1.29 jobject jciRet = env->CallObjectMethod(jVec,JMPIjvm::jv.VectorElementAt,i);
|
4824 mark.hamzy 1.24
4825 JMPIjvm::checkException(env);
4826
|
4827 mark.hamzy 1.29 jint jciRetRef = env->CallIntMethod(jciRet,JMPIjvm::jv.CIMInstanceCInst);
4828 CIMInstance *ciRet = DEBUG_ConvertJavaToC (jint, CIMInstance*, jciRetRef);
|
4829 mark.hamzy 1.40 CIMClass cls;
4830
4831 try
4832 {
4833 DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
4834 AutoMutex lock (pr._cimomMutex);
4835
4836 cls = pr._cimom_handle->getClass(context,
4837 request->nameSpace,
4838 ciRet->getClassName(),
4839 false,
4840 true,
4841 true,
4842 CIMPropertyList());
4843 DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
4844 }
4845 catch (CIMException e)
4846 {
4847 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferencesRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
4848 throw;
4849 }
4850 mark.hamzy 1.40
|
4851 mark.hamzy 1.29 const CIMObjectPath& op = ciRet->getPath();
4852 CIMObjectPath iop = ciRet->buildPath(cls);
|
4853 schuur 1.1
|
4854 mark.hamzy 1.27 JMPIjvm::checkException(env);
4855
|
4856 mark.hamzy 1.24 iop.setNameSpace(op.getNameSpace());
|
4857 mark.hamzy 1.29 ciRet->setPath(iop);
|
4858 schuur 1.12
|
4859 mark.hamzy 1.29 handler.deliver(*ciRet);
|
4860 mark.hamzy 1.24 }
4861 }
4862 handler.complete();
4863 break;
4864 }
|
4865 mark.hamzy 1.23
|
4866 mark.hamzy 1.24 case METHOD_UNKNOWN:
4867 {
|
4868 mark.hamzy 1.25 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferencesRequest: should not be here!"<<PEGASUS_STD(endl));
|
4869 mark.hamzy 1.24 break;
4870 }
|
4871 mark.hamzy 1.23 }
|
4872 schuur 1.1 }
4873 HandlerCatch(handler);
|
4874 schuur 1.12
4875 if (env) JMPIjvm::detachThread();
4876
|
4877 schuur 1.1 PEG_METHOD_EXIT();
4878
|
4879 w.white 1.31 STAT_COPYDISPATCHER
4880
|
4881 schuur 1.1 return(response);
4882 }
4883
4884 Message * JMPIProviderManager::handleReferenceNamesRequest(const Message * message) throw()
4885 {
|
4886 mark.hamzy 1.23 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleReferenceNamesRequest");
4887
4888 HandlerIntro(ReferenceNames,message,request,response,handler,Array<CIMObjectPath>());
|
4889 schuur 1.1
|
4890 mark.hamzy 1.24 typedef enum {
4891 METHOD_UNKNOWN = 0,
|
4892 mark.hamzy 1.43 METHOD_CIMASSOCIATORPROVIDER,
4893 METHOD_CIMASSOCIATORPROVIDER2,
4894 METHOD_ASSOCIATORPROVIDER,
4895 METHOD_ASSOCIATORPROVIDER2,
|
4896 mark.hamzy 1.24 } METHOD_VERSION;
4897 METHOD_VERSION eMethodFound = METHOD_UNKNOWN;
4898 JNIEnv *env = NULL;
|
4899 schuur 1.13
|
4900 schuur 1.1 try {
4901 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
4902 "JMPIProviderManager::handleReferenceNamesRequest - Host name: $0 Name space: $1 Class name: $2",
4903 System::getHostName(),
4904 request->nameSpace.getString(),
4905 request->objectName.getClassName().getString());
4906
|
4907 mark.hamzy 1.23 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferenceNamesRequest: hostname = "<<System::getHostName()<<", namespace = "<<request->nameSpace.getString()<<", classname = "<<request->objectName.getClassName().getString()<<PEGASUS_STD(endl));
4908
|
4909 schuur 1.1 // make target object path
|
4910 mark.hamzy 1.27 CIMObjectPath *objectPath = new CIMObjectPath (System::getHostName(),
4911 request->nameSpace,
4912 request->objectName.getClassName(),
4913 request->objectName.getKeyBindings());
4914 CIMObjectPath *resultPath = new CIMObjectPath (System::getHostName(),
4915 request->nameSpace,
4916 request->resultClass.getString());
|
4917 schuur 1.1
4918 // resolve provider name
|
4919 kumpf 1.2 ProviderName name = _resolveProviderName(
4920 request->operationContext.get(ProviderIdContainer::NAME));
|
4921 schuur 1.1
4922 // get cached or load new provider module
|
4923 mark.hamzy 1.43 JMPIProvider::OpProviderHolder ph = providerManager.getProvider (name.getPhysicalName(),
4924 name.getLogicalName(),
4925 String::EMPTY);
|
4926 schuur 1.1
|
4927 mark.hamzy 1.24 JMPIProvider &pr = ph.GetProvider();
|
4928 schuur 1.1
|
4929 mark.hamzy 1.25 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, "Calling provider.referenceNames: " + pr.getName());
|
4930 schuur 1.1
|
4931 mark.hamzy 1.23 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferenceNamesRequest: Calling provider referenceNames: "<<pr.getName()<<", role: "<<request->role<<", aCls: "<<request->resultClass<<PEGASUS_STD(endl));
|
4932 schuur 1.12
|
4933 mark.hamzy 1.24 JvmVector *jv = 0;
4934
4935 env = JMPIjvm::attachThread(&jv);
|
4936 schuur 1.1
|
4937 mark.hamzy 1.37 if (!env)
4938 {
4939 PEG_METHOD_EXIT();
4940
4941 STAT_COPYDISPATCHER
4942
4943 throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
4944 MessageLoaderParms("ProviderManager.JMPI.INIT_JVM_FAILED",
4945 "Could not initialize the JVM (Java Virtual Machine) runtime environment."));
4946 }
4947
|
4948 mark.hamzy 1.43 JMPIProvider::pm_service_op_lock op_lock(&pr);
4949
4950 STAT_GETSTARTTIME;
4951
4952 jmethodID id = NULL;
4953 String interfaceType;
4954 String interfaceVersion;
4955
4956 getInterfaceType (request->operationContext.get (ProviderIdContainer::NAME),
4957 interfaceType,
4958 interfaceVersion);
4959
4960 if (interfaceType == "JMPI")
4961 {
4962 // public java.util.Vector referenceNames (org.pegasus.jmpi.CIMObjectPath assocName,
4963 // org.pegasus.jmpi.CIMObjectPath pathName,
4964 // java.lang.String role)
4965 // throws org.pegasus.jmpi.CIMException
4966 id = env->GetMethodID((jclass)pr.jProviderClass,
4967 "referenceNames",
4968 "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;)Ljava/util/Vector;");
4969 mark.hamzy 1.43
4970 if (id != NULL)
4971 {
4972 eMethodFound = METHOD_ASSOCIATORPROVIDER;
4973 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferenceNamesRequest: found METHOD_ASSOCIATORPROVIDER."<<PEGASUS_STD(endl));
4974 }
4975
4976 if (id == NULL)
4977 {
4978 env->ExceptionClear();
4979
4980 // public org.pegasus.jmpi.CIMObjectPath[] referenceNames (org.pegasus.jmpi.CIMObjectPath assocName,
4981 // org.pegasus.jmpi.CIMObjectPath pathName,
4982 // java.lang.String role)
4983 // throws org.pegasus.jmpi.CIMException
4984 id = env->GetMethodID((jclass)pr.jProviderClass,
4985 "referenceNames",
4986 "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;)[Lorg/pegasus/jmpi/CIMObjectPath;");
4987
4988 if (id != NULL)
4989 {
4990 mark.hamzy 1.43 eMethodFound = METHOD_CIMASSOCIATORPROVIDER;
4991 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferenceNamesRequest: found METHOD_CIMASSOCIATORPROVIDER."<<PEGASUS_STD(endl));
4992 }
4993 }
4994 }
4995 else if (interfaceType == "JMPIExperimental")
4996 {
4997 // public java.util.Vector referenceNames (org.pegasus.jmpi.OperationContext oc,
4998 // org.pegasus.jmpi.CIMObjectPath assocName,
4999 // org.pegasus.jmpi.CIMObjectPath pathName,
5000 // java.lang.String role)
5001 // throws org.pegasus.jmpi.CIMException
5002 id = env->GetMethodID((jclass)pr.jProviderClass,
5003 "referenceNames",
5004 "(Lorg/pegasus/jmpi/OperationContext;Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;)Ljava/util/Vector;");
5005
5006 if (id != NULL)
5007 {
5008 eMethodFound = METHOD_ASSOCIATORPROVIDER2;
5009 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferenceNamesRequest: found METHOD_ASSOCIATORPROVIDER2."<<PEGASUS_STD(endl));
5010 }
5011 mark.hamzy 1.43
5012 if (id == NULL)
5013 {
5014 env->ExceptionClear();
5015
5016 // public org.pegasus.jmpi.CIMObjectPath[] referenceNames (org.pegasus.jmpi.OperationContext oc,
5017 // org.pegasus.jmpi.CIMObjectPath assocName,
5018 // org.pegasus.jmpi.CIMObjectPath pathName,
5019 // java.lang.String role)
5020 // throws org.pegasus.jmpi.CIMException
5021 id = env->GetMethodID((jclass)pr.jProviderClass,
5022 "referenceNames",
5023 "(Lorg/pegasus/jmpi/OperationContext;Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;)[Lorg/pegasus/jmpi/CIMObjectPath;");
5024
5025 if (id != NULL)
5026 {
5027 eMethodFound = METHOD_CIMASSOCIATORPROVIDER2;
5028 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferenceNamesRequest: found METHOD_CIMASSOCIATORPROVIDER2."<<PEGASUS_STD(endl));
5029 }
5030 }
5031 }
5032 mark.hamzy 1.43
5033 if (id == NULL)
5034 {
5035 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferenceNamesRequest: found no method!"<<PEGASUS_STD(endl));
5036
5037 PEG_METHOD_EXIT();
5038
5039 STAT_COPYDISPATCHER
5040
5041 throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
5042 MessageLoaderParms ("ProviderManager.JMPI.METHOD_NOT_FOUND",
5043 "Could not find a method for the provider based on InterfaceType."));
5044 }
5045
5046 JMPIjvm::checkException(env);
5047
5048 switch (eMethodFound)
5049 {
5050 case METHOD_CIMASSOCIATORPROVIDER:
5051 {
5052 jint jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, resultPath);
5053 mark.hamzy 1.43 jobject jAssociationName = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
5054
5055 JMPIjvm::checkException(env);
5056
5057 jint jPathNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
5058 jobject jPathName = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jPathNameRef);
5059
5060 JMPIjvm::checkException(env);
5061
5062 jstring jRole = env->NewStringUTF(request->role.getCString());
5063
5064 JMPIjvm::checkException(env);
5065
5066 #ifdef PEGASUS_DEBUG
5067 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferenceNamesRequest: assocName = "<<objectPath->toString ()<<PEGASUS_STD(endl));
5068 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferenceNamesRequest: role = "<<request->role<<PEGASUS_STD(endl));
5069 #endif
5070
5071 jobjectArray jVec=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
5072 id,
5073 jPathName,
5074 mark.hamzy 1.43 jAssociationName,
5075 jRole);
5076
5077 JMPIjvm::checkException(env);
5078
5079 STAT_PMS_PROVIDEREND;
5080
5081 handler.processing();
5082 if (jVec) {
5083 for (int i=0,m=env->GetArrayLength(jVec); i<m; i++) {
5084 JMPIjvm::checkException(env);
5085
5086 jobject jcopRet = env->GetObjectArrayElement(jVec,i);
5087
5088 JMPIjvm::checkException(env);
5089
5090 jint jcopRetRef = env->CallIntMethod(jcopRet,JMPIjvm::jv.CIMObjectPathCInst);
5091
5092 JMPIjvm::checkException(env);
5093
5094 CIMObjectPath *copRet = DEBUG_ConvertJavaToC (jint, CIMObjectPath*, jcopRetRef);
5095 mark.hamzy 1.43
5096 handler.deliver(*copRet);
5097 }
5098 }
5099 handler.complete();
5100 break;
5101 }
5102
5103 case METHOD_CIMASSOCIATORPROVIDER2:
5104 {
5105 jint jocRef = DEBUG_ConvertCToJava (OperationContext*, jint, &request->operationContext);
5106 jobject joc = env->NewObject(jv->OperationContextClassRef,jv->OperationContextNewI,jocRef);
5107
5108 jint jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, resultPath);
5109 jobject jAssociationName = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
5110
5111 JMPIjvm::checkException(env);
5112
5113 jint jPathNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
5114 jobject jPathName = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jPathNameRef);
5115
5116 mark.hamzy 1.43 JMPIjvm::checkException(env);
5117
5118 jstring jRole = env->NewStringUTF(request->role.getCString());
5119
5120 JMPIjvm::checkException(env);
5121
5122 #ifdef PEGASUS_DEBUG
5123 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferenceNamesRequest: assocName = "<<objectPath->toString ()<<PEGASUS_STD(endl));
5124 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferenceNamesRequest: role = "<<request->role<<PEGASUS_STD(endl));
5125 #endif
5126
5127 jobjectArray jVec=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
5128 id,
5129 joc,
5130 jPathName,
5131 jAssociationName,
5132 jRole);
5133
5134 JMPIjvm::checkException(env);
5135
5136 STAT_PMS_PROVIDEREND;
5137 mark.hamzy 1.43
5138 if (joc)
5139 {
5140 env->CallVoidMethod (joc, JMPIjvm::jv.OperationContextUnassociate);
5141
5142 JMPIjvm::checkException(env);
5143 }
5144
5145 handler.processing();
5146 if (jVec) {
5147 for (int i=0,m=env->GetArrayLength(jVec); i<m; i++) {
5148 JMPIjvm::checkException(env);
|
5149 schuur 1.1
|
5150 mark.hamzy 1.43 jobject jcopRet = env->GetObjectArrayElement(jVec,i);
|
5151 schuur 1.1
|
5152 mark.hamzy 1.43 JMPIjvm::checkException(env);
|
5153 mark.hamzy 1.24
|
5154 mark.hamzy 1.43 jint jcopRetRef = env->CallIntMethod(jcopRet,JMPIjvm::jv.CIMObjectPathCInst);
|
5155 mark.hamzy 1.24
|
5156 mark.hamzy 1.43 JMPIjvm::checkException(env);
|
5157 mark.hamzy 1.24
|
5158 mark.hamzy 1.43 CIMObjectPath *copRet = DEBUG_ConvertJavaToC (jint, CIMObjectPath*, jcopRetRef);
|
5159 mark.hamzy 1.24
|
5160 mark.hamzy 1.43 handler.deliver(*copRet);
5161 }
|
5162 mark.hamzy 1.24 }
|
5163 mark.hamzy 1.43 handler.complete();
5164 break;
|
5165 mark.hamzy 1.24 }
|
5166 schuur 1.11
|
5167 mark.hamzy 1.43 case METHOD_ASSOCIATORPROVIDER:
|
5168 mark.hamzy 1.24 {
|
5169 mark.hamzy 1.43 jint jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, resultPath);
5170 jobject jAssociationName = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
|
5171 mark.hamzy 1.24
|
5172 mark.hamzy 1.43 JMPIjvm::checkException(env);
|
5173 schuur 1.1
|
5174 mark.hamzy 1.43 jint jPathNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
5175 jobject jPathName = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jPathNameRef);
|
5176 mark.hamzy 1.25
5177 JMPIjvm::checkException(env);
5178
5179 jstring jRole = env->NewStringUTF(request->role.getCString());
5180
5181 JMPIjvm::checkException(env);
5182
|
5183 mark.hamzy 1.29 #ifdef PEGASUS_DEBUG
5184 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferenceNamesRequest: assocName = "<<objectPath->toString ()<<PEGASUS_STD(endl));
|
5185 mark.hamzy 1.43 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferenceNamesRequest: pathName = "<<resultPath->toString ()<<PEGASUS_STD(endl));
|
5186 mark.hamzy 1.29 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferenceNamesRequest: role = "<<request->role<<PEGASUS_STD(endl));
5187 #endif
5188
|
5189 mark.hamzy 1.24 jobjectArray jVec=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
5190 id,
5191 jAssociationName,
|
5192 mark.hamzy 1.43 jPathName,
|
5193 mark.hamzy 1.24 jRole);
|
5194 mark.hamzy 1.25
|
5195 mark.hamzy 1.23 JMPIjvm::checkException(env);
5196
5197 STAT_PMS_PROVIDEREND;
5198
5199 handler.processing();
5200 if (jVec) {
|
5201 mark.hamzy 1.43 for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); i<m; i++) {
|
5202 mark.hamzy 1.23 JMPIjvm::checkException(env);
5203
|
5204 mark.hamzy 1.43 jobject jcopRet = env->CallObjectMethod(jVec,JMPIjvm::jv.VectorElementAt,i);
|
5205 mark.hamzy 1.24
|
5206 mark.hamzy 1.23 JMPIjvm::checkException(env);
5207
|
5208 mark.hamzy 1.29 jint jcopRetRef = env->CallIntMethod(jcopRet,JMPIjvm::jv.CIMObjectPathCInst);
|
5209 mark.hamzy 1.23
5210 JMPIjvm::checkException(env);
5211
|
5212 mark.hamzy 1.29 CIMObjectPath *copRet = DEBUG_ConvertJavaToC (jint, CIMObjectPath*, jcopRetRef);
|
5213 mark.hamzy 1.24
|
5214 mark.hamzy 1.29 handler.deliver(*copRet);
|
5215 mark.hamzy 1.23 }
5216 }
5217 handler.complete();
|
5218 mark.hamzy 1.24 break;
|
5219 mark.hamzy 1.23 }
|
5220 mark.hamzy 1.24
|
5221 mark.hamzy 1.43 case METHOD_ASSOCIATORPROVIDER2:
|
5222 mark.hamzy 1.24 {
|
5223 mark.hamzy 1.43 jint jocRef = DEBUG_ConvertCToJava (OperationContext*, jint, &request->operationContext);
5224 jobject joc = env->NewObject(jv->OperationContextClassRef,jv->OperationContextNewI,jocRef);
5225
|
5226 mark.hamzy 1.29 jint jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, resultPath);
|
5227 mark.hamzy 1.25 jobject jAssociationName = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
5228
5229 JMPIjvm::checkException(env);
5230
|
5231 mark.hamzy 1.29 jint jPathNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
|
5232 mark.hamzy 1.24 jobject jPathName = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jPathNameRef);
5233
5234 JMPIjvm::checkException(env);
5235
|
5236 mark.hamzy 1.25 jstring jRole = env->NewStringUTF(request->role.getCString());
5237
5238 JMPIjvm::checkException(env);
5239
|
5240 mark.hamzy 1.29 #ifdef PEGASUS_DEBUG
5241 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferenceNamesRequest: assocName = "<<objectPath->toString ()<<PEGASUS_STD(endl));
5242 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferenceNamesRequest: pathName = "<<resultPath->toString ()<<PEGASUS_STD(endl));
5243 DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferenceNamesRequest: role = "<<request->role<<PEGASUS_STD(endl));
5244 #endif
5245
|
5246 mark.hamzy 1.24 jobjectArray jVec=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
5247 id,
|
5248 mark.hamzy 1.43 joc,
|
5249 mark.hamzy 1.24 jAssociationName,
5250 jPathName,
5251 jRole);
|
5252 mark.hamzy 1.25
|
5253 mark.hamzy 1.23 JMPIjvm::checkException(env);
5254
5255 STAT_PMS_PROVIDEREND;
|
5256 schuur 1.13
|
5257 mark.hamzy 1.43 if (joc)
5258 {
5259 env->CallVoidMethod (joc, JMPIjvm::jv.OperationContextUnassociate);
5260
5261 JMPIjvm::checkException(env);
5262 }
5263
|
5264 mark.hamzy 1.23 handler.processing();
|
5265 mark.hamzy 1.24 if (jVec) {
|
5266 mark.hamzy 1.29 for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); i<m; i++) {
|
5267 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
5268 schuur 1.13
|
5269 mark.hamzy 1.29 jobject jcopRet = env->CallObjectMethod(jVec,JMPIjvm::jv.VectorElementAt,i);
|
5270 mark.hamzy 1.24
|
5271 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
5272 schuur 1.13
|
5273 mark.hamzy 1.29 jint jcopRetRef = env->CallIntMethod(jcopRet,JMPIjvm::jv.CIMObjectPathCInst);
|
5274 schuur 1.1
|
5275 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
5276 schuur 1.1
|
5277 mark.hamzy 1.29 CIMObjectPath *copRet = DEBUG_ConvertJavaToC (jint, CIMObjectPath*, jcopRetRef);
|
5278 mark.hamzy 1.24
|
5279 mark.hamzy 1.29 handler.deliver(*copRet);
|
5280 mark.hamzy 1.23 }
5281 }
5282 handler.complete();
|
5283 mark.hamzy 1.24 break;
5284 }
5285
5286 case METHOD_UNKNOWN:
5287 {
|
5288 mark.hamzy 1.25 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferenceNamesRequest: should not be here!"<<PEGASUS_STD(endl));
|
5289 mark.hamzy 1.24 break;
5290 }
|
5291 mark.hamzy 1.23 }
|
5292 schuur 1.1 }
5293 HandlerCatch(handler);
|
5294 schuur 1.11
5295 if (env) JMPIjvm::detachThread();
5296
|
5297 schuur 1.1 PEG_METHOD_EXIT();
5298
|
5299 w.white 1.31 STAT_COPYDISPATCHER
5300
|
5301 schuur 1.1 return(response);
5302 }
5303
|
5304 mark.hamzy 1.26 Message * JMPIProviderManager::handleGetPropertyRequest(const Message * message) throw()
5305 {
5306 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleGetPropertyRequest");
5307
5308 HandlerIntro(GetProperty,message,request,response,handler,CIMValue());
5309
5310 typedef enum {
5311 METHOD_UNKNOWN = 0,
|
5312 mark.hamzy 1.43 METHOD_PROPERTYPROVIDER,
5313 METHOD_PROPERTYPROVIDER2,
|
5314 mark.hamzy 1.26 } METHOD_VERSION;
5315 METHOD_VERSION eMethodFound = METHOD_UNKNOWN;
5316 JNIEnv *env = NULL;
5317
5318 try {
5319 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
5320 "JMPIProviderManager::handleGetPropertyRequest - Host name: $0 Name space: $1 Class name: $2",
5321 System::getHostName(),
5322 request->nameSpace.getString(),
5323 request->instanceName.getClassName().getString());
5324
5325 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleGetPropertyRequest: hostname = "<<System::getHostName()<<", namespace = "<<request->nameSpace.getString()<<", classname = "<<request->className.getString()<<PEGASUS_STD(endl));
5326
5327 // make target object path
|
5328 mark.hamzy 1.27 CIMObjectPath *objectPath = new CIMObjectPath (System::getHostName(),
5329 request->nameSpace,
5330 request->instanceName.getClassName(),
5331 request->instanceName.getKeyBindings());
|
5332 mark.hamzy 1.26
5333 // resolve provider name
5334 ProviderName name = _resolveProviderName(
5335 request->operationContext.get(ProviderIdContainer::NAME));
5336
5337 // get cached or load new provider module
|
5338 mark.hamzy 1.43 JMPIProvider::OpProviderHolder ph = providerManager.getProvider (name.getPhysicalName(),
5339 name.getLogicalName(),
5340 String::EMPTY);
|
5341 mark.hamzy 1.26
5342 // forward request
5343 JMPIProvider &pr = ph.GetProvider();
5344
5345 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,"Calling provider.getPropertyValue: " + pr.getName());
5346
5347 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleGetPropertyRequest: Calling provider getPropertyValue: "<<pr.getName()<<PEGASUS_STD(endl));
5348
5349 JvmVector *jv = 0;
5350
5351 env = JMPIjvm::attachThread(&jv);
5352
|
5353 mark.hamzy 1.37 if (!env)
5354 {
5355 PEG_METHOD_EXIT();
5356
5357 STAT_COPYDISPATCHER
5358
5359 throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
5360 MessageLoaderParms("ProviderManager.JMPI.INIT_JVM_FAILED",
5361 "Could not initialize the JVM (Java Virtual Machine) runtime environment."));
5362 }
5363
|
5364 mark.hamzy 1.26 JMPIProvider::pm_service_op_lock op_lock(&pr);
5365
5366 STAT_GETSTARTTIME;
5367
|
5368 mark.hamzy 1.43 jmethodID id = NULL;
5369 String interfaceType;
5370 String interfaceVersion;
5371
5372 getInterfaceType (request->operationContext.get (ProviderIdContainer::NAME),
5373 interfaceType,
5374 interfaceVersion);
5375
5376 if (interfaceType == "JMPI")
5377 {
5378 // public abstract org.pegasus.jmpi.CIMValue getPropertyValue (org.pegasus.jmpi.CIMObjectPath cop,
5379 // java.lang.String oclass,
5380 // java.lang.String pName)
5381 // throws org.pegasus.jmpi.CIMException
5382 //
5383 id = env->GetMethodID((jclass)pr.jProviderClass,
5384 "getPropertyValue",
5385 "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;)Lorg/pegasus/jmpi/CIMValue;");
|
5386 mark.hamzy 1.26
|
5387 mark.hamzy 1.43 if (id != NULL)
5388 {
5389 eMethodFound = METHOD_PROPERTYPROVIDER;
5390 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleGetPropertyRequest: found METHOD_PROPERTYPROVIDER."<<PEGASUS_STD(endl));
5391 }
5392 }
5393 else if (interfaceType == "JMPIExperimental")
5394 {
5395 // public abstract org.pegasus.jmpi.CIMValue getPropertyValue (org.pegasus.jmpi.OperationContext oc,
5396 // org.pegasus.jmpi.CIMObjectPath cop,
5397 // java.lang.String oclass,
5398 // java.lang.String pName)
5399 // throws org.pegasus.jmpi.CIMException
5400 //
5401 id = env->GetMethodID((jclass)pr.jProviderClass,
5402 "getPropertyValue",
5403 " (Lorg/pegasus/jmpi/OperationContext;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;)Lorg/pegasus/jmpi/CIMValue;");
|
5404 mark.hamzy 1.26
|
5405 mark.hamzy 1.43 if (id != NULL)
5406 {
5407 eMethodFound = METHOD_PROPERTYPROVIDER2;
5408 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleGetPropertyRequest: found METHOD_PROPERTYPROVIDER2."<<PEGASUS_STD(endl));
5409 }
|
5410 mark.hamzy 1.26 }
5411
5412 if (id == NULL)
5413 {
5414 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleGetPropertyRequest: found no method!"<<PEGASUS_STD(endl));
|
5415 mark.hamzy 1.43
5416 PEG_METHOD_EXIT();
5417
5418 STAT_COPYDISPATCHER
5419
5420 throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
5421 MessageLoaderParms ("ProviderManager.JMPI.METHOD_NOT_FOUND",
5422 "Could not find a method for the provider based on InterfaceType."));
|
5423 mark.hamzy 1.26 }
5424
5425 JMPIjvm::checkException(env);
5426
5427 switch (eMethodFound)
5428 {
|
5429 mark.hamzy 1.43 case METHOD_PROPERTYPROVIDER:
|
5430 mark.hamzy 1.26 {
|
5431 mark.hamzy 1.27 jint jcopref = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
|
5432 mark.hamzy 1.26 jobject jcop = env->NewObject(jv->CIMObjectPathClassRef, jv->CIMObjectPathNewI, jcopref);
5433
5434 JMPIjvm::checkException(env);
5435
5436 jstring joclass = env->NewStringUTF(request->instanceName.getClassName().getString().getCString());
5437
5438 JMPIjvm::checkException(env);
5439
5440 jstring jpName = env->NewStringUTF(request->propertyName.getString().getCString());
5441
5442 JMPIjvm::checkException(env);
5443
5444 STAT_GETSTARTTIME;
5445
|
5446 mark.hamzy 1.29 jobject jvalRet = env->CallObjectMethod ((jobject)pr.jProvider,
5447 id,
5448 jcop,
5449 joclass,
5450 jpName);
|
5451 mark.hamzy 1.26
5452 JMPIjvm::checkException(env);
5453
5454 STAT_PMS_PROVIDEREND;
5455
5456 handler.processing();
5457
|
5458 mark.hamzy 1.29 if (jvalRet)
|
5459 mark.hamzy 1.26 {
|
5460 mark.hamzy 1.29 jint jvalRetRef = env->CallIntMethod(jvalRet,JMPIjvm::jv.CIMValueCInst);
5461 CIMValue *valRet = DEBUG_ConvertJavaToC (jint, CIMValue*, jvalRetRef);
|
5462 mark.hamzy 1.26
5463 JMPIjvm::checkException(env);
5464
|
5465 mark.hamzy 1.29 handler.deliver(*valRet);
|
5466 mark.hamzy 1.26 }
5467 handler.complete();
5468 break;
5469 }
5470
|
5471 mark.hamzy 1.43 case METHOD_PROPERTYPROVIDER2:
5472 {
5473 jint jocRef = DEBUG_ConvertCToJava (OperationContext*, jint, &request->operationContext);
5474 jobject joc = env->NewObject(jv->OperationContextClassRef,jv->OperationContextNewI,jocRef);
5475
5476 jint jcopref = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
5477 jobject jcop = env->NewObject(jv->CIMObjectPathClassRef, jv->CIMObjectPathNewI, jcopref);
5478
5479 JMPIjvm::checkException(env);
5480
5481 jstring joclass = env->NewStringUTF(request->instanceName.getClassName().getString().getCString());
5482
5483 JMPIjvm::checkException(env);
5484
5485 jstring jpName = env->NewStringUTF(request->propertyName.getString().getCString());
5486
5487 JMPIjvm::checkException(env);
5488
5489 STAT_GETSTARTTIME;
5490
5491 jobject jvalRet = env->CallObjectMethod ((jobject)pr.jProvider,
5492 mark.hamzy 1.43 id,
5493 joc,
5494 jcop,
5495 joclass,
5496 jpName);
5497
5498 JMPIjvm::checkException(env);
5499
5500 STAT_PMS_PROVIDEREND;
5501
5502 if (joc)
5503 {
5504 env->CallVoidMethod (joc, JMPIjvm::jv.OperationContextUnassociate);
5505
5506 JMPIjvm::checkException(env);
5507 }
5508
5509 handler.processing();
5510
5511 if (jvalRet)
5512 {
5513 mark.hamzy 1.43 jint jvalRetRef = env->CallIntMethod(jvalRet,JMPIjvm::jv.CIMValueCInst);
5514 CIMValue *valRet = DEBUG_ConvertJavaToC (jint, CIMValue*, jvalRetRef);
5515
5516 JMPIjvm::checkException(env);
5517
5518 handler.deliver(*valRet);
5519 }
5520 handler.complete();
5521 break;
5522 }
5523
|
5524 mark.hamzy 1.26 case METHOD_UNKNOWN:
5525 {
5526 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleGetPropertyRequest: should not be here!"<<PEGASUS_STD(endl));
5527 break;
5528 }
5529 }
5530 }
5531 HandlerCatch(handler);
5532
5533 if (env) JMPIjvm::detachThread();
5534
5535 PEG_METHOD_EXIT();
5536
|
5537 w.white 1.31 STAT_COPYDISPATCHER
5538
|
5539 mark.hamzy 1.26 return(response);
5540 }
5541
5542 Message * JMPIProviderManager::handleSetPropertyRequest(const Message * message) throw()
5543 {
5544 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleSetPropertyRequest");
5545
5546 HandlerIntroVoid(SetProperty,message,request,response,handler);
5547
5548 typedef enum {
5549 METHOD_UNKNOWN = 0,
|
5550 mark.hamzy 1.43 METHOD_PROPERTYPROVIDER,
5551 METHOD_PROPERTYPROVIDER2,
|
5552 mark.hamzy 1.26 } METHOD_VERSION;
5553 METHOD_VERSION eMethodFound = METHOD_UNKNOWN;
5554 JNIEnv *env = NULL;
5555
5556 try {
5557 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
5558 "JMPIProviderManager::handleSetPropertyRequest - Host name: $0 Name space: $1 Class name: $2",
5559 System::getHostName(),
5560 request->nameSpace.getString(),
5561 request->instanceName.getClassName().getString());
5562
5563 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleSetPropertyRequest: hostname = "<<System::getHostName()<<", namespace = "<<request->nameSpace.getString()<<", classname = "<<request->className.getString()<<PEGASUS_STD(endl));
5564
5565 // make target object path
|
5566 mark.hamzy 1.27 CIMObjectPath *objectPath = new CIMObjectPath (System::getHostName(),
5567 request->nameSpace,
5568 request->instanceName.getClassName(),
5569 request->instanceName.getKeyBindings());
|
5570 mark.hamzy 1.26
5571 // resolve provider name
5572 ProviderName name = _resolveProviderName(
5573 request->operationContext.get(ProviderIdContainer::NAME));
5574
5575 // get cached or load new provider module
|
5576 mark.hamzy 1.43 JMPIProvider::OpProviderHolder ph = providerManager.getProvider (name.getPhysicalName(),
5577 name.getLogicalName(),
5578 String::EMPTY);
|
5579 mark.hamzy 1.26
5580 // forward request
5581 JMPIProvider &pr = ph.GetProvider();
5582
5583 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,"Calling provider.setPropertyValue: " + pr.getName());
5584
5585 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleSetPropertyRequest: Calling provider setPropertyValue: "<<pr.getName()<<PEGASUS_STD(endl));
5586
5587 JvmVector *jv = 0;
5588
5589 env = JMPIjvm::attachThread(&jv);
5590
|
5591 mark.hamzy 1.37 if (!env)
5592 {
5593 PEG_METHOD_EXIT();
5594
5595 STAT_COPYDISPATCHER
5596
5597 throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
5598 MessageLoaderParms("ProviderManager.JMPI.INIT_JVM_FAILED",
5599 "Could not initialize the JVM (Java Virtual Machine) runtime environment."));
5600 }
5601
|
5602 mark.hamzy 1.26 JMPIProvider::pm_service_op_lock op_lock(&pr);
5603
5604 STAT_GETSTARTTIME;
5605
|
5606 mark.hamzy 1.43 jmethodID id = NULL;
5607 String interfaceType;
5608 String interfaceVersion;
5609
5610 getInterfaceType (request->operationContext.get (ProviderIdContainer::NAME),
5611 interfaceType,
5612 interfaceVersion);
5613
5614 if (interfaceType == "JMPI")
5615 {
5616 // public abstract void setPropertyValue (org.pegasus.jmpi.CIMObjectPath cop,
5617 // java.lang.String oclass,
5618 // java.lang.String pName,
5619 // org.pegasus.jmpi.CIMValue val)
5620 // throws org.pegasus.jmpi.CIMException
5621 //
5622 id = env->GetMethodID((jclass)pr.jProviderClass,
5623 "setPropertyValue",
5624 "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Lorg/pegasus/jmpi/CIMValue;)V");
|
5625 mark.hamzy 1.26
|
5626 mark.hamzy 1.43 if (id != NULL)
5627 {
5628 eMethodFound = METHOD_PROPERTYPROVIDER;
5629 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleSetPropertyRequest: found METHOD_PROPERTYPROVIDER."<<PEGASUS_STD(endl));
5630 }
5631 }
5632 else if (interfaceType == "JMPIExperimental")
5633 {
5634 // public abstract void setPropertyValue (org.pegasus.jmpi.OperationContext oc,
5635 // org.pegasus.jmpi.CIMObjectPath cop,
5636 // java.lang.String oclass,
5637 // java.lang.String pName,
5638 // org.pegasus.jmpi.CIMValue val)
5639 // throws org.pegasus.jmpi.CIMException
5640 //
5641 id = env->GetMethodID((jclass)pr.jProviderClass,
5642 "setPropertyValue",
5643 " (Lorg/pegasus/jmpi/OperationContext;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Lorg/pegasus/jmpi/CIMValue;)V");
|
5644 mark.hamzy 1.26
|
5645 mark.hamzy 1.43 if (id != NULL)
5646 {
5647 eMethodFound = METHOD_PROPERTYPROVIDER2;
5648 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleSetPropertyRequest: found METHOD_PROPERTYPROVIDER2."<<PEGASUS_STD(endl));
5649 }
|
5650 mark.hamzy 1.26 }
5651
5652 if (id == NULL)
5653 {
5654 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleSetPropertyRequest: found no method!"<<PEGASUS_STD(endl));
|
5655 mark.hamzy 1.43
5656 PEG_METHOD_EXIT();
5657
5658 STAT_COPYDISPATCHER
5659
5660 throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
5661 MessageLoaderParms ("ProviderManager.JMPI.METHOD_NOT_FOUND",
5662 "Could not find a method for the provider based on InterfaceType."));
|
5663 mark.hamzy 1.26 }
5664
5665 JMPIjvm::checkException(env);
5666
5667 switch (eMethodFound)
5668 {
|
5669 mark.hamzy 1.43 case METHOD_PROPERTYPROVIDER:
5670 {
5671 jint jcopref = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
5672 jobject jcop = env->NewObject(jv->CIMObjectPathClassRef, jv->CIMObjectPathNewI, jcopref);
5673
5674 JMPIjvm::checkException(env);
5675
5676 jstring joclass = env->NewStringUTF(request->instanceName.getClassName().getString().getCString());
5677
5678 JMPIjvm::checkException(env);
5679
5680 jstring jpName = env->NewStringUTF(request->propertyName.getString().getCString());
5681
5682 JMPIjvm::checkException(env);
5683
5684 CIMValue *val = new CIMValue (request->newValue);
5685
5686 JMPIjvm::checkException(env);
5687
5688 jint jvalref = DEBUG_ConvertCToJava (CIMValue*, jint, val);
5689 jobject jval = env->NewObject(jv->CIMValueClassRef, jv->CIMValueNewI, jvalref);
5690 mark.hamzy 1.43
5691 JMPIjvm::checkException(env);
5692
5693 STAT_GETSTARTTIME;
5694
5695 env->CallVoidMethod ((jobject)pr.jProvider,
5696 id,
5697 jcop,
5698 joclass,
5699 jpName,
5700 jval);
5701
5702 JMPIjvm::checkException(env);
5703
5704 STAT_PMS_PROVIDEREND;
5705 break;
5706 }
5707
5708 case METHOD_PROPERTYPROVIDER2:
|
5709 mark.hamzy 1.26 {
|
5710 mark.hamzy 1.43 jint jocRef = DEBUG_ConvertCToJava (OperationContext*, jint, &request->operationContext);
5711 jobject joc = env->NewObject(jv->OperationContextClassRef,jv->OperationContextNewI,jocRef);
5712
|
5713 mark.hamzy 1.27 jint jcopref = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
|
5714 mark.hamzy 1.26 jobject jcop = env->NewObject(jv->CIMObjectPathClassRef, jv->CIMObjectPathNewI, jcopref);
5715
5716 JMPIjvm::checkException(env);
5717
5718 jstring joclass = env->NewStringUTF(request->instanceName.getClassName().getString().getCString());
5719
5720 JMPIjvm::checkException(env);
5721
5722 jstring jpName = env->NewStringUTF(request->propertyName.getString().getCString());
5723
5724 JMPIjvm::checkException(env);
5725
|
5726 mark.hamzy 1.27 CIMValue *val = new CIMValue (request->newValue);
|
5727 mark.hamzy 1.26
5728 JMPIjvm::checkException(env);
5729
|
5730 mark.hamzy 1.27 jint jvalref = DEBUG_ConvertCToJava (CIMValue*, jint, val);
|
5731 mark.hamzy 1.26 jobject jval = env->NewObject(jv->CIMValueClassRef, jv->CIMValueNewI, jvalref);
5732
5733 JMPIjvm::checkException(env);
5734
5735 STAT_GETSTARTTIME;
5736
5737 env->CallVoidMethod ((jobject)pr.jProvider,
5738 id,
|
5739 mark.hamzy 1.43 joc,
|
5740 mark.hamzy 1.26 jcop,
5741 joclass,
5742 jpName,
5743 jval);
5744
5745 JMPIjvm::checkException(env);
5746
|
5747 mark.hamzy 1.43 if (joc)
5748 {
5749 env->CallVoidMethod (joc, JMPIjvm::jv.OperationContextUnassociate);
5750
5751 JMPIjvm::checkException(env);
5752 }
5753
|
5754 mark.hamzy 1.26 STAT_PMS_PROVIDEREND;
5755 break;
5756 }
5757
5758 case METHOD_UNKNOWN:
5759 {
5760 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleSetPropertyRequest: should not be here!"<<PEGASUS_STD(endl));
5761 break;
5762 }
5763 }
5764 }
5765 HandlerCatch(handler);
5766
5767 if (env) JMPIjvm::detachThread();
5768
5769 PEG_METHOD_EXIT();
5770
|
5771 w.white 1.31 STAT_COPYDISPATCHER
5772
|
5773 mark.hamzy 1.26 return(response);
5774 }
5775
|
5776 schuur 1.1 Message * JMPIProviderManager::handleInvokeMethodRequest(const Message * message) throw()
5777 {
|
5778 mark.hamzy 1.23 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleInvokeMethodRequest");
5779
5780 HandlerIntroMethod(InvokeMethod,message,request,response,handler);
|
5781 schuur 1.1
|
5782 mark.hamzy 1.25 typedef enum {
5783 METHOD_UNKNOWN = 0,
|
5784 mark.hamzy 1.43 METHOD_CIMMETHODPROVIDER,
5785 METHOD_CIMMETHODPROVIDER2,
5786 METHOD_METHODPROVIDER,
5787 METHOD_METHODPROVIDER2,
|
5788 mark.hamzy 1.25 } METHOD_VERSION;
5789 METHOD_VERSION eMethodFound = METHOD_UNKNOWN;
5790 JNIEnv *env = NULL;
|
5791 schuur 1.13
|
5792 schuur 1.1 try {
5793 Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
5794 "JMPIProviderManager::handleInvokeMethodRequest - Host name: $0 Name space: $1 Class name: $2",
5795 System::getHostName(),
5796 request->nameSpace.getString(),
5797 request->instanceName.getClassName().getString());
5798
|
5799 mark.hamzy 1.23 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleInvokeMethodRequest: hostname = "<<System::getHostName()<<", namespace = "<<request->nameSpace.getString()<<", classname = "<<request->instanceName.getClassName().getString()<<PEGASUS_STD(endl));
5800
|
5801 schuur 1.1 // make target object path
|
5802 mark.hamzy 1.27 CIMObjectPath *objectPath = new CIMObjectPath (System::getHostName(),
5803 request->nameSpace,
5804 request->instanceName.getClassName(),
5805 request->instanceName.getKeyBindings());
|
5806 schuur 1.1
5807 // resolve provider name
|
5808 kumpf 1.2 ProviderName name = _resolveProviderName(
5809 request->operationContext.get(ProviderIdContainer::NAME));
|
5810 schuur 1.1
5811 // get cached or load new provider module
|
5812 mark.hamzy 1.43 JMPIProvider::OpProviderHolder ph = providerManager.getProvider (name.getPhysicalName(),
5813 name.getLogicalName(),
5814 String::EMPTY);
|
5815 schuur 1.1
|
5816 mark.hamzy 1.25 JMPIProvider &pr=ph.GetProvider();
|
5817 schuur 1.1
|
5818 mark.hamzy 1.25 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, "Calling provider.invokeMethod: " + pr.getName());
|
5819 schuur 1.1
|
5820 mark.hamzy 1.23 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleInvokeMethodRequest: Calling provider invokeMethod: "<<pr.getName()<<PEGASUS_STD(endl));
|
5821 schuur 1.11
|
5822 mark.hamzy 1.25 JvmVector *jv = 0;
|
5823 mark.hamzy 1.23
|
5824 mark.hamzy 1.25 env = JMPIjvm::attachThread(&jv);
|
5825 schuur 1.11
|
5826 mark.hamzy 1.37 if (!env)
5827 {
|
5828 mark.hamzy 1.43 PEG_METHOD_EXIT();
5829
5830 STAT_COPYDISPATCHER
5831
5832 throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
5833 MessageLoaderParms("ProviderManager.JMPI.INIT_JVM_FAILED",
5834 "Could not initialize the JVM (Java Virtual Machine) runtime environment."));
5835 }
5836
5837 JMPIProvider::pm_service_op_lock op_lock(&pr);
5838
5839 STAT_GETSTARTTIME;
5840
5841 jmethodID id = NULL;
5842 String interfaceType;
5843 String interfaceVersion;
5844
5845 getInterfaceType (request->operationContext.get (ProviderIdContainer::NAME),
5846 interfaceType,
5847 interfaceVersion);
5848
5849 mark.hamzy 1.43 if (interfaceType == "JMPI")
5850 {
5851 // public abstract org.pegasus.jmpi.CIMValue invokeMethod (org.pegasus.jmpi.CIMObjectPath cop,
5852 // java.lang.String name,
5853 // java.util.Vector in,
5854 // java.util.Vector out)
5855 // throws org.pegasus.jmpi.CIMException
5856 id = env->GetMethodID((jclass)pr.jProviderClass,
5857 "invokeMethod",
5858 "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/util/Vector;Ljava/util/Vector;)Lorg/pegasus/jmpi/CIMValue;");
5859
5860 if (id != NULL)
5861 {
5862 eMethodFound = METHOD_METHODPROVIDER;
5863 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleInvokeMethodRequest: found METHOD_METHODPROVIDER."<<PEGASUS_STD(endl));
5864 }
5865
5866 if (id == NULL)
5867 {
5868 env->ExceptionClear();
5869
5870 mark.hamzy 1.43 // public org.pegasus.jmpi.CIMValue invokeMethod (org.pegasus.jmpi.CIMObjectPath op,
5871 // java.lang.String methodName,
5872 // org.pegasus.jmpi.CIMArgument[] inArgs,
5873 // org.pegasus.jmpi.CIMArgument[] outArgs)
5874 // throws org.pegasus.jmpi.CIMException
5875 id = env->GetMethodID((jclass)pr.jProviderClass,
5876 "invokeMethod",
5877 "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;[Lorg/pegasus/jmpi/CIMArgument;[Lorg/pegasus/jmpi/CIMArgument;)Lorg/pegasus/jmpi/CIMValue;");
5878
5879 if (id != NULL)
5880 {
5881 eMethodFound = METHOD_CIMMETHODPROVIDER;
5882 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleInvokeMethodRequest: found METHOD_CIMMETHODPROVIDER."<<PEGASUS_STD(endl));
5883 }
5884 }
5885 }
5886 else if (interfaceType == "JMPIExperimental")
5887 {
5888 // public abstract org.pegasus.jmpi.CIMValue invokeMethod (org.pegasus.jmpi.OperationContext oc,
5889 // org.pegasus.jmpi.CIMObjectPath cop,
5890 // java.lang.String name,
5891 mark.hamzy 1.43 // java.util.Vector in,
5892 // java.util.Vector out)
5893 // throws org.pegasus.jmpi.CIMException
5894 id = env->GetMethodID((jclass)pr.jProviderClass,
5895 "invokeMethod",
5896 "(Lorg/pegasus/jmpi/OperationContext;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/util/Vector;Ljava/util/Vector;)Lorg/pegasus/jmpi/CIMValue;");
5897
5898 if (id != NULL)
5899 {
5900 eMethodFound = METHOD_METHODPROVIDER2;
5901 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleInvokeMethodRequest: found METHOD_METHODPROVIDER2."<<PEGASUS_STD(endl));
5902 }
5903
5904 if (id == NULL)
5905 {
5906 env->ExceptionClear();
5907
5908 // public org.pegasus.jmpi.CIMValue invokeMethod (org.pegasus.jmpi.OperationContext oc,
5909 // org.pegasus.jmpi.CIMObjectPath op,
5910 // java.lang.String methodName,
5911 // org.pegasus.jmpi.CIMArgument[] inArgs,
5912 mark.hamzy 1.43 // org.pegasus.jmpi.CIMArgument[] outArgs)
5913 // throws org.pegasus.jmpi.CIMException
5914 id = env->GetMethodID((jclass)pr.jProviderClass,
5915 "invokeMethod",
5916 "(Lorg/pegasus/jmpi/OperationContext;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;[Lorg/pegasus/jmpi/CIMArgument;[Lorg/pegasus/jmpi/CIMArgument;)Lorg/pegasus/jmpi/CIMValue;");
5917
5918 if (id != NULL)
5919 {
5920 eMethodFound = METHOD_CIMMETHODPROVIDER2;
5921 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleInvokeMethodRequest: found METHOD_CIMMETHODPROVIDER2."<<PEGASUS_STD(endl));
5922 }
5923 }
5924 }
5925
5926 if (id == NULL)
5927 {
5928 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleInvokeMethodRequest: No method found!"<<PEGASUS_STD(endl));
5929
5930 PEG_METHOD_EXIT();
5931
5932 STAT_COPYDISPATCHER
5933 mark.hamzy 1.43
5934 throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
5935 MessageLoaderParms ("ProviderManager.JMPI.METHOD_NOT_FOUND",
5936 "Could not find a method for the provider based on InterfaceType."));
5937 }
5938
5939 JMPIjvm::checkException(env);
5940
5941 switch (eMethodFound)
5942 {
5943 case METHOD_CIMMETHODPROVIDER:
5944 {
5945 jint jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
5946 jobject jcop = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
5947
5948 JMPIjvm::checkException(env);
5949
5950 jstring jMethod = env->NewStringUTF(request->methodName.getString().getCString());
5951
5952 JMPIjvm::checkException(env);
5953
5954 mark.hamzy 1.43 Uint32 m=request->inParameters.size();
5955
5956 jobjectArray jArIn=(jobjectArray)env->NewObjectArray(m,jv->CIMArgumentClassRef,NULL);
5957
5958 for (Uint32 i=0; i<m; i++) {
5959 CIMParamValue *parm = new CIMParamValue(request->inParameters[i]);
5960 jint jArgRef = DEBUG_ConvertCToJava (CIMParamValue*, jint, parm);
5961 jobject jArg = env->NewObject(jv->CIMArgumentClassRef,jv->CIMArgumentNewI,jArgRef);
5962
5963 env->SetObjectArrayElement(jArIn,i,jArg);
5964 }
5965
5966 jobjectArray jArOut=(jobjectArray)env->NewObjectArray(24,jv->CIMArgumentClassRef,NULL);
5967
5968 jobject jValueRet = env->CallObjectMethod((jobject)pr.jProvider,
5969 id,
5970 jcop,
5971 jMethod,
5972 jArIn,
5973 jArOut);
5974 JMPIjvm::checkException(env);
|
5975 mark.hamzy 1.37
|
5976 mark.hamzy 1.43 STAT_PMS_PROVIDEREND;
|
5977 mark.hamzy 1.37
|
5978 mark.hamzy 1.43 handler.processing();
|
5979 mark.hamzy 1.37
|
5980 mark.hamzy 1.43 jint jValueRetRef = env->CallIntMethod(jValueRet,JMPIjvm::jv.CIMValueCInst);
5981 CIMValue *valueRet = DEBUG_ConvertJavaToC (jint, CIMValue*, jValueRetRef);
|
5982 schuur 1.11
|
5983 mark.hamzy 1.43 handler.deliver(*valueRet);
|
5984 schuur 1.1
|
5985 mark.hamzy 1.43 for (int i=0; i<24; i++) {
5986 jobject jArg = env->GetObjectArrayElement(jArOut,i);
|
5987 mark.hamzy 1.25
|
5988 mark.hamzy 1.43 JMPIjvm::checkException(env);
|
5989 mark.hamzy 1.25
|
5990 mark.hamzy 1.43 if (jArg==NULL)
5991 break;
|
5992 mark.hamzy 1.25
|
5993 mark.hamzy 1.43 jint jpRef = env->CallIntMethod(jArg,JMPIjvm::jv.CIMArgumentCInst);
5994 CIMParamValue *p = DEBUG_ConvertJavaToC (jint, CIMParamValue*, jpRef);
|
5995 mark.hamzy 1.25
|
5996 mark.hamzy 1.43 JMPIjvm::checkException(env);
|
5997 mark.hamzy 1.25
|
5998 mark.hamzy 1.43 handler.deliverParamValue(*p);
|
5999 mark.hamzy 1.25 }
|
6000 mark.hamzy 1.43
6001 handler.complete();
6002 break;
|
6003 mark.hamzy 1.23 }
|
6004 mark.hamzy 1.25
|
6005 mark.hamzy 1.43 case METHOD_CIMMETHODPROVIDER2:
6006 {
6007 jint jocRef = DEBUG_ConvertCToJava (OperationContext*, jint, &request->operationContext);
6008 jobject joc = env->NewObject(jv->OperationContextClassRef,jv->OperationContextNewI,jocRef);
|
6009 schuur 1.11
|
6010 mark.hamzy 1.29 jint jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
6011 jobject jcop = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
|
6012 mark.hamzy 1.25
6013 JMPIjvm::checkException(env);
6014
|
6015 mark.hamzy 1.29 jstring jMethod = env->NewStringUTF(request->methodName.getString().getCString());
6016
|
6017 mark.hamzy 1.23 JMPIjvm::checkException(env);
6018
|
6019 mark.hamzy 1.25 Uint32 m=request->inParameters.size();
6020
6021 jobjectArray jArIn=(jobjectArray)env->NewObjectArray(m,jv->CIMArgumentClassRef,NULL);
|
6022 mark.hamzy 1.29
|
6023 mark.hamzy 1.25 for (Uint32 i=0; i<m; i++) {
|
6024 mark.hamzy 1.29 CIMParamValue *parm = new CIMParamValue(request->inParameters[i]);
6025 jint jArgRef = DEBUG_ConvertCToJava (CIMParamValue*, jint, parm);
6026 jobject jArg = env->NewObject(jv->CIMArgumentClassRef,jv->CIMArgumentNewI,jArgRef);
|
6027 mark.hamzy 1.23
|
6028 mark.hamzy 1.25 env->SetObjectArrayElement(jArIn,i,jArg);
6029 }
|
6030 mark.hamzy 1.23
|
6031 mark.hamzy 1.25 jobjectArray jArOut=(jobjectArray)env->NewObjectArray(24,jv->CIMArgumentClassRef,NULL);
|
6032 mark.hamzy 1.23
|
6033 mark.hamzy 1.29 jobject jValueRet = env->CallObjectMethod((jobject)pr.jProvider,
6034 id,
|
6035 mark.hamzy 1.43 joc,
|
6036 mark.hamzy 1.29 jcop,
6037 jMethod,
6038 jArIn,
6039 jArOut);
|
6040 mark.hamzy 1.23 JMPIjvm::checkException(env);
6041
6042 STAT_PMS_PROVIDEREND;
6043
|
6044 mark.hamzy 1.43 if (joc)
6045 {
6046 env->CallVoidMethod (joc, JMPIjvm::jv.OperationContextUnassociate);
6047
6048 JMPIjvm::checkException(env);
6049 }
6050
|
6051 mark.hamzy 1.23 handler.processing();
6052
|
6053 mark.hamzy 1.29 jint jValueRetRef = env->CallIntMethod(jValueRet,JMPIjvm::jv.CIMValueCInst);
6054 CIMValue *valueRet = DEBUG_ConvertJavaToC (jint, CIMValue*, jValueRetRef);
|
6055 mark.hamzy 1.23
|
6056 mark.hamzy 1.29 handler.deliver(*valueRet);
|
6057 schuur 1.13
|
6058 mark.hamzy 1.25 for (int i=0; i<24; i++) {
|
6059 mark.hamzy 1.29 jobject jArg = env->GetObjectArrayElement(jArOut,i);
6060
|
6061 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
6062 schuur 1.13
|
6063 mark.hamzy 1.29 if (jArg==NULL)
6064 break;
|
6065 schuur 1.13
|
6066 mark.hamzy 1.29 jint jpRef = env->CallIntMethod(jArg,JMPIjvm::jv.CIMArgumentCInst);
6067 CIMParamValue *p = DEBUG_ConvertJavaToC (jint, CIMParamValue*, jpRef);
|
6068 schuur 1.13
|
6069 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
6070 schuur 1.1
|
6071 mark.hamzy 1.25 handler.deliverParamValue(*p);
|
6072 mark.hamzy 1.23 }
|
6073 schuur 1.1
|
6074 mark.hamzy 1.23 handler.complete();
|
6075 mark.hamzy 1.25 break;
|
6076 mark.hamzy 1.23 }
|
6077 schuur 1.11
|
6078 mark.hamzy 1.43 case METHOD_METHODPROVIDER:
6079 {
6080 jint jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
6081 jobject jcop = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
6082
6083 JMPIjvm::checkException(env);
6084
6085 jstring jMethod = env->NewStringUTF(request->methodName.getString().getCString());
6086
6087 JMPIjvm::checkException(env);
6088
6089 jobject jVecIn = env->NewObject(jv->VectorClassRef,jv->VectorNew);
6090
6091 JMPIjvm::checkException(env);
6092
6093 for (int i=0,m=request->inParameters.size(); i<m; i++)
6094 {
6095 const CIMParamValue &parm = request->inParameters[i];
6096 const CIMValue v = parm.getValue();
6097 CIMProperty *p = new CIMProperty(parm.getParameterName(),v,v.getArraySize());
6098 jint jpRef = DEBUG_ConvertCToJava (CIMProperty*, jint, p);
6099 mark.hamzy 1.43 jobject jp = env->NewObject(jv->CIMPropertyClassRef,jv->CIMPropertyNewI,jpRef);
6100
6101 env->CallVoidMethod(jVecIn,jv->VectorAddElement,jp);
6102 }
6103
6104 jobject jVecOut=env->NewObject(jv->VectorClassRef,jv->VectorNew);
6105 JMPIjvm::checkException(env);
6106
6107 jobject jValueRet = env->CallObjectMethod((jobject)pr.jProvider,
6108 id,
6109 jcop,
6110 jMethod,
6111 jVecIn,
6112 jVecOut);
6113 JMPIjvm::checkException(env);
6114
6115 STAT_PMS_PROVIDEREND;
6116
6117 handler.processing();
6118
6119 jint jValueRetRef = env->CallIntMethod(jValueRet,JMPIjvm::jv.CIMValueCInst);
6120 mark.hamzy 1.43 CIMValue *valueRet = DEBUG_ConvertJavaToC (jint, CIMValue*, jValueRetRef);
6121
6122 handler.deliver(*valueRet);
6123
6124 for (int i=0,m=env->CallIntMethod(jVecOut,JMPIjvm::jv.VectorSize); i<m; i++)
6125 {
6126 JMPIjvm::checkException(env);
6127
6128 jobject jProp = env->CallObjectMethod(jVecOut,JMPIjvm::jv.VectorElementAt,i);
6129
6130 JMPIjvm::checkException(env);
6131
6132 jint jpRef = env->CallIntMethod(jProp,JMPIjvm::jv.CIMPropertyCInst);
6133 CIMProperty *p = DEBUG_ConvertJavaToC (jint, CIMProperty*, jpRef);
6134
6135 JMPIjvm::checkException(env);
6136
6137 handler.deliverParamValue(CIMParamValue(p->getName().getString(),p->getValue()));
6138 }
6139
6140 handler.complete();
6141 mark.hamzy 1.43 break;
6142 }
6143
6144 case METHOD_METHODPROVIDER2:
|
6145 mark.hamzy 1.25 {
|
6146 mark.hamzy 1.43 jint jocRef = DEBUG_ConvertCToJava (OperationContext*, jint, &request->operationContext);
6147 jobject joc = env->NewObject(jv->OperationContextClassRef,jv->OperationContextNewI,jocRef);
6148
|
6149 mark.hamzy 1.29 jint jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
6150 jobject jcop = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
|
6151 mark.hamzy 1.25
6152 JMPIjvm::checkException(env);
6153
|
6154 mark.hamzy 1.29 jstring jMethod = env->NewStringUTF(request->methodName.getString().getCString());
6155
|
6156 mark.hamzy 1.25 JMPIjvm::checkException(env);
6157
|
6158 mark.hamzy 1.29 jobject jVecIn = env->NewObject(jv->VectorClassRef,jv->VectorNew);
6159
|
6160 mark.hamzy 1.25 JMPIjvm::checkException(env);
6161
|
6162 mark.hamzy 1.29 for (int i=0,m=request->inParameters.size(); i<m; i++)
6163 {
6164 const CIMParamValue &parm = request->inParameters[i];
6165 const CIMValue v = parm.getValue();
6166 CIMProperty *p = new CIMProperty(parm.getParameterName(),v,v.getArraySize());
6167 jint jpRef = DEBUG_ConvertCToJava (CIMProperty*, jint, p);
6168 jobject jp = env->NewObject(jv->CIMPropertyClassRef,jv->CIMPropertyNewI,jpRef);
|
6169 mark.hamzy 1.23
|
6170 mark.hamzy 1.29 env->CallVoidMethod(jVecIn,jv->VectorAddElement,jp);
|
6171 mark.hamzy 1.25 }
|
6172 mark.hamzy 1.23
|
6173 mark.hamzy 1.25 jobject jVecOut=env->NewObject(jv->VectorClassRef,jv->VectorNew);
6174 JMPIjvm::checkException(env);
|
6175 mark.hamzy 1.23
|
6176 mark.hamzy 1.29 jobject jValueRet = env->CallObjectMethod((jobject)pr.jProvider,
6177 id,
|
6178 mark.hamzy 1.43 joc,
|
6179 mark.hamzy 1.29 jcop,
6180 jMethod,
6181 jVecIn,
6182 jVecOut);
|
6183 mark.hamzy 1.23 JMPIjvm::checkException(env);
6184
6185 STAT_PMS_PROVIDEREND;
6186
|
6187 mark.hamzy 1.43 if (joc)
6188 {
6189 env->CallVoidMethod (joc, JMPIjvm::jv.OperationContextUnassociate);
6190
6191 JMPIjvm::checkException(env);
6192 }
6193
|
6194 mark.hamzy 1.23 handler.processing();
|
6195 schuur 1.1
|
6196 mark.hamzy 1.29 jint jValueRetRef = env->CallIntMethod(jValueRet,JMPIjvm::jv.CIMValueCInst);
6197 CIMValue *valueRet = DEBUG_ConvertJavaToC (jint, CIMValue*, jValueRetRef);
|
6198 mark.hamzy 1.23
|
6199 mark.hamzy 1.29 handler.deliver(*valueRet);
|
6200 mark.hamzy 1.23
|
6201 mark.hamzy 1.29 for (int i=0,m=env->CallIntMethod(jVecOut,JMPIjvm::jv.VectorSize); i<m; i++)
6202 {
|
6203 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
6204 schuur 1.13
|
6205 mark.hamzy 1.29 jobject jProp = env->CallObjectMethod(jVecOut,JMPIjvm::jv.VectorElementAt,i);
6206
|
6207 mark.hamzy 1.25 JMPIjvm::checkException(env);
|
6208 schuur 1.13
|
6209 mark.hamzy 1.29 jint jpRef = env->CallIntMethod(jProp,JMPIjvm::jv.CIMPropertyCInst);
6210 CIMProperty *p = DEBUG_ConvertJavaToC (jint, CIMProperty*, jpRef);
|
6211 schuur 1.13
|
6212 mark.hamzy 1.23 JMPIjvm::checkException(env);
|
6213 schuur 1.13
|
6214 mark.hamzy 1.25 handler.deliverParamValue(CIMParamValue(p->getName().getString(),p->getValue()));
6215 }
6216
6217 handler.complete();
6218 break;
6219 }
|
6220 mark.hamzy 1.23
|
6221 mark.hamzy 1.25 case METHOD_UNKNOWN:
6222 {
6223 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleInvokeMethodRequest: should not be here!"<<PEGASUS_STD(endl));
6224 break;
6225 }
|
6226 mark.hamzy 1.23 }
|
6227 schuur 1.1 }
6228 HandlerCatch(handler);
|
6229 schuur 1.11
6230 if (env) JMPIjvm::detachThread();
6231
|
6232 schuur 1.1 PEG_METHOD_EXIT();
6233
|
6234 w.white 1.31 STAT_COPYDISPATCHER
6235
|
6236 schuur 1.11 return(response);
|
6237 schuur 1.1 }
|
6238 mark.hamzy 1.23
|
6239 schuur 1.1 int LocateIndicationProviderNames(const CIMInstance& pInstance, const CIMInstance& pmInstance,
6240 String& providerName, String& location)
6241 {
6242 Uint32 pos = pInstance.findProperty(CIMName ("Name"));
6243 pInstance.getProperty(pos).getValue().get(providerName);
6244
6245 pos = pmInstance.findProperty(CIMName ("Location"));
6246 pmInstance.getProperty(pos).getValue().get(location);
6247 return 0;
6248 }
6249
|
6250 mark.hamzy 1.44 CMPI_SelectExp *
6251 newSelectExp (CIMOMHandleQueryContext *qContext,
6252 OperationContext *ctx,
6253 String& query,
6254 String& queryLanguage,
6255 CIMNamespaceName& nameSpace,
6256 Array<CIMName>& classNames,
6257 CIMPropertyList& propertyList)
6258 {
6259 CMPI_SelectExp *eSelx = NULL;
6260
6261 eSelx = new CMPI_SelectExp (*ctx,
6262 qContext,
6263 query,
6264 queryLanguage);
6265
6266 if (!eSelx)
6267 {
6268 return eSelx;
6269 }
6270
6271 mark.hamzy 1.44 for (Uint32 i = 0, n = classNames.size (); i < n; i++)
6272 {
6273 CIMObjectPath className (System::getHostName(),
6274 nameSpace,
6275 classNames[i]);
6276
6277 eSelx->classNames.append (className);
6278 }
6279
6280 if (!propertyList.isNull ())
6281 {
6282 Array<CIMName> p = propertyList.getPropertyNameArray ();
6283 int pCount = p.size ();
6284
6285 eSelx->props = (const char**)malloc ((1 + pCount) * sizeof (char*));
6286
6287 for (int i = 0; i < pCount; i++)
6288 {
6289 eSelx->props[i] = strdup (p[i].getString ().getCString ());
6290 }
6291
6292 mark.hamzy 1.44 eSelx->props[pCount] = NULL;
6293 }
6294
6295 return eSelx;
6296 }
6297
|
6298 schuur 1.1 Message * JMPIProviderManager::handleCreateSubscriptionRequest(const Message * message) throw()
6299 {
|
6300 konrad.r 1.15 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager::handleCreateSubscriptionRequest");
|
6301 schuur 1.1
|
6302 mark.hamzy 1.23 HandlerIntroInd(CreateSubscription,message,request,response,handler);
6303
|
6304 mark.hamzy 1.25 typedef enum {
6305 METHOD_UNKNOWN = 0,
|
6306 mark.hamzy 1.43 METHOD_EVENTPROVIDER,
6307 METHOD_EVENTPROVIDER2,
|
6308 mark.hamzy 1.25 } METHOD_VERSION;
|
6309 mark.hamzy 1.44 METHOD_VERSION eMethodFound = METHOD_UNKNOWN;
6310 JNIEnv *env = NULL;
|
6311 mark.hamzy 1.25
|
6312 schuur 1.1 try {
|
6313 mark.hamzy 1.44 String fileName,
6314 providerName,
|
6315 mark.hamzy 1.25 providerLocation;
6316 CIMInstance req_provider,
6317 req_providerModule;
|
6318 mark.hamzy 1.44 ProviderIdContainer pidc = (ProviderIdContainer)request->operationContext.get(ProviderIdContainer::NAME);
|
6319 mark.hamzy 1.25
|
6320 mark.hamzy 1.44 req_provider = pidc.getProvider ();
6321 req_providerModule = pidc.getModule ();
|
6322 mark.hamzy 1.25
|
6323 mark.hamzy 1.44 LocateIndicationProviderNames (req_provider,
6324 req_providerModule,
6325 providerName,
6326 providerLocation);
6327
6328 fileName = resolveFileName (providerLocation);
6329
6330 Logger::put (Logger::STANDARD_LOG,
6331 System::CIMSERVER,
6332 Logger::TRACE,
6333 "JMPIProviderManager::handleCreateSubscriptionRequest - Host name: $0 Name space: $1 Provider name(s): $2",
6334 System::getHostName(),
6335 request->nameSpace.getString(),
6336 providerName);
6337
6338 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleCreateSubscriptionRequest: hostname = "
6339 <<System::getHostName()
6340 <<", namespace = "
6341 <<request->nameSpace.getString()
6342 <<", providername = "
6343 <<providerName
6344 mark.hamzy 1.44 <<", fileName = "
6345 <<fileName
6346 <<PEGASUS_STD(endl));
|
6347 schuur 1.1
6348 // get cached or load new provider module
|
6349 mark.hamzy 1.44 JMPIProvider::OpProviderHolder ph = providerManager.getProvider (fileName,
6350 providerName,
|
6351 mark.hamzy 1.43 String::EMPTY);
|
6352 schuur 1.1
|
6353 carolann.graves 1.21 //
6354 // Save the provider instance from the request
6355 //
6356 ph.GetProvider ().setProviderInstance (req_provider);
6357
|
6358 mark.hamzy 1.44 JMPIProvider &pr = ph.GetProvider ();
|
6359 mark.hamzy 1.25
|
6360 mark.hamzy 1.44 //
6361 // Increment count of current subscriptions for this provider
6362 //
6363 pr.testIfZeroAndIncrementSubscriptions ();
|
6364 schuur 1.1
|
6365 mark.hamzy 1.44 SubscriptionFilterConditionContainer sub_cntr = request->operationContext.get (SubscriptionFilterConditionContainer::NAME);
6366 indProvRecord *prec = NULL;
6367 bool fNewPrec = false;
|
6368 schuur 1.1
|
6369 mark.hamzy 1.25 {
|
6370 mark.hamzy 1.44 AutoMutex lock (mutexProvTab);
6371
6372 provTab.lookup (providerName, prec);
|
6373 schuur 1.12
|
6374 mark.hamzy 1.44 if (!prec)
6375 {
6376 fNewPrec = true;
|
6377 schuur 1.1
|
6378 mark.hamzy 1.44 prec = new indProvRecord ();
|
6379 schuur 1.1
|
6380 mark.hamzy 1.44 // convert arguments
6381 prec->ctx = new OperationContext ();
|
6382 schuur 1.12
|
6383 mark.hamzy 1.44 prec->ctx->insert (request->operationContext.get (IdentityContainer::NAME));
6384 prec->ctx->insert (request->operationContext.get (AcceptLanguageListContainer::NAME));
6385 prec->ctx->insert (request->operationContext.get (ContentLanguageListContainer::NAME));
6386 prec->ctx->insert (request->operationContext.get (SubscriptionInstanceContainer::NAME));
6387 prec->ctx->insert (request->operationContext.get (SubscriptionFilterConditionContainer::NAME));
|
6388 konrad.r 1.22
|
6389 mark.hamzy 1.44 prec->enabled = true;
|
6390 konrad.r 1.22
|
6391 mark.hamzy 1.44 prec->handler = new EnableIndicationsResponseHandler (0,
6392 0,
6393 req_provider,
6394 _indicationCallback,
6395 _responseChunkCallback);
|
6396 konrad.r 1.22
|
6397 mark.hamzy 1.44 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleCreateSubscriptionRequest: Adding to provTab "<<providerName<<PEGASUS_STD(endl));
|
6398 schuur 1.1
|
6399 mark.hamzy 1.44 provTab.insert (providerName, prec);
6400 }
6401 }
|
6402 schuur 1.1
|
6403 mark.hamzy 1.44 {
6404 AutoMutex lock (prec->mutex);
|
6405 schuur 1.1
|
6406 mark.hamzy 1.44 prec->count++;
|
6407 schuur 1.1 }
6408
|
6409 mark.hamzy 1.44 // Add a selection record for JNI CIMOMHandle deliverEvent calls
6410 indSelectRecord *srec = new indSelectRecord ();
|
6411 mark.hamzy 1.29
6412 {
|
6413 mark.hamzy 1.44 srec->query = request->query;
6414 srec->queryLanguage = sub_cntr.getQueryLanguage ();
6415 srec->propertyList = request->propertyList;
6416
6417 CIMOMHandleQueryContext *qContext = new CIMOMHandleQueryContext (CIMNamespaceName (request->nameSpace.getString ()),
6418 *pr._cimom_handle);
6419 CMPI_SelectExp *eSelx = newSelectExp (qContext,
6420 prec->ctx,
6421 srec->query,
6422 srec->queryLanguage,
6423 request->nameSpace,
6424 request->classNames,
6425 srec->propertyList);
6426
6427 srec->eSelx = eSelx;
6428 srec->qContext = qContext;
6429
6430 CIMObjectPath sPath (request->subscriptionInstance.getPath ().getClassName ().getString ());
6431
6432 sPath.setNameSpace (request->subscriptionInstance.getPath ().getNameSpace ());
|
6433 mark.hamzy 1.29
|
6434 mark.hamzy 1.44 AutoMutex lock (mutexSelxTab);
|
6435 mark.hamzy 1.29
|
6436 mark.hamzy 1.44 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleCreateSubscriptionRequest: Adding to selxTab "<<sPath.toString ()<<PEGASUS_STD(endl));
6437
6438 selxTab.insert (sPath.toString (), srec);
6439
6440 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleCreateSubscriptionRequest: For selxTab "<<sPath.toString ()<<", srec = "<<PEGASUS_STD(hex)<<(int)srec<<PEGASUS_STD(dec)<<", eSelx = "<<PEGASUS_STD(hex)<<(int)eSelx<<PEGASUS_STD(dec)<<", qContext = "<<PEGASUS_STD(hex)<<(int)qContext<<PEGASUS_STD(dec)<<PEGASUS_STD(endl));
|
6441 schuur 1.1 }
6442
|
6443 mark.hamzy 1.44 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, "Calling provider.createSubscriptionRequest: " + pr.getName());
6444
6445 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleCreateSubscriptionRequest: Calling provider createSubscriptionRequest: "<<pr.getName()<<PEGASUS_STD(endl));
6446
|
6447 mark.hamzy 1.25 JvmVector *jv = 0;
6448
6449 env = JMPIjvm::attachThread(&jv);
6450
|
6451 mark.hamzy 1.37 if (!env)
6452 {
6453 PEG_METHOD_EXIT();
6454
6455 STAT_COPYDISPATCHER
6456
6457 throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
6458 MessageLoaderParms("ProviderManager.JMPI.INIT_JVM_FAILED",
6459 "Could not initialize the JVM (Java Virtual Machine) runtime environment."));
6460 }
6461
|
6462 mark.hamzy 1.25 JMPIProvider::pm_service_op_lock op_lock(&pr);
6463
6464 STAT_GETSTARTTIME;
6465
|
6466 mark.hamzy 1.43 jmethodID id = NULL;
6467 String interfaceType;
6468 String interfaceVersion;
6469
|
6470 mark.hamzy 1.44 getInterfaceType (pidc,
|
6471 mark.hamzy 1.43 interfaceType,
6472 interfaceVersion);
6473
6474 if (interfaceType == "JMPI")
6475 {
6476 // public void activateFilter (org.pegasus.jmpi.SelectExp filter,
6477 // java.lang.String eventType,
6478 // org.pegasus.jmpi.CIMObjectPath classPath,
6479 // boolean firstActivation)
6480 // throws org.pegasus.jmpi.CIMException
|
6481 mark.hamzy 1.44 id = env->GetMethodID ((jclass)pr.jProviderClass,
6482 "activateFilter",
6483 "(Lorg/pegasus/jmpi/SelectExp;Ljava/lang/String;Lorg/pegasus/jmpi/CIMObjectPath;Z)V");
|
6484 mark.hamzy 1.43
6485 if (id != NULL)
6486 {
6487 eMethodFound = METHOD_EVENTPROVIDER;
6488 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleCreateSubscriptionRequest: found METHOD_EVENTPROVIDER."<<PEGASUS_STD(endl));
6489 }
6490 }
6491 else if (interfaceType == "JMPIExperimental")
6492 {
6493 // public void activateFilter (org.pegasus.jmpi.OperationContext oc,
6494 // org.pegasus.jmpi.SelectExp filter,
6495 // java.lang.String eventType,
6496 // org.pegasus.jmpi.CIMObjectPath classPath,
6497 // boolean firstActivation)
6498 // throws org.pegasus.jmpi.CIMException
|
6499 mark.hamzy 1.44 id = env->GetMethodID ((jclass)pr.jProviderClass,
6500 "activateFilter",
6501 "(Lorg/pegasus/jmpi/OperationContext;Lorg/pegasus/jmpi/SelectExp;Ljava/lang/String;Lorg/pegasus/jmpi/CIMObjectPath;Z)V");
|
6502 mark.hamzy 1.25
|
6503 mark.hamzy 1.43 if (id != NULL)
6504 {
6505 eMethodFound = METHOD_EVENTPROVIDER2;
6506 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleCreateSubscriptionRequest: found METHOD_EVENTPROVIDER2."<<PEGASUS_STD(endl));
6507 }
6508 }
|
6509 schuur 1.12
|
6510 mark.hamzy 1.43 if (id == NULL)
|
6511 mark.hamzy 1.25 {
|
6512 mark.hamzy 1.43 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleCreateSubscriptionRequest: No method found!"<<PEGASUS_STD(endl));
6513
6514 PEG_METHOD_EXIT();
6515
6516 STAT_COPYDISPATCHER
6517
6518 throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
6519 MessageLoaderParms ("ProviderManager.JMPI.METHOD_NOT_FOUND",
6520 "Could not find a method for the provider based on InterfaceType."));
|
6521 mark.hamzy 1.25 }
|
6522 mark.hamzy 1.23
6523 JMPIjvm::checkException(env);
6524
|
6525 mark.hamzy 1.25 switch (eMethodFound)
6526 {
|
6527 mark.hamzy 1.43 case METHOD_EVENTPROVIDER:
6528 {
|
6529 mark.hamzy 1.44 CMPI_SelectExp *eSelx = newSelectExp (srec->qContext,
6530 prec->ctx,
6531 srec->query,
6532 srec->queryLanguage,
6533 request->nameSpace,
6534 request->classNames,
6535 srec->propertyList);
6536 jint jEselxRef = DEBUG_ConvertCToJava (CMPI_SelectExp*, jint, eSelx);
6537 jobject jEselx = env->NewObject(jv->SelectExpClassRef,jv->SelectExpNewI,jEselxRef);
|
6538 mark.hamzy 1.43
6539 JMPIjvm::checkException(env);
6540
|
6541 mark.hamzy 1.44 jstring jType = env->NewStringUTF(request->nameSpace.getString().getCString());
|
6542 mark.hamzy 1.43
6543 JMPIjvm::checkException(env);
6544
|
6545 mark.hamzy 1.44 CIMObjectPath *cop = new CIMObjectPath (System::getHostName(),
6546 request->nameSpace,
6547 request->classNames[0]);
6548 jint jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, cop);
6549 jobject jcop = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
|
6550 mark.hamzy 1.43
6551 JMPIjvm::checkException(env);
6552
|
6553 mark.hamzy 1.44 env->CallVoidMethod ((jobject)pr.jProvider,
6554 id,
6555 jEselx,
6556 jType,
6557 jcop,
6558 (jboolean)fNewPrec);
|
6559 mark.hamzy 1.43
6560 JMPIjvm::checkException(env);
6561
6562 STAT_PMS_PROVIDEREND;
6563 break;
6564 }
6565
6566 case METHOD_EVENTPROVIDER2:
|
6567 mark.hamzy 1.25 {
|
6568 mark.hamzy 1.43 jint jocRef = DEBUG_ConvertCToJava (OperationContext*, jint, &request->operationContext);
6569 jobject joc = env->NewObject(jv->OperationContextClassRef,jv->OperationContextNewI,jocRef);
6570
|
6571 mark.hamzy 1.44 CMPI_SelectExp *eSelx = newSelectExp (srec->qContext,
6572 prec->ctx,
6573 srec->query,
6574 srec->queryLanguage,
6575 request->nameSpace,
6576 request->classNames,
6577 srec->propertyList);
6578 jint jEselxRef = DEBUG_ConvertCToJava (CMPI_SelectExp*, jint, eSelx);
6579 jobject jEselx = env->NewObject(jv->SelectExpClassRef,jv->SelectExpNewI,jEselxRef);
|
6580 mark.hamzy 1.25
6581 JMPIjvm::checkException(env);
6582
|
6583 mark.hamzy 1.44 jstring jType = env->NewStringUTF(request->nameSpace.getString().getCString());
|
6584 schuur 1.12
|
6585 mark.hamzy 1.25 JMPIjvm::checkException(env);
|
6586 schuur 1.1
|
6587 mark.hamzy 1.44 CIMObjectPath *cop = new CIMObjectPath (System::getHostName(),
6588 request->nameSpace,
6589 request->classNames[0]);
6590 jint jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, cop);
6591 jobject jcop = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
|
6592 schuur 1.1
|
6593 mark.hamzy 1.25 JMPIjvm::checkException(env);
|
6594 schuur 1.1
|
6595 mark.hamzy 1.44 env->CallVoidMethod ((jobject)pr.jProvider,
6596 id,
6597 joc,
6598 jEselx,
6599 jType,
6600 jcop,
6601 (jboolean)fNewPrec);
|
6602 schuur 1.12
|
6603 mark.hamzy 1.25 JMPIjvm::checkException(env);
|
6604 schuur 1.1
|
6605 mark.hamzy 1.43 if (joc)
6606 {
6607 env->CallVoidMethod (joc, JMPIjvm::jv.OperationContextUnassociate);
6608
6609 JMPIjvm::checkException(env);
6610 }
6611
|
6612 mark.hamzy 1.25 STAT_PMS_PROVIDEREND;
6613 break;
|
6614 carolann.graves 1.21 }
6615
|
6616 mark.hamzy 1.25 case METHOD_UNKNOWN:
6617 {
6618 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleCreateSubscriptionRequest: should not be here!"<<PEGASUS_STD(endl));
6619 break;
6620 }
6621 }
|
6622 schuur 1.1 }
6623 HandlerCatch(handler);
|
6624 schuur 1.12
|
6625 mark.hamzy 1.23 if (env) JMPIjvm::detachThread();
6626
|
6627 schuur 1.1 PEG_METHOD_EXIT();
6628
6629 return(response);
6630 }
6631
6632 Message * JMPIProviderManager::handleDeleteSubscriptionRequest(const Message * message) throw()
6633 {
6634 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager::handleDeleteSubscriptionRequest");
6635
|
6636 mark.hamzy 1.23 HandlerIntroInd(DeleteSubscription,message,request,response,handler);
6637
|
6638 mark.hamzy 1.25 typedef enum {
6639 METHOD_UNKNOWN = 0,
|
6640 mark.hamzy 1.43 METHOD_EVENTPROVIDER,
6641 METHOD_EVENTPROVIDER2,
|
6642 mark.hamzy 1.25 } METHOD_VERSION;
|
6643 mark.hamzy 1.44 METHOD_VERSION eMethodFound = METHOD_UNKNOWN;
6644 JNIEnv *env = NULL;
6645 bool fFreePrec = false;
6646 indProvRecord *prec = NULL;
6647 indSelectRecord *srec = NULL;
|
6648 mark.hamzy 1.25
|
6649 schuur 1.1 try {
|
6650 mark.hamzy 1.44 String fileName,
6651 providerName,
|
6652 mark.hamzy 1.25 providerLocation;
6653 CIMInstance req_provider,
6654 req_providerModule;
6655 ProviderIdContainer pidc = (ProviderIdContainer)request->operationContext.get(ProviderIdContainer::NAME);
6656
|
6657 mark.hamzy 1.44 req_provider = pidc.getProvider ();
6658 req_providerModule = pidc.getModule ();
6659
6660 LocateIndicationProviderNames (req_provider,
6661 req_providerModule,
6662 providerName,
6663 providerLocation);
6664
6665 fileName = resolveFileName (providerLocation);
6666
6667 Logger::put (Logger::STANDARD_LOG,
6668 System::CIMSERVER,
6669 Logger::TRACE,
6670 "JMPIProviderManager::handleDeleteSubscriptionRequest - Host name: $0 Name space: $1 Provider name(s): $2",
6671 System::getHostName(),
6672 request->nameSpace.getString(),
6673 providerName);
6674
6675 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleDeleteSubscriptionRequest: hostname = "
6676 <<System::getHostName()
6677 <<", namespace = "
6678 mark.hamzy 1.44 <<request->nameSpace.getString()
6679 <<", providername = "
6680 <<providerName
6681 <<", fileName = "
6682 <<fileName
6683 <<PEGASUS_STD(endl));
|
6684 se.gupta 1.9
|
6685 mark.hamzy 1.44 // get cached or load new provider module
6686 JMPIProvider::OpProviderHolder ph = providerManager.getProvider (fileName,
6687 providerName,
6688 String::EMPTY);
|
6689 schuur 1.1
|
6690 mark.hamzy 1.44 JMPIProvider &pr = ph.GetProvider ();
6691
6692 {
6693 AutoMutex lock (mutexProvTab);
6694
6695 provTab.lookup (providerName, prec);
6696 }
|
6697 schuur 1.1
|
6698 mark.hamzy 1.44 {
6699 AutoMutex lock (prec->mutex);
|
6700 mark.hamzy 1.23
|
6701 mark.hamzy 1.44 if (--prec->count <= 0)
6702 {
6703 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleDeleteSubscriptionRequest: Removing provTab "<<providerName<<PEGASUS_STD(endl));
|
6704 schuur 1.1
|
6705 mark.hamzy 1.44 provTab.remove (providerName);
|
6706 schuur 1.1
|
6707 mark.hamzy 1.44 fFreePrec = true;
6708 }
6709 }
|
6710 mark.hamzy 1.25
6711 {
|
6712 mark.hamzy 1.44 CIMObjectPath sPath (request->subscriptionInstance.getPath ().getClassName ().getString ());
6713
6714 sPath.setNameSpace (request->subscriptionInstance.getPath ().getNameSpace ());
|
6715 schuur 1.1
|
6716 mark.hamzy 1.44 String sPathString = sPath.toString ();
|
6717 mark.hamzy 1.25
|
6718 mark.hamzy 1.44 AutoMutex lock (mutexSelxTab);
|
6719 schuur 1.1
|
6720 mark.hamzy 1.44 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleDeleteSubscriptionRequest: Removing selxTab "<<sPathString<<PEGASUS_STD(endl));
|
6721 konrad.r 1.22
|
6722 mark.hamzy 1.44 selxTab.lookup (sPathString, srec);
|
6723 schuur 1.1
|
6724 mark.hamzy 1.44 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleDeleteSubscriptionRequest: For selxTab "<<sPathString<<", srec = "<<PEGASUS_STD(hex)<<(int)srec<<PEGASUS_STD(dec)<<", eSelx = "<<PEGASUS_STD(hex)<<(int)srec->eSelx<<PEGASUS_STD(dec)<<", qContext = "<<PEGASUS_STD(hex)<<(int)srec->qContext<<PEGASUS_STD(dec)<<PEGASUS_STD(endl));
|
6725 schuur 1.1
|
6726 mark.hamzy 1.44 selxTab.remove (sPathString);
6727 }
|
6728 schuur 1.1
|
6729 mark.hamzy 1.25 PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, "Calling provider.deleteSubscriptionRequest: " + pr.getName());
|
6730 schuur 1.1
|
6731 mark.hamzy 1.23 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleDeleteSubscriptionRequest: Calling provider deleteSubscriptionRequest: "<<pr.getName()<<PEGASUS_STD(endl));
|
6732 schuur 1.1
|
6733 mark.hamzy 1.25 JvmVector *jv = 0;
6734
6735 env = JMPIjvm::attachThread(&jv);
6736
|
6737 mark.hamzy 1.37 if (!env)
6738 {
6739 PEG_METHOD_EXIT();
6740
6741 STAT_COPYDISPATCHER
6742
6743 throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
6744 MessageLoaderParms("ProviderManager.JMPI.INIT_JVM_FAILED",
6745 "Could not initialize the JVM (Java Virtual Machine) runtime environment."));
6746 }
6747
|
6748 mark.hamzy 1.25 JMPIProvider::pm_service_op_lock op_lock(&pr);
6749
6750 STAT_GETSTARTTIME;
6751
|
6752 mark.hamzy 1.43 jmethodID id = NULL;
6753 String interfaceType;
6754 String interfaceVersion;
6755
6756 getInterfaceType (request->operationContext.get (ProviderIdContainer::NAME),
6757 interfaceType,
6758 interfaceVersion);
6759
6760 if (interfaceType == "JMPI")
6761 {
6762 // public void deActivateFilter (org.pegasus.jmpi.SelectExp filter,
6763 // java.lang.String eventType,
6764 // org.pegasus.jmpi.CIMObjectPath classPath,
6765 // boolean lastActivation)
6766 // throws org.pegasus.jmpi.CIMException
6767 id = env->GetMethodID((jclass)pr.jProviderClass,
6768 "deActivateFilter",
6769 "(Lorg/pegasus/jmpi/SelectExp;Ljava/lang/String;Lorg/pegasus/jmpi/CIMObjectPath;Z)V");
6770
6771 if (id != NULL)
6772 {
6773 mark.hamzy 1.43 eMethodFound = METHOD_EVENTPROVIDER;
6774 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleDeleteSubscriptionRequest: found METHOD_EVENTPROVIDER."<<PEGASUS_STD(endl));
6775 }
6776 }
6777 else if (interfaceType == "JMPIExperimental")
6778 {
6779 // public void deActivateFilter (org.pegasus.jmpi.OperationContext oc,
6780 // org.pegasus.jmpi.SelectExp filter,
6781 // java.lang.String eventType,
6782 // org.pegasus.jmpi.CIMObjectPath classPath,
6783 // boolean lastActivation)
6784 // throws org.pegasus.jmpi.CIMException
6785 id = env->GetMethodID((jclass)pr.jProviderClass,
6786 "deActivateFilter",
|
6787 mark.hamzy 1.44 "(Lorg/pegasus/jmpi/OperationContext;Lorg/pegasus/jmpi/SelectExp;Ljava/lang/String;Lorg/pegasus/jmpi/CIMObjectPath;Z)V");
|
6788 mark.hamzy 1.25
|
6789 mark.hamzy 1.43 if (id != NULL)
6790 {
6791 eMethodFound = METHOD_EVENTPROVIDER2;
6792 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleDeleteSubscriptionRequest: found METHOD_EVENTPROVIDER2."<<PEGASUS_STD(endl));
6793 }
6794 }
|
6795 schuur 1.12
|
6796 mark.hamzy 1.43 if (id == NULL)
|
6797 mark.hamzy 1.25 {
|
6798 mark.hamzy 1.43 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleDeleteSubscriptionRequest: No method found!"<<PEGASUS_STD(endl));
6799
6800 PEG_METHOD_EXIT();
6801
6802 STAT_COPYDISPATCHER
6803
6804 throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
6805 MessageLoaderParms ("ProviderManager.JMPI.METHOD_NOT_FOUND",
6806 "Could not find a method for the provider based on InterfaceType."));
|
6807 mark.hamzy 1.25 }
|
6808 mark.hamzy 1.23
6809 JMPIjvm::checkException(env);
6810
|
6811 mark.hamzy 1.25 switch (eMethodFound)
6812 {
|
6813 mark.hamzy 1.43 case METHOD_EVENTPROVIDER:
6814 {
|
6815 mark.hamzy 1.44 CMPI_SelectExp *eSelx = newSelectExp (srec->qContext,
6816 prec->ctx,
6817 srec->query,
6818 srec->queryLanguage,
6819 request->nameSpace,
6820 request->classNames,
6821 srec->propertyList);
6822 jint jEselxRef = DEBUG_ConvertCToJava (CMPI_SelectExp*, jint, eSelx);
6823 jobject jEselx = env->NewObject(jv->SelectExpClassRef,jv->SelectExpNewI,jEselxRef);
|
6824 mark.hamzy 1.43
6825 JMPIjvm::checkException(env);
6826
|
6827 mark.hamzy 1.44 jstring jType = env->NewStringUTF(request->nameSpace.getString().getCString());
|
6828 mark.hamzy 1.43
6829 JMPIjvm::checkException(env);
6830
|
6831 mark.hamzy 1.44 CIMObjectPath *cop = new CIMObjectPath (System::getHostName(),
6832 request->nameSpace,
6833 request->classNames[0]);
6834 jint jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, cop);
6835 jobject jcop = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
|
6836 mark.hamzy 1.43
6837 JMPIjvm::checkException(env);
6838
|
6839 mark.hamzy 1.44 env->CallVoidMethod ((jobject)pr.jProvider,
6840 id,
6841 jEselx,
6842 jType,
6843 jcop,
6844 (jboolean)fFreePrec);
|
6845 mark.hamzy 1.43
6846 JMPIjvm::checkException(env);
6847
6848 STAT_PMS_PROVIDEREND;
6849 break;
6850 }
6851
6852 case METHOD_EVENTPROVIDER2:
|
6853 mark.hamzy 1.25 {
|
6854 mark.hamzy 1.43 jint jocRef = DEBUG_ConvertCToJava (OperationContext*, jint, &request->operationContext);
6855 jobject joc = env->NewObject(jv->OperationContextClassRef,jv->OperationContextNewI,jocRef);
6856
|
6857 mark.hamzy 1.44 CMPI_SelectExp *eSelx = newSelectExp (srec->qContext,
6858 prec->ctx,
6859 srec->query,
6860 srec->queryLanguage,
6861 request->nameSpace,
6862 request->classNames,
6863 srec->propertyList);
6864 jint jEselxRef = DEBUG_ConvertCToJava (CMPI_SelectExp*, jint, eSelx);
6865 jobject jEselx = env->NewObject(jv->SelectExpClassRef,jv->SelectExpNewI,jEselxRef);
|
6866 mark.hamzy 1.25
6867 JMPIjvm::checkException(env);
6868
|
6869 mark.hamzy 1.44 jstring jType = env->NewStringUTF(request->nameSpace.getString().getCString());
|
6870 schuur 1.12
|
6871 mark.hamzy 1.25 JMPIjvm::checkException(env);
|
6872 schuur 1.12
|
6873 mark.hamzy 1.44 CIMObjectPath *cop = new CIMObjectPath (System::getHostName(),
6874 request->nameSpace,
6875 request->classNames[0]);
6876 jint jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, cop);
6877 jobject jcop = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
|
6878 schuur 1.1
|
6879 mark.hamzy 1.25 JMPIjvm::checkException(env);
|
6880 schuur 1.1
|
6881 mark.hamzy 1.44 env->CallVoidMethod ((jobject)pr.jProvider,
6882 id,
6883 joc,
6884 jEselx,
6885 jType,
6886 jcop,
6887 (jboolean)fFreePrec);
|
6888 schuur 1.1
|
6889 mark.hamzy 1.25 JMPIjvm::checkException(env);
|
6890 schuur 1.1
|
6891 mark.hamzy 1.43 if (joc)
6892 {
6893 env->CallVoidMethod (joc, JMPIjvm::jv.OperationContextUnassociate);
6894
6895 JMPIjvm::checkException(env);
6896 }
6897
|
6898 mark.hamzy 1.25 STAT_PMS_PROVIDEREND;
6899 break;
6900 }
|
6901 schuur 1.12
|
6902 mark.hamzy 1.25 case METHOD_UNKNOWN:
6903 {
6904 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleDeleteSubscriptionRequest: should not be here!"<<PEGASUS_STD(endl));
6905 break;
6906 }
6907 }
|
6908 mark.hamzy 1.44
6909 //
6910 // Decrement count of current subscriptions for this provider
6911 //
6912 pr.decrementSubscriptionsAndTestIfZero ();
|
6913 schuur 1.1 }
6914 HandlerCatch(handler);
|
6915 schuur 1.12
|
6916 mark.hamzy 1.44 if (srec)
6917 {
6918 if ( srec->eSelx
6919 && srec->eSelx->props
6920 )
6921 {
6922 const char **props = srec->eSelx->props;
6923
6924 while (*props)
6925 {
6926 const char *prop = *props;
6927
6928 props++;
6929
6930 if (prop)
6931 {
6932 free ((void *)prop);
6933 }
6934 }
6935
6936 free ((void *)srec->eSelx->props);
6937 mark.hamzy 1.44 }
6938 delete srec->eSelx;
6939 delete srec->qContext;
6940 }
6941 delete srec;
6942
6943 if (fFreePrec)
6944 {
6945 delete prec->ctx;
6946 delete prec->handler;
6947 delete prec;
6948 }
6949
|
6950 mark.hamzy 1.23 if (env) JMPIjvm::detachThread();
6951
|
6952 schuur 1.1 PEG_METHOD_EXIT();
6953
|
6954 w.white 1.31 STAT_COPYDISPATCHER
6955
|
6956 schuur 1.1 return(response);
6957 }
6958
6959 Message * JMPIProviderManager::handleDisableModuleRequest(const Message * message) throw()
6960 {
6961 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager::handleDisableModuleRequest");
6962
6963 CIMDisableModuleRequestMessage * request =
6964 dynamic_cast<CIMDisableModuleRequestMessage *>(const_cast<Message *>(message));
6965
6966 PEGASUS_ASSERT(request != 0);
6967
6968 // get provider module name
6969 String moduleName;
6970 CIMInstance mInstance = request->providerModule;
6971 Uint32 pos = mInstance.findProperty(CIMName ("Name"));
6972
6973 if(pos != PEG_NOT_FOUND)
6974 {
6975 mInstance.getProperty(pos).getValue().get(moduleName);
6976 }
6977 schuur 1.1
6978 Boolean disableProviderOnly = request->disableProviderOnly;
6979
6980 Array<Uint16> operationalStatus;
|
6981 kumpf 1.2 // Assume success.
|
6982 kumpf 1.10 operationalStatus.append(CIM_MSE_OPSTATUS_VALUE_STOPPED);
|
6983 schuur 1.1
|
6984 kumpf 1.2 //
|
6985 schuur 1.1 // Unload providers
|
6986 kumpf 1.2 //
|
6987 schuur 1.1 Array<CIMInstance> _pInstances = request->providers;
6988
6989 CIMDisableModuleResponseMessage * response =
6990 new CIMDisableModuleResponseMessage(
6991 request->messageId,
6992 CIMException(),
6993 request->queueIds.copyAndPop(),
6994 operationalStatus);
6995
6996 PEGASUS_ASSERT(response != 0);
6997
6998 // preserve message key
6999 response->setKey(request->getKey());
7000
7001 //
7002 // Set HTTP method in response from request
7003 //
7004 response->setHttpMethod (request->getHttpMethod ());
7005
7006 PEG_METHOD_EXIT();
7007
7008 schuur 1.1 return(response);
7009 }
7010
7011 Message * JMPIProviderManager::handleEnableModuleRequest(const Message * message) throw()
7012 {
7013 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager::handleEnableModuleRequest");
7014
7015 CIMEnableModuleRequestMessage * request =
7016 dynamic_cast<CIMEnableModuleRequestMessage *>(const_cast<Message *>(message));
7017
7018 PEGASUS_ASSERT(request != 0);
7019
7020 Array<Uint16> operationalStatus;
|
7021 kumpf 1.10 operationalStatus.append(CIM_MSE_OPSTATUS_VALUE_OK);
|
7022 schuur 1.1
7023 CIMEnableModuleResponseMessage * response =
7024 new CIMEnableModuleResponseMessage(
7025 request->messageId,
7026 CIMException(),
7027 request->queueIds.copyAndPop(),
7028 operationalStatus);
7029
7030 PEGASUS_ASSERT(response != 0);
7031
7032 // preserve message key
7033 response->setKey(request->getKey());
7034
7035 // Set HTTP method in response from request
7036 response->setHttpMethod (request->getHttpMethod ());
7037
7038 PEG_METHOD_EXIT();
7039
7040 return(response);
7041 }
7042
7043 schuur 1.1 Message * JMPIProviderManager::handleStopAllProvidersRequest(const Message * message) throw()
7044 {
7045 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager::handleStopAllProvidersRequest");
7046
7047 CIMStopAllProvidersRequestMessage * request =
7048 dynamic_cast<CIMStopAllProvidersRequestMessage *>(const_cast<Message *>(message));
7049
7050 PEGASUS_ASSERT(request != 0);
7051
7052 CIMStopAllProvidersResponseMessage * response =
7053 new CIMStopAllProvidersResponseMessage(
7054 request->messageId,
7055 CIMException(),
7056 request->queueIds.copyAndPop());
7057
7058 PEGASUS_ASSERT(response != 0);
7059
7060 // preserve message key
7061 response->setKey(request->getKey());
7062
7063 // Set HTTP method in response from request
7064 schuur 1.1 response->setHttpMethod (request->getHttpMethod ());
7065
7066 // tell the provider manager to shutdown all the providers
7067 providerManager.shutdownAllProviders();
7068
7069 PEG_METHOD_EXIT();
7070
7071 return(response);
7072 }
7073
|
7074 kumpf 1.4 Message * JMPIProviderManager::handleInitializeProviderRequest(const Message * message)
7075 {
7076 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager::handleInitializeProviderRequest");
7077
7078 HandlerIntroInit(InitializeProvider,message,request,response,handler);
7079
7080 try
7081 {
7082 // resolve provider name
|
7083 mark.hamzy 1.23 ProviderName name = _resolveProviderName(
7084 request->operationContext.get(ProviderIdContainer::NAME));
|
7085 kumpf 1.4
7086 // get cached or load new provider module
|
7087 mark.hamzy 1.43 JMPIProvider::OpProviderHolder ph = providerManager.getProvider (name.getPhysicalName(),
7088 name.getLogicalName(),
7089 String::EMPTY);
|
7090 kumpf 1.4
7091 }
7092 HandlerCatch(handler);
7093
7094 PEG_METHOD_EXIT();
7095
7096 return(response);
7097 }
7098
|
7099 mark.hamzy 1.25 Message * JMPIProviderManager::handleSubscriptionInitCompleteRequest (const Message * message)
|
7100 carolann.graves 1.21 {
7101 PEG_METHOD_ENTER (TRC_PROVIDERMANAGER,
7102 "JMPIProviderManager::handleSubscriptionInitCompleteRequest");
7103
7104 CIMSubscriptionInitCompleteRequestMessage * request =
7105 dynamic_cast <CIMSubscriptionInitCompleteRequestMessage *>
7106 (const_cast <Message *> (message));
7107
7108 PEGASUS_ASSERT (request != 0);
7109
7110 CIMSubscriptionInitCompleteResponseMessage * response =
7111 dynamic_cast <CIMSubscriptionInitCompleteResponseMessage *>
7112 (request->buildResponse ());
7113
7114 PEGASUS_ASSERT (response != 0);
7115
7116 //
7117 // Set indicator
7118 //
7119 _subscriptionInitComplete = true;
7120
7121 carolann.graves 1.21 //
7122 // For each provider that has at least one subscription, call
7123 // provider's enableIndications method
7124 //
7125 Array <JMPIProvider *> enableProviders;
|
7126 mark.hamzy 1.44
|
7127 carolann.graves 1.21 enableProviders = providerManager.getIndicationProvidersToEnable ();
7128
7129 Uint32 numProviders = enableProviders.size ();
|
7130 mark.hamzy 1.44
7131 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleSubscriptionInitCompleteRequest: numProviders = "<<numProviders<<PEGASUS_STD(endl));
7132
7133 #if 0
|
7134 carolann.graves 1.21 for (Uint32 i = 0; i < numProviders; i++)
7135 {
7136 try
7137 {
7138 CIMInstance provider;
|
7139 mark.hamzy 1.44
7140 provider = enableProviders[i]->getProviderInstance ();
7141
7142 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleSubscriptionInitCompleteRequest: name = "<<enableProviders[i]->getName ()<<PEGASUS_STD(endl));
|
7143 carolann.graves 1.21
7144 //
7145 // Get cached or load new provider module
7146 //
|
7147 mark.hamzy 1.44 JMPIProvider::OpProviderHolder ph = providerManager.getProvider (enableProviders[i]->getModule ()->getFileName (),
7148 enableProviders[i]->getName ());
7149 indProvRecord *prec = NULL;
7150
7151 {
7152 AutoMutex lock (mutexProvTab);
7153
7154 provTab.lookup (enableProviders[i]->getName (), prec);
|
7155 carolann.graves 1.21 }
7156 }
7157 catch (CIMException & e)
7158 {
7159 PEG_TRACE_STRING (TRC_PROVIDERMANAGER, Tracer::LEVEL2,
7160 "CIMException: " + e.getMessage ());
7161 }
7162 catch (Exception & e)
7163 {
7164 PEG_TRACE_STRING (TRC_PROVIDERMANAGER, Tracer::LEVEL2,
7165 "Exception: " + e.getMessage ());
7166 }
7167 catch(...)
7168 {
7169 PEG_TRACE_STRING (TRC_PROVIDERMANAGER, Tracer::LEVEL2,
7170 "Unknown error in handleSubscriptionInitCompleteRequest");
7171 }
7172 }
|
7173 mark.hamzy 1.44 #endif
|
7174 carolann.graves 1.21
7175 PEG_METHOD_EXIT ();
7176 return (response);
7177 }
7178
|
7179 schuur 1.1 Message * JMPIProviderManager::handleUnsupportedRequest(const Message * message) throw()
7180 {
|
7181 mark.hamzy 1.23 PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleUnsupportedRequest");
7182
|
7183 konrad.r 1.16 CIMRequestMessage* request =
7184 dynamic_cast<CIMRequestMessage *>(const_cast<Message *>(message));
7185 PEGASUS_ASSERT(request != 0 );
7186
7187 CIMResponseMessage* response = request->buildResponse();
7188 response->cimException =
7189 PEGASUS_CIM_EXCEPTION(CIM_ERR_NOT_SUPPORTED, String::EMPTY);
|
7190 schuur 1.1
7191 PEG_METHOD_EXIT();
|
7192 konrad.r 1.16 return response;
|
7193 schuur 1.1 }
7194
|
7195 kumpf 1.2 ProviderName JMPIProviderManager::_resolveProviderName(
7196 const ProviderIdContainer & providerId)
|
7197 schuur 1.1 {
|
7198 kumpf 1.2 String providerName;
7199 String fileName;
7200 String interfaceName;
7201 CIMValue genericValue;
7202
7203 genericValue = providerId.getProvider().getProperty(
7204 providerId.getProvider().findProperty("Name")).getValue();
7205 genericValue.get(providerName);
7206
7207 genericValue = providerId.getModule().getProperty(
7208 providerId.getModule().findProperty("Location")).getValue();
7209 genericValue.get(fileName);
7210 fileName = resolveFileName(fileName);
7211
7212 // ATTN: This attribute is probably not required
7213 genericValue = providerId.getModule().getProperty(
7214 providerId.getModule().findProperty("InterfaceType")).getValue();
7215 genericValue.get(interfaceName);
7216
7217 return ProviderName(providerName, fileName, interfaceName, 0);
|
7218 schuur 1.1 }
7219
7220 String JMPIProviderManager::resolveFileName(String fileName)
7221 {
7222 String name;
7223 #if defined(PEGASUS_OS_TYPE_WINDOWS)
7224 name = fileName; // + String(".dll");
7225 #elif defined(PEGASUS_OS_HPUX) && defined(PEGASUS_PLATFORM_HPUX_PARISC_ACC)
7226 name = ConfigManager::getHomedPath(ConfigManager::getInstance()->getCurrentValue("providerDir"));
7227 name.append(String("/") + fileName); // + String(".sl"));
7228 #elif defined(PEGASUS_OS_HPUX) && !defined(PEGASUS_PLATFORM_HPUX_PARISC_ACC)
7229 name = ConfigManager::getHomedPath(ConfigManager::getInstance()->getCurrentValue("providerDir"));
7230 name.append(String("/") + fileName); // + String(".so"));
7231 #elif defined(PEGASUS_OS_OS400)
7232 name = filrName;
7233 #else
7234 name = ConfigManager::getHomedPath(ConfigManager::getInstance()->getCurrentValue("providerDir"));
7235 name.append(String("/") + fileName); // + String(".so"));
7236 #endif
7237 return name;
7238 }
7239 schuur 1.1
7240 PEGASUS_NAMESPACE_END
|