openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Abe White <awh...@bea.com>
Subject Re: Shared classloader and subclasses
Date Mon, 26 Mar 2007 20:56:10 GMT
I've committed an equivalent patch to 0.9.7 in SVN revision 522623.   
Can you confirm whether this fixes your problem and, if so, close any  
CR you might have opened on this?

> This works for me :) Here's a patch for 0.9.6 source. I've gone for  
> the
> simplest solution, but it might be improved by looping over pcNames  
> instead
> of _registered (?).
>
> http://www.nabble.com/file/7398/openjpa-diff openjpa-diff
>
> Index: MetaDataRepository.java
> ===================================================================
> --- MetaDataRepository.java
> (.../tags/0.9.6/openjpa-kernel/src/main/java/org/apache/openjpa/meta)
> (revision 3)
> +++ MetaDataRepository.java
> (.../branches/0.9.6-ninthavenue/openjpa-kernel/src/main/java/org/ 
> apache/openjpa/meta)
> (working copy)
> @@ -302,7 +302,7 @@
>              return null;
>
>          // check cache
> -        processRegisteredClasses();
> +        processRegisteredClasses(envLoader);
>          List classList = (List) _aliases.get(alias);
>
>          // multiple classes may have been defined with the same  
> alias: we
> @@ -928,7 +928,7 @@
>          }
>
>          // check cache
> -        processRegisteredClasses();
> +        processRegisteredClasses(envLoader);
>          Class cls = (Class) _oids.get(oid.getClass());
>          if (cls != null)
>              return getMetaData(cls, envLoader, mustExist);
> @@ -944,7 +944,7 @@
>          // if still not match, register any classes that look  
> similar to
> the
>          // oid class and check again
>          resolveIdentityClass(oid);
> -        if (processRegisteredClasses().length > 0) {
> +        if (processRegisteredClasses(envLoader).length > 0) {
>              cls = (Class) _oids.get(oid.getClass());
>              if (cls != null)
>                  return getMetaData(cls, envLoader, mustExist);
> @@ -1262,7 +1262,7 @@
>       * Parses the metadata for all registered classes.
>       */
>      private void loadRegisteredClassMetaData(ClassLoader envLoader) {
> -        Class[] reg = processRegisteredClasses();
> +        Class[] reg = processRegisteredClasses(envLoader);
>          for (int i = 0; i < reg.length; i++) {
>              try {
>                  getMetaData(reg[i], envLoader, false);
> @@ -1276,7 +1276,7 @@
>      /**
>       * Updates our datastructures with the latest registered classes.
>       */
> -    Class[] processRegisteredClasses() {
> +    Class[] processRegisteredClasses(ClassLoader envLoader) {
>          if (_registered.isEmpty())
>              return EMPTY_CLASSES;
>
> @@ -1289,9 +1289,18 @@
>          }
>
>          Collection failed = null;
> +        Collection pcNames = getPersistentTypeNames(false,  
> envLoader);
>          for (int i = 0; i < reg.length; i++) {
>              try {
> -                processRegisteredClass(reg[i]);
> +
> +                /*
> +                 * Only process classes known to this  
> MetaDataRepository,
> +                 * since _registered contains all classes loaded by
> +                 * PCRegistry.
> +                 */
> +                if (pcNames.contains(reg[i].getName())) {
> +                    processRegisteredClass(reg[i]);
> +                }
>              } catch (Throwable t) {
>                  if (!_conf.getRetryClassRegistration())
>                      throw new
> MetaDataException(_loc.get("error-registered",
> Index: ClassMetaData.java
> ===================================================================
> --- ClassMetaData.java
> (.../tags/0.9.6/openjpa-kernel/src/main/java/org/apache/openjpa/meta)
> (revision 4)
> +++ ClassMetaData.java
> (.../branches/0.9.6-ninthavenue/openjpa-kernel/src/main/java/org/ 
> apache/openjpa/meta)
> (working copy)
> @@ -309,7 +309,7 @@
>          if (_owner != null)
>              return _repos.EMPTY_CLASSES;
>
> -        _repos.processRegisteredClasses();
> +        _repos.processRegisteredClasses(getEnvClassLoader());
>          if (_subs == null) {
>              Collection subs = _repos.getPCSubclasses(_type);
>              _subs = (Class[]) subs.toArray(new Class[subs.size()]);
>
> -- 
> View this message in context: http://www.nabble.com/Shared- 
> classloader-and-subclasses-tf3431312.html#a9655900
> Sent from the open-jpa-dev mailing list archive at Nabble.com.
>

_______________________________________________________________________
Notice:  This email message, together with any attachments, may contain
information  of  BEA Systems,  Inc.,  its subsidiaries  and  affiliated
entities,  that may be confidential,  proprietary,  copyrighted  and/or
legally privileged, and is intended solely for the use of the individual
or entity named in this message. If you are not the intended recipient,
and have received this message in error, please immediately return this
by email and then delete it.

Mime
View raw message