[jboss-svn-commits] JBL Code SVN: r33268 - in labs/jbossrules/trunk/drools-persistence-jpa/src: main/java/org/drools/persistence/processinstance/persisters and 1 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon May 31 17:06:33 EDT 2010


Author: KrisVerlaenen
Date: 2010-05-31 17:06:32 -0400 (Mon, 31 May 2010)
New Revision: 33268

Added:
   labs/jbossrules/trunk/drools-persistence-jpa/src/test/java/org/drools/persistence/session/MySubEntity.java
   labs/jbossrules/trunk/drools-persistence-jpa/src/test/java/org/drools/persistence/session/MySubEntityMethods.java
Removed:
   labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/EventType.java
Modified:
   labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/persisters/JPAVariablePersister.java
   labs/jbossrules/trunk/drools-persistence-jpa/src/test/java/org/drools/persistence/session/VariablePersistenceStrategyTest.java
Log:
JBRULES-2522: JPAVariablePersister will not work when @Id is declared on a superclass
 - works now with @Id declared on field or method of superclass

Deleted: labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/EventType.java
===================================================================
--- labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/EventType.java	2010-05-31 19:45:56 UTC (rev 33267)
+++ labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/EventType.java	2010-05-31 21:06:32 UTC (rev 33268)
@@ -1,80 +0,0 @@
-/**
- * 
- */
-package org.drools.persistence.processinstance;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.ManyToOne;
-
- at Entity
-public class EventType {
-    @Id
-    @GeneratedValue(strategy = GenerationType.AUTO)
-    private int    id;
-    
-//    @ManyToOne
-//    private long    processInstanceId;
-    
-    private String name;
-
-    public EventType() {
-
-    }
-//
-//    public EventType(long    processInstanceId, String name) {
-//        this.name = name;
-//        this.processInstanceId = processInstanceId;
-//    }
-    
-    public EventType(String name) {
-        this.name = name;
-    }
-    
-    public int getId() {
-        return id;
-    }
-
-    public void setId(int id) {
-        this.id = id;
-    }
-
-//    public long getProcessInstanceId() {
-//        return processInstanceId;
-//    }
-//
-//    public void setProcessInstanceId(long processInstanceId) {
-//        this.processInstanceId = processInstanceId;
-//    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    @Override
-    public int hashCode() {
-        final int prime = 31;
-        int result = 1;
-        result = prime * result + ((name == null) ? 0 : name.hashCode());
-        return result;
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if ( this == obj ) return true;
-        if ( obj == null ) return false;
-        if ( getClass() != obj.getClass() ) return false;
-        EventType other = (EventType) obj;
-        if ( name == null ) {
-            if ( other.name != null ) return false;
-        } else if ( !name.equals( other.name ) ) return false;
-        return true;
-    }
- 
-}
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/persisters/JPAVariablePersister.java
===================================================================
--- labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/persisters/JPAVariablePersister.java	2010-05-31 19:45:56 UTC (rev 33267)
+++ labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/processinstance/persisters/JPAVariablePersister.java	2010-05-31 21:06:32 UTC (rev 33268)
@@ -90,39 +90,44 @@
 		}
 	}
 
