You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@labs.apache.org by pp...@apache.org on 2007/08/22 21:44:55 UTC

svn commit: r568737 - in /labs/fluid: ./ src/main/java/org/apache/openjpa/sdo/ src/main/java/org/apache/openjpa/sdo/mapping/ src/main/resources/org/apache/openjpa/sdo/ src/test/java/example/basic/ src/test/java/org/apache/openjpa/sdo/ src/test/java/tes...

Author: ppoddar
Date: Wed Aug 22 12:44:53 2007
New Revision: 568737

URL: http://svn.apache.org/viewvc?rev=568737&view=rev
Log:
Bytecode generation NOT working. Savepoint commit before changing to new enhancement-less option

Modified:
    labs/fluid/.classpath
    labs/fluid/src/main/java/org/apache/openjpa/sdo/ImplHelper.java
    labs/fluid/src/main/java/org/apache/openjpa/sdo/SDO2POJOGenerator.java
    labs/fluid/src/main/java/org/apache/openjpa/sdo/SDOEntityManager.java
    labs/fluid/src/main/java/org/apache/openjpa/sdo/SDOInstanceMapping.java
    labs/fluid/src/main/java/org/apache/openjpa/sdo/SDOMappingRepository.java
    labs/fluid/src/main/java/org/apache/openjpa/sdo/SDOMetaDataFactory.java
    labs/fluid/src/main/java/org/apache/openjpa/sdo/SDOTypeParser.java
    labs/fluid/src/main/java/org/apache/openjpa/sdo/SDOTypeRepository.java
    labs/fluid/src/main/java/org/apache/openjpa/sdo/mapping/AbstractPropertyMapping.java
    labs/fluid/src/main/java/org/apache/openjpa/sdo/mapping/IdenticalTypeMapping.java
    labs/fluid/src/main/java/org/apache/openjpa/sdo/mapping/IdentityMapping.java
    labs/fluid/src/main/java/org/apache/openjpa/sdo/mapping/PrimitiveListMapping.java
    labs/fluid/src/main/java/org/apache/openjpa/sdo/mapping/PrimitiveMapping.java
    labs/fluid/src/main/java/org/apache/openjpa/sdo/mapping/PropertyMapping.java
    labs/fluid/src/main/java/org/apache/openjpa/sdo/mapping/RelationListMapping.java
    labs/fluid/src/main/java/org/apache/openjpa/sdo/mapping/RelationMapping.java
    labs/fluid/src/main/java/org/apache/openjpa/sdo/mapping/SDOMappingStrategy.java
    labs/fluid/src/main/java/org/apache/openjpa/sdo/mapping/TypeMapping.java
    labs/fluid/src/main/java/org/apache/openjpa/sdo/mapping/VersionMapping.java
    labs/fluid/src/main/resources/org/apache/openjpa/sdo/localizer.properties
    labs/fluid/src/test/java/example/basic/TestCRUD.java
    labs/fluid/src/test/java/example/basic/TestRelation.java
    labs/fluid/src/test/java/org/apache/openjpa/sdo/TestSDO.java
    labs/fluid/src/test/java/test/common/AbstractSDOTest.java
    labs/fluid/src/test/resources/META-INF/books.xsd
    labs/fluid/src/test/resources/META-INF/persistence.xml

Modified: labs/fluid/.classpath
URL: http://svn.apache.org/viewvc/labs/fluid/.classpath?rev=568737&r1=568736&r2=568737&view=diff
==============================================================================
--- labs/fluid/.classpath (original)
+++ labs/fluid/.classpath Wed Aug 22 12:44:53 2007
@@ -1,44 +1,19 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="src" path="src/main/java"/>
+	<classpathentry excluding="org/apache/openjpa/das/**" kind="src" path="src/main/java"/>
 	<classpathentry excluding="**/*.java" kind="src" path="src/main/resources"/>
-	<classpathentry kind="src" output="target/test-classes" path="src/test/java"/>
-	<classpathentry excluding="**/*.java" kind="src" output="target/test-classes" path="src/test/resources"/>
+	<classpathentry excluding="example/das/**" kind="src" output="target/classes" path="src/test/java"/>
+	<classpathentry excluding="**/*.java" kind="src" output="target/classes" path="src/test/resources"/>
 	<classpathentry exported="true" kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry exported="true" kind="var" path="M2_REPO/ant/ant/1.6.5/ant-1.6.5.jar"/>
-	<classpathentry exported="true" kind="var" path="M2_REPO/log4j/log4j/1.2.13/log4j-1.2.13.jar"/>
-	<classpathentry exported="true" kind="var" path="M2_REPO/net/sourceforge/serp/serp/1.13.0/serp-1.13.0.jar"/>
-	<classpathentry exported="true" kind="var" path="M2_REPO/commons-logging/commons-logging/1.0.4/commons-logging-1.0.4.jar"/>
-	<classpathentry exported="true" kind="var" path="M2_REPO/org/apache/geronimo/specs/geronimo-jms_1.1_spec/1.0.1/geronimo-jms_1.1_spec-1.0.1.jar"/>
-	<classpathentry exported="true" kind="var" path="M2_REPO/org/eclipse/xsd/xsd/2.2.2/xsd-2.2.2.jar"/>
-	<classpathentry exported="true" kind="var" path="M2_REPO/commons-lang/commons-lang/2.1/commons-lang-2.1.jar"/>
-	<classpathentry exported="true" kind="var" path="M2_REPO/commons-collections/commons-collections/3.2/commons-collections-3.2.jar"/>
-	<classpathentry exported="true" kind="var" path="M2_REPO/org/eclipse/emf/ecore-change/2.2.2/ecore-change-2.2.2.jar"/>
-	<classpathentry exported="true" kind="var" path="M2_REPO/org/apache/geronimo/specs/geronimo-j2ee-connector_1.5_spec/1.0.1/geronimo-j2ee-connector_1.5_spec-1.0.1.jar"/>
-	<classpathentry exported="true" kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
-	<classpathentry exported="true" kind="var" path="M2_REPO/org/apache/geronimo/specs/geronimo-jta_1.1_spec/1.1/geronimo-jta_1.1_spec-1.1.jar"/>
-	<classpathentry exported="true" kind="var" path="M2_REPO/org/eclipse/emf/ecore-xmi/2.2.2/ecore-xmi-2.2.2.jar"/>
-	<classpathentry exported="true" kind="var" path="M2_REPO/mysql/mysql-connector-java/5.0.4/mysql-connector-java-5.0.4.jar"/>
-	<classpathentry exported="true" kind="var" path="M2_REPO/org/eclipse/emf/common/2.2.2/common-2.2.2.jar"/>
-	<classpathentry exported="true" kind="var" path="M2_REPO/javax/xml/bind/jaxb-api/2.0/jaxb-api-2.0.jar"/>
-	<classpathentry exported="true" kind="var" path="M2_REPO/org/apache/geronimo/specs/geronimo-jta_1.0.1B_spec/1.0.1/geronimo-jta_1.0.1B_spec-1.0.1.jar"/>
-	<classpathentry exported="true" kind="var" path="M2_REPO/org/apache/tuscany/sdo/tuscany-sdo-impl/1.0-incubating-beta1/tuscany-sdo-impl-1.0-incubating-beta1.jar"/>
-	<classpathentry exported="true" kind="var" path="M2_REPO/org/apache/geronimo/specs/geronimo-jpa_3.0_spec/1.0/geronimo-jpa_3.0_spec-1.0.jar"/>
-	<classpathentry exported="true" kind="var" path="M2_REPO/org/apache/openjpa/openjpa/1.0.0-SNAPSHOT/openjpa-1.0.0-SNAPSHOT.jar" sourcepath="/OPENJPA_SRC">
-		<attributes>
-			<attribute name="javadoc_location" value="http://openjpa.apache.org/docs/latest/javadoc/index.html"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry exported="true" kind="var" path="M2_REPO/javax/activation/activation/1.1/activation-1.1.jar"/>
-	<classpathentry exported="true" kind="var" path="M2_REPO/commons-pool/commons-pool/1.3/commons-pool-1.3.jar"/>
-	<classpathentry exported="true" kind="var" path="M2_REPO/commonj/sdo-api-r2.1/1.0-incubating-beta1/sdo-api-r2.1-1.0-incubating-beta1.jar">
-		<attributes>
-			<attribute name="javadoc_location" value="jar:file:/C:/Documents and Settings/ppoddar/.m2/repository/commonj/sdo-api-r2.1/1.0-incubating-beta1/sdo-api-r2.1-1.0-incubating-beta1-javadoc.jar!/"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry exported="true" kind="var" path="M2_REPO/javax/xml/bind/jsr173_api/1.0/jsr173_api-1.0.jar"/>
-	<classpathentry exported="true" kind="var" path="M2_REPO/hsqldb/hsqldb/1.8.0.1/hsqldb-1.8.0.1.jar"/>
-	<classpathentry exported="true" kind="var" path="M2_REPO/org/eclipse/emf/ecore/2.2.2/ecore-2.2.2.jar"/>
-	<classpathentry exported="true" kind="lib" path="D:/lib/tuscany/das/rdb/target/tuscany-das-rdb-1.0-incubating-beta1.jar" sourcepath="D:/lib/tuscany/das/rdb/target/sdo-source"/>
+	<classpathentry exported="true" kind="lib" path="C:/Documents and Settings/ppoddar/.m2/repository/commonj/sdo-api-r2.1/1.0-incubating-beta1/sdo-api-r2.1-1.0-incubating-beta1.jar"/>
+	<classpathentry exported="true" kind="lib" path="C:/bea/modules/javax.persistence_1.0.jar"/>
+	<classpathentry exported="true" kind="lib" path="C:/bea/modules/javax.resource_1.5.jar"/>
+	<classpathentry exported="true" kind="lib" path="C:/bea/modules/javax.transaction_1.1.jar"/>
+	<classpathentry exported="true" kind="lib" path="C:/bea/modules/junit_3.8.1/junit.jar"/>
+	<classpathentry exported="true" kind="lib" path="C:/bea/modules/com.bea.core.apache.commons.pool_1.3.0.jar"/>
+	<classpathentry exported="true" kind="lib" path="C:/bea/modules/com.bea.core.apache.commons.collections_3.2.0.jar"/>
+	<classpathentry exported="true" kind="lib" path="C:/bea/modules/com.bea.core.apache.commons.lang_2.1.0.jar"/>
+	<classpathentry exported="true" kind="lib" path="C:/Documents and Settings/ppoddar/.m2/repository/net/sourceforge/serp/serp/1.13.0/serp-1.13.0.jar" sourcepath="D:/lib/serp/src/main/java"/>
+	<classpathentry kind="lib" path="/OpenJPA/openjpa-all/target/openjpa-1.0.0-SNAPSHOT.jar" sourcepath="/OpenJPA/target/site/downloads/apache-openjpa-1.0.0-SNAPSHOT-source.zip"/>
 	<classpathentry kind="output" path="target/classes"/>
 </classpath>

