You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ojb-dev@db.apache.org by ar...@apache.org on 2004/01/03 13:54:41 UTC
cvs commit: db-ojb/src/java/org/apache/ojb/broker/metadata DescriptorRepository.java
arminw 2004/01/03 04:54:40
Modified: src/java/org/apache/ojb/broker/metadata
DescriptorRepository.java
Log:
fix bug in findFirstConcreteClass method
Revision Changes Path
1.43 +28 -15 db-ojb/src/java/org/apache/ojb/broker/metadata/DescriptorRepository.java
Index: DescriptorRepository.java
===================================================================
RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/metadata/DescriptorRepository.java,v
retrieving revision 1.42
retrieving revision 1.43
diff -u -r1.42 -r1.43
--- DescriptorRepository.java 19 Dec 2003 16:34:32 -0000 1.42
+++ DescriptorRepository.java 3 Jan 2004 12:54:40 -0000 1.43
@@ -109,6 +109,7 @@
private transient Map m_multiMappedTableMap;
private transient Map m_topLevelClassTable;
+ private transient Map m_firstConcreteClassMap;
/**
* Constructor declaration
@@ -163,6 +164,9 @@
// remove extent from super class descriptor
cld.removeExtentClass(classname);
m_topLevelClassTable.remove(extClass);
+ // clear map with first concrete classes, because the removed
+ // extent could be such a first found concrete class
+ m_firstConcreteClassMap = null;
}
}
}
@@ -306,29 +310,37 @@
*/
public ClassDescriptor findFirstConcreteClass(ClassDescriptor cld)
{
- ClassDescriptor result = null;
- if(cld.isInterface() || cld.isAbstract())
+ if(m_firstConcreteClassMap == null)
{
- if(cld.isExtent())
+ m_firstConcreteClassMap = new HashMap();
+ }
+ ClassDescriptor result = (ClassDescriptor) m_firstConcreteClassMap.get(cld.getClassNameOfObject());
+ if (result == null)
+ {
+ if(cld.isInterface() || cld.isAbstract())
{
- List extents = cld.getExtentClasses();
- for (int i = 0; i < extents.size(); i++)
+ if(cld.isExtent())
{
- ClassDescriptor extCld = (ClassDescriptor) extents.get(i);
- result = findFirstConcreteClass(extCld);
- if(result != null) break;
+ List extents = cld.getExtentClasses();
+ for (int i = 0; i < extents.size(); i++)
+ {
+ Class ext = (Class) extents.get(i);
+ result = findFirstConcreteClass(getDescriptorFor(ext));
+ if(result != null) break;
+ }
}
+ else
+ {
+ LoggerFactory.getDefaultLogger().error("["+this.getClass().getName()+"] Found interface/abstract class" +
+ " in metadata declarations without concrete class: "+cld.getClassNameOfObject());
+ }
+ m_firstConcreteClassMap.put(cld.getClassNameOfObject(), result);
}
else
{
- LoggerFactory.getDefaultLogger().warn("["+this.getClass().getName()+"] Found interface/abstract class" +
- " in metadata declarations without concrete class: "+cld.getClassNameOfObject());
+ result = cld;
}
}
- else
- {
- result = cld;
- }
return result;
}
@@ -492,6 +504,7 @@
{
m_multiMappedTableMap = null;
m_topLevelClassTable = null;
+ m_firstConcreteClassMap = null;
}
/**
---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-dev-help@db.apache.org