Rony G. Flatscher wrote:
Hi there,

went out and found some infos on Sun's documentation, but still wouldn't know a solution to the problem. Here's the use case:

    * a C/++ program loads and uses a Java class that resides in an
      extension jar (copied to .../jre/lib/ext); that Java class is used
      to invoke Java classes anywhere on the system using
      "Class.forName()" to locate and load the classes (using
      "this.getClassLoader()"). In the process that Java class will use
      JNI to invoke the ooRexx interpreter (a C++ program)  which
      executes a supplied Rexx script (using a DLL which is copied to
      .../jre/lib/i386). Such Rexx programs are able to call back into
      Java using JNI.
          o So far it works.
          o Now, if a Java class should be located from a
            non-bootstrap/non extension directory (using
            "Class.forName(string)" ) on behalf of the Rexx script, this
            does not work. It seems that in this use case the used
            classLoader seems to have no information about additional
            Java classes pointed to by the CLASSPATH environment
            variable or the appropriate "-Djava.class.path" startup option.

The JNI and Rexx stuff is irrelevant here.  Its as simple as this:

 AppClassLoader   --knows-->  UNO classes (via CLASSPATH)
  |                 directly...
  |
  ...and indirectly...
  |
  v
 ExtClassLoader   --knows-->  your classes (via ext dir)
  |                 directly...
  |
  ...and indirectly...
  |
  v
 BootstrapClassLoader --knows-->  java.lang etc. (hardcoded)
                        directly

If your classes call Class.ForName("someUNOclass", true, ExtClassLoader) (as they do when they simply call Class.ForName("someUNOclass")), that wont work. If your classes want to use UNO, they need to be loaded by a classloader that knows (directly or indirectly) the UNO classes. Hence, if your classes shall be loaded by ExtClassLoader, the UNO classes would need to be loaded by ExtClassLoader, too.

Any good book on Java should cover that classloader stuff in detail.

-Stephan

[...]

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to