Modified: labs/fluid/src/main/java/org/apache/openjpa/sdo/ImplHelper.java
URL: http://svn.apache.org/viewvc/labs/fluid/src/main/java/org/apache/openjpa/sdo/ImplHelper.java?rev=568737&r1=568736&r2=568737&view=diff
==============================================================================
--- labs/fluid/src/main/java/org/apache/openjpa/sdo/ImplHelper.java (original)
+++ labs/fluid/src/main/java/org/apache/openjpa/sdo/ImplHelper.java Wed Aug 22 12:44:53 2007
@@ -23,6 +23,7 @@
 
 import org.apache.commons.lang.StringUtils;
 import org.apache.openjpa.lib.util.Localizer;
+import org.apache.openjpa.meta.ClassMetaData;
 import org.apache.openjpa.util.UserException;
 
 import commonj.sdo.DataObject;
@@ -62,15 +63,15 @@
 	 * get method that will be invoked reflectively on the persistence capable
 	 * instance to obtain the value.
 	 */
-	public static Object getFieldValue(Property property, Object pc) {
-		String methodName = getMethodName("get", property);
-		try {
-			Method method = pc.getClass().getMethod(methodName, (Class[])null);
-			return method.invoke(pc, (Object[])null);
-		} catch (Exception e) {
-			throw new RuntimeException(e);
-		} 
-	}
+//	public static Object getFieldValue(Property property, Object pc) {
+//		String methodName = getMethodName("get", property);
+//		try {
+//			Method method = pc.getClass().getMethod(methodName, (Class[])null);
+//			return method.invoke(pc, (Object[])null);
+//		} catch (Exception e) {
+//			throw new RuntimeException(e);
+//		} 
+//	}
 	
 	/**
 	 * Get the name of Java class given the Type. The Java class name is 
@@ -123,7 +124,7 @@
 	 * 
 	 */
 	//TODO: Improve checking for identity property
-	public static Property getIdentity(Type type) {
+	public static Property getIdentityProperty(Type type) {
 		// If there is property named "id" of simple data type return it  
 		Property idProperty = type.getProperty("id");
 		if (idProperty != null && idProperty.getType().isDataType())
@@ -147,9 +148,6 @@
 				}
 			}
 		}
-		if (idProperty == null)
-			throw new UserException(_loc.get("missing-identity", type.getName())
-					.toString());
 		return idProperty;
 	}
 	
