final Object value) {
final Object value, final List pending) {
    private void setInternal(final Object obj, Property prop,                             final Object value) {        if (LOG.isDebugEnabled()) {            trace("set", new Object[] {obj, prop.getName(), value});        }        prop.dispatch(new Property.Switch() {                public void onRole(Role role) {                    Object old = null;                    if (role.isComponent() || role.isReversable()) {                        old = get(obj, role);                    }                    PropertyEvent ev;                    try {                        ev = new SetEvent(Session.this, obj, role, value);                    } catch (TypeException te) {                        te.setInternal(false);                        throw te;                    }                    if (role.isReversable()) {                        if (old != null) { reverseUpdateOld(ev, old); }                        if (value != null) { reverseUpdateNew(ev); }                    }                    addEvent(ev);                    if (role.isComponent()) {                        if (old != null) { cascadeDelete(obj, old); }                    }                }                public void onAlias(Alias alias) {                    setInternal(obj, alias.getTarget(), value);                }                public void onLink(Link link) {                    throw new UnsupportedOperationException			("cannot set links");                }            });        if (LOG.isDebugEnabled()) {            untrace("set");        }    }