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