@@ -199,19 +197,19 @@
 	}
 	
 	/**
-	 * Gets the value of the {@link #getIdentity(Type) identity property}
+	 * Gets the value of the {@link #getIdentityProperty(Type) identity property}
 	 * of the given DataObject.
 	 */
 	public static Object getIdValue(DataObject data) {
-		return data.get(getIdentity(data.getType()));
+		return data.get(getIdentityProperty(data.getType()));
 	}
 	
 	/**
-	 * Sets the value of the {@link #getIdentity(Type) identity property}
+	 * Sets the value of the {@link #getIdentityProperty(Type) identity property}
 	 * of the given DataObject.
 	 */
 	public static void setIdValue(DataObject data, Object idValue) {
-		data.set(getIdentity(data.getType()), idValue);
+		data.set(getIdentityProperty(data.getType()), idValue);
 	}
 	
 	/**

Modified: labs/fluid/src/main/java/org/apache/openjpa/sdo/SDO2POJOGenerator.java
URL: http://svn.apache.org/viewvc/labs/fluid/src/main/java/org/apache/openjpa/sdo/SDO2POJOGenerator.java?rev=568737&r1=568736&r2=568737&view=diff
==============================================================================
--- labs/fluid/src/main/java/org/apache/openjpa/sdo/SDO2POJOGenerator.java (original)
+++ labs/fluid/src/main/java/org/apache/openjpa/sdo/SDO2POJOGenerator.java Wed Aug 22 12:44:53 2007
@@ -30,6 +30,7 @@
 import java.util.Map;
 
 import org.apache.openjpa.conf.OpenJPAConfiguration;
+import org.apache.openjpa.conf.OpenJPAConfigurationImpl;
 import org.apache.openjpa.lib.log.Log;
 import org.apache.openjpa.lib.log.LogFactoryImpl;
 import org.apache.openjpa.lib.util.Files;
@@ -65,7 +66,7 @@
 	 *
 	 */
 	SDO2POJOGenerator() {
-		this(null);
+		this(new Flags());
 	}
 	
 	/**
@@ -73,7 +74,7 @@
 	 * 
 	 */
 	SDO2POJOGenerator(Flags flags) {
-		this.flags = (flags==null) ? new Flags() : flags;
+		this.flags = flags;
 		LogFactoryImpl logFactory = new LogFactoryImpl();
 		logFactory.setDefaultLevel(LogFactoryImpl.getLevel(flags.logLevel));
 		_log = logFactory.getLog(OpenJPAConfiguration.LOG_METADATA);
@@ -85,7 +86,7 @@
 	 * @param given Type can not be null, simple xsd data type or sequence.
 	 *  
 	 */
-	SourceCode getJavaClass(Type type) {
+	SourceCode getJavaSourceCode(Type type) {
 		if (type == null)
 			throw new NullPointerException(_loc.get("null-type").toString());
 		String typeName = type.getName();
@@ -107,47 +108,9 @@
 	}
 	
 	/**
-	 * Find user-defined SDO types in the given resource.  
-	 * 
-	 */
-	List<Type> findTypes(String resource) {
-		if (resource == null || !resource.endsWith(".xsd"))
-			return Collections.EMPTY_LIST;
-		if (_log.isInfoEnabled())
-			_log.info(_loc.get("parse-xml-schema", resource));
-		List<Type> result = new ArrayList<Type>();
-		InputStream xsdInputStream = Thread.currentThread()
-				.getContextClassLoader().getResourceAsStream(resource);
-		if (xsdInputStream == null) {
-			if (_log.isWarnEnabled()) {
-				_log.warn(_loc.get("xsd-not-found", resource).toString());
-			}
-			return result;
-		}
-		List types = XSDHelper.INSTANCE.define(xsdInputStream, null);
-
-		try {
-			for (Object t : types) {
-				if (t instanceof Type) {
-					Type type = (Type) t;
-					if (!(type.isDataType() || 
-						"DocumentRoot".equals(type.getName())))
-						result.add(type);
-				}
-			}
-		} finally  {
-			try {
-				xsdInputStream.close();
-			} catch (IOException e) {
-			}
-		}
-		return result;
-	}
-
-	/**
 	 * Generate source code for a Java Class corresponding to the given type.
 	 * <br>
-	 * The given type must declare a {@link ImplHelper#getIdentity(Type) 
+	 * The given type must declare a {@link ImplHelper#getIdentityProperty(Type) 
 	 * identity property and a {@link ImplHelper#getVersionProperty(Type)
 	 * version property}.
 	 * 
@@ -185,7 +148,7 @@
 						fieldTypeName, pm.getName()));
 			SourceCode.Field field = code.addField(fieldName, fieldTypeName)
 			    .makePrivate();
-			String[] annotations = pm.getAnnotations();
+			String[] annotations = pm.getAnnotationStrings();
 			for (String anno:annotations)
 				field.addAnnotation(anno);
 			field.addGetter();
@@ -243,11 +206,11 @@
 	 */
 	void run(String[] args) {
 		_cache.clear();
+		SDOTypeParser parser = new SDOTypeParser(new OpenJPAConfigurationImpl());
 		for (int i=0; args!=null && i<args.length; i++) {
-			List<Type> types = findTypes(args[i]);
+			List<Type> types = parser.parseXSDResource(args[i]);
 			for (Type type:types) {
-				if (!ImplHelper.isContainer(type))
-					getJavaClass(type);
+				getJavaSourceCode(type);
 			}
 		}
 		record();

Modified: labs/fluid/src/main/java/org/apache/openjpa/sdo/SDOEntityManager.java
URL: http://svn.apache.org/viewvc/labs/fluid/src/main/java/org/apache/openjpa/sdo/SDOEntityManager.java?rev=568737&r1=568736&r2=568737&view=diff
==============================================================================
--- labs/fluid/src/main/java/org/apache/openjpa/sdo/SDOEntityManager.java (original)
+++ labs/fluid/src/main/java/org/apache/openjpa/sdo/SDOEntityManager.java Wed Aug 22 12:44:53 2007
@@ -56,7 +56,10 @@
 		
 	public SDOEntityManager(SDOEntityManagerFactory emf, Broker broker) {
 		super(emf, broker);
-		repos = ((SDOMetaDataFactory)emf.getConfiguration().getMetaDataRepositoryInstance().getMetaDataFactory()).getSDOMappingRepository();
+		repos = ((SDOMetaDataFactory)emf.getConfiguration().
+				getMetaDataRepositoryInstance().
+				getMetaDataFactory()).
+				getSDOMappingRepository();
 	}
 	
 	/**

Modified: labs/fluid/src/main/java/org/apache/openjpa/sdo/SDOInstanceMapping.java
URL: http://svn.apache.org/viewvc/labs/fluid/src/main/java/org/apache/openjpa/sdo/SDOInstanceMapping.java?rev=568737&r1=568736&r2=568737&view=diff
==============================================================================
--- labs/fluid/src/main/java/org/apache/openjpa/sdo/SDOInstanceMapping.java (original)
+++ labs/fluid/src/main/java/org/apache/openjpa/sdo/SDOInstanceMapping.java Wed Aug 22 12:44:53 2007
@@ -65,7 +65,7 @@
 			return data;
 		}
 		data = newDataObject(type, pc);
-		TypeMapping tm = repos.getMapping(type);
+		TypeMapping tm = repos.getMapping(type, true);
 		List properties = data.getInstanceProperties();
 		for (Object p:properties) {
 			Property property = (Property)p;
@@ -73,7 +73,6 @@
 			try {
 				pm.populateDataObject(data, pc, this);
 			} catch (Exception e) {
-				// TODO Auto-generated catch block
 				e.printStackTrace();
 			}
 		}
@@ -96,7 +95,7 @@
 		
 		pc = newPC(cls, data);
 		cache(data, pc);
-		TypeMapping mapping = repos.getMapping(type);
+		TypeMapping mapping = repos.getMapping(type, true);
 		try {
 			List properties = data.getInstanceProperties();
 			for (Object p: properties) {
@@ -203,9 +202,9 @@
 				throw new OptimisticException(pc);
 		} else {
 			try {
-				repos.getMapping(data.getType()).getIdentityMapping()
+				repos.getMapping(data.getType(), true).getIdentityMapping()
 					.populateDataObject(data, pc, this);
-				repos.getMapping(data.getType()).getVersionMapping()
+				repos.getMapping(data.getType(), true).getVersionMapping()
 					.populateDataObject(data, pc, this);
 			} catch (Exception e) {
 				throw new PersistenceException(e);

Modified: labs/fluid/src/main/java/org/apache/openjpa/sdo/SDOMappingRepository.java
URL: http://svn.apache.org/viewvc/labs/fluid/src/main/java/org/apache/openjpa/sdo/SDOMappingRepository.java?rev=568737&r1=568736&r2=568737&view=diff
==============================================================================
--- labs/fluid/src/main/java/org/apache/openjpa/sdo/SDOMappingRepository.java (original)
+++ labs/fluid/src/main/java/org/apache/openjpa/sdo/SDOMappingRepository.java Wed Aug 22 12:44:53 2007
@@ -18,20 +18,59 @@
  */
 package org.apache.openjpa.sdo;
 
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.IOException;
+import java.lang.instrument.IllegalClassFormatException;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import javax.persistence.Entity;
+import javax.persistence.OneToMany;
+import javax.persistence.OneToOne;
+
+import org.apache.commons.lang.StringUtils;
 import org.apache.openjpa.conf.OpenJPAConfiguration;
+import org.apache.openjpa.enhance.PCClassFileTransformer;
+import org.apache.openjpa.enhance.PCEnhancer;
+import org.apache.openjpa.enhance.PersistenceCapable;
 import org.apache.openjpa.jdbc.meta.ClassMapping;
+import org.apache.openjpa.jdbc.meta.FieldMapping;
+import org.apache.openjpa.jdbc.meta.MappingStrategyInstaller;
+import org.apache.openjpa.lib.conf.Configuration;
+import org.apache.openjpa.lib.conf.Configurations;
 import org.apache.openjpa.lib.log.Log;
+import org.apache.openjpa.lib.util.Files;
 import org.apache.openjpa.lib.util.Localizer;
 import org.apache.openjpa.meta.ClassMetaData;
+import org.apache.openjpa.meta.FieldMetaData;
+import org.apache.openjpa.meta.MetaDataFactory;
+import org.apache.openjpa.meta.MetaDataRepository;
+import org.apache.openjpa.sdo.mapping.AbstractPropertyMapping;
+import org.apache.openjpa.sdo.mapping.PropertyMapping;
 import org.apache.openjpa.sdo.mapping.SDOMappingStrategy;
 import org.apache.openjpa.sdo.mapping.TypeMapping;
+import org.apache.openjpa.util.InternalException;
+import org.apache.openjpa.util.UserException;
+
+import serp.bytecode.Annotation;
+import serp.bytecode.Annotations;
+import serp.bytecode.BCClass;
+import serp.bytecode.BCClassLoader;
+import serp.bytecode.BCField;
+import serp.bytecode.BCMethod;
+import serp.bytecode.Code;
+import serp.bytecode.Constants;
+import serp.bytecode.Project;
+import serp.util.Strings;
 
+import commonj.sdo.Property;
 import commonj.sdo.Type;
+import commonj.sdo.helper.TypeHelper;
 
 /**
  * Maintains mapping information for SDO Types to Java classes.
@@ -42,68 +81,97 @@
 public class SDOMappingRepository {
 	private static final Localizer _loc = 
 		Localizer.forPackage(SDOMetaDataFactory.class);
+	// Mapping for each SDO Type
 	private Map<Type, TypeMapping> mappings = new HashMap<Type, TypeMapping>();
+	// Associates SDO Type and Java Class
 	private BiDiMap<Type, Class> _cache = new BiDiMap<Type, Class>();
-	private Log _log;
+	
 	private OpenJPAConfiguration conf;
-	// This is static because of XSDHelper is static
-	private static Set<Type> parsedTypes = new HashSet<Type>();
+	private Log _log;
+	
+	private BCClassLoader throwAwayLoader;
+	private BCClassLoader enhancedLoader;
+	private File  _root;
 	
+	/**
+	 * Supply configuration.
+	 * 
+	 */
 	public SDOMappingRepository(OpenJPAConfiguration conf) {
 		super();
 		this.conf = conf;
 		_log = conf.getLog(OpenJPAConfiguration.LOG_METADATA);
+		_root = new File(System.getProperty("user.dir"));
 	}
 	
 	/**
-	 * Gets the strategy used for mapping of the given Type.
+	 * Gets the strategy used for mapping of the given SDO Type.
 	 * Constructs if necessary. 
+	 * Resolving a mapping if asked.
 	 */
-	public TypeMapping getMapping(Type type) {
+	public TypeMapping getMapping(Type type, boolean resolve) {
 		TypeMapping mapping = mappings.get(type);
+		Class cls = _cache.get(type);
 		if (mapping == null) {
-			Class cls = getJavaClass(type, true);
-			ClassMetaData cm = conf.getMetaDataRepositoryInstance()
-				.getCachedMetaData(cls);
-			ClassMapping cmd = (cm instanceof ClassMapping) ? 
-					(ClassMapping)cm : null;
-			mapping = SDOMappingStrategy.decideStrategy(type, cmd);
+			cls = getJavaClass(type, true);
+			if (_log.isInfoEnabled())
+				_log.info(_loc.get("type-mapping-new", type.getName(), toString(cls)).toString());
+			mapping = SDOMappingStrategy.decideStrategy(type, cls);
 			mappings.put(type, mapping);
 		}
+		if (resolve && !mapping.isResolved()) {
+			if (_log.isInfoEnabled())
+				_log.info(_loc.get("type-mapping-resolve", type.getName(), toString(cls)).toString());
+			MetaDataRepository mdr = conf.getMetaDataRepositoryInstance();
+			ClassMapping cm = (ClassMapping)mdr.getCachedMetaData(cls);
+			if (cm == null)
+				throw new RuntimeException(_loc.get("resolve-mapping-failed", toString(cls), mdr).toString());
+			mapping.resolve(cm);
+		}
 		return mapping;
 	}
 	
 	/**
 	 * Cache the given SDO Type and PersistenceCapable Java class in 
-	 * bi-directional map.
+	 * a bi-directional map.
 	 */
 	void cache(Type type, Class cls) {
-		if (_log.isTraceEnabled())
-			_log.trace(_loc.get("cache-sdo-type", new Object[]{this, 
-				type.getName(), cls.getName(), cls.getClassLoader()}).toString());
-		_cache.put(type, cls);
-		parsedTypes.add(type);
+//		if (!PersistenceCapable.class.isAssignableFrom(cls))
+//			throw new RuntimeException(_loc.get("cache-unenhanced", cls, cls.getClassLoader()).toString());
+		if (_cache.containsKey(type)) {
+			Class oldClass = _cache.get(type);
+			if (oldClass != cls) {
+				if (_log.isTraceEnabled())
+					_log.trace(_loc.get("cache-replace-sdo-type", 
+						type.getName(), toString(cls), toString(oldClass)).toString());
+			}
+		} else {
+			if (_log.isTraceEnabled())
+				_log.trace(_loc.get("cache-sdo-type", type.getName(), toString(cls)).toString());
+			_cache.put(type, cls);
+		}
 	}
 
 	/**
-	 * Get the Java Class corresponding to the given type.
+	 * Get the Java Class corresponding to the given SDO type.
 	 */
 	public Class getJavaClass(Type type, boolean mustExist) {
 		Class cls = _cache.get(type);
 		if (cls != null)
 			return cls;
-		
-		String fullName = ImplHelper.getFullClassName(type);
-		try {
-			cls = Class.forName(fullName);
-			if (cls != null) {
-				if (_log.isInfoEnabled())
-					_log.info(_loc.get("found-enhanced-cls", type.getName(), 
-							fullName, cls.getClassLoader().toString()));
+		if (mustExist) {
+			String fullName = ImplHelper.getFullClassName(type);
+			try {
+				cls = Class.forName(fullName, false, Thread.currentThread().getContextClassLoader());
 				cache(type, cls);
+			} catch (ClassNotFoundException ex) {
+				cls = generateEnhancedClass(type);
+				cache(type, cls);
+			} finally {
+//				ClassMetaData cm = conf.getMetaDataRepositoryInstance().getCachedMetaData(cls);
+//				cm.setIdentityType(ImplHelper.getIdentityProperty(type)==null ? 
+//						ClassMetaData.ID_DATASTORE : ClassMetaData.ID_APPLICATION);
 			}
-		} catch (ClassNotFoundException ex) {
-			throw new RuntimeException("class not found " + fullName);
 		}
 		return cls;
 	}
@@ -116,14 +184,12 @@
 	public Type getSDOType(Class cls, boolean mustExist) {
 		Type type = _cache.getReverse(cls);
 		if (type == null && mustExist) {
-			SDOMetaDataFactory mdf = (SDOMetaDataFactory)conf
-				.getMetaDataRepositoryInstance().getMetaDataFactory();
-			mdf.getPersistentTypeNames(true, Thread.currentThread()
-					.getContextClassLoader());
+			MetaDataFactory mdf = conf.getMetaDataRepositoryInstance().getMetaDataFactory();
+			mdf.getPersistentTypeNames(true, Thread.currentThread().getContextClassLoader());
 			type = _cache.getReverse(cls);
 			if (type == null)
 				throw new RuntimeException(_loc.get("no-type-for-class",
-					cls.getName(), cls.getClassLoader()).toString());
+					toString(cls)).toString());
 		}
 		return type;
 	}
@@ -133,21 +199,168 @@
 	 * Schema definitions if the named Type has not been cached.
 	 */
 	public Type getType(String name) throws TypeNotFoundException {
-		for (Type t:parsedTypes)
+		for (Type t:_cache.keySet())
 			if (t.getName().equals(name))
 				return t;
 		
-		SDOMetaDataFactory mdf = (SDOMetaDataFactory)conf
-			.getMetaDataRepositoryInstance().getMetaDataFactory();
-		mdf.getPersistentTypeNames(true, Thread.currentThread()
-				.getContextClassLoader());
+		MetaDataFactory mdf = conf.getMetaDataRepositoryInstance().getMetaDataFactory();
+		mdf.getPersistentTypeNames(true, Thread.currentThread().getContextClassLoader());
 		
-		for (Type t:parsedTypes)
+		for (Type t:_cache.keySet())
 				if (t.getName().equals(name))
 					return t;
 		
 		throw new TypeNotFoundException(_loc.get("no-type-for-name", name)
 			.toString());
 	}
+	
+	private void initializeDynamicClassConstructionEnvironment() {
+		if (throwAwayLoader == null) {
+			if (_log.isInfoEnabled())
+				_log.info(_loc.get("dynamic-enhancement").toString());
+			throwAwayLoader = new BCClassLoader(new Project());
+			enhancedLoader = new BCClassLoader(new Project());
+			MetaDataRepository repos = conf.getMetaDataRepositoryInstance();
+			repos.setValidate(MetaDataRepository.VALIDATE_NONE);
+			repos.setSourceMode(MetaDataRepository.MODE_META);
+		}
+	}
+	
+	private Class generateEnhancedClass(Type type) {
+		initializeDynamicClassConstructionEnvironment();
+		String javaClassName = ImplHelper.getFullClassName(type);
+		if (enhancedLoader.getProject().containsClass(javaClassName)) {
+			return enhancedLoader.getProject().loadClass(javaClassName).getType();
+		}
+		_log.info(_loc.get("generate-dynamic-class", javaClassName));
+		BCClass bcls = throwAwayLoader.getProject().loadClass(javaClassName,throwAwayLoader);
+		TypeMapping throwAwayMapping = SDOMappingStrategy.decideStrategy(type, null);
+		
+		// clear the class
+		bcls.clearAttributes();
+		bcls.clearDeclaredFields();
+		bcls.clearDeclaredInterfaces();
+		bcls.clearDeclaredMethods();
+		
+		// annotate the class as @Entity
+		bcls.makePublic();
+		Annotations classAnns = bcls.getDeclaredRuntimeAnnotations(true);
+		Annotation entityAnno = classAnns.addAnnotation(Entity.class);
+		entityAnno.addProperty("name").setValue(type.getName());
+		
+		// set it for Java 5
+		bcls.setMajorVersion(49); // 49 bytecode spec = 1.5 source spec
+		bcls.setMinorVersion(0);
+		bcls.addDefaultConstructor();
+		
+		// add private field with bean-style get/set methods for each property
+		List properties = type.getProperties();
+		for (Object p : properties) {
+			Property property = (Property) p;
+			PropertyMapping pm = throwAwayMapping.getMapping(property);
+			BCField field = addField(bcls, pm.getFieldName(), pm.getFieldType(this));
+			pm.annotate(field);
+		}
+		Class enhancedClass = enhanceByteCode(bcls);
+		if (!isPersistenceCapable(enhancedClass))
+			throw new InternalException(_loc.get("enhancement-failed", toString(enhancedClass)).toString());
+		cache(type, enhancedClass);
+		return enhancedClass;
+	}
+
+	Class enhanceByteCode(BCClass bcls) {
+		_log.info(_loc.get("enhance-dynamic-class", bcls.getName()));
+		byte[] originalBytes = bcls.toByteArray();
+		BCClass ebcls = enhancedLoader.getProject().loadClass(new ByteArrayInputStream(originalBytes), 
+				enhancedLoader);
+		MetaDataRepository repos = conf.getMetaDataRepositoryInstance();
+		PCEnhancer enhancer = new PCEnhancer(conf, ebcls, repos, enhancedLoader);
+		enhancer.run();
+		byte[] enhancedBytes = enhancer.getPCBytecode().toByteArray();
+		enhancedLoader.getProject().removeClass(ebcls);
+		ebcls = enhancedLoader.getProject().loadClass(new ByteArrayInputStream(enhancedBytes), 
+				enhancedLoader);
+		return reloadClass(ebcls);
+	}
+
+	Class reloadClass(BCClass bcls) {
+		write(bcls);
+		try {
+			return Class.forName(bcls.getName());
+		} catch (ClassNotFoundException e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+	
+	void write(BCClass bcls) {
+		File classFile = getClassFile(bcls);
+		classFile.deleteOnExit();
+		if (_log.isInfoEnabled()) {
+			_log.info(_loc.get("write-class", classFile.getAbsolutePath()).toString());
+		}
+		try {
+			bcls.write(classFile);
+		} catch (IOException e) {
+			throw new UserException(e);
+		}
+	}
+
+	File getClassFile(BCClass bcls) {
+		File pkgdir = Files.getPackageFile(_root, bcls.getPackageName(), true);
+		return new File(pkgdir, bcls.getClassName() + ".class");
+	}
+	
+	void setRootDirectory(String rootPath) {
+		File file = new File(rootPath);
+		File rootDir = (file.isAbsolute()) ? file : new File(_root, rootPath);
+		if (rootDir.exists() && rootDir.isDirectory()) {
+				_root = rootDir;
+		} else {
+			_log.warn(_loc.get("wrong-root-dir", rootPath, _root.getAbsolutePath()));
+		}
+	}
+	
+    /**
+     * Add bean getters and setters.
+     */
+    private BCField addField (BCClass bc, String fieldName, Class fieldType) {
+		if (_log.isTraceEnabled())
+			_log.trace(_loc.get("dynamic-method", fieldName,fieldType).toString());
+        BCField field = bc.declareField(fieldName, fieldType);
+        field.setAccessFlags(Constants.ACCESS_PRIVATE);
+
+        // getter
+        String getterName = "get" + StringUtils.capitalize(fieldName);
+        BCMethod meth = bc.declareMethod(getterName, fieldType, null);
+        meth.makePublic();
+        Code code = meth.getCode(true);
+        code.aload().setThis();
+        code.getfield().setField(field);
+        code.xreturn().setType(fieldType);
+        code.calculateMaxStack();
+        code.calculateMaxLocals();
 
+        // setter
+        String setterName = "set" + StringUtils.capitalize(fieldName);
+        meth = bc.declareMethod(setterName, void.class, new Class[]{fieldType});
+        meth.makePublic();
+        code = meth.getCode(true);
+        code.aload().setThis();
+        code.xload().setParam(0).setType(fieldType);
+        code.putfield().setField(field);
+        code.vreturn();
+        code.calculateMaxStack();
+        code.calculateMaxLocals();
+        
+        return field;
+    }
+    
+    String toString(Class cls) {
+    	return (cls == null) ? "null" : cls + " loaded by " + cls.getClassLoader(); 
+    }
+    
+    boolean isPersistenceCapable(Class cls) {
+    	return PersistenceCapable.class.isAssignableFrom(cls);
+    }
 }

Modified: labs/fluid/src/main/java/org/apache/openjpa/sdo/SDOMetaDataFactory.java
URL: http://svn.apache.org/viewvc/labs/fluid/src/main/java/org/apache/openjpa/sdo/SDOMetaDataFactory.java?rev=568737&r1=568736&r2=568737&view=diff
==============================================================================
--- labs/fluid/src/main/java/org/apache/openjpa/sdo/SDOMetaDataFactory.java (original)
+++ labs/fluid/src/main/java/org/apache/openjpa/sdo/SDOMetaDataFactory.java Wed Aug 22 12:44:53 2007
@@ -28,6 +28,8 @@
 import org.apache.openjpa.lib.meta.ClassArgParser;
 import org.apache.openjpa.persistence.PersistenceMetaDataFactory;
 
+import commonj.sdo.Type;
+
 /**
  * A specialized MetaDataFactory to process XML Schema based SDO MetaModel.
  * <br>
@@ -51,7 +53,7 @@
 	private SDOTypeParser sdoTypeParser;
 	private Set<String> _typeNames = new HashSet<String>();
 	private SDOMappingRepository repos;
-
+	
 	@Override
 	public void setConfiguration(Configuration conf) {
 		super.setConfiguration(conf);
@@ -83,6 +85,15 @@
 		return resources;
 	}
 	
+	public String getGeneratedClassDirectory() {
+		return "";
+	}
+	
+	public void setGeneratedClassDirectory(String dir) {
+		repos.setRootDirectory(dir);
+	}
+
+	
 	@Override
 	public void endConfiguration() {
 		if (resources == null || resources.trim().length()==0)
@@ -96,24 +107,24 @@
 	
 	/**
 	 * Get the fully-qualified, persistent Java class names.
+	 * Invokes the parser for parsing XML Schema Definitions. 
+	 * The parsed SDO types are then resolved to Java classes by the Mapping
+	 * Repository, before returning from this method. 
 	 */
 	@Override
     public Set getPersistentTypeNames(boolean devpath, ClassLoader envLoader) {
     	if (resourceList == null || resourceList.isEmpty()) 
     		return _typeNames;
-    	for (String resource:resourceList) {
-    		String[] names = getSDOTypeParser().parseTypeNames(resource);
-    		for (String name:names)
-    			addPersistentTypeNames(name);
-    	}
+    	SDOTypeParser parser = getSDOTypeParser();
+    	List<String> tmpList = new ArrayList<String>(resourceList);
     	resourceList.clear();
-    	super.getPersistentTypeNames(devpath, envLoader);
+    	for (String resource:tmpList) {
+    		List<Type> types = parser.parseXSDResource(resource);
+    		for (Type type:types) {
+    			Class c = repos.getJavaClass(type, true);//(type, envLoader);
+    			_typeNames.add(c.getName());
+    		}
+    	}
     	return _typeNames;
     }
-    
-
-    public void addPersistentTypeNames(String name) {
-    	_typeNames.add(name);
-    }
-    
 }

Modified: labs/fluid/src/main/java/org/apache/openjpa/sdo/SDOTypeParser.java
URL: http://svn.apache.org/viewvc/labs/fluid/src/main/java/org/apache/openjpa/sdo/SDOTypeParser.java?rev=568737&r1=568736&r2=568737&view=diff
==============================================================================
--- labs/fluid/src/main/java/org/apache/openjpa/sdo/SDOTypeParser.java (original)
+++ labs/fluid/src/main/java/org/apache/openjpa/sdo/SDOTypeParser.java Wed Aug 22 12:44:53 2007
@@ -3,6 +3,7 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -10,10 +11,12 @@
 import java.util.Set;
 
 import org.apache.openjpa.conf.OpenJPAConfiguration;
+import org.apache.openjpa.conf.OpenJPAConfigurationImpl;
 import org.apache.openjpa.lib.log.Log;
 import org.apache.openjpa.lib.meta.ClassArgParser;
 import org.apache.openjpa.lib.util.Localizer;
 
+import commonj.sdo.Property;
 import commonj.sdo.Type;
 import commonj.sdo.helper.XSDHelper;
 
@@ -24,35 +27,24 @@
  * @since 0.1.0
  */
 public class SDOTypeParser extends ClassArgParser {
-	private static final Localizer _loc = Localizer
-		.forPackage(SDOTypeParser.class);
-	private final SDOMappingRepository repos;
-	private static final String[] EMPTY_STRING = {};
+	private static final Localizer _loc = Localizer.forPackage
+		(SDOTypeParser.class);
+	private static Map<String, List<Type>> parsedResource = 
+		new HashMap<String, List<Type>>();
 	private Log _log;	
-	private static Map<String, List<Type>> parsedResource = new HashMap<String, List<Type>>();
 	
 	/**
 	 * Supply configuration.
 	 */
 	SDOTypeParser(OpenJPAConfiguration conf) {
 		_log = conf.getLog(OpenJPAConfiguration.LOG_METADATA);
-		SDOMetaDataFactory mdf = (SDOMetaDataFactory)conf
-			.getMetaDataRepositoryInstance().getMetaDataFactory();
-		repos = mdf.getSDOMappingRepository();
 	}
 	
-	/**
-	 * Parse the given resource if it has not been parsed already.
-	 * If resource is null or does not end with ".xsd", return empty array.
-	 * 
-	 */
-	public String[] parseTypeNames(String resource) {
-		if (resource==null || !resource.endsWith(".xsd"))
-			return super.parseTypeNames(resource);
+	public List<Type> parseXSDResource(String resource) {
 		if (parsedResource.containsKey(resource)) {
 			if (_log.isWarnEnabled())
 				_log.warn(_loc.get("repeat-parse", resource));
-			return resolveTypes(parsedResource.get(resource));
+			return parsedResource.get(resource);
 		}
 		
 		_log.info(_loc.get("parse-xml-schema", resource));
@@ -62,10 +54,12 @@
 			if (_log.isWarnEnabled()) {
 				_log.warn(_loc.get("xsd-not-found", resource).toString());
 			}
-			return EMPTY_STRING;
+			return Collections.EMPTY_LIST;
 		}
 		List<Type> userTypes = new ArrayList<Type>();
 		try {
+			if (XSDHelper.INSTANCE==null)
+				throw new RuntimeException("no-sdo-provider");
 			List types = XSDHelper.INSTANCE.define(xsdInputStream, null);
 			for (Object t : types) {
 				if (t instanceof Type == false)
@@ -84,22 +78,42 @@
 				//ignore
 			}
 		}
-		return resolveTypes(userTypes);
+		return userTypes;
+		
 	}
 	
-	String[] resolveTypes(List<Type> types) {
+	/**
+	 * Parse the given resource if it has not been parsed already.
+	 * If resource is null or does not end with ".xsd", delegate to superclass
+	 * for processing.
+	 * 
+	 */
+	@Override
+	public String[] parseTypeNames(String resource) {
+		if (resource==null || !resource.endsWith(".xsd"))
+			return super.parseTypeNames(resource);
+		return toNames(parseXSDResource(resource));
+	}
+	
+	String[] toNames(List<Type> types) {
 		List<String> names = new ArrayList<String>();
 		for (Type type:types) {
 			String className = ImplHelper.getFullClassName(type); 
-			try {
-				Class cls = Class.forName(className);
-				repos.cache(type, cls);
-				names.add(className);
-			} catch (ClassNotFoundException e) {
-				// TODO Auto-generated catch block
-				e.printStackTrace();
-			}
+			names.add(className);
 		}
 		return names.toArray(new String[names.size()]);
+	}
+	
+	/**
+	 * Find a type of given name from all the types parsed from resources.
+	 */
+	public Type findType(String name) {
+		for (List<Type> types:parsedResource.values()) {
+			for (Type type:types) {
+				if (type.getName().equals(name))
+					return type;
+			}
+		}
+		return null;
 	}
 }

Modified: labs/fluid/src/main/java/org/apache/openjpa/sdo/SDOTypeRepository.java
URL: http://svn.apache.org/viewvc/labs/fluid/src/main/java/org/apache/openjpa/sdo/SDOTypeRepository.java?rev=568737&r1=568736&r2=568737&view=diff
==============================================================================
--- labs/fluid/src/main/java/org/apache/openjpa/sdo/SDOTypeRepository.java (original)
+++ labs/fluid/src/main/java/org/apache/openjpa/sdo/SDOTypeRepository.java Wed Aug 22 12:44:53 2007
@@ -252,7 +252,6 @@
 				addMappingAnnotation(property, bcfield);
 			}
 		}
-		factory.addPersistentTypeNames(javaClassName);
 		return enhanceByteCode(bcls);
 	}
 

Modified: labs/fluid/src/main/java/org/apache/openjpa/sdo/mapping/AbstractPropertyMapping.java
URL: http://svn.apache.org/viewvc/labs/fluid/src/main/java/org/apache/openjpa/sdo/mapping/AbstractPropertyMapping.java?rev=568737&r1=568736&r2=568737&view=diff
==============================================================================
--- labs/fluid/src/main/java/org/apache/openjpa/sdo/mapping/AbstractPropertyMapping.java (original)
+++ labs/fluid/src/main/java/org/apache/openjpa/sdo/mapping/AbstractPropertyMapping.java Wed Aug 22 12:44:53 2007
@@ -32,27 +32,35 @@
  * @since 0.2.0
  */
 public abstract class AbstractPropertyMapping implements PropertyMapping {
+	protected final TypeMapping owner;
 	protected final Property property;
 	protected final FieldMapping fm;
 	protected Method getter;
 	protected Method setter;
 	protected static final Object[] NULL_ARGS = new Object[]{};
 	
-	protected AbstractPropertyMapping(Property property, FieldMapping fm) {
+	protected AbstractPropertyMapping(TypeMapping owner, 
+			Property property, FieldMapping fm) {
+		this.owner = owner;
 		this.property = property;
 		this.fm = fm;
 		if (fm != null) { // runtime
-			Class cls = fm.getDeclaringType();
-			getter = Reflection.findGetter(cls, fm.getName(), true);
-			setter = Reflection.findSetter(cls, fm.getName(), true);
+			resolve(fm);
 		}
 	}
-	
+
 	public final Property getProperty() {
 		return property;
 	}
 	
 	public String getFieldName() {
 		return property.getName();
+	}
+	
+	public void resolve(FieldMapping fm) {
+		if (getter != null) return;
+		Class cls = fm.getDeclaringType();
+		getter = Reflection.findGetter(cls, fm.getName(), true);
+		setter = Reflection.findSetter(cls, fm.getName(), true);
 	}
 }

Modified: labs/fluid/src/main/java/org/apache/openjpa/sdo/mapping/IdenticalTypeMapping.java
URL: http://svn.apache.org/viewvc/labs/fluid/src/main/java/org/apache/openjpa/sdo/mapping/IdenticalTypeMapping.java?rev=568737&r1=568736&r2=568737&view=diff
==============================================================================
--- labs/fluid/src/main/java/org/apache/openjpa/sdo/mapping/IdenticalTypeMapping.java (original)
+++ labs/fluid/src/main/java/org/apache/openjpa/sdo/mapping/IdenticalTypeMapping.java Wed Aug 22 12:44:53 2007
@@ -25,6 +25,7 @@
 import org.apache.commons.lang.StringUtils;
 import org.apache.openjpa.jdbc.meta.ClassMapping;
 import org.apache.openjpa.jdbc.meta.FieldMapping;
+import org.apache.openjpa.meta.ClassMetaData;
 import org.apache.openjpa.sdo.ImplHelper;
 
 import commonj.sdo.Property;
@@ -38,27 +39,48 @@
  */
 public class IdenticalTypeMapping implements TypeMapping {
 	protected final Type type;
-	protected final Class cls;
+	protected Class cls;
 	protected IdentityMapping identityMapping;
 	protected VersionMapping versionMapping;
+	private boolean resolved = false;
+	private int idType;
 	
 	protected SDOMappingStrategy mappingStrategy = new SDOMappingStrategy();
 	
 	protected Map<Property, PropertyMapping> _propertyMappings = 
 		new HashMap<Property, PropertyMapping>();
 	
-	public IdenticalTypeMapping(Type type, ClassMapping clsMeta) {
+	public IdenticalTypeMapping(Type type, Class cls) {
 		this.type = type;
-		this.cls  = (clsMeta==null) ? null : clsMeta.getDescribedType();
+		this.cls  = cls;//(clsMeta==null) ? null : clsMeta.getDescribedType();
+		this.idType = (ImplHelper.getIdentityProperty(type) == null) ? 
+				ClassMetaData.ID_DATASTORE : ClassMetaData.ID_APPLICATION;
+		
 		List properties = type.getProperties();
 		for (Object p:properties) {
 			Property property = (Property)p;
-			FieldMapping field = (clsMeta==null) ? null : 
-				clsMeta.getFieldMapping(property.getName());
-			addMapping(property, field);
+//			FieldMapping field = (clsMeta==null) ? null : 
+//				clsMeta.getFieldMapping(property.getName());
+			addMapping(property, null);
 		}
 	}
 	
+	public boolean isResolved() {
+		return resolved;
+	}
+	
+	public void resolve(ClassMapping cm) {
+		if (resolved) return;
+		cls = cm.getDescribedType();
+		List properties = type.getProperties();
+		for (Object p:properties) {
+			Property property = (Property)p;
+			FieldMapping fm = cm.getFieldMapping(property.getName());
+			getMapping(property).resolve(fm);
+		}
+		resolved = true;
+	}
+	
 	public Type getType() {
 		return type;
 	}
@@ -66,7 +88,7 @@
 	PropertyMapping addMapping(Property p, FieldMapping field) {
 		if (p.getContainingType() != type)
 			throw new IllegalArgumentException(p.getName());
-		PropertyMapping mapping = SDOMappingStrategy.decideStrategy(p, field);
+		PropertyMapping mapping = SDOMappingStrategy.decideStrategy(this, p, field);
 		if (mapping instanceof IdentityMapping)
 			setIdentityMapping((IdentityMapping)mapping);
 		if (mapping instanceof VersionMapping) 
@@ -76,6 +98,8 @@
 	}
 	
 	public PropertyMapping getMapping(Property p) {
+		if (!_propertyMappings.containsKey(p))
+			throw new RuntimeException("No mapping for " + p.getName());
 		return _propertyMappings.get(p);
 	}
 	

Modified: labs/fluid/src/main/java/org/apache/openjpa/sdo/mapping/IdentityMapping.java
URL: http://svn.apache.org/viewvc/labs/fluid/src/main/java/org/apache/openjpa/sdo/mapping/IdentityMapping.java?rev=568737&r1=568736&r2=568737&view=diff
==============================================================================
--- labs/fluid/src/main/java/org/apache/openjpa/sdo/mapping/IdentityMapping.java (original)
+++ labs/fluid/src/main/java/org/apache/openjpa/sdo/mapping/IdentityMapping.java Wed Aug 22 12:44:53 2007
@@ -18,8 +18,13 @@
  */
 package org.apache.openjpa.sdo.mapping;
 
+import javax.persistence.Id;
+
 import org.apache.openjpa.jdbc.meta.FieldMapping;
 
+import serp.bytecode.Annotations;
+import serp.bytecode.BCField;
+
 import commonj.sdo.Property;
 
 /**
@@ -30,16 +35,21 @@
  */
 public class IdentityMapping extends PrimitiveMapping {
 
-	IdentityMapping(Property property, FieldMapping fm) {
-		super(property, fm);
+	IdentityMapping(TypeMapping tm, Property property, FieldMapping fm) {
+		super(tm, property, fm);
 	}
 	
 	public String getName() {
 		return "IdentityMapping";
 	}
 	
-	public String[] getAnnotations() {
-		return new String[] {"@Id", "@GeneratedValue"};
+	public String[] getAnnotationStrings() {
+		return new String[] {"@Id"};
+	}
+	
+	public void annotate(BCField field) {
+		Annotations annos = field.getDeclaredRuntimeAnnotations(true);
+		annos.addAnnotation(Id.class);
+//		annos.addAnnotation(GeneratedValue.class);
 	}
-
 }

Modified: labs/fluid/src/main/java/org/apache/openjpa/sdo/mapping/PrimitiveListMapping.java
URL: http://svn.apache.org/viewvc/labs/fluid/src/main/java/org/apache/openjpa/sdo/mapping/PrimitiveListMapping.java?rev=568737&r1=568736&r2=568737&view=diff
==============================================================================
--- labs/fluid/src/main/java/org/apache/openjpa/sdo/mapping/PrimitiveListMapping.java (original)
+++ labs/fluid/src/main/java/org/apache/openjpa/sdo/mapping/PrimitiveListMapping.java Wed Aug 22 12:44:53 2007
@@ -18,10 +18,14 @@
  */
 package org.apache.openjpa.sdo.mapping;
 
+import java.util.List;
+
 import org.apache.openjpa.jdbc.meta.FieldMapping;
 import org.apache.openjpa.sdo.ImplHelper;
+import org.apache.openjpa.sdo.SDOMappingRepository;
 
 import commonj.sdo.Property;
+import commonj.sdo.Type;
 
 /**
  * Maps Primitive, many-valued Property.
@@ -30,8 +34,8 @@
  * @since 0.2.0
  */
 public class PrimitiveListMapping extends PrimitiveMapping {
-	PrimitiveListMapping(Property p, FieldMapping fmd) {
-		super(p, fmd);
+	PrimitiveListMapping(TypeMapping tm, Property p, FieldMapping fmd) {
+		super(tm, p, fmd);
 	}
 
 	public String getName() {
@@ -39,8 +43,14 @@
 	}
 	
 	public String getFieldTypeName() {
-		return "java.util.List<" + 
-			ImplHelper.getComponentType(property.getType()).
-			getInstanceClass().getName() + ">";
+		Type elementType = ImplHelper.getComponentType(property.getType());
+		if (elementType==null) 
+			elementType = property.getType();
+		return  "java.util.List<" + elementType.getInstanceClass().getName() + ">";
+	}
+	
+	public Class getFieldType(SDOMappingRepository repos) {
+//		Class componentType = ImplHelper.getComponentType(property.getType()).getInstanceClass();
+		return List.class;
 	}
 }

Modified: labs/fluid/src/main/java/org/apache/openjpa/sdo/mapping/PrimitiveMapping.java
URL: http://svn.apache.org/viewvc/labs/fluid/src/main/java/org/apache/openjpa/sdo/mapping/PrimitiveMapping.java?rev=568737&r1=568736&r2=568737&view=diff
==============================================================================
--- labs/fluid/src/main/java/org/apache/openjpa/sdo/mapping/PrimitiveMapping.java (original)
+++ labs/fluid/src/main/java/org/apache/openjpa/sdo/mapping/PrimitiveMapping.java Wed Aug 22 12:44:53 2007
@@ -18,8 +18,15 @@
  */
 package org.apache.openjpa.sdo.mapping;
 
+import javax.persistence.Basic;
+
 import org.apache.openjpa.jdbc.meta.FieldMapping;
 import org.apache.openjpa.sdo.SDOInstanceMapping;
+import org.apache.openjpa.sdo.SDOMappingRepository;
+
+import serp.bytecode.Annotation;
+import serp.bytecode.Annotations;
+import serp.bytecode.BCField;
 
 import commonj.sdo.DataObject;
 import commonj.sdo.Property;
@@ -32,8 +39,8 @@
  */
 public class PrimitiveMapping extends AbstractPropertyMapping {
 	
-	PrimitiveMapping(Property p, FieldMapping fm) {
-		super(p, fm);
+	PrimitiveMapping(TypeMapping tm, Property p, FieldMapping fm) {
+		super(tm, p, fm);
 	}
 	
 	public String getName() {
@@ -44,8 +51,17 @@
 		return property.getType().getInstanceClass().getName();
 	}
 	
-	public String[] getAnnotations() {
+	public Class getFieldType(SDOMappingRepository repos) {
+		return property.getType().getInstanceClass();
+	}
+	
+	public String[] getAnnotationStrings() {
 		return new String[]{};
+	}
+	
+	public void annotate(BCField field) {
+		Annotations annos = field.getDeclaredRuntimeAnnotations(true);
+		annos.addAnnotation(Basic.class);
 	}
 	
 	public DataObject populateDataObject(DataObject target, Object source, 

Modified: labs/fluid/src/main/java/org/apache/openjpa/sdo/mapping/PropertyMapping.java
URL: http://svn.apache.org/viewvc/labs/fluid/src/main/java/org/apache/openjpa/sdo/mapping/PropertyMapping.java?rev=568737&r1=568736&r2=568737&view=diff
==============================================================================
--- labs/fluid/src/main/java/org/apache/openjpa/sdo/mapping/PropertyMapping.java (original)
+++ labs/fluid/src/main/java/org/apache/openjpa/sdo/mapping/PropertyMapping.java Wed Aug 22 12:44:53 2007
@@ -18,7 +18,11 @@
  */
 package org.apache.openjpa.sdo.mapping;
 
+import org.apache.openjpa.jdbc.meta.FieldMapping;
 import org.apache.openjpa.sdo.SDOInstanceMapping;
+import org.apache.openjpa.sdo.SDOMappingRepository;
+
+import serp.bytecode.BCField;
 
 import commonj.sdo.DataObject;
 import commonj.sdo.Property;
@@ -31,6 +35,7 @@
  * @since 0.2.0
  */
 public interface PropertyMapping  {
+	public void resolve(FieldMapping fm);
 	/**
 	 * Get the Property being mapped by this receiver.
 	 */
@@ -53,10 +58,14 @@
 	 */
 	public String getFieldTypeName();
 	
+	public Class getFieldType(SDOMappingRepository repos);
+	
 	/**
 	 * Gets the persistent annotations for the target Java field.
 	 */
-	public String[] getAnnotations();
+	public String[] getAnnotationStrings();
+	
+	public void annotate(BCField field);
 	
 	/**
 	 * Populate the given <code>target</code> DataObject from the field value

Modified: labs/fluid/src/main/java/org/apache/openjpa/sdo/mapping/RelationListMapping.java
URL: http://svn.apache.org/viewvc/labs/fluid/src/main/java/org/apache/openjpa/sdo/mapping/RelationListMapping.java?rev=568737&r1=568736&r2=568737&view=diff
==============================================================================
--- labs/fluid/src/main/java/org/apache/openjpa/sdo/mapping/RelationListMapping.java (original)
+++ labs/fluid/src/main/java/org/apache/openjpa/sdo/mapping/RelationListMapping.java Wed Aug 22 12:44:53 2007
@@ -21,9 +21,17 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import javax.persistence.OneToMany;
+import javax.persistence.Version;
+
 import org.apache.openjpa.jdbc.meta.FieldMapping;
+import org.apache.openjpa.persistence.ElementType;
 import org.apache.openjpa.sdo.ImplHelper;
 import org.apache.openjpa.sdo.SDOInstanceMapping;
+import org.apache.openjpa.sdo.SDOMappingRepository;
+
+import serp.bytecode.Annotations;
+import serp.bytecode.BCField;
 
 import commonj.sdo.DataObject;
 import commonj.sdo.Property;
@@ -38,8 +46,8 @@
 public class RelationListMapping extends RelationMapping {
 	Type componentType;
 	Property componentProperty;
-	RelationListMapping(Property p, FieldMapping fm) {
-		super(p, fm);
+	RelationListMapping(TypeMapping tm, Property p, FieldMapping fm) {
+		super(tm, p, fm);
 		componentProperty = ImplHelper.getComponentProperty(property.getType());
 		componentType = componentProperty.getType();
 	}
@@ -53,8 +61,19 @@
 		return "java.util.List<"+javaClassName+">";
 	}
 	
-	public String[] getAnnotations() {
+	public Class getFieldType(SDOMappingRepository repos) {
+		return List.class;
+	}
+
+	
+	public String[] getAnnotationStrings() {
 		return new String[] {"@OneToMany"};
+	}
+
+	public void annotate(BCField field) {
+		Annotations annos = field.getDeclaredRuntimeAnnotations(true);
+		annos.addAnnotation(OneToMany.class);
+//		annos.addAnnotation(ElementType.class).setValue(arg0)
 	}
 
 	public DataObject populateDataObject(DataObject target, Object source, 

Modified: labs/fluid/src/main/java/org/apache/openjpa/sdo/mapping/RelationMapping.java
URL: http://svn.apache.org/viewvc/labs/fluid/src/main/java/org/apache/openjpa/sdo/mapping/RelationMapping.java?rev=568737&r1=568736&r2=568737&view=diff
==============================================================================
--- labs/fluid/src/main/java/org/apache/openjpa/sdo/mapping/RelationMapping.java (original)
+++ labs/fluid/src/main/java/org/apache/openjpa/sdo/mapping/RelationMapping.java Wed Aug 22 12:44:53 2007
@@ -18,9 +18,16 @@
  */
 package org.apache.openjpa.sdo.mapping;
 
+import javax.persistence.OneToOne;
+import javax.persistence.Version;
+
 import org.apache.openjpa.jdbc.meta.FieldMapping;
 import org.apache.openjpa.sdo.ImplHelper;
 import org.apache.openjpa.sdo.SDOInstanceMapping;
+import org.apache.openjpa.sdo.SDOMappingRepository;
+
+import serp.bytecode.Annotations;
+import serp.bytecode.BCField;
 
 import commonj.sdo.DataObject;
 import commonj.sdo.Property;
@@ -33,8 +40,8 @@
  */
 public class RelationMapping extends AbstractPropertyMapping {
 	
-	RelationMapping(Property p, FieldMapping fm) {
-		super(p, fm);
+	RelationMapping(TypeMapping tm, Property p, FieldMapping fm) {
+		super(tm, p, fm);
 	}
 	
 	public String getName() {
@@ -45,8 +52,17 @@
 		return ImplHelper.getFullClassName(property.getType());
 	}
 	
-	public String[] getAnnotations() {
+	public Class getFieldType(SDOMappingRepository repos) {
+		return repos.getJavaClass(property.getType(), true);
+	}
+	
+	public String[] getAnnotationStrings() {
 		return new String[] {"@OneToOne"};
+	}
+	
+	public void annotate(BCField field) {
+		Annotations annos = field.getDeclaredRuntimeAnnotations(true);
+		annos.addAnnotation(OneToOne.class);
 	}
 
 	public DataObject populateDataObject(DataObject target, Object source, 

Modified: labs/fluid/src/main/java/org/apache/openjpa/sdo/mapping/SDOMappingStrategy.java
URL: http://svn.apache.org/viewvc/labs/fluid/src/main/java/org/apache/openjpa/sdo/mapping/SDOMappingStrategy.java?rev=568737&r1=568736&r2=568737&view=diff
==============================================================================
--- labs/fluid/src/main/java/org/apache/openjpa/sdo/mapping/SDOMappingStrategy.java (original)
+++ labs/fluid/src/main/java/org/apache/openjpa/sdo/mapping/SDOMappingStrategy.java Wed Aug 22 12:44:53 2007
@@ -18,7 +18,6 @@
  */
 package org.apache.openjpa.sdo.mapping;
 
-import org.apache.openjpa.jdbc.meta.ClassMapping;
 import org.apache.openjpa.jdbc.meta.FieldMapping;
 import org.apache.openjpa.sdo.ImplHelper;
 
@@ -42,8 +41,8 @@
 	 * 
 	 * @return the mapping to be used for the given Type.
 	 */
-	public static TypeMapping decideStrategy(Type type, ClassMapping cmd) {
-		return new IdenticalTypeMapping(type, cmd);
+	public static TypeMapping decideStrategy(Type type, Class cls) {
+		return new IdenticalTypeMapping(type, cls);
 	}
 	
 	/**
@@ -57,30 +56,30 @@
 	 * @return the mapping to be used for the given Property.
 	 * 
 	 */
-	public static PropertyMapping decideStrategy(Property p, FieldMapping fmd) {
+	public static PropertyMapping decideStrategy(TypeMapping tm, Property p, FieldMapping fmd) {
 		if (ImplHelper.isIdentity(p))
-			return new IdentityMapping(p, fmd);
+			return new IdentityMapping(tm, p, fmd);
 		if (ImplHelper.isVersion(p))
-			return new VersionMapping(p, fmd);
+			return new VersionMapping(tm, p, fmd);
 
 		if (p.getType().isDataType()) {
 			if (p.isMany()) {
-				return new PrimitiveListMapping(p, fmd);
+				return new PrimitiveListMapping(tm, p, fmd);
 			} else {
-				return new PrimitiveMapping(p, fmd);
+				return new PrimitiveMapping(tm, p, fmd);
 			}
 		}
 		if (ImplHelper.isContainer(p.getType())) {
 			Type componentType = ImplHelper.getComponentType(p.getType());
 			if (componentType.isDataType())
-				return new PrimitiveListMapping(p, fmd);
+				return new PrimitiveListMapping(tm, p, fmd);
 			else
-				return new RelationListMapping(p, fmd);
+				return new RelationListMapping(tm, p, fmd);
 		}
 		if (p.isMany()) {
-			return new RelationListMapping(p, fmd);
+			return new RelationListMapping(tm, p, fmd);
 		} else {
-			return new RelationMapping(p, fmd);
+			return new RelationMapping(tm, p, fmd);
 		}
 	}
 }

Modified: labs/fluid/src/main/java/org/apache/openjpa/sdo/mapping/TypeMapping.java
URL: http://svn.apache.org/viewvc/labs/fluid/src/main/java/org/apache/openjpa/sdo/mapping/TypeMapping.java?rev=568737&r1=568736&r2=568737&view=diff
==============================================================================
--- labs/fluid/src/main/java/org/apache/openjpa/sdo/mapping/TypeMapping.java (original)
+++ labs/fluid/src/main/java/org/apache/openjpa/sdo/mapping/TypeMapping.java Wed Aug 22 12:44:53 2007
@@ -18,6 +18,9 @@
  */
 package org.apache.openjpa.sdo.mapping;
 
+import org.apache.openjpa.jdbc.meta.ClassMapping;
+import org.apache.openjpa.sdo.SDOMappingRepository;
+
 import commonj.sdo.Property;
 import commonj.sdo.Type;
 
@@ -25,11 +28,22 @@
  * Defines the protocol of mapping a SDO Type to a Java Class.
  * 
  * @author Pinaki Poddar
+ * @since 0.2.0
  *
  */
 public interface TypeMapping {
 	/**
-	 * Gets the type being mapped by this receiver.
+	 * Resolve this mapping against the database mapping.
+	 */
+	public void resolve(ClassMapping cm);
+	
+	/**
+	 * Affirm if this mapping is resloved.
+	 */
+	public boolean isResolved();
+	
+	/**
+	 * Gets the SDO type being mapped by this receiver.
 	 */
 	public Type getType();
 	

Modified: labs/fluid/src/main/java/org/apache/openjpa/sdo/mapping/VersionMapping.java
URL: http://svn.apache.org/viewvc/labs/fluid/src/main/java/org/apache/openjpa/sdo/mapping/VersionMapping.java?rev=568737&r1=568736&r2=568737&view=diff
==============================================================================
--- labs/fluid/src/main/java/org/apache/openjpa/sdo/mapping/VersionMapping.java (original)
+++ labs/fluid/src/main/java/org/apache/openjpa/sdo/mapping/VersionMapping.java Wed Aug 22 12:44:53 2007
@@ -18,8 +18,15 @@
  */
 package org.apache.openjpa.sdo.mapping;
 
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Version;
+
 import org.apache.openjpa.jdbc.meta.FieldMapping;
 
+import serp.bytecode.Annotations;
+import serp.bytecode.BCField;
+
 import commonj.sdo.Property;
 
 /**
@@ -30,19 +37,24 @@
  */
 public class VersionMapping extends PrimitiveMapping {
 
-	VersionMapping(Property property, FieldMapping fm) {
-		super(property, fm);
+	VersionMapping(TypeMapping tm, Property property, FieldMapping fm) {
+		super(tm, property, fm);
 	}
 
 	public String getName() {
 		return "VersionMapping";
 	}
 	
-	public String[] getAnnotations() {
+	public String[] getAnnotationStrings() {
 		return new String[] {"@Version"};
 	}
 
 	public String getFieldTypeName() {
 		return "int";
+	}
+
+	public void annotate(BCField field) {
+		Annotations annos = field.getDeclaredRuntimeAnnotations(true);
+		annos.addAnnotation(Version.class);
 	}
 }

Modified: labs/fluid/src/main/resources/org/apache/openjpa/sdo/localizer.properties
URL: http://svn.apache.org/viewvc/labs/fluid/src/main/resources/org/apache/openjpa/sdo/localizer.properties?rev=568737&r1=568736&r2=568737&view=diff
==============================================================================
--- labs/fluid/src/main/resources/org/apache/openjpa/sdo/localizer.properties (original)
+++ labs/fluid/src/main/resources/org/apache/openjpa/sdo/localizer.properties Wed Aug 22 12:44:53 2007
@@ -1,13 +1,23 @@
-cache-sdo-type: "{0}" cached SDO type "{1}" mapped to Java class "{2}" loaded \
-	by "{3}"
-cache-unenhanced: Class "{0}" loaded by "{1}" is not enhanced and hence can \
-	not be cached 
+type-mapping-new: Creating new SDO Type Mapping for "{0}" mapped to "{1}"
+type-mapping-resolve: Resolving SDO Type Mapping for "{0}" mapped to "{1}"
+resolve-mapping-failed: No cached metadata found for "{0}" in "{1}"
+
+cache-replace-sdo-type: Replaced association of SDO Type "{0}" by "{1}" \
+	(previously was "{2}")
+cache-sdo-type: Caching SDO type "{0}" mapped to "{1}"
+cache-unenhanced: Can not cache unenhanced "{0}"
+
+generate-dynamic-class: Generating dynamic Java class "{0}" 
 enhance-dynamic-class: Enhancing dynamic Java class "{0}" 
 found-enhanced-cls:Enhanced class "{1}" loaded by "{2}" exists for SDO type "{0}" 
+
 no-class-for-type: No Java class can be found or created for SDO Type "{0}"
-no-type-for-class: No SDO Type can be found for Java class "{0}" loaded \
-	by "{1}"
+no-type-for-class: No SDO Type can be found for "{0}"
 no-type-for-name: No SDO Type named "{0}" can be found	
+
+dynamic-enhancement: Initializing for dynamic construction and enhancement of \
+	Java classes for SDO Types
+dynamic-method: Creating getter/setter methods for field "{1}" "{0}" 
 parse-xml-schema: Parsing XML Schema "{0}"
 register-sdo: Dynamic class "{0}" is loaded by "{1}"
 sdo-repos-init: Dynamic Java classes will be written to "{0}". Make sure that \
@@ -26,4 +36,5 @@
 container-type-not-converted: No conversion for SDO container Type "{0}"
 mapping-type: Mapping SDO Type "{0}" to Java Class "{1}"
 mapping-property: Mapping SDO Property "{0}" to a Java field of type "{1}" \
-	using "{2}"
\ No newline at end of file
+	using "{2}"
+no-sdo-provider: Can not find any SDO Implementation in current classpath. 
\ No newline at end of file

Modified: labs/fluid/src/test/java/example/basic/TestCRUD.java
URL: http://svn.apache.org/viewvc/labs/fluid/src/test/java/example/basic/TestCRUD.java?rev=568737&r1=568736&r2=568737&view=diff
==============================================================================
--- labs/fluid/src/test/java/example/basic/TestCRUD.java (original)
+++ labs/fluid/src/test/java/example/basic/TestCRUD.java Wed Aug 22 12:44:53 2007
@@ -97,11 +97,11 @@
 			assertNotNull(ImplHelper.getIdValue(dataObject));
 			
 			dataObject.setString("firstName", "Ron");
-			em.begin();
+			em.getTransaction().begin();
 			DataObject merged = em.merge(dataObject);
 			int v1 = ImplHelper.getVersion(merged);
 			assertTrue(v1>v0);
-			em.commit();
+			em.getTransaction().commit();
 			assertEquals("Ron", merged.getString("firstName"));
 			int after = count("Person");
 			assertEquals(before, after);
@@ -124,9 +124,9 @@
 		for (Object o : result) {
 			int before = count("Person");
 			DataObject dataObject = (DataObject) o;
-			em.begin();
+			em.getTransaction().begin();
 			em.remove(dataObject);
-			em.commit();
+			em.getTransaction().commit();
 			int after = count("Person");
 			assertEquals(before-1, after);
 		}

Modified: labs/fluid/src/test/java/example/basic/TestRelation.java
URL: http://svn.apache.org/viewvc/labs/fluid/src/test/java/example/basic/TestRelation.java?rev=568737&r1=568736&r2=568737&view=diff
==============================================================================
--- labs/fluid/src/test/java/example/basic/TestRelation.java (original)
+++ labs/fluid/src/test/java/example/basic/TestRelation.java Wed Aug 22 12:44:53 2007
@@ -83,9 +83,9 @@
 		for (DataObject dataObject : result) {
 			int before = count("USAddress");
 			dataObject.getDataObject("billTo").setString("name", "John Doe");
-			em.begin();
+			em.getTransaction().begin();
 			DataObject merged = em.merge(dataObject);
-			em.commit();
+			em.getTransaction().commit();
 			String changedName = merged.getDataObject("billTo").getString("name");
 			assertEquals("John Doe", changedName);
 			int after = count("USAddress");
@@ -136,9 +136,9 @@
 		for (Object o : result) {
 			int before = count("USAddress");
 			DataObject dataObject = (DataObject) o;
-			em.begin();
+			em.getTransaction().begin();
 			em.remove(dataObject);
-			em.commit();
+			em.getTransaction().commit();
 			int after = count("USAddress");
 			assertEquals(before-2, after); // 2 address /PurchaseOrder
 		}

Modified: labs/fluid/src/test/java/org/apache/openjpa/sdo/TestSDO.java
URL: http://svn.apache.org/viewvc/labs/fluid/src/test/java/org/apache/openjpa/sdo/TestSDO.java?rev=568737&r1=568736&r2=568737&view=diff
==============================================================================
--- labs/fluid/src/test/java/org/apache/openjpa/sdo/TestSDO.java (original)
+++ labs/fluid/src/test/java/org/apache/openjpa/sdo/TestSDO.java Wed Aug 22 12:44:53 2007
@@ -52,7 +52,7 @@
 	public void testIdentityType() {
 		Type poType = getType("PurchaseOrderType");
 		assertNotNull(poType);
-		Property id2 = ImplHelper.getIdentity(poType);
+		Property id2 = ImplHelper.getIdentityProperty(poType);
 		assertNotNull(id2);
 		assertTrue(ImplHelper.isIdentity(id2));
 	}

Modified: labs/fluid/src/test/java/test/common/AbstractSDOTest.java
URL: http://svn.apache.org/viewvc/labs/fluid/src/test/java/test/common/AbstractSDOTest.java?rev=568737&r1=568736&r2=568737&view=diff
==============================================================================
--- labs/fluid/src/test/java/test/common/AbstractSDOTest.java (original)
+++ labs/fluid/src/test/java/test/common/AbstractSDOTest.java Wed Aug 22 12:44:53 2007
@@ -80,8 +80,8 @@
 	 */
 	public int count(String alias) {
 		OpenJPAEntityManager em = emf.createEntityManager();
-		Query query = em.createQuery("SELECT COUNT(o) FROM " + alias + " o");
-		return ((Long)query.getSingleResult()).intValue();
+		Query query = em.createQuery("SELECT o FROM " + alias + " o");
+		return query.getResultList().size();
 	}
 	
 	/**

Modified: labs/fluid/src/test/resources/META-INF/books.xsd
URL: http://svn.apache.org/viewvc/labs/fluid/src/test/resources/META-INF/books.xsd?rev=568737&r1=568736&r2=568737&view=diff
==============================================================================
--- labs/fluid/src/test/resources/META-INF/books.xsd (original)
+++ labs/fluid/src/test/resources/META-INF/books.xsd Wed Aug 22 12:44:53 2007
@@ -16,6 +16,7 @@
         </xs:sequence>
       </xs:complexType>
     </xs:element>
+    <xs:element name="authorNames" type="xs:string" minOccurs="1" maxOccurs="unbounded"/>
     <xs:element name="description" type="xs:string"  minOccurs="0"/>
     <xs:element name="promotion">
        <xs:complexType>

Modified: labs/fluid/src/test/resources/META-INF/persistence.xml
URL: http://svn.apache.org/viewvc/labs/fluid/src/test/resources/META-INF/persistence.xml?rev=568737&r1=568736&r2=568737&view=diff
==============================================================================
--- labs/fluid/src/test/resources/META-INF/persistence.xml (original)
+++ labs/fluid/src/test/resources/META-INF/persistence.xml Wed Aug 22 12:44:53 2007
@@ -4,14 +4,14 @@
 
 		<properties>
 			<property name="openjpa.EntityManagerFactory" value="sdo"/>
-			<property name="openjpa.MetaDataFactory" value="sdo(Resources=META-INF/person.xsd;META-INF/po.xsd)"/>
+			<property name="openjpa.MetaDataFactory" value="sdo(Resources=META-INF/person.xsd)"/>
 			<property name="openjpa.ConnectionDriverName" value="com.mysql.jdbc.Driver"/>
 			<property name="openjpa.ConnectionURL" value="jdbc:mysql://localhost/SDO2"/>
 			<property name="openjpa.ConnectionUserName" value="root"/>
 			<property name="openjpa.ConnectionPassword" value="hello"/>
 			<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema"/>
    			<property name="openjpa.QueryCompilationCache" value="false"/>
-   			<property name="openjpa.Log" value="DefaultLevel=INFO, SQL=TRACE"/>
+   			<property name="openjpa.Log" value="DefaultLevel=TRACE, SQL=TRACE, Query=TRACE"/>
   			<property name="openjpa.BrokerImpl" value="non-finalizing"/>
    			
       	</properties>



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@labs.apache.org
For additional commands, e-mail: commits-help@labs.apache.org