mkalen      2005/03/11 11:05:18

  Modified:    src/java/org/apache/ojb/broker/metadata ClassDescriptor.java
               src/java/org/apache/ojb/broker/platforms
                        PlatformFactory.java
               src/java/org/apache/ojb/broker/util ClassHelper.java
               src/java/org/apache/ojb/jdo/jdoql Type.java
  Log:
  Merge with OJB_1_0_RELEASE branch: As suggested by Andres Clute: to avoid 
problems in J2EE-environments, always use the ClassLoader as specified by the 
semantics of ClassHelper. Add system default class loader as last resort in 
ClassHelper (thread's loader is null in some JNI scenarios).
  
  Revision  Changes    Path
  1.101     +2 -2      
db-ojb/src/java/org/apache/ojb/broker/metadata/ClassDescriptor.java
  
  Index: ClassDescriptor.java
  ===================================================================
  RCS file: 
/home/cvs/db-ojb/src/java/org/apache/ojb/broker/metadata/ClassDescriptor.java,v
  retrieving revision 1.100
  retrieving revision 1.101
  diff -u -r1.100 -r1.101
  --- ClassDescriptor.java      25 Jan 2005 20:23:43 -0000      1.100
  +++ ClassDescriptor.java      11 Mar 2005 19:05:18 -0000      1.101
  @@ -1532,7 +1532,7 @@
           {
               try
               {
  -                Class clazz = Class.forName(newClass);
  +                Class clazz = ClassHelper.getClass(newClass);
                   setFactoryClass(clazz);
               }
               catch (Exception e)
  
  
  
  1.8       +2 -2      
db-ojb/src/java/org/apache/ojb/broker/platforms/PlatformFactory.java
  
  Index: PlatformFactory.java
  ===================================================================
  RCS file: 
/home/cvs/db-ojb/src/java/org/apache/ojb/broker/platforms/PlatformFactory.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- PlatformFactory.java      11 Aug 2004 00:41:49 -0000      1.7
  +++ PlatformFactory.java      11 Mar 2005 19:05:18 -0000      1.8
  @@ -53,7 +53,7 @@
               try
               {
                   platformName = getClassnameFor(dbms);
  -                Class platformClass = Class.forName(platformName);
  +                Class platformClass = ClassHelper.getClass(platformName);
                   result = (Platform) platformClass.newInstance();
               }
               catch (Throwable t)
  
  
  
  1.14      +25 -4     
db-ojb/src/java/org/apache/ojb/broker/util/ClassHelper.java
  
  Index: ClassHelper.java
  ===================================================================
  RCS file: 
/home/cvs/db-ojb/src/java/org/apache/ojb/broker/util/ClassHelper.java,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- ClassHelper.java  15 Nov 2004 17:29:14 -0000      1.13
  +++ ClassHelper.java  11 Mar 2005 19:05:18 -0000      1.14
  @@ -73,13 +73,34 @@
       /**
        * Returns the class loader currently used by OJB. Defaults to the class 
loader of
        * the current thread 
(<code>Thread.currentThread().getContextClassLoader()</code>)
  -     * if not set differently.
  -     * 
  +     * if not set differently. If class loader is not explicitly set and the 
loader for
  +     * the current thread context is null, the JVM default class loader will 
be used.
  +     *
        * @return The classloader used by OJB
  +     * @see #setClassLoader(ClassLoader)
        */
       public static ClassLoader getClassLoader()
       {
  -        return _classLoader == null ? 
Thread.currentThread().getContextClassLoader() : _classLoader;
  +        final ClassLoader ojbClassLoader;
  +        if (_classLoader != null)
  +        {
  +            ojbClassLoader = _classLoader;
  +        }
  +        else
  +        {
  +            final ClassLoader threadCtxtClassLoader;
  +            threadCtxtClassLoader = 
Thread.currentThread().getContextClassLoader();
  +            if (threadCtxtClassLoader == null)
  +            {
  +                // mkalen: happens only in "obscure" situations using JNI, 
revert to system CL
  +                ojbClassLoader = ClassLoader.getSystemClassLoader();
  +            }
  +            else
  +            {
  +                ojbClassLoader = threadCtxtClassLoader;
  +            }
  +        }
  +        return ojbClassLoader;
       }
   
       /**
  
  
  
  1.4       +4 -1      db-ojb/src/java/org/apache/ojb/jdo/jdoql/Type.java
  
  Index: Type.java
  ===================================================================
  RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/jdo/jdoql/Type.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- Type.java 23 May 2004 12:02:29 -0000      1.3
  +++ Type.java 11 Mar 2005 19:05:18 -0000      1.4
  @@ -1,5 +1,7 @@
   package org.apache.ojb.jdo.jdoql;
   
  +import org.apache.ojb.broker.util.ClassHelper;
  +
   /* Copyright 2003-2004 The Apache Software Foundation
    *
    * Licensed under the Apache License, Version 2.0 (the "License");
  @@ -48,9 +50,10 @@
        */
       private void resolvePrimitiveType()
       {
  +        final ClassLoader loader = ClassHelper.getClassLoader();
           try
           {
  -            _type = Class.forName(_name);
  +            _type = Class.forName(_name, true, loader);
           }
           catch (ClassNotFoundException ex)
           {
  
  
  

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

Reply via email to