diff options
author | ddunne | 2010-08-13 17:46:04 +0000 |
---|---|---|
committer | ddunne | 2010-08-13 17:46:04 +0000 |
commit | bb8d388e09c4dbc89fc64a348a2a6d655863881d (patch) | |
tree | 0e2c9fc8ab22ededd00e556bc21f47b6caa43428 | |
parent | c575cc804ca37a4f6dd560c846a538c649367b8b (diff) | |
download | org.eclipse.osee-bb8d388e09c4dbc89fc64a348a2a6d655863881d.tar.gz org.eclipse.osee-bb8d388e09c4dbc89fc64a348a2a6d655863881d.tar.xz org.eclipse.osee-bb8d388e09c4dbc89fc64a348a2a6d655863881d.zip |
reverted to jobs for receive events with catch of all exceptions
2 files changed, 240 insertions, 195 deletions
diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/RemoteEventManager.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/RemoteEventManager.java index d66bf1719f9..c9bf7f358c7 100644 --- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/RemoteEventManager.java +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/RemoteEventManager.java @@ -22,6 +22,7 @@ import net.jini.core.lookup.ServiceItem; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; +import org.eclipse.core.runtime.jobs.ISchedulingRule; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.osee.framework.core.client.ClientSessionManager; import org.eclipse.osee.framework.core.enums.BranchState; @@ -325,196 +326,215 @@ public class RemoteEventManager { private static class EventListener extends ASkynetEventListener { private static final long serialVersionUID = -3017349745450262540L; + private static final ISchedulingRule mutexRule = new ISchedulingRule() { + + @Override + public boolean contains(ISchedulingRule rule) { + return rule == this; + } + + @Override + public boolean isConflicting(ISchedulingRule rule) { + return rule == this; + } + }; @Override public void onEvent(final ISkynetEvent[] events) { final List<ArtifactTransactionModifiedEvent> xModifiedEvents = new LinkedList<ArtifactTransactionModifiedEvent>(); - // Don't use Job cause don't want popups on exceptions - Runnable job = new Runnable() { + Job job = new Job("Receive Event") { @Override - public void run() { - // Arrays.sort(events); - - Sender lastArtifactRelationModChangeSender = null; + protected IStatus run(IProgressMonitor monitor) { + try { + Sender lastArtifactRelationModChangeSender = null; - for (ISkynetEvent event : events) { + for (ISkynetEvent event : events) { - Sender sender = new Sender(event.getNetworkSender()); - // If the sender's sessionId is the same as this client, then this event was - // created in this client and returned by remote event manager; ignore and continue - if (sender.isLocal()) { - continue; - } + Sender sender = new Sender(event.getNetworkSender()); + // If the sender's sessionId is the same as this client, then this event was + // created in this client and returned by remote event manager; ignore and continue + if (sender.isLocal()) { + continue; + } - if (event instanceof NetworkAccessControlArtifactsEvent) { - try { - AccessControlEvent accessControlEvent = new AccessControlEvent(); - AccessControlEventType accessControlModType = - AccessControlEventType.valueOf(((NetworkAccessControlArtifactsEvent) event).getAccessControlModTypeName()); - accessControlEvent.setEventType(accessControlModType); - NetworkAccessControlArtifactsEvent accessEvent = (NetworkAccessControlArtifactsEvent) event; - Integer[] artIds = - accessEvent.getArtifactIds().toArray(new Integer[accessEvent.getArtifactIds().size()]); - Branch branch = BranchManager.getBranch(accessEvent.getId()); - for (int x = 0; x < accessEvent.getArtifactIds().size(); x++) { - Artifact cachedArt = ArtifactQuery.getArtifactFromId(artIds[x], branch); - if (cachedArt != null) { - accessControlEvent.getArtifacts().add(cachedArt.getBasicGuidArtifact()); + if (event instanceof NetworkAccessControlArtifactsEvent) { + try { + AccessControlEvent accessControlEvent = new AccessControlEvent(); + AccessControlEventType accessControlModType = + AccessControlEventType.valueOf(((NetworkAccessControlArtifactsEvent) event).getAccessControlModTypeName()); + accessControlEvent.setEventType(accessControlModType); + NetworkAccessControlArtifactsEvent accessEvent = (NetworkAccessControlArtifactsEvent) event; + Integer[] artIds = + accessEvent.getArtifactIds().toArray(new Integer[accessEvent.getArtifactIds().size()]); + Branch branch = BranchManager.getBranch(accessEvent.getId()); + for (int x = 0; x < accessEvent.getArtifactIds().size(); x++) { + Artifact cachedArt = ArtifactQuery.getArtifactFromId(artIds[x], branch); + if (cachedArt != null) { + accessControlEvent.getArtifacts().add(cachedArt.getBasicGuidArtifact()); + } } + LoadedArtifacts loadedArtifacts = + new LoadedArtifacts(accessEvent.getId(), accessEvent.getArtifactIds(), + accessEvent.getArtifactTypeIds()); + InternalEventManager.kickAccessControlArtifactsEvent(sender, accessControlEvent, + loadedArtifacts); + } catch (Exception ex) { + OseeLog.log(Activator.class, Level.SEVERE, ex); } - LoadedArtifacts loadedArtifacts = - new LoadedArtifacts(accessEvent.getId(), accessEvent.getArtifactIds(), - accessEvent.getArtifactTypeIds()); - InternalEventManager.kickAccessControlArtifactsEvent(sender, accessControlEvent, - loadedArtifacts); - } catch (Exception ex) { - OseeLog.log(Activator.class, Level.SEVERE, ex); - } - } else if (event instanceof NetworkRenameBranchEvent) { - int branchId = ((NetworkRenameBranchEvent) event).getId(); - try { - Branch branch = BranchManager.getBranch(branchId); - branch.setName(((NetworkRenameBranchEvent) event).getBranchName()); - branch.clearDirty(); + } else if (event instanceof NetworkRenameBranchEvent) { + int branchId = ((NetworkRenameBranchEvent) event).getId(); try { - InternalEventManager.kickBranchEvent(sender, BranchEventType.Renamed, branchId); + Branch branch = BranchManager.getBranch(branchId); + branch.setName(((NetworkRenameBranchEvent) event).getBranchName()); + branch.clearDirty(); + try { + InternalEventManager.kickBranchEvent(sender, BranchEventType.Renamed, branchId); + } catch (Exception ex) { + OseeLog.log(Activator.class, Level.SEVERE, ex); + } } catch (Exception ex) { OseeLog.log(Activator.class, Level.SEVERE, ex); } - } catch (Exception ex) { - OseeLog.log(Activator.class, Level.SEVERE, ex); - } - } else if (event instanceof NetworkNewBranchEvent) { - int branchId = ((NetworkNewBranchEvent) event).getId(); - try { - InternalEventManager.kickBranchEvent(sender, BranchEventType.Added, branchId); - } catch (Exception ex) { - OseeLog.log(Activator.class, Level.SEVERE, ex); - } - } else if (event instanceof NetworkDeletedBranchEvent) { - int branchId = ((NetworkDeletedBranchEvent) event).getId(); - try { - Branch branch = - Activator.getInstance().getOseeCacheService().getBranchCache().getById(branchId); - if (branch != null) { - branch.setBranchState(BranchState.DELETED); - branch.clearDirty(); + } else if (event instanceof NetworkNewBranchEvent) { + int branchId = ((NetworkNewBranchEvent) event).getId(); + try { + InternalEventManager.kickBranchEvent(sender, BranchEventType.Added, branchId); + } catch (Exception ex) { + OseeLog.log(Activator.class, Level.SEVERE, ex); } - InternalEventManager.kickBranchEvent(sender, BranchEventType.Deleted, branchId); - } catch (Exception ex) { - OseeLog.log(Activator.class, Level.SEVERE, ex); - } - } else if (event instanceof NetworkPurgeBranchEvent) { - int branchId = ((NetworkPurgeBranchEvent) event).getId(); - try { - BranchCache cache = Activator.getInstance().getOseeCacheService().getBranchCache(); - Branch branch = cache.getById(branchId); - if (branch != null) { - cache.decache(branch); + } else if (event instanceof NetworkDeletedBranchEvent) { + int branchId = ((NetworkDeletedBranchEvent) event).getId(); + try { + Branch branch = + Activator.getInstance().getOseeCacheService().getBranchCache().getById(branchId); + if (branch != null) { + branch.setBranchState(BranchState.DELETED); + branch.clearDirty(); + } + InternalEventManager.kickBranchEvent(sender, BranchEventType.Deleted, branchId); + } catch (Exception ex) { + OseeLog.log(Activator.class, Level.SEVERE, ex); } - InternalEventManager.kickBranchEvent(sender, BranchEventType.Purged, branchId); - } catch (Exception ex) { - OseeLog.log(Activator.class, Level.SEVERE, ex); - } - } else if (event instanceof NetworkCommitBranchEvent) { - int branchId = ((NetworkCommitBranchEvent) event).getId(); - try { + } else if (event instanceof NetworkPurgeBranchEvent) { + int branchId = ((NetworkPurgeBranchEvent) event).getId(); try { - TransactionManager.clearCommitArtifactCacheForAssociatedArtifact(BranchManager.getAssociatedArtifact(BranchManager.getBranch(branchId))); - } catch (OseeCoreException ex) { + BranchCache cache = Activator.getInstance().getOseeCacheService().getBranchCache(); + Branch branch = cache.getById(branchId); + if (branch != null) { + cache.decache(branch); + } + InternalEventManager.kickBranchEvent(sender, BranchEventType.Purged, branchId); + } catch (Exception ex) { OseeLog.log(Activator.class, Level.SEVERE, ex); } - InternalEventManager.kickBranchEvent(sender, BranchEventType.Committed, branchId); - } catch (Exception ex) { - OseeLog.log(Activator.class, Level.SEVERE, ex); - } - } else if (event instanceof NetworkBroadcastEvent) { - try { - final BroadcastEventType broadcastEventType = - BroadcastEventType.valueOf(((NetworkBroadcastEvent) event).getBroadcastEventTypeName()); - if (broadcastEventType == null) { - OseeLog.log( - Activator.class, - Level.SEVERE, - "Unknown broadcast event type \"" + ((NetworkBroadcastEvent) event).getBroadcastEventTypeName() + "\"", - new IllegalArgumentException()); - } else { - InternalEventManager.kickBroadcastEvent(sender, broadcastEventType, - ((NetworkBroadcastEvent) event).getUserIds(), - ((NetworkBroadcastEvent) event).getMessage()); + } else if (event instanceof NetworkCommitBranchEvent) { + int branchId = ((NetworkCommitBranchEvent) event).getId(); + try { + try { + TransactionManager.clearCommitArtifactCacheForAssociatedArtifact(BranchManager.getAssociatedArtifact(BranchManager.getBranch(branchId))); + } catch (OseeCoreException ex) { + OseeLog.log(Activator.class, Level.SEVERE, ex); + } + InternalEventManager.kickBranchEvent(sender, BranchEventType.Committed, branchId); + } catch (Exception ex) { + OseeLog.log(Activator.class, Level.SEVERE, ex); } - } catch (Exception ex) { - OseeLog.log(Activator.class, Level.SEVERE, ex); - } - } else if (event instanceof ISkynetArtifactEvent) { - try { - updateArtifacts(sender, (ISkynetArtifactEvent) event, xModifiedEvents); - lastArtifactRelationModChangeSender = sender; - } catch (Exception ex) { - OseeLog.log(Activator.class, Level.SEVERE, ex); - } - } else if (event instanceof ISkynetRelationLinkEvent) { - try { - updateRelations(sender, (ISkynetRelationLinkEvent) event, xModifiedEvents); - lastArtifactRelationModChangeSender = sender; - } catch (Exception ex) { - OseeLog.log(Activator.class, Level.SEVERE, ex); - } - } else if (event instanceof NetworkArtifactChangeTypeEvent) { - try { - LoadedArtifacts loadedArtifacts = - new LoadedArtifacts(((NetworkArtifactChangeTypeEvent) event).getId(), - ((NetworkArtifactChangeTypeEvent) event).getArtifactIds(), - ((NetworkArtifactChangeTypeEvent) event).getArtifactTypeIds()); - InternalEventManager.kickArtifactsChangeTypeEvent(sender, - ((NetworkArtifactChangeTypeEvent) event).getToArtifactTypeId(), loadedArtifacts); - } catch (Exception ex) { - OseeLog.log(Activator.class, Level.SEVERE, ex); - } - } else if (event instanceof NetworkArtifactPurgeEvent) { - try { - LoadedArtifacts loadedArtifacts = - new LoadedArtifacts(((NetworkArtifactPurgeEvent) event).getId(), - ((NetworkArtifactPurgeEvent) event).getArtifactIds(), - ((NetworkArtifactPurgeEvent) event).getArtifactTypeIds()); - for (Artifact artifact : loadedArtifacts.getLoadedArtifacts()) { - //This is because applications may still have a reference to the artifact - for (RelationLink link : RelationManager.getRelationsAll(artifact.getArtId(), - artifact.getBranch().getId(), false)) { - link.internalRemoteEventDelete(); + } else if (event instanceof NetworkBroadcastEvent) { + try { + final BroadcastEventType broadcastEventType = + BroadcastEventType.valueOf(((NetworkBroadcastEvent) event).getBroadcastEventTypeName()); + if (broadcastEventType == null) { + OseeLog.log( + Activator.class, + Level.SEVERE, + "Unknown broadcast event type \"" + ((NetworkBroadcastEvent) event).getBroadcastEventTypeName() + "\"", + new IllegalArgumentException()); + } else { + InternalEventManager.kickBroadcastEvent(sender, broadcastEventType, + ((NetworkBroadcastEvent) event).getUserIds(), + ((NetworkBroadcastEvent) event).getMessage()); } - ArtifactCache.deCache(artifact); - artifact.internalSetDeleted(); + } catch (Exception ex) { + OseeLog.log(Activator.class, Level.SEVERE, ex); + } + } else if (event instanceof ISkynetArtifactEvent) { + try { + updateArtifacts(sender, (ISkynetArtifactEvent) event, xModifiedEvents); + lastArtifactRelationModChangeSender = sender; + } catch (Exception ex) { + OseeLog.log(Activator.class, Level.SEVERE, ex); + } + } else if (event instanceof ISkynetRelationLinkEvent) { + try { + updateRelations(sender, (ISkynetRelationLinkEvent) event, xModifiedEvents); + lastArtifactRelationModChangeSender = sender; + } catch (Exception ex) { + OseeLog.log(Activator.class, Level.SEVERE, ex); + } + } else if (event instanceof NetworkArtifactChangeTypeEvent) { + try { + LoadedArtifacts loadedArtifacts = + new LoadedArtifacts(((NetworkArtifactChangeTypeEvent) event).getId(), + ((NetworkArtifactChangeTypeEvent) event).getArtifactIds(), + ((NetworkArtifactChangeTypeEvent) event).getArtifactTypeIds()); + InternalEventManager.kickArtifactsChangeTypeEvent(sender, + ((NetworkArtifactChangeTypeEvent) event).getToArtifactTypeId(), loadedArtifacts); + } catch (Exception ex) { + OseeLog.log(Activator.class, Level.SEVERE, ex); + } + } else if (event instanceof NetworkArtifactPurgeEvent) { + try { + LoadedArtifacts loadedArtifacts = + new LoadedArtifacts(((NetworkArtifactPurgeEvent) event).getId(), + ((NetworkArtifactPurgeEvent) event).getArtifactIds(), + ((NetworkArtifactPurgeEvent) event).getArtifactTypeIds()); + for (Artifact artifact : loadedArtifacts.getLoadedArtifacts()) { + //This is because applications may still have a reference to the artifact + for (RelationLink link : RelationManager.getRelationsAll(artifact.getArtId(), + artifact.getBranch().getId(), false)) { + link.internalRemoteEventDelete(); + } + ArtifactCache.deCache(artifact); + artifact.internalSetDeleted(); + } + InternalEventManager.kickArtifactsPurgedEvent(sender, loadedArtifacts); + } catch (Exception ex) { + OseeLog.log(Activator.class, Level.SEVERE, ex); + } + } else if (event instanceof NetworkTransactionDeletedEvent) { + try { + InternalEventManager.kickTransactionsPurgedEvent(sender, + ((NetworkTransactionDeletedEvent) event).getTransactionIds()); + } catch (Exception ex) { + OseeLog.log(Activator.class, Level.SEVERE, ex); } - InternalEventManager.kickArtifactsPurgedEvent(sender, loadedArtifacts); - } catch (Exception ex) { - OseeLog.log(Activator.class, Level.SEVERE, ex); - } - } else if (event instanceof NetworkTransactionDeletedEvent) { - try { - InternalEventManager.kickTransactionsPurgedEvent(sender, - ((NetworkTransactionDeletedEvent) event).getTransactionIds()); - } catch (Exception ex) { - OseeLog.log(Activator.class, Level.SEVERE, ex); } } - } - if (xModifiedEvents.size() > 0) { - /* - * Since transaction events are a collection of ArtifactModfied and RelationModified events, create a - * new Sender based on the last sender for these events. - */ - Sender transactionSender = - new Sender("RemoteEventManager", lastArtifactRelationModChangeSender.getOseeSession()); - InternalEventManager.kickPersistEvent(transactionSender, xModifiedEvents); + if (xModifiedEvents.size() > 0) { + /* + * Since transaction events are a collection of ArtifactModfied and RelationModified events, create + * a new Sender based on the last sender for these events. + */ + Sender transactionSender = + new Sender("RemoteEventManager", lastArtifactRelationModChangeSender.getOseeSession()); + InternalEventManager.kickPersistEvent(transactionSender, xModifiedEvents); + } + } catch (Exception ex) { + // don't want exceptions poping up; just log and return nicely + OseeLog.log(Activator.class, Level.SEVERE, "REM Receive Event Exception", ex); } + return Status.OK_STATUS; } + }; - job.run(); + job.setSystem(true); + job.setUser(false); + job.setRule(mutexRule); + job.schedule(); } /** diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/RemoteEventManager2.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/RemoteEventManager2.java index e3b29fd2a84..51d497585e3 100644 --- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/RemoteEventManager2.java +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/event/RemoteEventManager2.java @@ -14,6 +14,7 @@ import java.util.logging.Level; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; +import org.eclipse.core.runtime.jobs.ISchedulingRule; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.osee.framework.core.enums.ModificationType; import org.eclipse.osee.framework.core.exception.OseeCoreException; @@ -106,51 +107,75 @@ public class RemoteEventManager2 implements IFrameworkEventListener { } } } + private static final ISchedulingRule mutexRule = new ISchedulingRule() { + + @Override + public boolean contains(ISchedulingRule rule) { + return rule == this; + } + + @Override + public boolean isConflicting(ISchedulingRule rule) { + return rule == this; + } + }; @Override public void onEvent(final RemoteEvent remoteEvent) { - Runnable job = new Runnable() { + Job job = + new Job(String.format("[%s] - receiving [%s]", getClass().getSimpleName(), + remoteEvent.getClass().getSimpleName())) { - @Override - public void run() { + @Override + protected IStatus run(IProgressMonitor monitor) { - Sender sender = new Sender(remoteEvent.getNetworkSender()); - // If the sender's sessionId is the same as this client, then this event was - // created in this client and returned by remote event manager; ignore and continue - if (sender.isLocal()) { - return; - } - // Handles TransactionEvents, ArtifactChangeTypeEvents, ArtifactPurgeEvents - if (remoteEvent instanceof RemotePersistEvent1) { - try { - RemotePersistEvent1 event1 = (RemotePersistEvent1) remoteEvent; - ArtifactEvent transEvent = FrameworkEventUtil.getPersistEvent(event1); - updateArtifacts(sender, transEvent); - updateRelations(sender, transEvent); - InternalEventManager2.kickArtifactEvent(sender, transEvent); - } catch (Exception ex) { - OseeEventManager.eventLog("REM2: RemoteTransactionEvent1", ex); - } - } else if (remoteEvent instanceof RemoteBranchEvent1) { - try { - BranchEvent branchEvent = FrameworkEventUtil.getBranchEvent((RemoteBranchEvent1) remoteEvent); - updateBranches(sender, branchEvent); - InternalEventManager2.kickBranchEvent(sender, branchEvent); - } catch (Exception ex) { - OseeEventManager.eventLog("REM2: RemoteBranchEvent1", ex); - } - } else if (remoteEvent instanceof RemoteTransactionEvent1) { try { - TransactionEvent transEvent = - FrameworkEventUtil.getTransactionEvent((RemoteTransactionEvent1) remoteEvent); - handleTransactionEvent(sender, transEvent); + Sender sender = new Sender(remoteEvent.getNetworkSender()); + // If the sender's sessionId is the same as this client, then this event was + // created in this client and returned by remote event manager; ignore and continue + if (sender.isLocal()) { + return Status.OK_STATUS; + } + // Handles TransactionEvents, ArtifactChangeTypeEvents, ArtifactPurgeEvents + if (remoteEvent instanceof RemotePersistEvent1) { + try { + RemotePersistEvent1 event1 = (RemotePersistEvent1) remoteEvent; + ArtifactEvent transEvent = FrameworkEventUtil.getPersistEvent(event1); + updateArtifacts(sender, transEvent); + updateRelations(sender, transEvent); + InternalEventManager2.kickArtifactEvent(sender, transEvent); + } catch (Exception ex) { + OseeEventManager.eventLog("REM2: RemoteTransactionEvent1", ex); + } + } else if (remoteEvent instanceof RemoteBranchEvent1) { + try { + BranchEvent branchEvent = FrameworkEventUtil.getBranchEvent((RemoteBranchEvent1) remoteEvent); + updateBranches(sender, branchEvent); + InternalEventManager2.kickBranchEvent(sender, branchEvent); + } catch (Exception ex) { + OseeEventManager.eventLog("REM2: RemoteBranchEvent1", ex); + } + } else if (remoteEvent instanceof RemoteTransactionEvent1) { + try { + TransactionEvent transEvent = + FrameworkEventUtil.getTransactionEvent((RemoteTransactionEvent1) remoteEvent); + handleTransactionEvent(sender, transEvent); + } catch (Exception ex) { + OseeEventManager.eventLog("REM2: RemoteBranchEvent1", ex); + } + } } catch (Exception ex) { - OseeEventManager.eventLog("REM2: RemoteBranchEvent1", ex); + // don't want exceptions poping up; just log and return nicely + OseeLog.log(Activator.class, Level.SEVERE, "REM2 Receive Event Exception", ex); } + monitor.done(); + return Status.OK_STATUS; } - } - }; - job.run(); + }; + job.setSystem(true); + job.setRule(mutexRule); + job.setUser(false); + job.schedule(); } private void handleTransactionEvent(Sender sender, TransactionEvent transEvent) { |