Hi Martin,

thanks for testing! All your remarks make sense. I changed the code accordingly and checked it in.

Regards Michael


Michael,
I tested your JDO1 patch with JDK 1.4 in a clean workspace, and
all security manager tests run fine.

I mostly looked at the code additions to RuntimeJavaModel.java,
which are well documented (no further questions on the code).
Also, the getJavaModel() and getDeclaringJavaModelFactory()
changes look good.  I was surprised about the amount of changes,
but to me the classloading code has gained clarity.

Only true cosmetics:
- 'instacne' misspelled twice in RuntimeJavaModel
- "class instance" might be ambiguous, consider "Class instance"
  since the comments refer to an instance of java.lang.Class
- The 'true' value passed to the two invocations of forNamePrivileged()
  leaves one guessing, though the code comments explain the intent.
  Consider:
    final boolean initialize = true;
    RuntimeJavaModelFactory.forNamePrivileged(..., initialize,...)
- In getJavaType(Class), somewhere after
     if (javaType == null) { ...
  I'd expected a comment (or assertion) about the special handling
  of pre-defined types, i.e., that 'javaType' cannot be a PreDefined
  type.  Correct?  The javadoc on that class already has it, so it's
  not a real lack of information there, just redundancy.

Martin

Michael Bouschen wrote:


I have implemented the JavaModel changes as we discussed. Now the Class.forName is called in a doPrivileged block to avoid the SecurityException. The other change is that I moved all the code that checks for the right class loader to the RuntimeJavaModel. A JavaType lookup by name first gets the class instance using the class loader bound to the model instance. Then it gets the class loader from the class instance and delegates to JavaModel bound to this class loader. This makes sure that a JavaModel handles only classes that are loaded by th class loader bound to the JavaModel. There is one exception: all JavaModel instances know about all the PredefinedType instances (JavaType instances for primitive types, Java wrapper class, java.util classes etc.).

Attached find two patches created from the trunk(!) directory:
- JDO1-JavaModel.patch: ri11 changes. I tested this running the ri11 tests and tck11 in a jdk1.5 environment (I'm using the enhancer changes you send over). - JDO2-JavaModel.patch: the corresponding changes for JDO2. This changes classes in core20, enhancer20, runtime20 and fostore20. I run the fostore20 tests with jdk 1.4.

Please let me know what you think.



--
Michael Bouschen                [EMAIL PROTECTED] Engineering GmbH
mailto:[EMAIL PROTECTED]        http://www.tech.spree.de/
Tel.:++49/30/235 520-33         Buelowstr. 66                   
Fax.:++49/30/2175 2012          D-10783 Berlin                  

Reply via email to