Hi Pinaki,

>
> PS: it is Pinaki, but I have seen lot of variations on that moniker :)

First and foremost: Sorry, don't know how I came around with other
spellings of your name. I apologize.

Pinaki Poddar wrote:
> Hi,
>   This is a patch on Serp -- originally written by my erstwhile colleague
> Abe White. 

What is Serp?

> A singular change was necessary to get it working for some
> annotation arrays. I had written to Abe to integrate this change into Serp 
> -- but so far it has not happened. That is why the code appears in here --
> but this is a transient.

I'm not sure I'm satisfied with these explanations for this commit.
And I'm confused.

Where has the code been contributed, physically? Is there a JIRA
attachement somewhere or something equivalent?
What code has been contributed by Sergio, what by Abe?

Many of the committed files lack a proper license header.

Is it correct to assume that the code from r886691 is neither your own
nor Apache-licensed? If yes, it might be better to remove the code from
ASF's svn until this is all resolved.

> That is why the code appears in here --
> but this is a transient.

What does that mean?

  Bernd

> 
> 
> Bernd Fondermann wrote:
>> Hi Pina,
>>
>> please could you clarify the origins of the code below?
>>
>> Thanks,
>>
>>   Bernd
>>
>> ppod...@apache.org wrote:
>>> Added: labs/fluid/src/main/java/serp/bytecode/Annotation.java
>>> URL:
>>> http://svn.apache.org/viewvc/labs/fluid/src/main/java/serp/bytecode/Annotation.java?rev=886691&view=auto
>>> ==============================================================================
>>> --- labs/fluid/src/main/java/serp/bytecode/Annotation.java (added)
>>> +++ labs/fluid/src/main/java/serp/bytecode/Annotation.java Thu Dec  3
>>> 07:41:56 2009
>>> @@ -0,0 +1,1010 @@
>>> +package serp.bytecode;
>>> +
>>> +import java.io.*;
>>> +import java.lang.reflect.*;
>>> +import java.util.*;
>>> +
>>> +import serp.bytecode.lowlevel.*;
>>> +import serp.bytecode.visitor.*;
>>> +import serp.util.*;
>>> +
>>> +/**
>>> + * A declared annotation.
>>> + *
>>> + * @author Abe White
>>> + */
>>> +public class Annotation implements BCEntity, VisitAcceptor {
>>> +    private static Method ENUM_VALUEOF = null;
>>> +    private static Method ENUM_NAME = null;
>>> +    static {
>>> +        try {
>>> +            Class c = Class.forName("java.lang.Enum");
>>> +            ENUM_VALUEOF = c.getMethod("valueOf", new Class[] {
>>> +                Class.class, String.class });
>>> +            ENUM_NAME = c.getMethod("name", (Class[]) null);
>>> +        } catch (Throwable t) {
>>> +            // pre-1.5 JDK
>>> +        }
>>> +    }
>>> + 
>>> +    private BCEntity _owner = null;
>>> +    private int _typeIndex = 0;
>>> +    private List _properties = null;
>>> +
>>> +    Annotation(BCEntity owner) {
>>> +        _owner = owner;
>>> +    }
>>> +
>>> +    /**
>>> +     * Annotations are stored in an {...@link Annotations} table or as
>>> +     * part of an {...@link Annotation} property value.
>>> +     */
>>> +    public BCEntity getOwner() {
>>> +        return _owner;
>>> +    }
>>> +
>>> +    void invalidate() {
>>> +        _owner = null;
>>> +    }
>>> +
>>> +    /**
>>> +     * The index in the class {...@link ConstantPool} of the
>>> +     * {...@link UTF8Entry} holding the type of this annotation.
>>> +     */
>>> +    public int getTypeIndex() {
>>> +        return _typeIndex;
>>> +    }
>>> +
>>> +    /**
>>> +     * The index in the class {...@link ConstantPool} of the
>>> +     * {...@link UTF8Entry} holding the type of this annotation.
>>> +     */
>>> +    public void setTypeIndex(int index) {
>>> +        _typeIndex = index;
>>> +    }
>>> +
>>> +    /**
>>> +     * The name of this annotation's type.
>>> +     */
>>> +    public String getTypeName() {
>>> +        String desc = ((UTF8Entry)
>>> getPool().getEntry(_typeIndex)).getValue();
>>> +        return getProject().getNameCache().getExternalForm(desc, false);
>>> +    }
>>> +
>>> +    /**
>>> +     * The {...@link Class} object for this annotation's type.
>>> +     */
>>> +    public Class getType() {
>>> +        return Strings.toClass(getTypeName(), getClassLoader());
>>> +    }
>>> +
>>> +    /**
>>> +     * The bytecode for the type of this annotation.
>>> +     */
>>> +    public BCClass getTypeBC() {
>>> +        return getProject().loadClass(getTypeName(), getClassLoader());
>>> +    }
>>> +
>>> +    /**
>>> +     * This annotation's type.
>>> +     */
>>> +    public void setType(String type) {
>>> +        type = getProject().getNameCache().getInternalForm(type, true);
>>> +        _typeIndex = getPool().findUTF8Entry(type, true);
>>> +    }
>>> +
>>> +    /**
>>> +     * This annotation's type.
>>> +     */
>>> +    public void setType(Class type) {
>>> +        setType(type.getName());
>>> +    }
>>> +
>>> +    /**
>>> +     * This annotation's type.
>>> +     */
>>> +    public void setType(BCClass type) {
>>> +        setType(type.getName());
>>> +    }
>>> +
>>> +    /**
>>> +     * All declared properties.
>>> +     */
>>> +    public Property[] getProperties() {
>>> +        if (_properties == null)
>>> +            return new Property[0];
>>> +        return (Property[]) _properties.toArray
>>> +            (new Property[_properties.size()]);
>>> +    }
>>> +
>>> +    /**
>>> +     * Set the annotation properties.  This method is useful when
>>> +     * importing properties from another instance.
>>> +     */
>>> +    public void setProperties(Property[] props) {
>>> +        clearProperties();
>>> +        if (props != null)
>>> +            for (int i = 0; i < props.length; i++)
>>> +                addProperty(props[i]);
>>> +    }
>>> +
>>> +    /**
>>> +     * Return the property with the given name, or null if none.
>>> +     */
>>> +    public Property getProperty(String name) {
>>> +        if (_properties == null)
>>> +            return null;
>>> +        Property prop;
>>> +        for (int i = 0; i < _properties.size(); i++) {
>>> +            prop = (Property) _properties.get(i);
>>> +            if (prop.getName().equals(name))
>>> +                return prop;
>>> +        }
>>> +        return null;
>>> +    }
>>> +
>>> +    /**
>>> +     * Import a property from another instance.
>>> +     *
>>> +     * @return the newly added property
>>> +     */
>>> +    public Property addProperty(Property p) {
>>> +        Property prop = addProperty(p.getName());
>>> +        prop.setValue(p.getValue());
>>> +        return prop;
>>> +    }
>>> +
>>> +    /**
>>> +     * Add a new property.
>>> +     */
>>> +    public Property addProperty(String name) {
>>> +        Property prop = new Property(this);
>>> +        prop.setName(name);
>>> +        if (_properties == null)
>>> +            _properties = new ArrayList();
>>> +        _properties.add(prop);
>>> +        return prop;
>>> +    }
>>> +
>>> +    /**
>>> +     * Clear all annotation properties.
>>> +     */
>>> +    public void clearProperties() {
>>> +        if (_properties == null)
>>> +            return;
>>> +        for (int i = 0; i < _properties.size(); i++)
>>> +            ((Property) _properties.get(i)).invalidate();
>>> +        _properties.clear();
>>> +    }
>>> +
>>> +    /**
>>> +     * Remove the given property.
>>> +     *
>>> +     * @return true if an property was removed, false otherwise
>>> +     */
>>> +    public boolean removeProperty(Property prop) {
>>> +        return prop != null && removeProperty(prop.getName());
>>> +    }
>>> +
>>> +    /**
>>> +     * Remove the property with the given name.
>>> +     *
>>> +     * @return true if a property was removed, false otherwise
>>> +     */
>>> +    public boolean removeProperty(String name) {
>>> +        if (name == null || _properties == null)
>>> +            return false;
>>> +        Property prop;
>>> +        for (int i = 0; i < _properties.size(); i++) {
>>> +            prop = (Property) _properties.get(i);
>>> +            if (prop.getName().equals(name)) {
>>> +                prop.invalidate();
>>> +                _properties.remove(i);
>>> +                return true;
>>> +            }
>>> +        }
>>> +        return false;
>>> +    }
>>> +
>>> +    public Project getProject() {
>>> +        return _owner.getProject();
>>> +    }
>>> +
>>> +    public ConstantPool getPool() {
>>> +        return _owner.getPool();
>>> +    }
>>> +
>>> +    public ClassLoader getClassLoader() {
>>> +        return _owner.getClassLoader();
>>> +    }
>>> +
>>> +    public boolean isValid() {
>>> +        return _owner != null;
>>> +    }
>>> +
>>> +    public void acceptVisit(BCVisitor visit) {
>>> +        visit.enterAnnotation(this);
>>> +        if (_properties != null)
>>> +            for (int i = 0; i < _properties.size(); i++)
>>> +                ((Property) _properties.get(i)).acceptVisit(visit);
>>> +        visit.exitAnnotation(this);
>>> +    }
>>> +
>>> +    int getLength() {
>>> +        int len = 4;
>>> +        if (_properties != null)
>>> +            for (int i = 0; i < _properties.size(); i++)
>>> +                len += ((Property) _properties.get(i)).getLength();
>>> +        return len;
>>> +    }
>>> +
>>> +    void read(DataInput in) throws IOException {
>>> +        _typeIndex = in.readUnsignedShort();
>>> +        clearProperties();
>>> +        int props = in.readUnsignedShort();
>>> +        if (props > 0) {
>>> +            if (_properties == null)
>>> +                _properties = new ArrayList(props);
>>> +            Property prop;
>>> +            for (int i = 0; i < props; i++) {
>>> +                prop = new Property(this);
>>> +                prop.read(in);
>>> +                _properties.add(prop); 
>>> +            }
>>> +        }
>>> +    }
>>> +
>>> +    void write(DataOutput out) throws IOException {
>>> +        out.writeShort(_typeIndex); 
>>> +        out.writeShort((_properties == null) ? 0 : _properties.size());
>>> +        if (_properties != null) {
>>> +            for (int i = 0; i < _properties.size(); i++)
>>> +                ((Property) _properties.get(i)).write(out);
>>> +        }
>>> +    }
>>> +
>>> +    /**
>>> +     * An annotation property.
>>> +     */
>>> +    public static class Property implements BCEntity, VisitAcceptor {
>>> +        private Annotation _owner = null;
>>> +        private int _nameIndex = 0;
>>> +        private final Value _value = new Value();
>>> +        private Value[] _values = null;
>>> +
>>> +        Property(Annotation owner) {
>>> +            _owner = owner;
>>> +        }
>>> +
>>> +        /**
>>> +         * The owning annotation.
>>> +         */
>>> +        public Annotation getAnnotation() {
>>> +            return _owner;
>>> +        }
>>> +
>>> +        void invalidate() {
>>> +            _owner = null;
>>> +        }
>>> +
>>> +        /**
>>> +         * Return the index in the class {...@link ConstantPool} of the
>>> +         * {...@link UTF8Entry} holding the name of this property.
>>> +         */
>>> +        public int getNameIndex() {
>>> +            return _nameIndex;
>>> +        }
>>> +
>>> +        /**
>>> +         * Set the index in the class {...@link ConstantPool} of the
>>> +         * {...@link UTF8Entry} holding the name of this property.
>>> +         */
>>> +        public void setNameIndex(int index) {
>>> +            _nameIndex = index;
>>> +        }
>>> +
>>> +        /**
>>> +         * Return the name of this property.
>>> +         */
>>> +        public String getName() {
>>> +            return ((UTF8Entry)
>>> getPool().getEntry(_nameIndex)).getValue();
>>> +        }
>>> +
>>> +        /**
>>> +         * Set the name of this property.
>>> +         */
>>> +        public void setName(String name) {
>>> +            _nameIndex = getPool().findUTF8Entry(name, true);
>>> +        }
>>> +
>>> +        /**
>>> +         * Return the value of the property as its wrapper type.
>>> +         * Returns class values as the class name.
>>> +         */
>>> +        public Object getValue() {
>>> +            if (_values == null)
>>> +                return getValue(_value);
>>> +            Object[] vals = new Object[_values.length];
>>> +            for (int i = 0; i < vals.length; i++)
>>> +                vals[i] = getValue(_values[i]);
>>> +            return vals;
>>> +        }
>>> +
>>> +        /**
>>> +         * Extract the Java value.
>>> +         */
>>> +        private Object getValue(Value val) {
>>> +            if (val.index == -1)
>>> +                return val.value;
>>> +
>>> +            Object o = ((ConstantEntry) getPool().getEntry(val.index)).
>>> +                getConstant();
>>> +            if (val.index2 != -1) {
>>> +                // enum value
>>> +                String e = getProject().getNameCache().
>>> +                    getExternalForm((String) o, false);
>>> +                String name = ((UTF8Entry)
>>> getPool().getEntry(val.index2)).
>>> +                    getValue();
>>> +                try {
>>> +                    Class cls = Class.forName(e, true,
>>> getClassLoader());  
>>> +                    return ENUM_VALUEOF.invoke(null, new Object[] {cls,
>>> name});
>>> +                } catch (Throwable t) {
>>> +                    return e + "." + name;
>>> +                } 
>>> +            }
>>> +            if (val.type == null)
>>> +                return o;
>>> +
>>> +            switch (val.type.getName().charAt(0)) {
>>> +            case 'b': 
>>> +                if (val.type == boolean.class)
>>> +                    return (((Number) o).intValue() != 0) ? Boolean.TRUE
>>> +                        : Boolean.FALSE;
>>> +                return new Byte(((Number) o).byteValue());
>>> +            case 'c':
>>> +                return new Character((char) ((Number) o).intValue());
>>> +            case 'j': // java.lang.Class
>>> +                return
>>> getProject().getNameCache().getExternalForm((String) o, 
>>> +                    false);
>>> +            case 's':
>>> +                return new Short(((Number) o).shortValue());
>>> +            default:
>>> +                return o;
>>> +            }
>>> +        }
>>> +
>>> +        /**
>>> +         * Set value of this property. The value should be an instance
>>> of any
>>> +         * primitive wrapper type, String, Class, BCClass, an enum
>>> constant,
>>> +         * an annotation, or an array of any of these types.
>>> +         */
>>> +        public void setValue(Object value) {
>>> +            if (!value.getClass().isArray()) {
>>> +                _values = null;
>>> +                setValue(_value, value);
>>> +            } else {
>>> +                _value.value = null;
>>> +                _values = new Value[Array.getLength(value)];
>>> +                for (int i = 0; i < _values.length; i++) {
>>> +                    _values[i] = new Value();
>>> +                    setValue(_values[i], Array.get(value, i));
>>> +                } 
>>> +            }
>>> +        }
>>> +
>>> +        /**
>>> +         * Set the given value.
>>> +         */
>>> +        private void setValue(Value val, Object o) {
>>> +            if (o instanceof String) 
>>> +                setValue(val, (String) o);
>>> +            else if (o instanceof Boolean)
>>> +                setValue(val, ((Boolean) o).booleanValue());
>>> +            else if (o instanceof Byte)
>>> +                setValue(val, ((Byte) o).byteValue());
>>> +            else if (o instanceof Character)
>>> +                setValue(val, ((Character) o).charValue());
>>> +            else if (o instanceof Double)
>>> +                setValue(val, ((Double) o).doubleValue());
>>> +            else if (o instanceof Float)
>>> +                setValue(val, ((Float) o).floatValue());
>>> +            else if (o instanceof Integer)
>>> +                setValue(val, ((Integer) o).intValue());
>>> +            else if (o instanceof Long)
>>> +                setValue(val, ((Long) o).longValue());
>>> +            else if (o instanceof Short)
>>> +                setValue(val, ((Short) o).shortValue());
>>> +            else if (o instanceof Class)
>>> +                setClassNameValue(val, ((Class) o).getName());
>>> +            else if (o instanceof BCClass)
>>> +                setClassNameValue(val, ((BCClass) o).getName());
>>> +            else if (o instanceof Annotation)
>>> +                setValue(val, (Annotation) o);
>>> +            else {
>>> +                String name = getEnumName(o);
>>> +                if (name != null) {
>>> +                    String type = getProject().getNameCache().
>>> +                        getInternalForm(o.getClass().getName(), true);
>>> +                    val.index = getPool().findUTF8Entry(type, true);
>>> +                    val.index2 = getPool().findUTF8Entry(name, true);
>>> +                    val.value = null;
>>> +                    val.type = null;
>>> +                } else {
>>> +                    val.index = -1;
>>> +                    val.index2 = -1;
>>> +                    val.value = o;
>>> +                    val.type = o.getClass();
>>> +                }
>>> +            }
>>> +        }
>>> +
>>> +        /**
>>> +         * Return the name of this enum value, or null if not an enum.
>>> +         */
>>> +        private static String getEnumName(Object o) {
>>> +            for (Class c = o.getClass(); true; c = c.getSuperclass()) {
>>> +                if (c == Object.class || c == null)
>>> +                    return null;
>>> +                if ("java.lang.Enum".equals(c.getName()))
>>> +                    break;
>>> +            }
>>> +            try {
>>> +                return (String) ENUM_NAME.invoke(o, (Object[]) null);
>>> +            } catch (Throwable t) {
>>> +                return o.toString();
>>> +            }
>>> +        }
>>> +
>>> +        /**
>>> +         * Return the string value of this property, or null if not set.
>>> +         */
>>> +        public String getStringValue() {
>>> +            return (String) getValue();
>>> +        }
>>> +
>>> +        /**
>>> +         * Return the boolean value of this property, or false if not
>>> set.
>>> +         */
>>> +        public boolean getBooleanValue() {
>>> +            Object value = getValue();
>>> +            return (value == null) ? false : ((Boolean)
>>> value).booleanValue();
>>> +        }
>>> +
>>> +        /**
>>> +         * Return the byte value of this property, or false if not set.
>>> +         */
>>> +        public byte getByteValue() {
>>> +            Object value = getValue();
>>> +            return (value == null) ? (byte) 0 : ((Number)
>>> value).byteValue();
>>> +        }
>>> +
>>> +        /**
>>> +         * Return the int value of this property, or 0 if not set.
>>> +         */
>>> +        public int getIntValue() {
>>> +            Object value = getValue();
>>> +            return (value == null) ? 0 : ((Number) value).intValue();
>>> +        }
>>> +
>>> +        /**
>>> +         * Return the long value of this property, or 0 if not set.
>>> +         */
>>> +        public long getLongValue() {
>>> +            Object value = getValue();
>>> +            return (value == null) ? 0L : ((Number) value).longValue();
>>> +        }
>>> +
>>> +        /**
>>> +         * Return the float value of this property, or 0 if not set.
>>> +         */
>>> +        public float getFloatValue() {
>>> +            Object value = getValue();
>>> +            return (value == null) ? 0F : ((Number) value).floatValue();
>>> +        }
>>> +
>>> +        /**
>>> +         * Return the double value of this property, or 0 if not set.
>>> +         */
>>> +        public double getDoubleValue() {
>>> +            Object value = getValue();
>>> +            return (value == null) ? 0D : ((Number)
>>> value).doubleValue();
>>> +        }
>>> +
>>> +        /**
>>> +         * Return the short value of this property, or 0 if not set.
>>> +         */
>>> +        public short getShortValue() {
>>> +            Object value = getValue();
>>> +            return (value == null) ? (short) 0 : ((Number)
>>> value).shortValue();
>>> +        }
>>> +
>>> +        /**
>>> +         * Return the class value of this property, or null if not set.
>>> +         */
>>> +        public String getClassNameValue() {
>>> +            return (String) getValue();
>>> +        }
>>> +
>>> +        /**
>>> +         * Return the annotation value of this property, or null if not
>>> set.
>>> +         */
>>> +        public Annotation getAnnotationValue() {
>>> +            return (Annotation) getValue();
>>> +        }
>>> +
>>> +        /**
>>> +         * Set the string value of this property.
>>> +         */
>>> +        public void setValue(String value) {
>>> +            _values = null;
>>> +            setValue(_value, value);
>>> +        }
>>> +
>>> +        /**
>>> +         * Set the string value of this property.
>>> +         */
>>> +        private void setValue(Value val, String o) {
>>> +            val.index = getPool().findUTF8Entry(o, true);
>>> +            val.index2 = -1;
>>> +            val.value = null;
>>> +            val.type = null;
>>> +        }
>>> +
>>> +        /**
>>> +         * Set the boolean value of this property.
>>> +         */
>>> +        public void setValue(boolean value) {
>>> +            _values = null;
>>> +            setValue(_value, value);
>>> +        }
>>> +
>>> +        /**
>>> +         * Set the boolean value of this property.
>>> +         */
>>> +        private void setValue(Value val, boolean o) {
>>> +            setValue(val, (o) ? 1 : 0);
>>> +            val.type = boolean.class;
>>> +        }
>>> +
>>> +        /**
>>> +         * Set the byte value of this property.
>>> +         */
>>> +        public void setValue(byte value) {
>>> +            _values = null;
>>> +            setValue(_value, value);
>>> +        }
>>> +
>>> +        /**
>>> +         * Set the byte value of this property.
>>> +         */
>>> +        private void setValue(Value val, byte o) {
>>> +            setValue(val, (int) o);
>>> +            val.type = byte.class;
>>> +        }
>>> +
>>> +        /**
>>> +         * Set the int value of this property.
>>> +         */
>>> +        public void setValue(int value) {
>>> +            _values = null;
>>> +            setValue(_value, value);
>>> +        }
>>> +
>>> +        /**
>>> +         * Set the int value of this property.
>>> +         */
>>> +        private void setValue(Value val, int o) {
>>> +            val.index = getPool().findIntEntry(o, true);
>>> +            val.index2 = -1;
>>> +            val.value = null;
>>> +            val.type = null;
>>> +        }
>>> +
>>> +        /**
>>> +         * Set the long value of this property.
>>> +         */
>>> +        public void setValue(long value) {
>>> +            _values = null;
>>> +            setValue(_value, value);
>>> +        }
>>> +
>>> +        /**
>>> +         * Set the long value of this property.
>>> +         */
>>> +        private void setValue(Value val, long o) {
>>> +            val.index = getPool().findLongEntry(o, true);
>>> +            val.index2 = -1;
>>> +            val.value = null;
>>> +            val.type = null;
>>> +        }
>>> +
>>> +        /**
>>> +         * Set the float value of this property.
>>> +         */
>>> +        public void setValue(float value) {
>>> +            _values = null;
>>> +            setValue(_value, value);
>>> +        }
>>> +
>>> +        /**
>>> +         * Set the float value of this property.
>>> +         */
>>> +        private void setValue(Value val, float o) {
>>> +            val.index = getPool().findFloatEntry(o, true);
>>> +            val.index2 = -1;
>>> +            val.value = null;
>>> +            val.type = null;
>>> +        }
>>> +
>>> +        /**
>>> +         * Set the double value of this property.
>>> +         */
>>> +        public void setValue(double value) {
>>> +            _values = null;
>>> +            setValue(_value, value);
>>> +        }
>>> +
>>> +        /**
>>> +         * Set the double value of this property.
>>> +         */
>>> +        private void setValue(Value val, double o) {
>>> +            val.index = getPool().findDoubleEntry(o, true);
>>> +            val.index2 = -1;
>>> +            val.value = null;
>>> +            val.type = null;
>>> +        }
>>> +
>>> +        /**
>>> +         * Set the short value of this property.
>>> +         */
>>> +        public void setValue(short value) {
>>> +            _values = null;
>>> +            setValue(_value, value);
>>> +        }
>>> +
>>> +        /**
>>> +         * Set the short value of this property.
>>> +         */
>>> +        private void setValue(Value val, short o) {
>>> +            setValue(val, (int) o);
>>> +            val.type = short.class;
>>> +        }
>>> +
>>> +        /**
>>> +         * Set the class value of this property.
>>> +         */
>>> +        public void setValue(Class value) {
>>> +            setClassNameValue(value.getName());
>>> +        }
>>> +
>>> +        /**
>>> +         * Set the class value of this property.
>>> +         */
>>> +        public void setValue(BCClass value) {
>>> +            setClassNameValue(value.getName());
>>> +        }
>>> +
>>> +        /**
>>> +         * Set the class value of this property.
>>> +         */
>>> +        public void setClassNameValue(String value) {
>>> +            _values = null;
>>> +            setClassNameValue(_value, value);
>>> +        }
>>> +
>>> +        /**
>>> +         * Set the class value of this property.
>>> +         */
>>> +        private void setClassNameValue(Value val, String o) {
>>> +            o = getProject().getNameCache().getInternalForm(o, true);
>>> +            val.index = getPool().findUTF8Entry(o, true);
>>> +            val.index2 = -1;
>>> +            val.value = null;
>>> +            val.type = Class.class;
>>> +        }
>>> +
>>> +        /**
>>> +         * Set the annotation value of this property by importing the
>>> given
>>> +         * annotation from another instance.
>>> +         */
>>> +        public Annotation setValue(Annotation value) {
>>> +            _values = null;
>>> +            return setValue(_value, value);
>>> +        }
>>> +
>>> +        /**
>>> +         * Set the annotation value of this property by importing the
>>> given
>>> +         * annotation from another instance.
>>> +         */
>>> +        private Annotation setValue(Value val, Annotation o) {
>>> +            Annotation anno = new Annotation(this);
>>> +            anno.setType(o.getTypeName());
>>> +            anno.setProperties(o.getProperties());
>>> +            val.index = -1;
>>> +            val.index2 = -1;
>>> +            val.value = anno;
>>> +            val.type = null;
>>> +            return anno;
>>> +        }
>>> +
>>> +        /**
>>> +         * Set the annotation value of this property by importing the
>>> given
>>> +         * annotation from another instance.
>>> +         */
>>> +        public Annotation[] setValue(Annotation[] value) {
>>> +            _value.value = null;
>>> +            _values = new Value[value.length];
>>> +            Annotation[] ret = new Annotation[value.length];
>>> +            for (int i = 0; i < _values.length; i++) {
>>> +                _values[i] = new Value();
>>> +                ret[i] = setValue(_values[i], value[i]);
>>> +            }
>>> +            return ret;
>>> +        }
>>> +
>>> +        /**
>>> +         * Set this property value to a new annotation of the given
>>> type, 
>>> +         * returning the annotation for manipulation.
>>> +         */
>>> +        public Annotation newAnnotationValue(Class type) {
>>> +            return newAnnotationValue(type.getName());
>>> +        }
>>> +
>>> +        /**
>>> +         * Set this property value to a new annotation of the given
>>> type, 
>>> +         * returning the annotation for manipulation.
>>> +         */
>>> +        public Annotation newAnnotationValue(BCClass type) {
>>> +            return newAnnotationValue(type.getName());
>>> +        }
>>> +
>>> +        /**
>>> +         * Set this property value to a new annotation of the given
>>> type, 
>>> +         * returning the annotation for manipulation.
>>> +         */
>>> +        public Annotation newAnnotationValue(String type) {
>>> +            Annotation anno = new Annotation(this);
>>> +            anno.setType(type);
>>> +            _values = null;
>>> +            _value.index = -1;
>>> +            _value.index2 = -1;
>>> +            _value.value = anno;
>>> +            _value.type = null;
>>> +            return anno;
>>> +        }
>>> +
>>> +        /**
>>> +         * Set this property value to a new annotation array of the
>>> given type
>>> +         * and length, returning the annotations for manipulation.
>>> +         */
>>> +        public Annotation[] newAnnotationArrayValue(Class type, int
>>> length) {
>>> +            return newAnnotationArrayValue(type.getName(), length);
>>> +        }
>>> +
>>> +        /**
>>> +         * Set this property value to a new annotation array of the
>>> given type
>>> +         * and length, returning the annotations for manipulation.
>>> +         */
>>> +        public Annotation[] newAnnotationArrayValue(BCClass type, int
>>> length) {
>>> +            return newAnnotationArrayValue(type.getName(), length);
>>> +        }
>>> +
>>> +        /**
>>> +         * Set this property value to a new annotation array of the
>>> given type
>>> +         * and length, returning the annotations for manipulation.
>>> +         */
>>> +        public Annotation[] newAnnotationArrayValue(String type, int
>>> length) {
>>> +            _value.value = null;
>>> +            _values = new Value[length]; 
>>> +            Annotation[] ret = new Annotation[length];
>>> +            for (int i = 0; i < length; i++) {
>>> +                ret[i] = new Annotation(this);
>>> +                ret[i].setType(type);
>>> +                _values[i] = new Value();
>>> +                _values[i].index = -1;
>>> +                _values[i].index2 = -1;
>>> +                _values[i].value = ret[i];
>>> +                _values[i].type = null;
>>> +            }
>>> +            return ret;
>>> +        }
>>> +
>>> +        public Project getProject() {
>>> +            return _owner.getProject();
>>> +        }
>>> +
>>> +        public ConstantPool getPool() {
>>> +            return _owner.getPool();
>>> +        }
>>> +
>>> +        public ClassLoader getClassLoader() {
>>> +            return _owner.getClassLoader();
>>> +        }
>>> +
>>> +        public boolean isValid() {
>>> +            return _owner != null && (_values != null || _value.index !=
>>> -1
>>> +                || _value.value != null);
>>> +        }
>>> +
>>> +        public void acceptVisit(BCVisitor visit) {
>>> +            visit.enterAnnotationProperty(this);
>>> +            visit.exitAnnotationProperty(this);
>>> +        }
>>> +
>>> +        int getLength() {
>>> +            if (!isValid())
>>> +                throw new IllegalStateException();
>>> +
>>> +            int len = 2; // name
>>> +            if (_values == null)
>>> +                len += getLength(_value);
>>> +            else {
>>> +                len += 3; // arr length + tag
>>> +                for (int i = 0; i < _values.length; i++)
>>> +                    len += getLength(_values[i]);
>>> +            }
>>> +            return len;
>>> +        }
>>> +
>>> +        /**
>>> +         * Return the length of the given value.
>>> +         */
>>> +        private int getLength(Value val) {
>>> +            if (val.index2 != -1)
>>> +                return 5; // tag + enum type + enum name
>>> +            if (val.index != -1)
>>> +                return 3; // tag + constant or class
>>> +            return 1 + ((Annotation) val.value).getLength(); // tag +
>>> anno
>>> +        }
>>> +
>>> +        void read(DataInput in) throws IOException {
>>> +            _nameIndex = in.readUnsignedShort(); 
>>> +            int tag = in.readByte();
>>> +            if (tag == '[') {
>>> +                int len = in.readUnsignedShort();
>>> +                _values = new Value[len];
>>> +                for (int i = 0; i < len; i++) {
>>> +                    _values[i] = new Value();
>>> +                    read(_values[i], in.readByte(), in); 
>>> +                }
>>> +            } else
>>> +                read(_value, tag, in);
>>> +        }
>>> +
>>> +        /**
>>> +         * Read data into the given value.
>>> +         */
>>> +        private void read(Value val, int tag, DataInput in) throws
>>> IOException {
>>> +            switch (tag) {
>>> +            case 'B':
>>> +                val.index = in.readUnsignedShort();
>>> +                val.index2 = -1;
>>> +                val.value = null;
>>> +                val.type = byte.class;
>>> +                break;
>>> +            case 'C':
>>> +                val.index = in.readUnsignedShort();
>>> +                val.index2 = -1;
>>> +                val.value = null;
>>> +                val.type = char.class;
>>> +                break;
>>> +            case 'D':
>>> +            case 'F':
>>> +            case 'I':
>>> +            case 'J':
>>> +            case 'S':
>>> +            case 's':
>>> +                val.index = in.readUnsignedShort();
>>> +                val.index2 = -1;
>>> +                val.value = null;
>>> +                val.type = null;
>>> +                break;
>>> +            case 'Z':
>>> +                val.index = in.readUnsignedShort();
>>> +                val.index2 = -1;
>>> +                val.value = null;
>>> +                val.type = boolean.class;
>>> +                break;
>>> +            case 'c':
>>> +                val.index = in.readUnsignedShort();
>>> +                val.index2 = -1;
>>> +                val.value = null;
>>> +                val.type = Class.class;
>>> +                break;
>>> +            case 'e':
>>> +                val.index = in.readUnsignedShort();
>>> +                val.index2 = in.readUnsignedShort();
>>> +                val.value = null;
>>> +                val.type = null;
>>> +                break;
>>> +            case '@':
>>> +                Annotation anno = new Annotation(this);
>>> +                anno.read(in);
>>> +                val.index = -1;
>>> +                val.index2 = -1;
>>> +                val.value = anno;
>>> +                val.type = null;
>>> +                break;
>>> +            default:
>>> +                throw new IllegalStateException(String.valueOf(tag));
>>> +            }
>>> +        }
>>> +
>>> +        void write(DataOutput out) throws IOException {
>>> +            if (!isValid())
>>> +                throw new IllegalStateException();
>>> +
>>> +            out.writeShort(_nameIndex);
>>> +            if (_values == null)
>>> +                write(_value, out);
>>> +            else {
>>> +                out.writeByte('[');
>>> +                out.writeShort(_values.length);
>>> +                for (int i = 0; i < _values.length; i++)
>>> +                    write(_values[i], out);
>>> +            }
>>> +        }
>>> +
>>> +        /**
>>> +         * Write the data for the given value to the stream.
>>> +         */
>>> +        private void write(Value val, DataOutput out) throws IOException
>>> {
>>> +            if (val.index2 != -1) {
>>> +                out.writeByte('e');
>>> +                out.writeShort(val.index);
>>> +                out.writeShort(val.index2);
>>> +            } else if (val.index != -1) {
>>> +                if (val.type != null) {
>>> +                    switch (val.type.getName().charAt(0)) {
>>> +                    case 'b':
>>> +                        if (val.type == byte.class)
>>> +                            out.writeByte('B');
>>> +                        else 
>>> +                            out.writeByte('Z');
>>> +                        break;
>>> +                    case 'c':
>>> +                        out.writeByte('C');
>>> +                        break;
>>> +                    case 'j': // java.lang.Class
>>> +                        out.writeByte('c');
>>> +                        break;
>>> +                    case 's':
>>> +                        out.writeByte('S');
>>> +                        break;
>>> +                    default:
>>> +                        throw new
>>> IllegalStateException(val.type.getName());
>>> +                    }
>>> +                } else {
>>> +                    Entry entry = getPool().getEntry(val.index);
>>> +                    if (entry instanceof DoubleEntry) 
>>> +                        out.writeByte('D');
>>> +                    else if (entry instanceof FloatEntry)
>>> +                        out.writeByte('F');
>>> +                    else if (entry instanceof IntEntry)
>>> +                        out.writeByte('I');
>>> +                    else if (entry instanceof LongEntry)
>>> +                        out.writeByte('J');
>>> +                    else if (entry instanceof UTF8Entry)
>>> +                        out.writeByte('s');
>>> +                    else
>>> +                        throw new
>>> IllegalStateException(entry.getClass().
>>> +                            getName());
>>> +                }
>>> +                out.writeShort(val.index);
>>> +            } else {
>>> +                out.writeByte('@');
>>> +                ((Annotation) val.value).write(out);
>>> +            }
>>> +        }
>>> +
>>> +        /**
>>> +         * Property value struct.
>>> +         */ 
>>> +        private static class Value {
>>> +            public int index = -1;
>>> +            public int index2 = -1;
>>> +            public Class type = null;
>>> +            public Object value = null;
>>> +        }
>>> +    }
>>> +}
>>>
>>> Propchange: labs/fluid/src/main/java/serp/bytecode/Annotation.java
>>> ------------------------------------------------------------------------------
>>>     svn:eol-style = native
>>>
>>> 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=886691&r1=886690&r2=886691&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
>>> Thu Dec  3 07:41:56 2009
>>> @@ -1,3 +1,8 @@
>>> +generate-unenhanced: Generating dynamic Java class {0} using classloader
>>> {1} child of {2}.
>>> +generate-enhanced: Enhancing dynamic Java class {0} using classloader
>>> {1} child of {2}.
>>> +load-enhanced: Loaded dynamic, enhanced Java class {0} into JVM using
>>> classloader {1} child of {2}.
>>> +load-enhanced-error: Error while loading dynamic, enhanced Java class
>>> {0} into JVM using classloader {1} child of {2}.
>>> +
>>>  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}"
>>>
>>> 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=886691&r1=886690&r2=886691&view=diff
>>> ==============================================================================
>>> --- labs/fluid/src/test/java/example/basic/TestCRUD.java (original)
>>> +++ labs/fluid/src/test/java/example/basic/TestCRUD.java Thu Dec  3
>>> 07:41:56 2009
>>> @@ -13,8 +13,7 @@
>>>  import test.common.AbstractSDOTest;
>>>  
>>>  /**
>>> - * Test basic CRUD operation with a simpleton Type that has no relation
>>> but
>>> - * primitive properties.
>>> + * Test basic CRUD operation with a simpleton SDO Type that has no
>>> relation but primitive properties.
>>>   *  
>>>   * @author Pinaki Poddar
>>>   *
>>> @@ -99,9 +98,10 @@
>>>                     dataObject.setString("firstName", "Ron");
>>>                     em.getTransaction().begin();
>>>                     DataObject merged = em.merge(dataObject);
>>> -                   int v1 = ImplHelper.getVersion(merged);
>>> -                   assertTrue(v1>v0);
>>> +                   assertNotSame(merged, dataObject);
>>>                     em.getTransaction().commit();
>>> +            int v1 = ImplHelper.getVersion(merged);
>>> +            assertTrue(v1>v0);
>>>                     assertEquals("Ron", merged.getString("firstName"));
>>>                     int after = count("Person");
>>>                     assertEquals(before, after);
>>> @@ -138,7 +138,7 @@
>>>      */
>>>     // START SNIPPET:createPerson
>>>     DataObject createPerson(String ssn, String first, String last, int age)
>>> {
>>> -           Type type = getType("Person");
>>> +           Type type = getSDOType("Person");
>>>             DataObject data = DataFactory.INSTANCE.create(type);
>>>             data.set("ssn", ssn);
>>>             data.setString("firstName", first);
>>>
>>> Added: labs/fluid/src/test/java/example/basic/TestConfiguration.java
>>> URL:
>>> http://svn.apache.org/viewvc/labs/fluid/src/test/java/example/basic/TestConfiguration.java?rev=886691&view=auto
>>> ==============================================================================
>>> --- labs/fluid/src/test/java/example/basic/TestConfiguration.java (added)
>>> +++ labs/fluid/src/test/java/example/basic/TestConfiguration.java Thu Dec 
>>> 3 07:41:56 2009
>>> @@ -0,0 +1,27 @@
>>> +package example.basic;
>>> +
>>> +import javax.persistence.EntityManager;
>>> +
>>> +import org.apache.openjpa.persistence.test.SingleEMFTestCase;
>>> +import org.apache.openjpa.sdo.SDODynamicClassResolver;
>>> +import org.apache.openjpa.sdo.SDOEntityManager;
>>> +import org.apache.openjpa.sdo.SDOEntityManagerFactory;
>>> +
>>> +import test.common.AbstractSDOTest;
>>> +
>>> +public class TestConfiguration extends AbstractSDOTest {
>>> +    public void testEntityManagerFactory() {
>>> +        assertNotNull(emf);
>>> +        assertTrue(emf instanceof SDOEntityManagerFactory);
>>> +    }
>>> +    
>>> +    public void testEntityManager() {
>>> +        EntityManager em = emf.createEntityManager();
>>> +        assertNotNull(em);
>>> +        assertTrue(em instanceof SDOEntityManager);
>>> +    }
>>> +    
>>> +    public void testClassResolver() {
>>> +      assertTrue(emf.getConfiguration().getClassResolverInstance()
>>> instanceof SDODynamicClassResolver);
>>> +    }
>>> +}
>>>
>>> Propchange: labs/fluid/src/test/java/example/basic/TestConfiguration.java
>>> ------------------------------------------------------------------------------
>>>     svn:eol-style = native
>>>
>>> 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=886691&r1=886690&r2=886691&view=diff
>>> ==============================================================================
>>> --- labs/fluid/src/test/java/example/basic/TestRelation.java (original)
>>> +++ labs/fluid/src/test/java/example/basic/TestRelation.java Thu Dec  3
>>> 07:41:56 2009
>>> @@ -149,8 +149,7 @@
>>>      * 
>>>      */
>>>     DataObject createPurchaseOrder() {
>>> -           DataObject purchaseOrder = DataFactory.INSTANCE.create(
>>> -                           getType("PurchaseOrderType"));
>>> +           DataObject purchaseOrder =
>>> DataFactory.INSTANCE.create(getSDOType("PurchaseOrderType"));
>>>  
>>>             purchaseOrder.setString("orderDate", "1999-10-20");
>>>  
>>>
>>> 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=886691&r1=886690&r2=886691&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 Thu Dec 
>>> 3 07:41:56 2009
>>> @@ -37,20 +37,20 @@
>>>  public class TestSDO extends AbstractSDOTest {
>>>     
>>>     public void testPackage() {
>>> -           Type addressType = getType("USAddress");
>>> +           Type addressType = getSDOType("USAddress");
>>>             assertNotNull(addressType);
>>>             String pkg = ImplHelper.getPackageName(addressType);
>>>             assertEquals("example.domain",pkg);
>>>     }
>>>     
>>>     public void testInstanceClassIsNullForUserType() {
>>> -           Type addressType = getType("USAddress");
>>> +           Type addressType = getSDOType("USAddress");
>>>             assertFalse(addressType.isDataType());
>>>             assertNull(addressType.getInstanceClass());
>>>     }
>>>     
>>>     public void testIdentityType() {
>>> -           Type poType = getType("PurchaseOrderType");
>>> +           Type poType = getSDOType("PurchaseOrderType");
>>>             assertNotNull(poType);
>>>             Property id2 = ImplHelper.getIdentityProperty(poType);
>>>             assertNotNull(id2);
>>> @@ -64,8 +64,7 @@
>>>      * 
>>>      */
>>>     public void testCreateModel() {
>>> -           DataObject purchaseOrder = DataFactory.INSTANCE.create(
>>> -                           getType("PurchaseOrderType"));
>>> +           DataObject purchaseOrder =
>>> DataFactory.INSTANCE.create(getSDOType("PurchaseOrderType"));
>>>  
>>>             purchaseOrder.setString("orderDate", "1999-10-20");
>>>  
>>>
>>> Modified:
>>> labs/fluid/src/test/java/org/apache/openjpa/sdo/TestSourceCode.java
>>> URL:
>>> http://svn.apache.org/viewvc/labs/fluid/src/test/java/org/apache/openjpa/sdo/TestSourceCode.java?rev=886691&r1=886690&r2=886691&view=diff
>>> ==============================================================================
>>> --- labs/fluid/src/test/java/org/apache/openjpa/sdo/TestSourceCode.java
>>> (original)
>>> +++ labs/fluid/src/test/java/org/apache/openjpa/sdo/TestSourceCode.java
>>> Thu Dec  3 07:41:56 2009
>>> @@ -90,20 +90,20 @@
>>>             }
>>>     }
>>>     
>>> -   public void testDuplicateMethod() {
>>> -           SourceCode code = new SourceCode("some.pkg", "SomeClass");
>>> -           try {
>>> -                   code.addMethod("add", "int")
>>> -                       .makePublic()
>>> -                       .makeStatic()
>>> -                       .addArgument("int", "a")
>>> -                       .addArgument("int", "b");
>>> -                   code.addMethod("add", "float")
>>> -                       .addArgument("int", "a")
>>> -                       .addArgument("int", "b");
>>> -                   fail("Expected DuplicateField exception");
>>> -           } catch (IllegalArgumentException e) {
>>> -                   //good
>>> -           }
>>> -   }
>>> +// public void testDuplicateMethod() {
>>> +//         SourceCode code = new SourceCode("some.pkg", "SomeClass");
>>> +//         try {
>>> +//                 code.addMethod("add", "int")
>>> +//                     .makePublic()
>>> +//                     .makeStatic()
>>> +//                     .addArgument("int", "a")
>>> +//                     .addArgument("int", "b");
>>> +//                 code.addMethod("add", "float")
>>> +//                     .addArgument("int", "a")
>>> +//                     .addArgument("int", "b");
>>> +//                 fail("Expected DuplicateField exception");
>>> +//         } catch (IllegalArgumentException e) {
>>> +//                 //good
>>> +//         }
>>> +// }
>>>  }
>>>
>>> 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=886691&r1=886690&r2=886691&view=diff
>>> ==============================================================================
>>> --- labs/fluid/src/test/java/test/common/AbstractSDOTest.java (original)
>>> +++ labs/fluid/src/test/java/test/common/AbstractSDOTest.java Thu Dec  3
>>> 07:41:56 2009
>>> @@ -25,16 +25,15 @@
>>>  import junit.framework.TestCase;
>>>  
>>>  import org.apache.openjpa.meta.MetaDataFactory;
>>> -import org.apache.openjpa.meta.MetaDataRepository;
>>>  import org.apache.openjpa.persistence.OpenJPAEntityManager;
>>>  import org.apache.openjpa.sdo.SDOEntityManagerFactory;
>>> -import org.apache.openjpa.sdo.SDOMappingRepository;
>>>  import org.apache.openjpa.sdo.SDOMetaDataFactory;
>>> +import org.apache.openjpa.sdo.SDOTypeParser;
>>>  
>>>  import commonj.sdo.Type;
>>>  
>>>  /**
>>> - * Abstract Test case sets up JPA persitence unt and SDO metadata from
>>> XML
>>> + * Abstract Test case sets up JPA persistence unit and SDO meta data
>>> from XML
>>>   * schema.
>>>   * 
>>>   * @author Pinaki Poddar
>>> @@ -42,7 +41,7 @@
>>>   */
>>>  public abstract class AbstractSDOTest extends TestCase {
>>>     protected static SDOEntityManagerFactory emf;
>>> -   protected static SDOMappingRepository repos;
>>> +   protected static SDOMetaDataFactory repos;
>>>     
>>>     /**
>>>      * Obtain a EntityManagerFactory and initialize SDO Types.
>>> @@ -54,26 +53,24 @@
>>>                     assertNotNull(tmp);
>>>                     assertTrue(tmp instanceof SDOEntityManagerFactory);
>>>                     emf = (SDOEntityManagerFactory)tmp;
>>> +                   emf.createEntityManager();
>>>             }
>>>     }
>>>     
>>> -   SDOMappingRepository getRepos() {
>>> +   SDOMetaDataFactory getRepos() {
>>>             if (repos == null) {
>>>                     MetaDataFactory mdf = emf.getConfiguration()
>>>                     .getMetaDataRepositoryInstance().getMetaDataFactory();
>>>                     assertTrue(mdf instanceof SDOMetaDataFactory);
>>> -                   repos = 
>>> ((SDOMetaDataFactory)mdf).getSDOMappingRepository();
>>> +                   repos = (SDOMetaDataFactory)mdf;
>>>             }
>>>             return repos;
>>>     }
>>>  
>>>     
>>> -   /**
>>> -    * Gets the type of given name.
>>> -    */
>>> -   protected Type getType(String name) {
>>> -           return getRepos().getType(name);
>>> -   }
>>> +    protected Type getSDOType(String name) {
>>> +        return SDOTypeParser.findType(name);
>>> +    }
>>>     
>>>     /**
>>>      * Count number of persistent instances of the given alias.
>>> @@ -88,6 +85,6 @@
>>>      * Get the name of the persistence unit to be used by this receiver.
>>>      */
>>>     protected String getPersistenceUnitName() {
>>> -           return System.getProperty("persistence.unit", "test");
>>> +           return System.getProperty("persistence.unit", "sdo");
>>>     }
>>>  }
>>>
>>> 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=886691&r1=886690&r2=886691&view=diff
>>> ==============================================================================
>>> --- labs/fluid/src/test/resources/META-INF/persistence.xml (original)
>>> +++ labs/fluid/src/test/resources/META-INF/persistence.xml Thu Dec  3
>>> 07:41:56 2009
>>> @@ -1,19 +1,29 @@
>>>  <?xml version="1.0" encoding="UTF-8"?>
>>>  <persistence xmlns="http://java.sun.com/xml/ns/persistence";
>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; version="1.0"
>>> xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
>>> http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd";>
>>> -   <persistence-unit name="test">
>>>  
>>> +   <persistence-unit name="sdo">
>>> +                   <description>
>>> +                      Persistence unit for testing Fluid.
>>> +                      The configuration properties are essentially same as 
>>> any other
>>> JPA application except
>>> +                           i) openjpa.EntityManagerFactory must be set to 
>>> "sdo" 
>>> +                      and ii) openjpa.MetaDataFactory must be set as shown 
>>> with XML
>>> schema definitions.
>>> +                      
>>> +                      Also set openjpa.DynamicEnhancementAgent to "false" 
>>> because
>>> Fluid generates the 
>>> +                      enhanced bytecode for SDO Types dynamically.
>>> +                   </description>
>>>             <properties>
>>> -                   <property name="openjpa.EntityManagerFactory" 
>>> value="sdo"/>
>>> -                   <property name="openjpa.MetaDataFactory"
>>> value="sdo(Resources=META-INF/person.xsd)"/>
>>> +                   <property name="openjpa.EntityManagerFactory"    
>>> value="sdo"/>
>>> +                   <property name="openjpa.MetaDataFactory"        
>>> value="sdo(Resources=META-INF/person.xsd;META-INF/po.xsd)"/>
>>> +                           <property 
>>> name="openjpa.DynamicEnhancementAgent" value="false"/>
>>> +                   
>>>                     <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.ConnectionURL"       
>>> value="jdbc:mysql://localhost/fluid"/>
>>> +                   <property name="openjpa.ConnectionUserName"   
>>> value="root"/>
>>> +                   <property name="openjpa.ConnectionPassword"   value=""/>
>>> +                   
>>>                     <property name="openjpa.jdbc.SynchronizeMappings"
>>> value="buildSchema"/>
>>> -                           <property name="openjpa.QueryCompilationCache" 
>>> value="false"/>
>>> -                           <property name="openjpa.Log" 
>>> value="DefaultLevel=TRACE, SQL=TRACE,
>>> Query=TRACE"/>
>>> -                   <property name="openjpa.BrokerImpl" 
>>> value="non-finalizing"/>
>>> -                           
>>> +                           <property name="openjpa.QueryCompilationCache"  
>>>   value="false"/>
>>> +                           <property name="openjpa.Log"                    
>>>  
>>> value="DefaultLevel=WARN, SQL=TRACE, Query=TRACE"/>
>>>             </properties>
>>>     </persistence-unit>
>>>  </persistence>
>>>
>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: commits-unsubscr...@labs.apache.org
>>> For additional commands, e-mail: commits-h...@labs.apache.org
>>>
>>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: labs-unsubscr...@labs.apache.org
>> For additional commands, e-mail: labs-h...@labs.apache.org
>>
>>
>>
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: labs-unsubscr...@labs.apache.org
For additional commands, e-mail: labs-h...@labs.apache.org

Reply via email to