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