Problem with Oracle JVM classLoader
-----------------------------------

                 Key: DISCOVERY-13
                 URL: https://issues.apache.org/jira/browse/DISCOVERY-13
             Project: Commons Discovery
          Issue Type: Improvement
    Affects Versions: 0.4, 0.2
         Environment: Oracle Java stored procedure (oracle versions 8i -> 11g) 
Any OS
            Reporter: Leo Blumencweig
            Priority: Minor
             Fix For: 0.4, 0.2


First of all, excuse my bad english (I'm an spanish speaker)
Starting in version 8i, Oracle provides an embedded JVM inside th databases, in 
order to develop a stored procedure inJava language, later to be invoked via 
PL/SQL.

Saddly, the JVM has some quirks, for example an somehow brain-damaged 
classLoader (oracle.aurora.rdbms.OracleClassLoader).
This JVM stores the classes inside table objects (very reasonable).

This leads to some problem: the resources haves some strange URL (example: 
jserver:/resource/schema/NAME_OF_THE_SCHEMA/ar.com.menhir.config.properties).
It will be not problema at all except because it's brain damage insist in 
telling that the above URL works only with RESOURCES and not with CLASSES!!

for example, the following example

          private static void getData ( ClassLoader cl , String str ){
                  System.out.println(str +".class" + "-> 
"+cl.getResource(str+".class"));
                  System.out.println(str +".class" + "-> 
"+ClassLoader.getSystemResource(str+".class"));
          }
...
getData(Test.class.getClassLoader(),"ar.com.menhir.wstest.Test");
...
gives this 2 results:
with normal classLoader ( sun.misc.Launcher$AppClassLoader)

    ar/com/menhir/wstest/Test.class-> 
file:/C:/Users/LeoB/workspace2/prueba/bin/ar/com/menhir/wstest/Test.class
    ar/com/menhir/wstest/Test.class-> 
file:/C:/Users/LeoB/workspace2/prueba/bin/ar/com/menhir/wstest/Test.class

with oracle classLoader (oracle.aurora.rdbms.OracleClassLoader)

    ar/com/menhir/wstest/Test.class-> null
    ar/com/menhir/wstest/Test.class-> null

The problem arises in 
org.apache.commons.discovery.resource.classes.DiscoverClasses, where the line 
60 

final String resourceName = className.replace('.','/') + ".class";

points to a nonexistente resource.

my workaround was to hack this class with the following:

final String resourceName = 
ar.com.menhir.oracle.resources.Utils.getResourcePrefix(className).replace('.','/')
 + ".class";

where getResourcePrefix gets the correct prefix for this class.

You must note that this is a somehow brutal way of solving. I'm interested in 
contribute with the wright way, but I'm not very sure of where to start.
Could you please help me?

Thank you
   Leo Blumencweig


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to