[
http://jira.jboss.com/jira/browse/JBRULES-1590?page=comments#action_12410921 ]
Delbart Vincent commented on JBRULES-1590:
------------------------------------------
For the first, it's not useful.
But for the second it's useful if the first sentence work and not the second :
clone = original.getClass().newInstance();
((Collection) clone).addAll( (Collection) original );
With my PersistentSet the newInstance() works but the addAll doesn't work. And the
catch doesn't sets the clone object to null.
ShadowProxuUtils and org.hibernate.collection.PersistentSet
-----------------------------------------------------------
Key: JBRULES-1590
URL:
http://jira.jboss.com/jira/browse/JBRULES-1590
Project: JBoss Drools
Issue Type: Feature Request
Security Level: Public(Everyone can see)
Components: Reteoo
Affects Versions: 4.0.6
Reporter: Delbart Vincent
Assigned To: Edson Tirelli
Fix For: 4.0.7, 5.0.0-M1
I think the method cloneObject 'ShadowProxyUtils' could be improve like follow :
public static Object cloneObject(Object original) {
Object clone = null;
if ( original instanceof Cloneable ) {
try {
Method cloneMethod = original.getClass().getMethod( "clone",
new Class[0] );
clone = cloneMethod.invoke( original,
new Object[0] );
} catch ( Exception e ) {
/* Failed to clone. Don't worry about it, and just return
* the original object. */
clone = null;
}
}
if ( clone == null ) {
try {
if ( original instanceof Map &&
original != Collections.EMPTY_MAP &&
!UNMODIFIABLE_MAP.isAssignableFrom( original.getClass() ) ) {
/* empty and unmodifiable maps can't (and don't need to) be
shadowed */
clone = original.getClass().newInstance();
((Map) clone).putAll( (Map) original );
} else if ( original instanceof Collection &&
original != Collections.EMPTY_LIST &&
original != Collections.EMPTY_SET &&
!UNMODIFIABLE_COLLECTION.isAssignableFrom(
original.getClass() ) ) {
/* empty and unmodifiable collections can't (and don't need
to) be shadowed */
clone = original.getClass().newInstance();
((Collection) clone).addAll( (Collection) original );
} else if ( original.getClass().isArray() ) {
clone = cloneArray( original );
}
} catch ( Exception e ) {
/* Failed to clone. Don't worry about it, and just return
* the original object. */
clone = null;
}
}
if ( clone == null ) {
clone = original;
}
return clone;
}
In this way my PersistentSet will be not clone and I will be able to continue to use
shadow fact
What do you think about ?
V.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira