You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by ba...@apache.org on 2002/03/10 13:32:31 UTC
cvs commit: jakarta-commons-sandbox/simplestore/src/test/org/apache/commons/simplestore TestPersistent.java TestPersistentClassType.java TestSample.java
baliuka 02/03/10 04:32:31
Modified: simplestore build.xml
simplestore/src/java/org/apache/commons/simplestore/cache/impl
SoftRefMemoryCache.java
simplestore/src/java/org/apache/commons/simplestore/persistence
MetaObject.java
simplestore/src/java/org/apache/commons/simplestore/persistence/impl
AbstractStorage.java DBStorage.java
MetaClassImpl.java PersistentProxy.java
TransactionImpl.java
simplestore/src/java/org/apache/commons/simplestore/tools
Enhancer.java
simplestore/src/test/org/apache/commons/simplestore
TestPersistent.java TestPersistentClassType.java
TestSample.java
Added: simplestore/src/java/org/apache/commons/simplestore/tools
Constants.java
Log:
Fixed a lot of bugs, new bugs added :)
Revision Changes Path
1.18 +2 -1 jakarta-commons-sandbox/simplestore/build.xml
Index: build.xml
===================================================================
RCS file: /home/cvs/jakarta-commons-sandbox/simplestore/build.xml,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -r1.17 -r1.18
--- build.xml 7 Mar 2002 14:20:27 -0000 1.17
+++ build.xml 10 Mar 2002 12:32:30 -0000 1.18
@@ -2,7 +2,7 @@
<!--
"simplestore" component of the Jakarta Commons Subproject
- $Id: build.xml,v 1.17 2002/03/07 14:20:27 froehlich Exp $
+ $Id: build.xml,v 1.18 2002/03/10 12:32:30 baliuka Exp $
-->
<!-- ========== Executable Targets ======================================== -->
@@ -130,6 +130,7 @@
<target name="test" depends="build-test" description="runs (junit) unit tests">
<java classname="${test.runner}" fork="yes" failonerror="${test.failonerror}"
maxmemory="${maxmemory}">
+ <sysproperty key="DEBUG" value="true"/>
<arg value="${test.entry}"/>
<classpath>
<pathelement path=" ${build.home}/classes" />
1.4 +3 -3 jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/cache/impl/SoftRefMemoryCache.java
Index: SoftRefMemoryCache.java
===================================================================
RCS file: /home/cvs/jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/cache/impl/SoftRefMemoryCache.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- SoftRefMemoryCache.java 9 Mar 2002 19:07:49 -0000 1.3
+++ SoftRefMemoryCache.java 10 Mar 2002 12:32:30 -0000 1.4
@@ -65,11 +65,11 @@
* baliuka@mwm.lt</a>
*@author Gerhard Froehlich <a href="mailto:g-froehlich@gmx.de">
* g-froehlich@gmx.de</a>
- *@version $Id: SoftRefMemoryCache.java,v 1.3 2002/03/09 19:07:49 baliuka Exp $
+ *@version $Id: SoftRefMemoryCache.java,v 1.4 2002/03/10 12:32:30 baliuka Exp $
*/
-public class SoftRefMemoryCache implements Cache {
+public class SoftRefMemoryCache implements Cache, org.apache.commons.simplestore.tools.Constants {
- private static boolean DEBUG = System.getProperty("DEBUG") != null;
+
private int m_current = 0;
private int m_maxStrongRefCount;
1.3 +4 -4 jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/persistence/MetaObject.java
Index: MetaObject.java
===================================================================
RCS file: /home/cvs/jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/persistence/MetaObject.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- MetaObject.java 23 Feb 2002 12:11:30 -0000 1.2
+++ MetaObject.java 10 Mar 2002 12:32:30 -0000 1.3
@@ -59,18 +59,18 @@
/**
*@author Juozas Baliuka <a href="mailto:baliuka@mwm.lt">
* baliuka@mwm.lt</a>
- *@version $Id: MetaObject.java,v 1.2 2002/02/23 12:11:30 baliuka Exp $
+ *@version $Id: MetaObject.java,v 1.3 2002/03/10 12:32:30 baliuka Exp $
*/
public interface MetaObject extends Cloneable {
public Object getOID();
- public Object getProperty(String name);
+ public Object getProperty(int index);
- public void setProperty(String name, Object value);
+ public void setProperty(int index, Object value);
- public Map getProperties();
+ public Object[] getProperties();
public Class getPersistentClass();
1.4 +25 -19 jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/persistence/impl/AbstractStorage.java
Index: AbstractStorage.java
===================================================================
RCS file: /home/cvs/jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/persistence/impl/AbstractStorage.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- AbstractStorage.java 17 Feb 2002 14:09:04 -0000 1.3
+++ AbstractStorage.java 10 Mar 2002 12:32:30 -0000 1.4
@@ -68,7 +68,7 @@
/**
*@author Juozas Baliuka <a href="mailto:baliuka@mwm.lt">
* baliuka@mwm.lt</a>
- *@version $Id: AbstractStorage.java,v 1.3 2002/02/17 14:09:04 baliuka Exp $
+ *@version $Id: AbstractStorage.java,v 1.4 2002/03/10 12:32:30 baliuka Exp $
*/
public abstract class AbstractStorage
@@ -110,8 +110,9 @@
public void commit() {
try {
- getTransaction().commit();
- internalCommit();
+ // getTransaction().commit();
+ // internalCommit();
+ throw new java.lang.NoSuchMethodError();
} catch (Throwable t) {
// TODO
t.printStackTrace();
@@ -121,8 +122,9 @@
public void begin() {
try {
- getTransaction().begin();
- internalBegin();
+ // getTransaction().begin();
+ // internalBegin();
+ throw new java.lang.NoSuchMethodError();
} catch (Throwable t) {
// TODO
throw new RuntimeException(t.getClass() + ":" + t.getMessage());
@@ -133,7 +135,7 @@
try {
//TODO implement roolback
internalRollback();
- objects.clear();
+ // objects.clear();
} catch (Throwable t) {
throw new RuntimeException(t.getClass() + ":" + t.getMessage());
}
@@ -142,8 +144,9 @@
public void rollback() {
try {
- getTransaction().rollback();
- internalRollback();
+ // getTransaction().rollback();
+ // internalRollback();
+ throw new java.lang.NoSuchMethodError();
} catch (Throwable t) {
// TODO
throw new RuntimeException(t.getClass() + ":" + t.getMessage());
@@ -152,32 +155,35 @@
}
public void commit(Set objects) {
-
+ MetaObject pp = null;
try {
+
Iterator iterator = objects.iterator();
while (iterator.hasNext()) {
- MetaObject pp = (MetaObject) iterator.next();
- if (pp.isNew()) {
+ pp = (MetaObject) iterator.next();
+ if ( pp.isNew() && !pp.isDeleted() ) {
createObject(pp);
-
+ pp.setDirty(false);
+ continue;
}
- if (pp.isDirty() && !pp.isNew()) {
+ if ( pp.isDirty() && !pp.isDeleted() ) {
storeObject(pp);
-
+ pp.setDirty(false);
+ continue;
}
- if (pp.isDeleted()) {
-
+ if ( pp.isDeleted() ) {
removeObject(pp);
+ continue;
}
- pp.setDirty(false);
+ throw new java.lang.IllegalStateException(pp.toString());
}
- objects.clear();
+ // objects.clear();
internalCommit();
} catch (Throwable t) {
// TODO
t.printStackTrace();
- throw new RuntimeException("Error");
+ throw new RuntimeException(t.getMessage() + " " + pp);
}
}
1.6 +49 -51 jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/persistence/impl/DBStorage.java
Index: DBStorage.java
===================================================================
RCS file: /home/cvs/jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/persistence/impl/DBStorage.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- DBStorage.java 9 Mar 2002 19:07:49 -0000 1.5
+++ DBStorage.java 10 Mar 2002 12:32:30 -0000 1.6
@@ -85,12 +85,12 @@
/**
*@author Juozas Baliuka <a href="mailto:baliuka@mwm.lt">
* baliuka@mwm.lt</a>
- *@version $Id: DBStorage.java,v 1.5 2002/03/09 19:07:49 baliuka Exp $
+ *@version $Id: DBStorage.java,v 1.6 2002/03/10 12:32:30 baliuka Exp $
*/
-public class DBStorage extends AbstractStorage {
+public class DBStorage extends AbstractStorage implements org.apache.commons.simplestore.tools.Constants {
- private final static boolean DEBUG = System.getProperty("DEBUG") != null;
private final static String CONNECTION = "org.apache.commons.simplestore.jdbc.DBStorage.connection";
+ //TODO : must be in MetaClass
private static Properties procedures = new Properties();
private DataSource ds;
private Context context;
@@ -108,7 +108,7 @@
public static Object toSQLType(Object object) {
if ( object == null ) {
- return null;
+ return null;
}
if (object instanceof Boolean) {
boolean value = ((Boolean) object).booleanValue();
@@ -155,26 +155,26 @@
}
- if (rs != null && eh != null) {
-
- ResultSetMetaData rsmd = rs.getMetaData();
- int cnt = rsmd.getColumnCount();
-
- while (rs.next()) {
- result++;
- for (int i = 1; i <= cnt; i++) {
- String name = rsmd.getColumnName(i);
- Object val = rs.getObject(i);
- eh.nextResult(i, name, val, rsmd.getColumnType(i));
- }
+ if (rs != null && eh != null) {
+
+ ResultSetMetaData rsmd = rs.getMetaData();
+ int cnt = rsmd.getColumnCount();
+
+ while (rs.next()) {
+ result++;
+ for (int i = 1; i <= cnt; i++) {
+ String name = rsmd.getColumnName(i);
+ Object val = rs.getObject(i);
+ eh.nextResult(i, name, val, rsmd.getColumnType(i));
}
-
}
+
+ }
} finally {
if ( rs != null ) {
- rs.close();
+ rs.close();
}
if ( statement != null ) {
statement.close();
@@ -191,7 +191,7 @@
}
-
+ //TODO : must be removed
public void registerClass(Class clasz) {
try {
@@ -210,11 +210,11 @@
}
public Object retrieveObject( final Class clasz, Object id ) throws StorageException {
-
+
Persistent result = (Persistent) context.getCache().get(id);
if (result != null) {
- return result;
+ return result;
}
@@ -223,7 +223,6 @@
final String sql = "SELECT * FROM " + mClass.getName() + " WHERE "+mClass.getOIDName()+"=?";
result = (Persistent) mClass.newInstance( id );
final MetaObject pc = result.getMetaObject();
- final Map map = pc.getProperties();
ResultSetHandler rsh =
new ResultSetHandler() {
@@ -231,13 +230,15 @@
public void nextResult(int index, String name, Object value, int type) throws StorageException {
try {
+ if ( name.equalsIgnoreCase(mClass.getOIDName())) {
+ return;
+ }
+
int propIndex = mClass.getPropertyIndex( name );
if (value != null) {
- String property = descriptors[ propIndex ].getName();
- if (name.equalsIgnoreCase(mClass.getOIDName())) {
- return;
- }
- map.put(property, value );
+
+ pc.setProperty(propIndex,value);
+
}
} catch (Throwable t) {
t.printStackTrace();
@@ -250,8 +251,8 @@
if ( excecute( sql, new Object[]{id}, rsh) == 0 ) {
throw new ObjectNotFound(pc.getOID().toString(), null);
}
-
- context.getCache().put(id, result);
+
+ context.getCache().put(id, result);
return result;
}
@@ -261,7 +262,7 @@
final MetaClass mClass = context.getMetaClass(clasz);
final String sql = "SELECT ID AS INTERNAL_OID, * FROM " + mClass.getName();
final Set objects = new HashSet();
-
+
excecute( sql, null, new QueryHandler(objects, clasz));
return objects;
@@ -285,8 +286,7 @@
final MetaClass mClass = context.getMetaClass(clasz);
final String name = mClass.getName();
final java.beans.PropertyDescriptor[] beanProps = mClass.getProperties();
- final List values = new ArrayList( beanProps.length + 1);
- final Map map = properties.getProperties();
+ final List values = new ArrayList( beanProps.length + 1 );
final StringBuffer names = new StringBuffer( beanProps.length * 10 );
@@ -294,10 +294,9 @@
java.beans.PropertyDescriptor descriptor = beanProps[i];
if (descriptor.getWriteMethod() != null) {
- Object value = toSQLType(map.get(descriptor.getName()));
names.append( mClass.getPropertyName(i) );
names.append("=?,");
- values.add(value);
+ values.add(toSQLType(properties.getProperty(i)));
}
}
@@ -308,7 +307,7 @@
final String sql = "UPDATE " + name + " SET " + names;
if ( excecute( sql, values.toArray(), null) == 0 ) {
- throw new ObjectNotFound(properties.getOID().toString(), null);
+ throw new ObjectNotFound(properties.getOID().toString(), null);
}
}
@@ -334,7 +333,6 @@
final String name = mClass.getName();
final Object id = properties.getOID();
final java.beans.PropertyDescriptor[] beanProps = mClass.getProperties();
- final Map map = properties.getProperties();
final List values = new ArrayList( beanProps.length + 1 );
String names = "";
@@ -346,7 +344,7 @@
java.beans.PropertyDescriptor descriptor = beanProps[i];
if (descriptor.getWriteMethod() != null) {
- Object value = toSQLType(map.get(descriptor.getName()));
+ Object value = toSQLType( properties.getProperty(i) );
if (value == null) {
continue;
}
@@ -356,9 +354,9 @@
}
}
- final String sql = "INSERT INTO " + name +
- "(" + mClass.getOIDName() + names +
- ")VALUES(?" + params + ")";
+ final String sql = "INSERT INTO " + name +
+ "(" + mClass.getOIDName() + names +
+ ")VALUES(?" + params + ")";
excecute( sql, values.toArray(), null);
@@ -369,11 +367,11 @@
final MetaClass mClass = context.getMetaClass(obj.getPersistentClass());
final String name = mClass.getName();
final Object id = obj.getOID();
- final String sql = "DELETE FROM " + name +
- " WHERE "+ mClass.getOIDName() + "=?";
+ final String sql = "DELETE FROM " + name +
+ " WHERE "+ mClass.getOIDName() + "=?";
if ( excecute( sql, new Object[]{id}, null) == 0 ) {
- throw new ObjectNotFound(obj.getOID().toString(), null);
+ throw new ObjectNotFound(obj.getOID().toString(), null);
}
}
@@ -426,7 +424,7 @@
}
class QueryHandler implements ResultSetHandler {
- Map map;
+ Object props[];
Set objects;
MetaClass mClass ;
java.beans.PropertyDescriptor[] descriptors;
@@ -439,28 +437,28 @@
public void nextResult(int index, String name, Object value, int type) throws StorageException {
try {
+ name = name.toUpperCase();
if (index == 1) {
Persistent p = (Persistent) context.getCache().get(value);
if ( p != null ) {
- map = null;
+ props = null;
objects.add(p);
return;
}
p = mClass.newInstance( value );
MetaObject pc = p.getMetaObject();
- map = pc.getProperties();
+ props = pc.getProperties();
objects.add(p);
+ context.getCache().put(value,p);
return;
}
-
- if ( name.equalsIgnoreCase( mClass.getOIDName() ) || map == null) {
+
+ if ( name.equals( mClass.getOIDName() ) || props == null) {
return;
}
- String property = descriptors[ mClass.getPropertyIndex( name ) ].getName();
- Class propType = descriptors[ mClass.getPropertyIndex( name ) ].getPropertyType();
- map.put( property, value );
+ props[ mClass.getPropertyIndex( name ) ] = value ;
} catch (Throwable t) {
t.printStackTrace();
1.6 +41 -34 jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/persistence/impl/MetaClassImpl.java
Index: MetaClassImpl.java
===================================================================
RCS file: /home/cvs/jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/persistence/impl/MetaClassImpl.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- MetaClassImpl.java 9 Mar 2002 19:07:49 -0000 1.5
+++ MetaClassImpl.java 10 Mar 2002 12:32:30 -0000 1.6
@@ -65,12 +65,11 @@
*
*@author Juozas Baliuka <a href="mailto:baliuka@mwm.lt">
* baliuka@mwm.lt</a>
- *@version $Id: MetaClassImpl.java,v 1.5 2002/03/09 19:07:49 baliuka Exp $
+ *@version $Id: MetaClassImpl.java,v 1.6 2002/03/10 12:32:30 baliuka Exp $
*/
-public class MetaClassImpl implements MetaClass {
-
- private static final boolean DEBUG = System.getProperty("DEBUG") != null;
-
+public class MetaClassImpl implements MetaClass, org.apache.commons.simplestore.tools.Constants {
+
+
private static java.util.Map persitentClasses = new java.util.Hashtable();
private Class clasz;
private String sqlName;
@@ -85,6 +84,7 @@
private Field getField( String id ){
+
Field field = (Field)fields.get(id);
if ( field == null ){
for( int i = 0; i < descriptors.length; i++ ){
@@ -273,10 +273,13 @@
* @return Meta data for class
*/
public MetaClass forClass(Class clasz) {
- MetaClass mc = (MetaClass)persitentClasses.get(clasz);
+ MetaClassImpl mc = (MetaClassImpl)persitentClasses.get(clasz.getName());
if( mc == null ){
mc = new MetaClassImpl(clasz);
+ System.out.println("create " + clasz.getName());
+ persitentClasses.put(clasz.getName(),mc);
}
+
mc.setContext(context);
return mc;
@@ -301,32 +304,33 @@
private void setDescriptors(){
try{
descriptors = java.beans.Introspector.getBeanInfo( clasz ).getPropertyDescriptors();
+ /*
java.util.List abstractProps = new java.util.Vector();
-
+
for( int i = 0; i < descriptors.length; i++ ){
-
+
if( descriptors[i].getReadMethod() != null && descriptors[i].getWriteMethod() != null ) {
-
+
if( java.lang.reflect.Modifier.isAbstract( descriptors[i].getReadMethod().getModifiers() ) &&
java.lang.reflect.Modifier.isAbstract( descriptors[i].getWriteMethod().getModifiers() ) ){
abstractProps.add(descriptors[i]);
}
}else if ( descriptors[i].getReadMethod() != null &&
java.lang.reflect.Modifier.isAbstract( descriptors[i].getReadMethod().getModifiers() )){
-
+
abstractProps.add(descriptors[i]);
-
+
}else if ( descriptors[i].getWriteMethod() != null &&
java.lang.reflect.Modifier.isAbstract( descriptors[i].getWriteMethod().getModifiers() )){
-
+
abstractProps.add(descriptors[i]);
}
-
+
}
-
-
+
+
descriptors = (java.beans.PropertyDescriptor[])abstractProps.toArray(new java.beans.PropertyDescriptor[]{});
-
+ */
}catch( Exception e ){
e.printStackTrace();
throw new Error(e.getMessage());
@@ -340,6 +344,8 @@
for( int i = 0; i < descriptors.length; i++ ){
String name = getField(descriptors[i].getName()).getName();
if( name == null ){
+ if(DEBUG)
+ System.out.println("No mapping for " + descriptors[i].getName() );
name = toSQLName(descriptors[i].getName());
getField(descriptors[i].getName()).setName(name);
}
@@ -361,8 +367,7 @@
private void indexMethods(){
try{
setDescriptors();
-
-
+ if( DEBUG ) throw new Error();
for( int i = 0; i < descriptors.length; i++ ){
properties.put( toSQLName(descriptors[i].getName()),new Integer(i) );
@@ -448,8 +453,9 @@
public int getPropertyIndex(String field) {
Integer index = (Integer)properties.get( field.toUpperCase() );
- if( index == null )
+ if( index == null ){
throw new java.lang.NoSuchFieldError( clasz.getName() + "." + field );
+ }
return index.intValue();
}
@@ -475,7 +481,9 @@
}
- static class StorageHandlerImpl implements StorageHandler {
+ static class StorageHandlerImpl
+ implements StorageHandler ,
+ org.apache.commons.simplestore.tools.Constants {
MetaClassImpl currentClass ;
@@ -485,7 +493,6 @@
}
- private static final boolean DEBUG = System.getProperty("DEBUG") != null;
public void setDocumentLocator(org.xml.sax.Locator locator ){}
@@ -510,50 +517,50 @@
public final void skippedEntity(java.lang.String name) throws SAXException {}
public void handle_reference(final Attributes meta) throws SAXException {
- if (DEBUG) System.out.println("handle_reference: " + meta);
+
currentField.setReferenceClass( meta.getValue("mclass") );
currentField.setReferenceField( meta.getValue("field") );
}
public void start_validator(final Attributes meta) throws SAXException {
- if (DEBUG) System.out.println("start_validator: " + meta);
+
}
public void end_validator() throws SAXException {
- if (DEBUG) System.out.println("end_validator()");
+
}
public void handle_property(final java.lang.String data, final Attributes meta) throws SAXException {
- if (DEBUG) System.out.println("handle_property: " + data);
+
}
public void start_field(final Attributes meta) throws SAXException {
- if (DEBUG) System.out.println("start_field: " + meta);
currentField = currentClass.getField( meta.getValue("id") );
currentField.setName( meta.getValue("name") );
}
public void end_field() throws SAXException {
- if (DEBUG) System.out.println("end_field()");
+
}
public void start_storage(final Attributes meta) throws SAXException {
- if (DEBUG) System.out.println("start_storage: " + meta);
+
}
public void end_storage() throws SAXException {
- if ( DEBUG ) System.out.println("end_storage()");
+
}
public void start_mclass(final Attributes meta) throws SAXException {
- if ( DEBUG ) System.out.println("start_mclass: " + meta);
+
try{
- Class clasz = Class.forName( meta.getValue("id")) ;
- currentClass = (MetaClassImpl)persitentClasses.get(clasz);
+ Class clasz = Class.forName( meta.getValue("id"),true,
+ Thread.currentThread().getContextClassLoader()) ;
+ currentClass = (MetaClassImpl)persitentClasses.get(clasz.getName());
if ( currentClass == null ){
currentClass = new MetaClassImpl();
currentClass.clasz = clasz;
- persitentClasses.put(currentClass.clasz,currentClass);
+ persitentClasses.put(clasz.getName(),currentClass);
}
currentClass.setDescriptors();
currentClass.sqlName = meta.getValue("name");
@@ -566,7 +573,7 @@
}
public void end_mclass() throws SAXException {
- if (DEBUG) System.out.println("end_mclass()");
+
currentClass.indexMethodsFromMetaData();
}
1.11 +32 -35 jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/persistence/impl/PersistentProxy.java
Index: PersistentProxy.java
===================================================================
RCS file: /home/cvs/jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/persistence/impl/PersistentProxy.java,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- PersistentProxy.java 9 Mar 2002 19:07:49 -0000 1.10
+++ PersistentProxy.java 10 Mar 2002 12:32:30 -0000 1.11
@@ -75,12 +75,12 @@
* baliuka@mwm.lt</a>
*@author Gerhard Froehlich <a href="mailto:g-froehlich@gmx.de">
* g-froehlich@gmx.de</a>
- *@version $Id: PersistentProxy.java,v 1.10 2002/03/09 19:07:49 baliuka Exp $
+ *@version $Id: PersistentProxy.java,v 1.11 2002/03/10 12:32:30 baliuka Exp $
*/
public class PersistentProxy
-implements MetaObject, /*InvocationHandler,*/ MethodInterceptor,Cloneable, Serializable {
+implements MetaObject, org.apache.commons.simplestore.tools.Constants ,
+ MethodInterceptor,Cloneable, Serializable {
- private static final boolean DEBUG = System.getProperty("DEBUG") != null;
private static Map DEFAULTS = new Hashtable();
private static Method HASH_CODE;
@@ -90,7 +90,7 @@
private static Method GET_META_OBJECT;
- private Map m_map = new HashMap();
+ private Object m_props[] ;
private Object m_oid = null;
private boolean m_dirty = false;
private boolean m_deleted = false;
@@ -112,6 +112,7 @@
m_context = context;
m_clazz = clazz;
m_metaClass = context.getMetaClass(clazz);
+ m_props = new Object[ m_metaClass.getProperties().length];
}
@@ -121,6 +122,7 @@
boolean newCreated,
Context context ) {
try{
+
PersistentProxy handler = new PersistentProxy( persistent, oid,
newCreated, context );
Class[] interfaces;
@@ -133,10 +135,6 @@
Persistent p = (Persistent)
Enhancer.enhance( persistent,interfaces,handler);
- // Proxy.newProxyInstance(
- // Thread.currentThread().getContextClassLoader(),
- // new Class[]{persistent, Persistent.class},
- // handler );
handler.m_object = p;
if ( newCreated ) {
@@ -148,14 +146,14 @@
return p;
}catch(Throwable t){
t.printStackTrace();
- throw new Error(t.getLocalizedMessage());
+ throw new Error(t.getMessage());
}
}
public void setDirty(boolean dirty) {
m_dirty = dirty;
- m_newCreated = false;
+
}
public boolean isDeleted() {
@@ -170,21 +168,20 @@
return this;
}
- public Map getProperties() {
- return m_map;
+ public Object[] getProperties() {
+ return m_props;
}
- public Object getProperty(String name) {
+ public Object getProperty(int index) {
- return m_map.get(name);
+ return m_props[index];
}
- public void setProperty(String name, Object value) {
- Object old = m_map.get(name);
+ public void setProperty(int index, Object value) {
+ Object old = m_props[ index ];
if (old == null || !old.equals(value)) {
- m_dirty = true;
m_context.getTransactionManager().getTransaction().add(this);
- m_map.put(name, value);
+ m_props[ index ] = value;
}
}
@@ -258,7 +255,11 @@
if(DEBUG){
System.out.println("Invoke super:" + method);
}
- return true;
+ if( method.equals(HASH_CODE) ||
+ method.equals(TO_STRING) ||
+ method.equals(EQUALS) ){
+ return false;
+ }else return true;
}
public Object beforeInvoke(Object obj,Method method,Object[] args) throws Throwable{
return null;
@@ -297,25 +298,22 @@
}
public Object handleProperty(Object obj, Method method, Object[] obj2) throws Throwable {
- String name = method.getName();
+
if( m_clean || m_deleted )
throw new IllegalStateException("Object properties invalidated");
- if (name.startsWith("set")) {
+ int index = m_metaClass.getPropertyIndex( method );
+
+ if ( method.getReturnType() == Void.TYPE && obj2.length == 1 ) {
if( obj2[0] != null && m_metaClass.isReference(method) ){
- setProperty(name.substring(3), ((Persistent)obj2[0]).getOID());
+ setProperty(index, ((Persistent)obj2[0]).getOID());
}else{
- setProperty(name.substring(3), obj2[0]);
+ setProperty(index, obj2[0]);
}
-
+ m_dirty = true;
return null;
- } else if ( name.startsWith("get") || name.startsWith("is") ) {
- if ( method.getName().startsWith("get") ) {
- name = method.getName().substring(3);
- } else {
- name = method.getName().substring(2);
- }
- Object value = getProperty(name);
+ } else if( obj2.length == 0 ){
+ Object value = getProperty(index);
if( value != null && m_metaClass.isReference( method ) ){
return m_context.getStorage().
retrieveObject(method.getReturnType(),value);
@@ -330,7 +328,7 @@
}
return m_typeConverter.convert( value , method.getReturnType() );
}
- throw new java.lang.NoSuchMethodError("pure method " + method.getName());
+ throw new java.lang.NoSuchMethodError("pure method invoked: " + method);
}
public void remove() {
@@ -341,13 +339,12 @@
public Object clone() throws CloneNotSupportedException {
PersistentProxy cln = (PersistentProxy) super.clone();
- cln.m_map = (Map) ((HashMap) m_map).clone();
+ cln.m_props = (Object[])m_props.clone();
return cln;
}
public void assign(MetaObject mo) {
- m_map.clear();
- m_map.putAll( mo.getProperties() );
+ System.arraycopy(mo.getProperties(),0,m_props,0,m_props.length);
m_oid = mo.getOID();
m_object = mo.getObject();
m_clazz = mo.getPersistentClass();
1.3 +15 -5 jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/persistence/impl/TransactionImpl.java
Index: TransactionImpl.java
===================================================================
RCS file: /home/cvs/jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/persistence/impl/TransactionImpl.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- TransactionImpl.java 11 Feb 2002 20:30:09 -0000 1.2
+++ TransactionImpl.java 10 Mar 2002 12:32:30 -0000 1.3
@@ -68,10 +68,12 @@
/**
*@author Juozas Baliuka <a href="mailto:baliuka@mwm.lt">
* baliuka@mwm.lt</a>
- *@version $Id: TransactionImpl.java,v 1.2 2002/02/11 20:30:09 froehlich Exp $
+ *@version $Id: TransactionImpl.java,v 1.3 2002/03/10 12:32:30 baliuka Exp $
*/
-public class TransactionImpl implements InternalTransaction {
+public class TransactionImpl
+ implements org.apache.commons.simplestore.tools.Constants ,
+ InternalTransaction {
private static Cache instances = SoftRefMemoryCache.getInstance(new HashMap(), 0x00);
@@ -132,6 +134,7 @@
transaction.commit(objects);
complete = true;
storedState.clear();
+ objects.clear();
}
public void begin() {
@@ -151,6 +154,7 @@
}
storedState.clear();
transaction.rollback(objects);
+ objects.clear();
complete = true;
}
@@ -159,6 +163,9 @@
if (objects.add(props)) {
try {
storedState.put(props.getOID(), props.clone());
+ if(DEBUG){
+ System.out.println("Added to transaction: " + props);
+ }
} catch (CloneNotSupportedException cnse) {
throw new UnsupportedOperationException(cnse.getMessage());
}
@@ -166,15 +173,18 @@
}
public void begin(Set objects) {
- transaction.begin(objects);
+ // transaction.begin(objects);
+ throw new java.lang.NoSuchMethodError();
}
public void rollback(Set objects) {
- transaction.rollback(objects);
+ throw new java.lang.NoSuchMethodError();
+ // transaction.rollback(objects);
}
public void commit(Set objects) {
- transaction.commit(objects);
+ // transaction.commit(objects);
+ throw new java.lang.NoSuchMethodError();
}
public void removeAttribute(String name) {
1.13 +5 -3 jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/tools/Enhancer.java
Index: Enhancer.java
===================================================================
RCS file: /home/cvs/jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/tools/Enhancer.java,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- Enhancer.java 9 Mar 2002 19:07:49 -0000 1.12
+++ Enhancer.java 10 Mar 2002 12:32:30 -0000 1.13
@@ -98,10 +98,12 @@
/**
*@author Juozas Baliuka <a href="mailto:baliuka@mwm.lt">
* baliuka@mwm.lt</a>
- *@version $Id: Enhancer.java,v 1.12 2002/03/09 19:07:49 baliuka Exp $
+ *@version $Id: Enhancer.java,v 1.13 2002/03/10 12:32:30 baliuka Exp $
*/
-public class Enhancer implements org.apache.bcel.Constants {
- static boolean DEBUG = System.getProperty("DEBUG") != null;
+public class Enhancer implements org.apache.bcel.Constants , Constants{
+
+
+
static final String INTERCEPTOR_CLASS = MethodInterceptor.class.getName();
static final ObjectType BOOLEAN_OBJECT =
new ObjectType(Boolean.class.getName());
1.1 jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/tools/Constants.java
Index: Constants.java
===================================================================
/*
* The Apache Software License, Version 1.1
*
*
* Copyright (c) 2001 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Apache Cocoon" and "Apache Software Foundation" must
* not be used to endorse or promote products derived from this
* software without prior written permission. For written
* permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache",
* nor may "Apache" appear in their name, without prior written
* permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
package org.apache.commons.simplestore.tools;
/**
*@author Juozas Baliuka <a href="mailto:baliuka@mwm.lt">
* baliuka@mwm.lt</a>
*@version $Id: Constants.java,v 1.1 2002/03/10 12:32:30 baliuka Exp $
*/
public interface Constants {
static public final boolean DEBUG = System.getProperty("DEBUG","false").equals("true");
}
1.4 +2 -2 jakarta-commons-sandbox/simplestore/src/test/org/apache/commons/simplestore/TestPersistent.java
Index: TestPersistent.java
===================================================================
RCS file: /home/cvs/jakarta-commons-sandbox/simplestore/src/test/org/apache/commons/simplestore/TestPersistent.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- TestPersistent.java 28 Feb 2002 18:28:41 -0000 1.3
+++ TestPersistent.java 10 Mar 2002 12:32:31 -0000 1.4
@@ -57,11 +57,11 @@
/**
*@author Juozas Baliuka <a href="mailto:baliuka@mwm.lt">
* baliuka@mwm.lt</a>
- *@version $Id: TestPersistent.java,v 1.3 2002/02/28 18:28:41 baliuka Exp $
+ *@version $Id: TestPersistent.java,v 1.4 2002/03/10 12:32:31 baliuka Exp $
*/
public interface TestPersistent {
- public TestPersistent getParent();
+
public void setParent(TestPersistent tp);
1.2 +11 -8 jakarta-commons-sandbox/simplestore/src/test/org/apache/commons/simplestore/TestPersistentClassType.java
Index: TestPersistentClassType.java
===================================================================
RCS file: /home/cvs/jakarta-commons-sandbox/simplestore/src/test/org/apache/commons/simplestore/TestPersistentClassType.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- TestPersistentClassType.java 9 Mar 2002 19:07:49 -0000 1.1
+++ TestPersistentClassType.java 10 Mar 2002 12:32:31 -0000 1.2
@@ -57,21 +57,24 @@
/**
*@author Juozas Baliuka <a href="mailto:baliuka@mwm.lt">
* baliuka@mwm.lt</a>
- *@version $Id: TestPersistentClassType.java,v 1.1 2002/03/09 19:07:49 baliuka Exp $
+ *@version $Id: TestPersistentClassType.java,v 1.2 2002/03/10 12:32:31 baliuka Exp $
*/
-public abstract class TestPersistentClassType implements TestPersistent{
+public abstract class TestPersistentClassType implements TestPersistent,
+ org.apache.commons.simplestore.tools.Constants{
/** Creates a new instance of TestPersistentClassType */
public TestPersistentClassType() {
}
public void doSomething(String arg){
-
- this.setStrVal("done Something " + arg);
- System.out.println(getStrVal());
+ if( DEBUG ){
+ this.setStrVal("done Something " + arg);
+ System.out.println(getStrVal());
+ }
}
-
+ public abstract TestPersistentClassType getParent();
+
public abstract void setDateVal(java.util.Date val) ;
public abstract void setBoolVal(boolean val) ;
@@ -94,13 +97,13 @@
public abstract String getStrVal1();
- public abstract void setParent(TestPersistent tp);
+ public abstract void setParent(TestPersistentClassType tp);
public abstract int getIntVal();
public abstract boolean getBoolVal();
- public abstract TestPersistent getParent();
+
}
1.10 +10 -10 jakarta-commons-sandbox/simplestore/src/test/org/apache/commons/simplestore/TestSample.java
Index: TestSample.java
===================================================================
RCS file: /home/cvs/jakarta-commons-sandbox/simplestore/src/test/org/apache/commons/simplestore/TestSample.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- TestSample.java 9 Mar 2002 19:07:49 -0000 1.9
+++ TestSample.java 10 Mar 2002 12:32:31 -0000 1.10
@@ -72,9 +72,9 @@
/**
*@author Juozas Baliuka <a href="mailto:baliuka@mwm.lt">
* baliuka@mwm.lt</a>
- *@version $Id: TestSample.java,v 1.9 2002/03/09 19:07:49 baliuka Exp $
+ *@version $Id: TestSample.java,v 1.10 2002/03/10 12:32:31 baliuka Exp $
*/
-public class TestSample extends TestCase {
+public class TestSample extends TestCase implements org.apache.commons.simplestore.tools.Constants{
PersistenceManager pm;
@@ -91,7 +91,7 @@
junit.textui.TestRunner.main(testCaseName);
}
- public void _testCreate() throws java.lang.Exception {
+ public void testCreate() throws java.lang.Exception {
for (int i = 0; i < 10; i++) {
Transaction transaction = pm.getTransaction();
@@ -123,13 +123,14 @@
}
- public void _testRetrieve() throws java.lang.Exception {
+ public void testRetrieve() throws java.lang.Exception {
Transaction transaction = pm.getTransaction();
transaction.begin();
java.util.Set objects = pm.findAll(TestPersistentClassType.class);
- System.out.println("retrieved " + objects.size());
+ if( DEBUG )
+ System.out.println("retrieved " + objects.size());
java.util.Iterator i = objects.iterator();
while (i.hasNext()) {
@@ -150,9 +151,6 @@
}
public void testRollback() throws java.lang.Exception {
- _testCreate();
-
- _testRetrieve();
Transaction transaction = pm.getTransaction();
@@ -177,12 +175,13 @@
transaction.begin();
TestPersistentClassType object = (TestPersistentClassType) pm.createInstance(TestPersistentClassType.class);
object.setStrVal("Test roolback on new created " + object);
+ if( DEBUG )
System.out.println(object.getStrVal());
transaction.rollback();
transaction.begin();
try{
- System.out.println(object.getStrVal());
+ object.getStrVal();
fail("Exception expected " + object);
}catch( Exception e ){
}
@@ -230,7 +229,8 @@
try {
stmt.executeUpdate(sql);
} catch (java.sql.SQLException e) {
- System.out.println(e.getMessage());// exists ?
+ if(DEBUG)
+ System.out.println(e.getMessage());// exists ?
}
stmt.close();
} finally {
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>