You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by aw...@apache.org on 2006/10/08 20:17:29 UTC
svn commit: r454184 - in /incubator/openjpa/trunk:
openjpa-kernel/src/main/java/org/apache/openjpa/enhance/
openjpa-kernel/src/main/resources/org/apache/openjpa/enhance/
openjpa-lib/src/main/java/org/apache/openjpa/lib/util/
Author: awhite
Date: Sun Oct 8 11:17:28 2006
New Revision: 454184
URL: http://svn.apache.org/viewvc?view=rev&rev=454184
Log:
Make the inability to instantiate an auxiliary enhancer non-fatal. Also cache
auxiliary enhancers statically to speed up enhancement.
Modified:
incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCEnhancer.java
incubator/openjpa/trunk/openjpa-kernel/src/main/resources/org/apache/openjpa/enhance/localizer.properties
incubator/openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/Services.java
Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCEnhancer.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCEnhancer.java?view=diff&rev=454184&r1=454183&r2=454184
==============================================================================
--- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCEnhancer.java (original)
+++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCEnhancer.java Sun Oct 8 11:17:28 2006
@@ -109,6 +109,22 @@
private static final Localizer _loc = Localizer.forPackage
(PCEnhancer.class);
+ private static final AuxiliaryEnhancer[] _auxEnhancers;
+ static {
+ Class[] classes = Services.getImplementorClasses(
+ AuxiliaryEnhancer.class,
+ AuxiliaryEnhancer.class.getClassLoader());
+ List auxEnhancers = new ArrayList(classes.length);
+ for (int i = 0; i < classes.length; i++) {
+ try {
+ auxEnhancers.add(classes[i].newInstance());
+ } catch (Throwable t) {
+ // aux enhancer may rely on non-existant spec classes, etc
+ }
+ }
+ _auxEnhancers = (AuxiliaryEnhancer[]) auxEnhancers.toArray
+ (new AuxiliaryEnhancer[auxEnhancers.size()]);
+ }
private final BCClass _pc;
private final MetaDataRepository _repos;
@@ -118,7 +134,6 @@
private boolean _defCons = true;
private boolean _fail = false;
- private AuxiliaryEnhancer[] _auxEnhancers = null;
private File _dir = null;
private BytecodeWriter _writer = null;
private Map _backingFields = null;
@@ -2639,35 +2654,17 @@
/**
* Gets the auxiliary enhancers registered as {@link Services services}.
- * Multi-call safe -- the first call locates the auxiliary enhancers,
- * subsequent calls merely returns the existing set.
- *
- * @return array of auxiliary enhancers. empty array if none is registered.
*/
public AuxiliaryEnhancer[] getAuxiliaryEnhancers() {
- if (_auxEnhancers == null) {
- try {
- Class[] classes = Services.getImplementorClasses(
- AuxiliaryEnhancer.class,
- AuxiliaryEnhancer.class.getClassLoader());
- _auxEnhancers = new AuxiliaryEnhancer[classes.length];
- for (int i = 0; i < _auxEnhancers.length; i++)
- _auxEnhancers[i] = (AuxiliaryEnhancer) classes[i].
- newInstance();
- } catch (Throwable t) {
- throw new GeneralException(t);
- }
- }
- return _auxEnhancers;
+ return _auxEnhancers;
}
/**
* Allow any registered auxiliary code generators to run.
*/
private void runAuxiliaryEnhancers() {
- AuxiliaryEnhancer[] auxEnhancers = getAuxiliaryEnhancers();
- for (int i = 0; i < auxEnhancers.length; i++)
- auxEnhancers[i].run(_pc, _meta);
+ for (int i = 0; i < _auxEnhancers.length; i++)
+ _auxEnhancers[i].run(_pc, _meta);
}
/**
@@ -2677,9 +2674,8 @@
* @return true if any of the auxiliary enhancers skips the given method
*/
private boolean skipEnhance(BCMethod method) {
- AuxiliaryEnhancer[] auxEnhancers = getAuxiliaryEnhancers();
- for (int i = 0; i < auxEnhancers.length; i++)
- if (auxEnhancers[i].skipEnhance(method))
+ for (int i = 0; i < _auxEnhancers.length; i++)
+ if (_auxEnhancers[i].skipEnhance(method))
return true;
return false;
}
Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/resources/org/apache/openjpa/enhance/localizer.properties
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/resources/org/apache/openjpa/enhance/localizer.properties?view=diff&rev=454184&r1=454183&r2=454184
==============================================================================
--- incubator/openjpa/trunk/openjpa-kernel/src/main/resources/org/apache/openjpa/enhance/localizer.properties (original)
+++ incubator/openjpa/trunk/openjpa-kernel/src/main/resources/org/apache/openjpa/enhance/localizer.properties Sun Oct 8 11:17:28 2006
@@ -2,9 +2,9 @@
runtime-enhance-pcclasses: You have enabled runtime enhancement, but have not \
specified the set of persistent classes. OpenJPA must look for metadata for \
every loaded class, which might increase class load times significantly.
-running-all-classes: No targets were given. Running on all classes listed in \
- org.apache.openjpa.PersistentClasses, or all metadata files in classpath directories if \
- the property is not specified.
+running-all-classes: No targets were given. Running on all classes in your \
+ persistent classes list, or all metadata files in classpath directories if \
+ you have not listed your persistent classes.
detach-custom-ser: Type "{0}" is set to detach on serialize, but implements \
a custom readObject and/or writeObject method. You cannot use custom \
serialization with detachment.
Modified: incubator/openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/Services.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/Services.java?view=diff&rev=454184&r1=454183&r2=454184
==============================================================================
--- incubator/openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/Services.java (original)
+++ incubator/openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/Services.java Sun Oct 8 11:17:28 2006
@@ -124,8 +124,7 @@
}
}
}
- }
- finally {
+ } finally {
try {
in.close();
} catch (IOException ioe) {