version 1.7.2.1, 2006/05/17 20:57:37
|
version 1.13, 2007/01/16 20:19:56
|
|
|
// | // |
//============================================================================== | //============================================================================== |
| |
Java Manageability Programming Interface - JMPI |
Java Manageability Programming Interface (JMPI) |
|
----------------------------------------------- |
| |
Author: Adrian Schuur, schuur@de.ibm.com - 30 Apr 2004 - |
JMPI is a bridge between clients and providers written in Java and the Open |
|
Pegasus project. |
| |
First installment |
More information on JMPI's status can be found at |
|
http://www.openpegasus.org/page.tpl?ggid=799 |
This installment of JMPI has been committed to the 2.4 branch. |
|
This installment has been build and tested on Suse 9.0 with Sun's j2sdk 1.4.2_04. |
|
| |
| |
Environment settings | Environment settings |
|
-------------------- |
| |
In order to build this support a few environment variables have to used. | In order to build this support a few environment variables have to used. |
The following script has been proven useful for setting up the build and execution environment. | The following script has been proven useful for setting up the build and execution environment. |
You might need to adjust this to your system layout. | You might need to adjust this to your system layout. |
| |
|
an example setJPeg script file: |
export PEGASUS_HOME=`pwd` | export PEGASUS_HOME=`pwd` |
|
export PEGASUS_ROOT=${PEGASUS_HOME} |
export PEGASUS_PLATFORM=LINUX_IX86_GNU | export PEGASUS_PLATFORM=LINUX_IX86_GNU |
export PEGASUS_ENABLE_CMPI_PROVIDER_MANAGER=1 |
export PEGASUS_ENABLE_JMPI_PROVIDER_MANAGER=true |
export PEGASUS_ENABLE_JMPI_PROVIDER_MANAGER=1 |
export PEGASUS_JVM=sun |
export PEGASUS_DEBUG=1 |
export JAVA_SDK=/usr/java/j2sdk1.4.2_08 |
export JAVA_SDK=/usr/java/j2sdk1.4.2_04 |
export JAVA_SDKINC=${JAVA_SDK}/include |
export JAVA_SDKINC=$JAVA_SDK/include |
export PEGASUS_JAVA_ARCH=i386 |
export LD_LIBRARY_PATH=$PEGASUS_HOME/lib:$JAVA_SDK/jre/lib/i386/server:$JAVA_SDK/jre/lib/i386/native_threads:$JAVA_SDK/jre/lib/i386 |
export PEGASUS_JAVA_TYPE=client |
export PATH=$JAVA_SDK/bin:$PATH |
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${JAVA_SDK}/jre/lib/${PEGASUS_JAVA_ARCH}/server:${JAVA_SDK}/jre/lib/${PEGASUS_JAVA_ARCH}/native_threads:${JAVA_SDK}/jre/lib/${PEGASUS_JAVA_ARCH} |
export CLASSPATH=$PEGASUS_ROOT/src/Pegasus/ProviderManager2/JMPI |
export PATH=${JAVA_SDK}/bin/:${PEGASUS_HOME}/bin:${PATH} |
export PATH=$PEGASUS_HOME/bin:$PATH |
export CLASSPATH=${CLASSPATH}:${PEGASUS_HOME}/lib/JMPIImpl.jar |
export PEGASUS_ROOT=$PEGASUS_HOME |
|
export LD_ASSUME_KERNEL=2.2.5 |
Lets walk through the manditory environment variables. The first tells Pegasus to build the |
cd $PEGASUS_HOME |
Java provider manager. |
|
export PEGASUS_ENABLE_JMPI_PROVIDER_MANAGER=true |
There is now a new variable to determine which JVM to link with. The choices are as follows: |
|
PEGASUS_JVM sun Sun's jvm (ex: j2sdk1.4.2_07) |
The second says which JRE to use. The choices are as follows: |
PEGASUS_JVM ibm IBM's jvm (ex: IBMJava2-142) |
export PEGASUS_JVM=gcj Gnu's jvm (ex: gcj (GCC) 4.1.1 20061011 (Red Hat 4.1.1-30)) |
PEGASUS_JVM bea Suse's IBM jvm (ex: BEAJava2-1.4.2) |
export PEGASUS_JVM=sun Sun's jvm (ex: j2sdk1.4.2_07) |
|
export PEGASUS_JVM=ibm IBM's jvm (ex: IBMJava2-142) |
|
export PEGASUS_JVM=bea Suse's IBM jvm (ex: BEAJava2-1.4.2) |
So, pick one and export that variable to the environment. For example, | So, pick one and export that variable to the environment. For example, |
export PEGASUS_JVM=sun | export PEGASUS_JVM=sun |
NOTE: This is currently listened to for Linux builds. |
NOTE: The gcj and sun options were the only tested JVMs. |
|
NOTE: gcj is only supported using gcc version 4.1.1 or later. |
|
|
|
The third and fourth say where the JRE libraries and header files are located. This may or may not |
|
be necessary depending upon the compiler's default search paths. |
|
Since we are using Sun's JRE, point to Sun's paths. |
|
export JAVA_SDK=/usr/java/j2sdk1.4.2_08 |
|
export JAVA_SDKINC=${JAVA_SDK}/include |
|
|
|
The fifth variable defines the Java architecture of the JMV |
|
export PEGASUS_JAVA_ARCH=i386 |
|
|
|
The sixth variable defines which version of the jvm library to link to (the |
|
client or the server). |
|
export PEGASUS_JAVA_TYPE=client |
|
|
|
As a test to make sure your environment variables are correct |
|
ls ${JAVA_SDK}/jre/lib/${PEGASUS_JAVA_ARCH}/${PEGASUS_JAVA_TYPE} |
|
should show you libjvm.so for Sun's JRE. |
|
|
|
The seventh may be necessary to tell the linker where to load the JRE libraries. |
|
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${JAVA_SDK}/jre/lib/${PEGASUS_JAVA_ARCH}/server:${JAVA_SDK}/jre/lib/${PEGASUS_JAVA_ARCH}/native_threads:${JAVA_SDK}/jre/lib/${PEGASUS_JAVA_ARCH} |
|
|
|
The eighth one may be necessary to get the JVM's executable files into the PATH. |
|
export PATH=${JAVA_SDK}/bin/:${PEGASUS_HOME}/bin:${PATH} |
|
|
|
The nineth tells the JRE to include JMPI's Java classes. |
|
export CLASSPATH=${CLASSPATH}:${PEGASUS_HOME}/lib/JMPIImpl.jar |
| |
There are a couple of optional environment variables to determine how the JRE is initialized. These are | There are a couple of optional environment variables to determine how the JRE is initialized. These are |
as follows (the variable name and what JRE option that it corresponds to): | as follows (the variable name and what JRE option that it corresponds to): |
|
|
| |
export PEGASUS_JMPI_MAX_HEAP=128m | export PEGASUS_JMPI_MAX_HEAP=128m |
| |
There is a new environment variable that tells the JVM to output more debugging information. The variable name |
There is a new optional environment variable that tells the JVM to output more debugging information. The variable name |
is called PEGASUS_JMPI_VERBOSE. An example usage is as follows: | is called PEGASUS_JMPI_VERBOSE. An example usage is as follows: |
| |
export PEGASUS_JMPI_VERBOSE="jni,class" | export PEGASUS_JMPI_VERBOSE="jni,class" |
|
|
This will tell the JVM to output debug information on the JNI layer and class loading. | This will tell the JVM to output debug information on the JNI layer and class loading. |
| |
When using this script, place a copy of this script above your PEGASUS_HOME directory. | When using this script, place a copy of this script above your PEGASUS_HOME directory. |
"cd" to PEGASUS_HOME, and issue ". ../setJPeg". Then do a normal make. |
"cd" to PEGASUS_HOME, and issue ". ./setJPeg". Then do a normal make. |
| |
| |
This installment has a number of restrictios: |
Known restrictions |
|
------------------ |
|
|
|
This installment has the following restrictios: |
| |
The provider interfaces follow the SNIA OpenWBEM APIs |
|
Only Instance and Association providers are supported at the moment. |
|
Unloading of idle providers is not supported and Java will increase the memory footprint. | Unloading of idle providers is not supported and Java will increase the memory footprint. |
|
Java 1.5 is not currently supported. |
| |
| |
poststarttests |
Level of coverage |
|
----------------- |
| |
This installment has a set of tests modelled after wetest/static. |
All interfaces to a provider have a sample provider written for them and are part of the |
I had to modify "diff" to "diff -w", why that is needed I do not understand. |
testcases. All main CIM java classes have testcases written for them as well. |
| |
| |
Building poststarttests: |
Outstanding issues |
|
------------------ |
| |
cd to .../src/Pegasus/ProviderManager2/JMPI/org/pegasus/jmpi/tests/Load |
Java documentation needs to be written for the classes and methods within JMPI. |
Issue "make" |
|
| |
This will load a schema to the repository and register the provider. |
|
| |
|
Testing |
|
------- |
|
|
|
This installment has a set of tests located under src/Pegasus/ProviderManager2/JMPI/org/pegasus/jmpi/tests/ |
|
|
|
Static/ |
|
|
|
These tests have been modelled after wetest/static. |
|
For the tests, I had to modify "diff" to "diff -w", why that is needed I do not understand. |
|
|
|
Providers/ |
| |
Running poststarttests: |
These tests implement the many variants of provider interfaces. |
| |
cd to .../src/Pegasus/ProviderManager2/JMPI/org/pegasus/jmpi/tests |
Client/ |
Issue "find -name "*.rsp" -exec rm {} \;" to clean up *.rsp files |
|
|
These tests test out the client code and various Java classes. |
|
|
|
|
|
Running the tests |
|
----------------- |
|
|
|
Tests are run with the following process. |
|
If the repository has not been built before then issue the following: |
|
|
|
cd to ${PEGASUS_HOME}/src/Pegasus/ProviderManager2/JMPI/ |
|
Issue "make repository" |
|
|
|
This will load a schema to the repository and register the provider. |
|
|
|
Next, run the tests. |
|
|
|
cd to ${PEGASUS_HOME}/src/Pegasus/ProviderManager2/JMPI/ |
|
Issue "find -name \*.rsp -exec rm {} \;" to clean up *.rsp files from failed tests. |
Issue "make poststarttests" | Issue "make poststarttests" |
| |
| |
Samples | Samples |
|
------- |
|
|
|
There are four sample providers located in |
|
${PEGASUS_HOME}/src/Pegasus/ProviderManager2/JMPI/org/pegasus/jmpi/tests/Providers/ |
|
|
|
Associations/ |
|
|
|
This provider implements an association provider. |
| |
The provider used for posstarttest, |
Instances/ |
.../JMPI/org/pegasus/jmpi/test/JMPI_TestPropertyTypes/JMPI_TestPropertyTest.java is a working |
|
example of how to code an JMPI tyle instance provider. |
|
This directors also constains the required Makefile. |
|
| |
.../JMPI/org/pegasus/jmpi/sample contains more samples, one of which is an incomplete CIMClient |
This provider implements an instance provider. |
sample. |
|
| |
Notice that all provider classes must be accessibe via the CASSPATH environment setting. |
Indications/ |
|
|
|
This provider implements an indication provider. |
|
|
|
Properties/ |
|
|
|
This provider implements a property provider. |
|
|
|
There is also sample Java code that deals with CIM classes that is located in |
|
${PEGASUS_HOME}/src/Pegasus/ProviderManager2/JMPI/org/pegasus/jmpi/tests/Client/ |
| |
| |
Provider Registration | Provider Registration |
|
--------------------- |
| |
JMPI providers are registered as usual. The Location property in P_ProviderModule has a special format. |
JMPI providers are registered as usual. The Location property in PG_ProviderModule has a special format. |
The format is: <jar-file-name>:<provider-class-name> | The format is: <jar-file-name>:<provider-class-name> |
| |
|
JMPI providers now fall into two groups. |
|
1) Legacy providers use: |
|
InterfaceType = "JMPI" |
|
and use one of the 3 following based on existing JMPI samples: |
|
InterfaceVersion = "1.0.0"; |
|
InterfaceVersion = "2.0.0"; |
|
InterfaceVersion = "2.2.0"; |
|
Note that there is no difference in behavior in the three versions. |
|
|
instance of PG_ProviderModule | instance of PG_ProviderModule |
{ | { |
Name = "JMPI_TestPropertyTypesModule"; |
Name = "JMPIInstanceProviderModule"; |
Location = "JMPI_TestPropertyTypes.jar:org/pegasus/jmpi/tests/JMPI_TestPropertyTypes/JMPI_TestPropertyTypes"; |
Location = "JMPIInstanceProvider.jar:Instances/JMPIInstanceProvider"; |
Vendor = "Pegasus Community"; |
Vendor = "OpenPegasus"; |
Version = "2.0.0"; | Version = "2.0.0"; |
InterfaceType = "JMPI"; | InterfaceType = "JMPI"; |
InterfaceVersion = "1.0.0"; | InterfaceVersion = "1.0.0"; |
}; | }; |
| |
JMPI providers now fall into two groups. Legacy providers use: |
2) New style providers use: |
InterfaceType = "JMPI" |
|
and use one of the 3 following: |
|
InterfaceVersion = "1.0.0"; |
|
InterfaceVersion = "2.0.0"; |
|
InterfaceVersion = "2.2.0"; |
|
New style providers use: |
|
InterfaceType = "JMPIExperimental" | InterfaceType = "JMPIExperimental" |
and: | and: |
InterfaceVersion = "0.0.1"; | InterfaceVersion = "0.0.1"; |
| |
|
instance of PG_ProviderModule |
|
{ |
|
Name = "JMPIExpInstanceProviderModule"; |
|
Location = "JMPIExpInstanceProvider.jar:Instances/JMPIExpInstanceProvider"; |
|
Vendor = "OpenPegasus"; |
|
Version = "2.0.0"; |
|
InterfaceType = "JMPIExperimental"; |
|
InterfaceVersion = "0.0.1"; |
|
}; |
|
|
| |
Bug reports | Bug reports |
|
----------- |
| |
Use normal Pegasus bugzilla procedures to report malfunctions. | Use normal Pegasus bugzilla procedures to report malfunctions. |
|
|
|
|
Regards, Adrian Schuur. |
|
|
|
|
|