[jboss-cvs] JBossCache/src-50/org/jboss/cache/pojo/impl ...
Ben Wang
bwang at jboss.com
Wed Nov 8 03:47:19 EST 2006
User: bwang
Date: 06/11/08 03:47:19
Modified: src-50/org/jboss/cache/pojo/impl AdvisedPojoHandler.java
Log:
1. JBCACHE-839 to allow replicating final field.
2. JBCACHE-619 to support Enum.
Revision Changes Path
1.12 +31 -2 JBossCache/src-50/org/jboss/cache/pojo/impl/AdvisedPojoHandler.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: AdvisedPojoHandler.java
===================================================================
RCS file: /cvsroot/jboss/JBossCache/src-50/org/jboss/cache/pojo/impl/AdvisedPojoHandler.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -b -r1.11 -r1.12
--- AdvisedPojoHandler.java 17 Sep 2006 05:42:46 -0000 1.11
+++ AdvisedPojoHandler.java 8 Nov 2006 08:47:19 -0000 1.12
@@ -12,6 +12,7 @@
import org.jboss.cache.pojo.CachedType;
import org.jboss.cache.pojo.PojoInstance;
import org.jboss.cache.pojo.PojoUtil;
+import org.jboss.cache.pojo.InternalConstant;
import org.jboss.cache.pojo.observable.Observer;
import org.jboss.cache.pojo.memory.FieldPersistentReference;
import org.jboss.cache.pojo.util.AopUtil;
@@ -36,7 +37,7 @@
*
* @author Ben Wang
* Date: Aug 4, 2005
- * @version $Id: AdvisedPojoHandler.java,v 1.11 2006/09/17 05:42:46 bwang Exp $
+ * @version $Id: AdvisedPojoHandler.java,v 1.12 2006/11/08 08:47:19 bwang Exp $
*/
class AdvisedPojoHandler
{
@@ -67,8 +68,17 @@
}
catch (Exception e)
{
+ // Is this a case of no-default constructor, e.g., Enum? Let's try it.
+ try
+ {
+ obj = loadFromOthers(fqn, clazz);
+ if(obj == null) throw e;
+ }
+ catch (Exception e1)
+ {
throw new CacheException("failed creating instance of " + clazz.getName(), e);
}
+ }
// Insert interceptor at runtime
InstanceAdvisor advisor = ((Advised) obj)._getInstanceAdvisor();
CacheFieldInterceptor interceptor = new CacheFieldInterceptor(pCache_, fqn, type);
@@ -77,6 +87,25 @@
return obj;
}
+ private Object loadFromOthers(Fqn fqn, Class clazz) throws Exception
+ {
+ // Try Enum first.
+ if(clazz.isEnum())
+ {
+ String name = (String)pCache_.getCache().get(fqn, InternalConstant.ENUM_KEY);
+ if(name == null)
+ {
+ throw new CacheException(
+ "AdvisedPojoHandler.loadFromOthers(): can't retrieve java.lang.Enum name fiel."
+ + " fqn: " +fqn);
+ }
+ Object obj = Enum.valueOf(clazz, name);
+ return obj;
+ }
+
+ return null;
+ }
+
void put(Fqn fqn, Fqn referencingFqn, Object obj) throws CacheException
{
CachedType type = pCache_.getCachedType(obj.getClass());
More information about the jboss-cvs-commits
mailing list