public static void addEntityExtraData(Object entity, Object extraData) { DataContext dc = get(); if (dc != null && dc.entityExtraDataMap != null) dc.entityExtraDataMap.put(entity, extraData); }
@Override public void prepareCall(ServiceInvocationContext context, IInvocationCall c, String componentName, Class<?> componentClass) { // Initialize an empty data context DataContext.init(); }
protected void prepareDataObserver(DataEnabled dataEnabled) { DataContext.observe(); }
public static boolean handleExclude(Object entity) { if (entity == null || DataContext.get() == null) return true; if (!entity.getClass().isAnnotationPresent(ExcludeFromDataPublish.class)) return false; ExcludeFromDataPublish exclude = entity.getClass().getAnnotation(ExcludeFromDataPublish.class); if (exclude.value() == ExcludeMode.CHANGES) DataContext.addUpdate(EntityUpdateType.REFRESH, entity.getClass(), entity.getClass()); return true; } }
return invocationContext.proceed(); boolean shouldRemoveContextAtEnd = DataContext.get() == null; boolean shouldInitContext = shouldRemoveContextAtEnd || DataContext.isNull(); boolean onCommit = false; DataContext.init(gravity, dataEnabled.topic(), dataEnabled.params(), dataEnabled.publish()); DataContext.get().setDataUpdatePostprocessor(dataUpdatePostprocessor.get()); DataContext.observe(); try { if (dataEnabled.publish().equals(PublishMode.ON_COMMIT)) { DataContext.publish(PublishMode.ON_SUCCESS); return ret; DataContext.remove();
public static void publish(PublishMode publishMode) { DataContext dc = get(); if (dc != null && dc.dataDispatcher != null && !dc.dataUpdates.isEmpty() && !dc.published && (publishMode == PublishMode.MANUAL || (dc.publishMode.equals(publishMode)))) { log.debug("Publish %s data updates with mode %s", dc.dataUpdates.size(), dc.publishMode); dc.dataDispatcher.publish(dc.getUpdates()); // Publish can be called only once but we have to keep the updates until the end of a GraniteDS request dc.published = true; } }
DataContext.init(); DataContext.get().setDataUpdatePostprocessor(dataUpdatePostprocessor);
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 static void addUpdate(EntityUpdateType type, Object entity, Object source) { addUpdate(type, entity, source, 0); } public static void addUpdate(EntityUpdateType type, Object entity, Object source, int priority) {
public void afterCompletion(int status) { if (removeContext) DataContext.remove(); }
public static void publish() { publish(PublishMode.MANUAL); } public static void publish(PublishMode publishMode) {
return invocationContext.proceed(); boolean shouldRemoveContextAtEnd = DataContext.get() == null; boolean shouldInitContext = shouldRemoveContextAtEnd || DataContext.isNull(); boolean onCommit = false; DataContext.init(new JMSDataDispatcher(dataEnabled.topic(), onCommit, dataEnabled.params()), dataEnabled.publish()); DataContext.observe(); try { if (dataEnabled.publish().equals(PublishMode.ON_COMMIT)) { DataContext.publish(PublishMode.ON_SUCCESS); return ret; DataContext.remove();
@Override public IInvocationResult postCall(ServiceInvocationContext context, Object result, String componentName, Class<?> componentClass) { List<ContextUpdate> results = new ArrayList<ContextUpdate>(); DataContext dataContext = DataContext.get(); Object[][] updates = dataContext != null ? dataContext.getUpdates() : null; InvocationResult ires = new InvocationResult(result, results); if (componentName != null || componentClass != null) { Set<Class<?>> componentClasses = findComponentClasses(componentName, componentClass, null); if (isBeanAnnotationPresent(componentClasses, context.getMethod().getName(), context.getMethod().getParameterTypes(), BypassTideMerge.class)) ires.setMerge(false); } ires.setUpdates(updates); return ires; }
public void doPublish(@Observes(during=TransactionPhase.BEFORE_COMPLETION) TideDataPublishingEvent event, Instance<UserTransaction> uts) { if (uts.isUnsatisfied() || uts.isAmbiguous()) { // No JTA UserTransaction, probably a servlet container // Anyway we should not be here return; } UserTransaction ut = uts.get(); try { if (!(ut.getStatus() == Status.STATUS_MARKED_ROLLBACK || ut.getStatus() == Status.STATUS_ROLLING_BACK || ut.getStatus() == Status.STATUS_ROLLING_BACK)) DataContext.publish(PublishMode.ON_COMMIT); } catch (SystemException e) { log.warn(e, "Could not get the current status of the transaction ???"); } if (event.getInitContext()) DataContext.remove(); } }
public static void addUpdate(EntityUpdateType type, Object entity) { addUpdate(type, entity, entity, 0); } public static void addUpdate(EntityUpdateType type, Object entity, int priority) {
@Override protected void afterInvocationError(ServiceInvocationContext context, Throwable error) { String componentName = null; Class<?> componentClass = null; try { Object[] originArgs = (Object[])context.getMessage().getBody(); String operation = ((RemotingMessage)context.getMessage()).getOperation(); componentName = "invokeComponent".equals(operation) ? (String)originArgs[0] : null; String componentClassName = "invokeComponent".equals(operation) ? (String)originArgs[1] : null; try { if (componentClassName != null) componentClass = TypeUtil.forName(componentClassName); } catch (ClassNotFoundException e) { throw new ServiceException("Component class not found " + componentClassName, e); } } finally { tideContext.postCallFault(context, error, componentName, componentClass); } DataMergeContext.remove(); DataContext.remove(); } }
protected void publishDataUpdates() { DataContext.publish(PublishMode.ON_SUCCESS); }
DataContext dataContext = DataContext.get(); Object[][] updates = dataContext != null ? dataContext.getUpdates() : null; ires.setUpdates(updates);
public static Object getEntityExtraData(Object entity) { DataContext dc = get(); return dc != null && dc.entityExtraDataMap != null ? dc.entityExtraDataMap.get(entity) : null; }