-	private Serializable getClassIdValue(Object o) throws NoSuchMethodException,
+	public static Serializable getClassIdValue(Object o) throws NoSuchMethodException,
 			SecurityException, IllegalAccessException,
 			InvocationTargetException, IllegalArgumentException {
 		Class<? extends Object> varClass = o.getClass();
-		Field[] fields = varClass.getDeclaredFields();
 		Serializable idValue = null;
-		for (int i = 0; i < fields.length && idValue == null; i++) {
-			Field field = fields[i];
-			Id id = field.getAnnotation(Id.class);
-			if (id != null) {
-				try {
-					idValue = callIdMethod(o, "get"
-							+ Character.toUpperCase(field.getName().charAt(0))
-							+ field.getName().substring(1));
-				} catch (NoSuchMethodException e) {
-					idValue = (Serializable) field.get(o);
+		do {
+			Field[] fields = varClass.getDeclaredFields();
+			for (int i = 0; i < fields.length && idValue == null; i++) {
+				Field field = fields[i];
+				Id id = field.getAnnotation(Id.class);
+				if (id != null) {
+					try {
+						idValue = callIdMethod(o, "get"
+								+ Character.toUpperCase(field.getName().charAt(0))
+								+ field.getName().substring(1));
+					} catch (NoSuchMethodException e) {
+						idValue = (Serializable) field.get(o);
+					}
 				}
 			}
-		}
+		} while ((varClass = varClass.getSuperclass()) != null && idValue == null); 
 		if (idValue == null) {
-			Method[] methods = varClass.getMethods();
-			for (int i = 0; i < methods.length && idValue == null; i++) {
-				Method method = methods[i];
-				Id id = method.getAnnotation(Id.class);
-				if (id != null) {
-					idValue = (Serializable) method.invoke(o);
+			varClass = o.getClass();
+			do {
+				Method[] methods = varClass.getMethods();
+				for (int i = 0; i < methods.length && idValue == null; i++) {
+					Method method = methods[i];
+					Id id = method.getAnnotation(Id.class);
+					if (id != null) {
+						idValue = (Serializable) method.invoke(o);
+					}
 				}
-			}
+			} while ((varClass = varClass.getSuperclass()) != null && idValue == null);
 		}
 		return idValue;
 	}
 
-	private Serializable callIdMethod(Object target, String methodName) throws IllegalArgumentException,
+	private static Serializable callIdMethod(Object target, String methodName) throws IllegalArgumentException,
 			SecurityException, IllegalAccessException, InvocationTargetException, NoSuchMethodException {
 		return (Serializable) target.getClass().getMethod(methodName, (Class[]) null).invoke(target, new Object[] {});
 	}

Added: labs/jbossrules/trunk/drools-persistence-jpa/src/test/java/org/drools/persistence/session/MySubEntity.java
===================================================================
--- labs/jbossrules/trunk/drools-persistence-jpa/src/test/java/org/drools/persistence/session/MySubEntity.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-persistence-jpa/src/test/java/org/drools/persistence/session/MySubEntity.java	2010-05-31 21:06:32 UTC (rev 33268)
@@ -0,0 +1,10 @@
+package org.drools.persistence.session;
+
+import javax.persistence.Entity;
+
+ at Entity
+public class MySubEntity extends MyEntity {
+
+	private static final long serialVersionUID = 1L;
+	
+}

Added: labs/jbossrules/trunk/drools-persistence-jpa/src/test/java/org/drools/persistence/session/MySubEntityMethods.java
===================================================================
--- labs/jbossrules/trunk/drools-persistence-jpa/src/test/java/org/drools/persistence/session/MySubEntityMethods.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-persistence-jpa/src/test/java/org/drools/persistence/session/MySubEntityMethods.java	2010-05-31 21:06:32 UTC (rev 33268)
@@ -0,0 +1,10 @@
+package org.drools.persistence.session;
+
+import javax.persistence.Entity;
+
+ at Entity
+public class MySubEntityMethods extends MyEntityMethods {
+	
+	private static final long serialVersionUID = 1L;
+
+}

Modified: labs/jbossrules/trunk/drools-persistence-jpa/src/test/java/org/drools/persistence/session/VariablePersistenceStrategyTest.java
===================================================================
--- labs/jbossrules/trunk/drools-persistence-jpa/src/test/java/org/drools/persistence/session/VariablePersistenceStrategyTest.java	2010-05-31 19:45:56 UTC (rev 33267)
+++ labs/jbossrules/trunk/drools-persistence-jpa/src/test/java/org/drools/persistence/session/VariablePersistenceStrategyTest.java	2010-05-31 21:06:32 UTC (rev 33268)
@@ -19,6 +19,7 @@
 import org.drools.io.impl.ClassPathResource;
 import org.drools.persistence.jpa.JPAKnowledgeService;
 import org.drools.persistence.processinstance.VariablePersistenceStrategyFactory;
+import org.drools.persistence.processinstance.persisters.JPAVariablePersister;
 import org.drools.persistence.processinstance.variabletypes.VariableInstanceInfo;
 import org.drools.runtime.Environment;
 import org.drools.runtime.EnvironmentName;
@@ -284,4 +285,16 @@
         assertNull( processInstance );
     }
     
+    public void testEntityWithSuperClassAnnotationField() throws Exception {
+    	MySubEntity subEntity = new MySubEntity();
+    	subEntity.setId(3L);
+    	assertEquals(3L, JPAVariablePersister.getClassIdValue(subEntity));
+    }
+    
+    public void testEntityWithSuperClassAnnotationMethod() throws Exception {
+    	MySubEntityMethods subEntity = new MySubEntityMethods();
+    	subEntity.setId(3L);
+    	assertEquals(3L, JPAVariablePersister.getClassIdValue(subEntity));
+    }
+    
 }
\ No newline at end of file



More information about the jboss-svn-commits mailing list