The following table describes the method in the Method Provider interface.
Table 5–4 MethodProvider Interface Methods|
Method |
Description |
|---|---|
|
CIMValue invokeMethod(CIMObjectPath op, String methodName, Vector inParams, Vector outParams) |
The CIM Object Manager calls this method when methodName in the instance referred to by op is invoked.. inParams is a vector of CIMValues that are input parameters to the invoked method. outParams is a vector of CIMValues that are output parameters from the invoked method. |
The code segment in Example 5–3 creates a Solaris provider class that routes requests to execute methods from the CIM Object Manager to one or more specialized providers. These specialized providers service requests for dynamic data for a particular type of Solaris object. For example, the Solaris_Package provider services requests to execute methods in the Solaris_Package class.
The method provider in this example implements a single method invokeMethod that calls the appropriate provider to perform one of following operations:
Reboot a Solaris system
Reboot or shut down a Solaris system
Delete a Solaris serial port
...
public class Solaris implements MethodProvider {
public void initialize(CIMONHandle, ch) throws CIMException {
}
public void cleanup() throws CIMException {
}
public CIMValue invokeMethod(CIMObjectPath op, String methodName,
Vector inParams, Vector outParams) throws CIMException {
if (op.getObjectName().equalsIgnoreCase("solaris_computersystem")) {
Solaris_ComputerSystem sp = new Solaris_ComputerSystem();
if (methodName.equalsIgnoreCase("reboot")) {
return new CIMValue (sp.Reboot());
}
}
if (op.getObjectName().equalsIgnoreCase("solaris_operatingsystem")) {
Solaris_OperatingSystem sos = new Solaris_OperatingSystem();
if (methodName.equalsIgnoreCase("reboot")) {
return new CIMValue (sos.Reboot());
}
if (methodName.equalsIgnoreCase("shutdown")) {
return new CIMValue (sos.Shutdown());
}
}
if (op.getObjectName().equalsIgnoreCase("solaris_serialport")) {
Solaris_SerialPort ser = new Solaris_SerialPort();
if (methodName.equalsIgnoreCase("disableportservice")) {
return new CIMValue (ser.DeletePort(op));
}
}
return null;
}
}
...