geronimo-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
Subject [jira] Created: (GERONIMO-155) [proposal] resolving for kernel
Date Mon, 02 Feb 2004 21:42:52 GMT

  A new issue has been created in JIRA.

View the issue:

Here is an overview of the issue:
        Key: GERONIMO-155
    Summary: [proposal] resolving for kernel
       Type: Improvement

     Status: Unassigned
   Priority: Major

    Project: Apache Geronimo

   Reporter: Kristian Koehler

    Created: Mon, 2 Feb 2004 1:42 PM
    Updated: Mon, 2 Feb 2004 1:42 PM


Building and running Geronimo offline or behind a firewall is nearly impossible. 
Most problems araise from the fact that there are code requiring remote entity resolving.
The current LocalEntityResolver solves that problem for "Geronimo code". Every other module/
service could cause a similar problem. 
Currently I have problems with the Jetty Module requiring a SUN schema file which is not found
by the SAXParser.

One possible solution IMO is a ParserWrapper implementation which wraps the "normal" implemention.
This Wrapper should be made available to all services deployed in Geronimo. A call to 


should return a Wrapper implementation which returns all other Wrapper implementations (SAXParserWrapper,
XMLReaderWrapper, ...). 

The normal lookup mechanism in the SAXParserFactory is as follows:

* test SystemProperty "javax.xml.parsers.SAXParserFactory"
* lookup in java.home
* test META-INF/services/javax.xml.parsers.SAXParserFactory file

The last call could be redirected to the wrapper implementation ("ClassLoader hack"). The
other both calls couldn't be redirected. But I think if a user had set a implementation via
SystemProperty or file the wrapper implementation should be skipped (warning
message for the user).

IMO all services/modules should be deployed with a ClassLoaderWrapper which redirects all
Parser lookups to a wrapper implementation which wraps the "normal implementation". This "normal
implementation" could be determined via the "normal lookup mechanism".

something like that
------ 8< ------

InputStream stream = localClassLoader.getResourceAsStream("META-INF/services/javax.xml.parsers.SAXParserFactory");
 if (stream != null) {
   InputStreamReader isr = new InputStreamReader(stream);
   BufferedReader reader = new BufferedReader(isr);
   factoryClassName = reader.readLine();
 } else {
   factoryClassName = "org.apache.crimson.jaxp.SAXParserFactoryImpl";

------ 8< ------

So all resolving could be redirected to a LocalEntityResolver. 

Something like the following code could be included in the doStart() method of the Configuration
class. So all deployed Beans should use the wrapper.

------ 8< ------

Class clazz =  
Method setDelegate = clazz.getMethod("setDelegate", 
                           new Class[]{String.class});
if (parent == null) {
  setDelegate.invoke(clazz, new Object[]{...)});
} else {
  setDelegate.invoke(clazz, new Object[]{...)});

------ 8< ------

I hope my idea is understandable ;-)


This message is automatically generated by JIRA.

If you think it was sent incorrectly contact one of the administrators:

If you want more information on JIRA, or have a bug to report see:

View raw message