private static String getTypeForAlias(ClientAliasRegistry aliasRegistry, Change change) { if (aliasRegistry.getTypeForAlias(change.getClassName()) != null) return aliasRegistry.getTypeForAlias(change.getClassName()); return change.getClassName(); } }
public Object invoke(Object object, Method method, Method method1, Object[] args) throws Exception { String name = method.getName(); if ("toString".equals(name)) { return changeSet.getChanges()[0].getClassName() + "@" + System.identityHashCode(object); } else if ("equals".equals(name)) { return proxyObject == object; } else if ("hashCode".equals(name)) { return System.identityHashCode(object); } else if ("getChangeSetProxyData".equals(name) && method.getParameterTypes().length == 0) { return changeSet; } return null; } }
@Override public String toString() { StringBuilder sb = new StringBuilder(); if (getClassName().indexOf(".") > 0) sb.append(getClassName().substring(getClassName().lastIndexOf(".")+1)); else sb.append(getClassName()); sb.append(':').append(getUid()).append(":").append(getId()).append(':').append(getVersion()).append("={"); boolean first = true; for (Entry<String, Object> change : getChanges().entrySet()) { if (first) first = false; else sb.append(", "); sb.append(change.getKey()).append(": ").append(change.getValue()); } sb.append("}"); return sb.toString(); }
@Override public String toString() { StringBuilder sb = new StringBuilder(); if (getClassName().indexOf(".") > 0) sb.append(getClassName().substring(getClassName().lastIndexOf(".")+1)); else sb.append(getClassName()); sb.append(':').append(getUid()).append(":").append(getId()).append(':').append(getVersion()).append("={"); boolean first = true; for (Entry<String, Object> change : getChanges().entrySet()) { if (first) first = false; else sb.append(", "); sb.append(change.getKey()).append(": ").append(change.getValue()); } sb.append("}"); return sb.toString(); }
@Override public String toString() { StringBuilder sb = new StringBuilder(); if (getClassName().indexOf(".") > 0) sb.append(getClassName().substring(getClassName().lastIndexOf(".")+1)); else sb.append(getClassName()); sb.append(':').append(getUid()).append(":").append(getId()).append(':').append(getVersion()).append("={"); boolean first = true; for (Entry<String, Object> change : getChanges().entrySet()) { if (first) first = false; else sb.append(", "); sb.append(change.getKey()).append(": ").append(change.getValue()); } sb.append("}"); return sb.toString(); }
@Override public int compareTo(Change o) { if (!className.equals(o.getClassName())) return className.compareTo(o.getClassName()); if (!uid.equals(o.getUid())) return uid.compareTo(o.getUid()); if (version == null) return o.getVersion() == null ? 0 : -1; else if (version.equals(o.getVersion())) return 0; else if (o.getVersion() == null) return 1; return version.longValue() > o.getVersion().longValue() ? 1 : -1; } }
private boolean isForEntity(Change change, Object entity) { return entity.getClass().getName().equals(getType(change.getClassName())) && change.getUid().equals(dataManager.getUid(entity)); }
@Override public int compareTo(Change o) { if (!className.equals(o.getClassName())) return className.compareTo(o.getClassName()); if (!uid.equals(o.getUid())) return uid.compareTo(o.getUid()); if (version == null) return o.getVersion() == null ? 0 : -1; else if (version.equals(o.getVersion())) return 0; else if (o.getVersion() == null) return 1; return version.longValue() > o.getVersion().longValue() ? 1 : -1; } }
@Override public int compareTo(Change o) { if (!className.equals(o.getClassName())) return className.compareTo(o.getClassName()); if (!uid.equals(o.getUid())) return uid.compareTo(o.getUid()); if (version == null) return o.getVersion() == null ? 0 : -1; else if (version.equals(o.getVersion())) return 0; else if (o.getVersion() == null) return 1; return version.longValue() > o.getVersion().longValue() ? 1 : -1; } }
private boolean isForEntity(MergeContext mergeContext, Change change, Object entity) { String className = mergeContext.getServerSession().getAliasRegistry().getTypeForAlias(change.getClassName()); return entity.getClass().getName().equals(className) && change.getUid().equals(mergeContext.getDataManager().getUid(entity)); } private boolean isForEntity(MergeContext mergeContext, ChangeRef changeRef, Object entity) {
@Override protected boolean internalCanConvert(Object value, Type targetType) { if (value instanceof ChangeSet && targetType instanceof Class<?>) { if (((ChangeSet)value).getChanges() == null || ((ChangeSet)value).getChanges().length == 0) throw new IllegalArgumentException("Incoming ChangeSet objects must contain at least one Change"); String className = ((ChangeSet)value).getChanges()[0].getClassName(); try { Class<?> clazz = TypeUtil.forName(className); return ((Class<?>)targetType).isAssignableFrom(clazz); } catch (ClassNotFoundException e) { throw new RuntimeException("Cannot find class for ChangeSet argument " + className); } } return false; }
private static Object getChange(EntityPersister persister, Session session, String entityName, Serializable id, Object entity) { Number version = (Number)persister.getVersion(entity); String uid = getUid(persister, entity); if (uid == null) return null; Object change = null; for (EntityUpdate du : DataContext.get().getDataUpdates()) { if (du.entity instanceof Change) { if (du.type == EntityUpdateType.UPDATE && ((Change)du.entity).getClassName().equals(entityName) && ((Change)du.entity).getId().equals(id)) { change = du.entity; break; } } else if (du.entity.getClass().getName().equals(entityName) && id.equals(persister.getIdentifier(entity, (SessionImplementor)session))) { change = du.entity; break; } } if (change == null) { change = new Change(entityName, id, version, uid); DataContext.addUpdate(EntityUpdateType.UPDATE, change, entity, 1); } else if (change instanceof Change) ((Change)change).updateVersion(version); return change; }
public ChangeEntityRef(Object change, ClientAliasRegistry aliasRegistry) { if (change instanceof Change) { className = ((Change)change).getClassName(); uid = ((Change)change).getUid(); } else if (change instanceof ChangeRef) { className = ((ChangeRef)change).getClassName(); uid = ((ChangeRef)change).getUid(); } if (aliasRegistry.getTypeForAlias(className) != null) className = aliasRegistry.getTypeForAlias(className); }
@Override protected Object internalConvert(Object value, Type targetType) { ChangeSet changeSet = (ChangeSet)value; String className = changeSet.getChanges()[0].getClassName(); try { Class<?> clazz = TypeUtil.forName(className); Class<?> proxyClass = proxyClasses.get(clazz); if (proxyClass == null) { ProxyFactory proxyFactory = new ProxyFactory(); proxyFactory.setFilter(FINALIZE_FILTER); proxyFactory.setSuperclass(clazz); proxyFactory.setInterfaces(new Class<?>[] { ChangeSetProxy.class }); proxyClass = proxyFactory.createClass(); proxyClasses.put(clazz, proxyClass); } ProxyObject proxyObject = (ProxyObject)proxyClass.newInstance(); proxyObject.setHandler(new ChangeSetProxyHandler(proxyObject, changeSet)); return proxyObject; } catch (Exception e) { throw new RuntimeException("Cannot build proxy for Change argument " + className); } }
Class<?> entityClass = TypeUtil.forName(change.getClassName()); if (change.getId() != null) { Entity e = new Entity(entityClass); log.warn("Could not find property " + me.getKey() + " on class " + change.getClassName()); log.warn("Property " + me.getKey() + " on class " + change.getClassName() + " is not writeable"); throw new ServiceException("Could not find class " + change.getClassName(), cnfe);
if (dest == null) { log.warn("Incoming change received for unknown entity %s: %s", change.getClassName(), change.getUid()); continue; if (coll instanceof PersistentCollection && !((PersistentCollection<?>)coll).wasInitialized()) { log.debug("Incoming change for uninitialized collection %s:%s.%s", change.getClassName(), change.getUid(), p); continue; log.warn("Incoming change skipped %s:%s.%s, already processed", change.getClassName(), change.getUid(), p); continue;