Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrescobar2010-03-12 13:27:25 -0500
committerrescobar2010-03-12 13:27:25 -0500
commit205aa057fa925d37a3a5375aa8418b9567e99c6d (patch)
treed33f80b9f727c479b8031aeb352494c38ad9878d /plugins/org.eclipse.osee.framework.messaging
parent0e6d2b595cfb4d54eccdf3479e7c5d74d9c736a5 (diff)
downloadorg.eclipse.osee-205aa057fa925d37a3a5375aa8418b9567e99c6d.tar.gz
org.eclipse.osee-205aa057fa925d37a3a5375aa8418b9567e99c6d.tar.xz
org.eclipse.osee-205aa057fa925d37a3a5375aa8418b9567e99c6d.zip
Diffstat (limited to 'plugins/org.eclipse.osee.framework.messaging')
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/.classpath8
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/.project28
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/META-INF/MANIFEST.MF135
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/build.properties12
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/customBuildCallbacks.xml199
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/design/OSEE Service and Messaging Architecture.xml3
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/jaxb/README.txt1
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/jaxb/testMessages.xsd36
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/msgSchemas/serviceMessages.xsd35
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src-gen/org/eclipse/osee/framework/messaging/services/messages/ObjectFactory.java86
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src-gen/org/eclipse/osee/framework/messaging/services/messages/ServiceDescriptionPair.java97
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src-gen/org/eclipse/osee/framework/messaging/services/messages/ServiceHealth.java226
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src-gen/org/eclipse/osee/framework/messaging/services/messages/ServiceHealthRequest.java132
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/Component.java40
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/ComponentListener.java17
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/ConnectionListener.java16
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/ConnectionNode.java31
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/ConnectionNodeFactory.java16
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/ConnectionNodeFailoverSupport.java17
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/EndpointReceive.java71
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/EndpointSend.java22
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/ExceptionHandler.java18
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/Message.java22
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/MessageID.java21
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/MessageService.java27
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/MessageServiceProvider.java17
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/MessagingGateway.java53
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/MessagingTracker.java22
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/NodeInfo.java88
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/OseeMessaging.java18
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/OseeMessagingListener.java30
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/OseeMessagingStatusCallback.java16
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/ReceiveListener.java18
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/ReplyConnection.java17
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/SendListener.java18
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/Source.java18
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/SystemTopic.java51
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/UriSource.java44
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/definitions/PropertyStoreMessage.java57
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/id/MessageId.java20
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/id/Name.java18
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/id/Namespace.java18
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/id/ProtocolId.java20
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/id/StringId.java58
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/id/StringMessageId.java23
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/id/StringName.java45
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/id/StringNamespace.java44
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/id/StringProtocolId.java23
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/Activator.java82
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/FailoverConnectionNode.java208
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/JAXBUtil.java50
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/MessageServiceConsole.java40
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/MessageServiceImpl.java90
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/MessageServiceProviderImpl.java42
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/activemq/ActiveMqMessageListenerWrapper.java83
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/activemq/ActiveMqUtil.java72
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/activemq/ConnectionNodeActiveMq.java307
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/activemq/ConnectionNodeFactoryImpl.java50
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/activemq/ReplyConnectionActiveMqImpl.java66
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/old/ApplicationDistributer.java22
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/old/ConcurrentListMap.java66
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/old/EndpointReceiveCollection.java49
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/old/EndpointSendCollection.java135
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/old/MessageListenerCollection.java58
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/old/MessagingGatewayImpl.java136
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/olderFiles.txt11
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/BaseMessages.java68
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/RegisteredServiceReference.java14
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/RemoteServiceLookup.java18
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/RemoteServiceRegistrar.java19
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/ServiceInfoPopulator.java18
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/ServiceNotification.java17
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/internal/HealthRequestListener.java45
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/internal/HealthServiceListener.java64
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/internal/MonitorTimedOutServices.java73
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/internal/OseeMessagingStatusImpl.java37
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/internal/RemoteServiceLookupImpl.java123
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/internal/RemoteServiceRegistrarImpl.java109
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/internal/ServiceHealthPlusTimeout.java33
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/internal/ServiceLookupAndRegistrarLifeCycle.java83
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/internal/ServiceReferenceImp.java27
-rw-r--r--plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/internal/UpdateStatus.java57
82 files changed, 4424 insertions, 0 deletions
diff --git a/plugins/org.eclipse.osee.framework.messaging/.classpath b/plugins/org.eclipse.osee.framework.messaging/.classpath
new file mode 100644
index 0000000000..9a39368d97
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/.classpath
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="src" path="src-gen"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.osee.framework.messaging/.project b/plugins/org.eclipse.osee.framework.messaging/.project
new file mode 100644
index 0000000000..d527f69a23
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.osee.framework.messaging</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.osee.framework.messaging/META-INF/MANIFEST.MF b/plugins/org.eclipse.osee.framework.messaging/META-INF/MANIFEST.MF
new file mode 100644
index 0000000000..111bfba7ed
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/META-INF/MANIFEST.MF
@@ -0,0 +1,135 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: OSEE Messaging Plug-in
+Bundle-SymbolicName: org.eclipse.osee.framework.messaging;singleton:=true
+Bundle-Version: 0.9.2.qualifier
+Bundle-Activator: org.eclipse.osee.framework.messaging.internal.Activator
+Bundle-Vendor: Eclipse.org
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Import-Package: javax.jms,
+ javax.management,
+ javax.management.j2ee;version="1.1.1",
+ javax.management.j2ee.statistics;version="1.1.1",
+ javax.management.loading,
+ javax.management.modelmbean,
+ javax.management.monitor,
+ javax.management.openmbean,
+ javax.management.relation,
+ javax.management.remote,
+ javax.management.remote.rmi,
+ javax.management.timer,
+ javax.xml;version="1.3.0",
+ javax.xml.bind,
+ javax.xml.bind.annotation,
+ javax.xml.bind.annotation.adapters,
+ javax.xml.bind.attachment,
+ javax.xml.bind.helpers,
+ javax.xml.bind.util,
+ javax.xml.parsers;version="1.3.0",
+ javax.xml.transform;version="1.3.0",
+ javax.xml.transform.dom;version="1.3.0",
+ javax.xml.transform.sax;version="1.3.0",
+ javax.xml.transform.stax,
+ javax.xml.transform.stream;version="1.3.0",
+ javax.xml.validation;version="1.3.0",
+ org.apache.activemq,
+ org.apache.activemq.advisory,
+ org.apache.activemq.blob,
+ org.apache.activemq.broker,
+ org.apache.activemq.broker.cluster,
+ org.apache.activemq.broker.ft,
+ org.apache.activemq.broker.jmx,
+ org.apache.activemq.broker.region,
+ org.apache.activemq.broker.region.cursors,
+ org.apache.activemq.broker.region.group,
+ org.apache.activemq.broker.region.policy,
+ org.apache.activemq.broker.region.virtual,
+ org.apache.activemq.broker.util,
+ org.apache.activemq.broker.view,
+ org.apache.activemq.command,
+ org.apache.activemq.filter,
+ org.apache.activemq.jaas,
+ org.apache.activemq.jmdns,
+ org.apache.activemq.jndi,
+ org.apache.activemq.kaha,
+ org.apache.activemq.kaha.impl,
+ org.apache.activemq.kaha.impl.async,
+ org.apache.activemq.kaha.impl.container,
+ org.apache.activemq.kaha.impl.data,
+ org.apache.activemq.kaha.impl.index,
+ org.apache.activemq.kaha.impl.index.hash,
+ org.apache.activemq.kaha.impl.index.tree,
+ org.apache.activemq.management,
+ org.apache.activemq.memory,
+ org.apache.activemq.memory.buffer,
+ org.apache.activemq.memory.list,
+ org.apache.activemq.network,
+ org.apache.activemq.network.jms,
+ org.apache.activemq.openwire,
+ org.apache.activemq.openwire.tool,
+ org.apache.activemq.openwire.v1,
+ org.apache.activemq.openwire.v2,
+ org.apache.activemq.openwire.v3,
+ org.apache.activemq.openwire.v4,
+ org.apache.activemq.openwire.v5,
+ org.apache.activemq.plugin,
+ org.apache.activemq.protobuf,
+ org.apache.activemq.protobuf.compiler,
+ org.apache.activemq.protobuf.compiler.parser,
+ org.apache.activemq.proxy,
+ org.apache.activemq.security,
+ org.apache.activemq.selector,
+ org.apache.activemq.spring,
+ org.apache.activemq.state,
+ org.apache.activemq.store,
+ org.apache.activemq.store.amq,
+ org.apache.activemq.store.jdbc,
+ org.apache.activemq.store.jdbc.adapter,
+ org.apache.activemq.store.journal,
+ org.apache.activemq.store.kahadaptor,
+ org.apache.activemq.store.kahadb,
+ org.apache.activemq.store.kahadb.data,
+ org.apache.activemq.store.memory,
+ org.apache.activemq.thread,
+ org.apache.activemq.transaction,
+ org.apache.activemq.transport,
+ org.apache.activemq.transport.discovery,
+ org.apache.activemq.transport.discovery.multicast,
+ org.apache.activemq.transport.discovery.rendezvous,
+ org.apache.activemq.transport.discovery.simple,
+ org.apache.activemq.transport.failover,
+ org.apache.activemq.transport.fanout,
+ org.apache.activemq.transport.logwriters,
+ org.apache.activemq.transport.mock,
+ org.apache.activemq.transport.multicast,
+ org.apache.activemq.transport.nio,
+ org.apache.activemq.transport.peer,
+ org.apache.activemq.transport.reliable,
+ org.apache.activemq.transport.stomp,
+ org.apache.activemq.transport.tcp,
+ org.apache.activemq.transport.udp,
+ org.apache.activemq.transport.vm,
+ org.apache.activemq.usage,
+ org.apache.activemq.util,
+ org.apache.activemq.wireformat,
+ org.apache.activemq.xbean,
+ org.apache.commons.logging,
+ org.eclipse.core.runtime;version="3.4.0",
+ org.eclipse.osee.framework.core.data,
+ org.eclipse.osee.framework.core.exception,
+ org.eclipse.osee.framework.jdk.core.type,
+ org.eclipse.osee.framework.jdk.core.util,
+ org.eclipse.osee.framework.jdk.core.util.time,
+ org.eclipse.osee.framework.logging,
+ org.eclipse.osee.framework.plugin.core,
+ org.eclipse.osee.framework.plugin.core.util,
+ org.eclipse.osgi.framework.console;version="1.0.0",
+ org.osgi.framework,
+ org.osgi.util.tracker;version="1.4.0"
+Bundle-ActivationPolicy: lazy
+Eclipse-ExtensibleAPI: true
+Export-Package: org.eclipse.osee.framework.messaging,
+ org.eclipse.osee.framework.messaging.definitions,
+ org.eclipse.osee.framework.messaging.id,
+ org.eclipse.osee.framework.messaging.services,
+ org.eclipse.osee.framework.messaging.services.messages
diff --git a/plugins/org.eclipse.osee.framework.messaging/build.properties b/plugins/org.eclipse.osee.framework.messaging/build.properties
new file mode 100644
index 0000000000..8abae5a87e
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/build.properties
@@ -0,0 +1,12 @@
+source.. = src/,\
+ src-gen/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ customBuildCallbacks.xml,\
+ msgSchemas/,\
+ build.properties
+customBuildCallbacks = customBuildCallbacks.xml
+customBuildCallbacks.failonerror = true
+customBuildCallbacks.inheritall = true
+custom = true
diff --git a/plugins/org.eclipse.osee.framework.messaging/customBuildCallbacks.xml b/plugins/org.eclipse.osee.framework.messaging/customBuildCallbacks.xml
new file mode 100644
index 0000000000..f6ef5d9271
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/customBuildCallbacks.xml
@@ -0,0 +1,199 @@
+<!-- ===================================================================== -->
+<!-- Custom targets called from a project's generated build.xml -->
+<!-- Set customBuildCallbacks=<path/to/this/file> in your build.properties.-->
+<!-- ===================================================================== -->
+<project name="Build specific targets and properties" default="noDefault">
+
+ <!-- ===================================================================== -->
+ <!-- Default target -->
+ <!-- ===================================================================== -->
+ <target name="noDefault">
+ <echo message="This file must be called with explicit targets" />
+ </target>
+
+ <!-- ===================================================================== -->
+ <!-- Steps to do before the target build.jars -->
+ <!-- Available parameters : -->
+ <!-- build.result.folder - folder to contain the build results -->
+ <!-- ===================================================================== -->
+ <target name="pre.build.jars">
+ <!--xjc testMessages.xsd -d ../src -p org.eclipse.osee.framework.messaging.services.messages-->
+ <!--<taskdef name="xjc" classname="com.sun.tools.xjc.XJCTask">
+ <classpath>
+ <pathelement path="${classpath}" />
+
+ <fileset dir="${java.home}" includes="**/*.jar" excludes="ant.jar" />
+ <fileset dir="${java.home}">
+ <include name="jaxp/**/*.jar"/>
+ <include name="jwsdp-shared/lib/**/*.jar"/>
+ </fileset>
+
+ </classpath>
+</taskdef>
+<xjc target="src-gen" package="org.eclipse.osee.framework.messaging.services.messages12">
+ <schema dir="msgSchemas" includes="**/*.xsd" excludes="**/debug.xsd" />
+ <arg value="-nv" />
+ </xjc>
+ <xjc target="src" schema="abc.xsd" removeOldOutput="yes" package="org.acme.foo">
+ <produces dir="src/org/acme/foo" includes="* impl/*" />
+ </xjc> -->
+ <mkdir dir="@{src.dest}"/>
+ <jaxb-compile src.dest="src-gen" package.dest="org.eclipse.osee.framework.messaging.services.messages12" xsd.src="msgSchemas" xsd="serviceMessages.xsd" />
+ </target>
+
+ <macrodef name="jaxb-compile">
+ <attribute name="src.dest" />
+ <attribute name="package.dest" />
+ <attribute name="xsd.src" />
+ <attribute name="xsd" />
+ <sequential>
+ <property name="xjc.home" value="${java.home}/bin" />
+
+ <exec executable="${xjc.home}/xjc.exe" dir="@{src.dest}">
+ <arg value="-d" />
+ <arg value="@{src.dest}" />
+ <arg value="-p" />
+ <arg value="@{package.dest}" />
+ <arg value="@{xsd.src}/@{xsd}" />
+ </exec>
+ </sequential>
+ </macrodef>
+
+
+ <!-- ===================================================================== -->
+ <!-- Steps to do after the target build.jars -->
+ <!-- Available parameters : -->
+ <!-- build.result.folder - folder to contain the build results -->
+ <!-- ===================================================================== -->
+ <target name="post.build.jars">
+ </target>
+
+ <!-- ===================================================================== -->
+ <!-- Steps to do before the target build.sources -->
+ <!-- Available parameters : -->
+ <!-- build.result.folder - folder to contain the build results -->
+ <!-- ===================================================================== -->
+ <target name="pre.build.sources">
+ </target>
+
+ <!-- ===================================================================== -->
+ <!-- Steps to do after the target build.sources -->
+ <!-- Available parameters : -->
+ <!-- build.result.folder - folder to contain the build results -->
+ <!-- ===================================================================== -->
+ <target name="post.build.sources">
+ </target>
+
+ <!-- ===================================================================== -->
+ <!-- Steps to do before the compilation target <name> -->
+ <!-- Substitute "name" with the name of the compilation target, eg @dot -->
+ <!-- Available parameters : -->
+ <!-- source.foldern : n = 1 ... N, the source folders -->
+ <!-- target.folder : where the results of the compilation go -->
+ <!-- <name>.classpath : name = name of the compilation target. A -->
+ <!-- reference to the classpath structure. -->
+ <!-- ===================================================================== -->
+ <target name="pre.name">
+ </target>
+
+ <target name="pre.@dot">
+ </target>
+
+ <!-- ===================================================================== -->
+ <!-- Steps to do during the compilation target <name>, after the compile -->
+ <!-- but before jaring. Substitute "name" with the name of the compilation-->
+ <!-- target, eg @dot -->
+ <!-- Available parameters : -->
+ <!-- source.foldern : n = 1 ... N, the source folders -->
+ <!-- target.folder : where the results of the compilation go -->
+ <!-- <name>.classpath : name = name of the compilation target. A -->
+ <!-- reference to the classpath structure. -->
+ <!-- ===================================================================== -->
+ <target name="post.compile.name">
+ </target>
+
+ <target name="post.compile.@dot">
+ </target>
+
+ <!-- ===================================================================== -->
+ <!-- Steps to do after the compilation target <name> -->
+ <!-- Substitute "name" with the name of the compilation target, eg @dot -->
+ <!-- Available parameters : -->
+ <!-- jar.location - the location of the compilation results -->
+ <!-- <name>.classpath : name = name of the compilation target. A -->
+ <!-- reference to the classpath structure. -->
+ <!-- ===================================================================== -->
+ <target name="post.name">
+ </target>
+
+ <target name="post.@dot">
+ </target>
+
+ <!-- ===================================================================== -->
+ <!-- Steps to do before the target gather.bin.parts -->
+ <!-- Available parameters : -->
+ <!-- build.result.folder - folder containing the build results -->
+ <!-- target.folder - destination folder -->
+ <!-- ===================================================================== -->
+ <target name="pre.gather.bin.parts">
+ </target>
+
+ <!-- ===================================================================== -->
+ <!-- Steps to do after the target gather.bin.parts -->
+ <!-- Available parameters : -->
+ <!-- build.result.folder - folder containing the build results -->
+ <!-- target.folder - destination folder -->
+ <!-- ===================================================================== -->
+ <target name="post.gather.bin.parts">
+ </target>
+
+ <!-- ===================================================================== -->
+ <!-- Steps to do before the target gather.sources -->
+ <!-- Available parameters : -->
+ <!-- destination.temp.folder - destination folder -->
+ <!-- ===================================================================== -->
+ <target name="pre.gather.sources">
+ </target>
+
+ <!-- ===================================================================== -->
+ <!-- Steps to do after the target gather.sources -->
+ <!-- Available parameters : -->
+ <!-- destination.temp.folder - destination folder -->
+ <!-- ===================================================================== -->
+ <target name="post.gather.sources">
+ </target>
+
+ <!-- ===================================================================== -->
+ <!-- Steps to do before the target gather.logs -->
+ <!-- Available parameters : -->
+ <!-- destination.temp.folder - destination folder -->
+ <!-- ===================================================================== -->
+ <target name="pre.gather.logs">
+ </target>
+
+ <!-- ===================================================================== -->
+ <!-- Steps to do after the target gather.logs -->
+ <!-- Available parameters : -->
+ <!-- destination.temp.folder - destination folder -->
+ <!-- ===================================================================== -->
+ <target name="post.gather.logs">
+ </target>
+
+ <!-- ===================================================================== -->
+ <!-- Steps to do before the target clean -->
+ <!-- Available parameters : -->
+ <!-- destination.temp.folder - destination folder -->
+ <!-- ===================================================================== -->
+ <target name="pre.clean">
+ </target>
+
+ <!-- ===================================================================== -->
+ <!-- Steps to do after the target clean -->
+ <!-- Available parameters : -->
+ <!-- plugin.destination - final destination of the build -->
+ <!-- build.result.folder - results of the compilation -->
+ <!-- temp.folder - temporary folder -->
+ <!-- ===================================================================== -->
+ <target name="post.clean">
+ </target>
+</project>
diff --git a/plugins/org.eclipse.osee.framework.messaging/design/OSEE Service and Messaging Architecture.xml b/plugins/org.eclipse.osee.framework.messaging/design/OSEE Service and Messaging Architecture.xml
new file mode 100644
index 0000000000..02d5b3c0cd
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/design/OSEE Service and Messaging Architecture.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<?mso-application progid="Word.Document"?>
+<w:wordDocument xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:sl="http://schemas.microsoft.com/schemaLibrary/2003/core" xmlns:aml="http://schemas.microsoft.com/aml/2001/core" xmlns:wx="http://schemas.microsoft.com/office/word/2003/auxHint" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:wsp="http://schemas.microsoft.com/office/word/2003/wordml/sp2" w:macrosPresent="no" w:embeddedObjPresent="no" w:ocxPresent="no" xml:space="preserve"><w:ignoreElements w:val="http://schemas.microsoft.com/office/word/2003/wordml/sp2"/><o:DocumentProperties><o:Title>Service and Messaging Architecture </o:Title><o:Author>b1122182</o:Author><o:LastAuthor>b1122182</o:LastAuthor><o:Revision>2</o:Revision><o:TotalTime>46</o:TotalTime><o:Created>2009-02-25T21:50:00Z</o:Created><o:LastSaved>2009-02-25T22:36:00Z</o:LastSaved><o:Pages>1</o:Pages><o:Words>122</o:Words><o:Characters>698</o:Characters><o:Company>The Boeing Company</o:Company><o:Lines>5</o:Lines><o:Paragraphs>1</o:Paragraphs><o:CharactersWithSpaces>819</o:CharactersWithSpaces><o:Version>11.0000</o:Version></o:DocumentProperties><w:fonts><w:defaultFonts w:ascii="Times New Roman" w:fareast="Times New Roman" w:h-ansi="Times New Roman" w:cs="Times New Roman"/></w:fonts><w:styles><w:versionOfBuiltInStylenames w:val="4"/><w:latentStyles w:defLockedState="off" w:latentStyleCount="156"/><w:style w:type="paragraph" w:default="on" w:styleId="Normal"><w:name w:val="Normal"/><w:rPr><wx:font wx:val="Times New Roman"/><w:sz w:val="24"/><w:sz-cs w:val="24"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="character" w:default="on" w:styleId="DefaultParagraphFont"><w:name w:val="Default Paragraph Font"/><w:semiHidden/></w:style><w:style w:type="table" w:default="on" w:styleId="TableNormal"><w:name w:val="Normal Table"/><wx:uiName wx:val="Table Normal"/><w:semiHidden/><w:rPr><wx:font wx:val="Times New Roman"/></w:rPr><w:tblPr><w:tblInd w:w="0" w:type="dxa"/><w:tblCellMar><w:top w:w="0" w:type="dxa"/><w:left w:w="108" w:type="dxa"/><w:bottom w:w="0" w:type="dxa"/><w:right w:w="108" w:type="dxa"/></w:tblCellMar></w:tblPr></w:style><w:style w:type="list" w:default="on" w:styleId="NoList"><w:name w:val="No List"/><w:semiHidden/></w:style></w:styles><w:divs><w:div w:id="281159593"><w:bodyDiv w:val="on"/><w:marLeft w:val="0"/><w:marRight w:val="0"/><w:marTop w:val="0"/><w:marBottom w:val="0"/><w:divBdr><w:top w:val="none" w:sz="0" wx:bdrwidth="0" w:space="0" w:color="auto"/><w:left w:val="none" w:sz="0" wx:bdrwidth="0" w:space="0" w:color="auto"/><w:bottom w:val="none" w:sz="0" wx:bdrwidth="0" w:space="0" w:color="auto"/><w:right w:val="none" w:sz="0" wx:bdrwidth="0" w:space="0" w:color="auto"/></w:divBdr></w:div></w:divs><w:shapeDefaults><o:shapedefaults v:ext="edit" spidmax="2050"/><o:shapelayout v:ext="edit"><o:idmap v:ext="edit" data="1"/></o:shapelayout></w:shapeDefaults><w:docPr><w:view w:val="print"/><w:zoom w:percent="62"/><w:displayBackgroundShape/><w:doNotEmbedSystemFonts/><w:proofState w:spelling="clean" w:grammar="clean"/><w:attachedTemplate w:val=""/><w:defaultTabStop w:val="720"/><w:punctuationKerning/><w:characterSpacingControl w:val="DontCompress"/><w:optimizeForBrowser/><w:validateAgainstSchema/><w:saveInvalidXML w:val="off"/><w:ignoreMixedContent w:val="off"/><w:alwaysShowPlaceholderText w:val="off"/><w:compat><w:breakWrappedTables/><w:snapToGridInCell/><w:wrapTextWithPunct/><w:useAsianBreakRules/><w:dontGrowAutofit/></w:compat><wsp:rsids><wsp:rsidRoot wsp:val="00BB6175"/><wsp:rsid wsp:val="0042418D"/><wsp:rsid wsp:val="0061196F"/><wsp:rsid wsp:val="007E3E05"/><wsp:rsid wsp:val="00821BA3"/><wsp:rsid wsp:val="00850125"/><wsp:rsid wsp:val="00BA3064"/><wsp:rsid wsp:val="00BB6175"/></wsp:rsids></w:docPr><w:body><wx:sect><w:p wsp:rsidR="00850125" wsp:rsidRPr="00BA3064" wsp:rsidRDefault="00BA3064"><w:pPr><w:rPr><w:b/></w:rPr></w:pPr><w:r><w:rPr><w:b/></w:rPr><w:t>Service and Messaging </w:t></w:r><w:proofErr w:type="gramStart"/><w:r><w:rPr><w:b/></w:rPr><w:t>Architecture ?</w:t></w:r><w:proofErr w:type="gramEnd"/></w:p><w:p wsp:rsidR="00BB6175" wsp:rsidRDefault="00BB6175"/><w:p wsp:rsidR="00BA3064" wsp:rsidRDefault="00BA3064"><w:r><w:t>OSEE Services</w:t></w:r></w:p><w:p wsp:rsidR="00BA3064" wsp:rsidRDefault="00BA3064"/><w:p wsp:rsidR="00BB6175" wsp:rsidRDefault="00BA3064"><w:r><w:t>Search Engine Service – performs searches</w:t></w:r></w:p><w:p wsp:rsidR="00BA3064" wsp:rsidRDefault="00BA3064"><w:r><w:t>Tagging Service – Tags attributes </w:t></w:r></w:p><w:p wsp:rsidR="00BA3064" wsp:rsidRDefault="00BA3064"><w:r><w:t>Artifact Service – Loading Artifacts</w:t></w:r></w:p><w:p wsp:rsidR="00BA3064" wsp:rsidRDefault="00BA3064"><w:r><w:t>Branch Service – Making </w:t></w:r><w:proofErr w:type="gramStart"/><w:r><w:t>Branches ?</w:t></w:r><w:proofErr w:type="gramEnd"/><w:r><w:t> </w:t></w:r><w:proofErr w:type="gramStart"/><w:r><w:t>should</w:t></w:r><w:proofErr w:type="gramEnd"/><w:r><w:t> branch manager be part of this?</w:t></w:r></w:p><w:p wsp:rsidR="00BA3064" wsp:rsidRDefault="00BA3064"><w:r><w:t>Branch Exchange Service – Exporting/Importing</w:t></w:r></w:p><w:p wsp:rsidR="00BA3064" wsp:rsidRDefault="00BA3064"/><w:p wsp:rsidR="00BA3064" wsp:rsidRDefault="00BA3064"><w:r><w:t>Client </w:t></w:r></w:p><w:p wsp:rsidR="00BA3064" wsp:rsidRDefault="00BA3064"/><w:p wsp:rsidR="00BA3064" wsp:rsidRDefault="00BA3064"><w:r><w:t>Client Artifact Service – </w:t></w:r><w:proofErr w:type="gramStart"/><w:r><w:t>Caches ?</w:t></w:r><w:proofErr w:type="gramEnd"/></w:p><w:p wsp:rsidR="00BA3064" wsp:rsidRDefault="00BA3064"><w:r><w:t>Artifact Explorer </w:t></w:r></w:p><w:p wsp:rsidR="00BA3064" wsp:rsidRDefault="00BA3064"><w:r><w:t>Branch Manager</w:t></w:r></w:p><w:p wsp:rsidR="00BB6175" wsp:rsidRDefault="00BB6175"/><w:p wsp:rsidR="00BB6175" wsp:rsidRDefault="00BB6175"/><w:p wsp:rsidR="00BB6175" wsp:rsidRDefault="00BB6175"/><w:tbl><w:tblPr><w:tblW w:w="9980" w:type="dxa"/><w:tblInd w:w="93" w:type="dxa"/></w:tblPr><w:tblGrid><w:gridCol w:w="2788"/><w:gridCol w:w="6172"/><w:gridCol w:w="1020"/></w:tblGrid><w:tr wsp:rsidR="00BB6175" wsp:rsidTr="00BB6175"><w:trPr><w:trHeight w:val="270"/></w:trPr><w:tc><w:tcPr><w:tcW w:w="9980" w:type="dxa"/><w:gridSpan w:val="3"/><w:tcBorders><w:top w:val="single" w:sz="8" wx:bdrwidth="20" w:space="0" w:color="auto"/><w:left w:val="single" w:sz="8" wx:bdrwidth="20" w:space="0" w:color="auto"/><w:bottom w:val="single" w:sz="8" wx:bdrwidth="20" w:space="0" w:color="auto"/><w:right w:val="single" w:sz="8" wx:bdrwidth="20" w:space="0" w:color="auto"/></w:tcBorders><w:shd w:val="clear" w:color="auto" w:fill="auto"/><w:noWrap/><w:vAlign w:val="bottom"/></w:tcPr><w:p wsp:rsidR="00BB6175" wsp:rsidRDefault="00BB6175"><w:pPr><w:jc w:val="center"/><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:b/><w:b-cs/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:b/><w:b-cs/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr><w:t>OSEE MESSAGE</w:t></w:r><w:r wsp:rsidR="00BA3064"><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:b/><w:b-cs/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr><w:t> TOPICS</w:t></w:r></w:p></w:tc></w:tr><w:tr wsp:rsidR="00BB6175" wsp:rsidTr="00BB6175"><w:trPr><w:trHeight w:val="270"/></w:trPr><w:tc><w:tcPr><w:tcW w:w="2788" w:type="dxa"/><w:tcBorders><w:top w:val="nil"/><w:left w:val="single" w:sz="8" wx:bdrwidth="20" w:space="0" w:color="auto"/><w:bottom w:val="single" w:sz="8" wx:bdrwidth="20" w:space="0" w:color="auto"/><w:right w:val="single" w:sz="8" wx:bdrwidth="20" w:space="0" w:color="auto"/></w:tcBorders><w:shd w:val="clear" w:color="auto" w:fill="auto"/><w:noWrap/><w:vAlign w:val="bottom"/></w:tcPr><w:p wsp:rsidR="00BB6175" wsp:rsidRDefault="00BB6175"><w:pPr><w:jc w:val="center"/><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:b/><w:b-cs/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:b/><w:b-cs/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr><w:t>namespace</w:t></w:r></w:p></w:tc><w:tc><w:tcPr><w:tcW w:w="6172" w:type="dxa"/><w:tcBorders><w:top w:val="nil"/><w:left w:val="nil"/><w:bottom w:val="single" w:sz="8" wx:bdrwidth="20" w:space="0" w:color="auto"/><w:right w:val="single" w:sz="8" wx:bdrwidth="20" w:space="0" w:color="auto"/></w:tcBorders><w:shd w:val="clear" w:color="auto" w:fill="auto"/><w:noWrap/><w:vAlign w:val="bottom"/></w:tcPr><w:p wsp:rsidR="00BB6175" wsp:rsidRDefault="00BB6175"><w:pPr><w:jc w:val="center"/><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:b/><w:b-cs/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:b/><w:b-cs/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr><w:t>prefix</w:t></w:r></w:p></w:tc><w:tc><w:tcPr><w:tcW w:w="1020" w:type="dxa"/><w:tcBorders><w:top w:val="nil"/><w:left w:val="nil"/><w:bottom w:val="single" w:sz="8" wx:bdrwidth="20" w:space="0" w:color="auto"/><w:right w:val="single" w:sz="8" wx:bdrwidth="20" w:space="0" w:color="auto"/></w:tcBorders><w:shd w:val="clear" w:color="auto" w:fill="auto"/><w:noWrap/><w:vAlign w:val="bottom"/></w:tcPr><w:p wsp:rsidR="00BB6175" wsp:rsidRDefault="00BB6175"><w:pPr><w:jc w:val="center"/><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:b/><w:b-cs/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:b/><w:b-cs/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr><w:t>data</w:t></w:r></w:p></w:tc></w:tr><w:tr wsp:rsidR="00BB6175" wsp:rsidTr="00BB6175"><w:trPr><w:trHeight w:val="255"/></w:trPr><w:tc><w:tcPr><w:tcW w:w="2788" w:type="dxa"/><w:tcBorders><w:top w:val="nil"/><w:left w:val="nil"/><w:bottom w:val="nil"/><w:right w:val="nil"/></w:tcBorders><w:shd w:val="clear" w:color="auto" w:fill="auto"/><w:noWrap/><w:vAlign w:val="bottom"/></w:tcPr><w:p wsp:rsidR="00BB6175" wsp:rsidRDefault="00BB6175"><w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr><w:t>branch</w:t></w:r></w:p></w:tc><w:proofErr w:type="spellStart"/><w:tc><w:tcPr><w:tcW w:w="6172" w:type="dxa"/><w:tcBorders><w:top w:val="nil"/><w:left w:val="nil"/><w:bottom w:val="nil"/><w:right w:val="nil"/></w:tcBorders><w:shd w:val="clear" w:color="auto" w:fill="auto"/><w:noWrap/><w:vAlign w:val="bottom"/></w:tcPr><w:p wsp:rsidR="00BB6175" wsp:rsidRDefault="00BB6175"><w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr><w:t>create.cmd</w:t></w:r><w:proofErr w:type="spellEnd"/></w:p></w:tc><w:tc><w:tcPr><w:tcW w:w="1020" w:type="dxa"/><w:tcBorders><w:top w:val="nil"/><w:left w:val="nil"/><w:bottom w:val="nil"/><w:right w:val="nil"/></w:tcBorders><w:shd w:val="clear" w:color="auto" w:fill="auto"/><w:noWrap/><w:vAlign w:val="bottom"/></w:tcPr><w:p wsp:rsidR="00BB6175" wsp:rsidRDefault="00BB6175"><w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:pPr></w:p></w:tc></w:tr><w:tr wsp:rsidR="00BB6175" wsp:rsidTr="00BB6175"><w:trPr><w:trHeight w:val="255"/></w:trPr><w:tc><w:tcPr><w:tcW w:w="2788" w:type="dxa"/><w:tcBorders><w:top w:val="nil"/><w:left w:val="nil"/><w:bottom w:val="nil"/><w:right w:val="nil"/></w:tcBorders><w:shd w:val="clear" w:color="auto" w:fill="auto"/><w:noWrap/><w:vAlign w:val="bottom"/></w:tcPr><w:p wsp:rsidR="00BB6175" wsp:rsidRDefault="00BB6175"><w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr><w:t>branch</w:t></w:r></w:p></w:tc><w:proofErr w:type="spellStart"/><w:tc><w:tcPr><w:tcW w:w="6172" w:type="dxa"/><w:tcBorders><w:top w:val="nil"/><w:left w:val="nil"/><w:bottom w:val="nil"/><w:right w:val="nil"/></w:tcBorders><w:shd w:val="clear" w:color="auto" w:fill="auto"/><w:noWrap/><w:vAlign w:val="bottom"/></w:tcPr><w:p wsp:rsidR="00BB6175" wsp:rsidRDefault="00BB6175"><w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr><w:t>export.cmd</w:t></w:r><w:proofErr w:type="spellEnd"/></w:p></w:tc><w:tc><w:tcPr><w:tcW w:w="1020" w:type="dxa"/><w:tcBorders><w:top w:val="nil"/><w:left w:val="nil"/><w:bottom w:val="nil"/><w:right w:val="nil"/></w:tcBorders><w:shd w:val="clear" w:color="auto" w:fill="auto"/><w:noWrap/><w:vAlign w:val="bottom"/></w:tcPr><w:p wsp:rsidR="00BB6175" wsp:rsidRDefault="00BB6175"><w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:pPr></w:p></w:tc></w:tr><w:tr wsp:rsidR="00BB6175" wsp:rsidTr="00BB6175"><w:trPr><w:trHeight w:val="255"/></w:trPr><w:tc><w:tcPr><w:tcW w:w="2788" w:type="dxa"/><w:tcBorders><w:top w:val="nil"/><w:left w:val="nil"/><w:bottom w:val="nil"/><w:right w:val="nil"/></w:tcBorders><w:shd w:val="clear" w:color="auto" w:fill="auto"/><w:noWrap/><w:vAlign w:val="bottom"/></w:tcPr><w:p wsp:rsidR="00BB6175" wsp:rsidRDefault="00BB6175"><w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr><w:t>branch</w:t></w:r></w:p></w:tc><w:proofErr w:type="spellStart"/><w:tc><w:tcPr><w:tcW w:w="6172" w:type="dxa"/><w:tcBorders><w:top w:val="nil"/><w:left w:val="nil"/><w:bottom w:val="nil"/><w:right w:val="nil"/></w:tcBorders><w:shd w:val="clear" w:color="auto" w:fill="auto"/><w:noWrap/><w:vAlign w:val="bottom"/></w:tcPr><w:p wsp:rsidR="00BB6175" wsp:rsidRDefault="00BB6175"><w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr><w:t>import.cmd</w:t></w:r><w:proofErr w:type="spellEnd"/></w:p></w:tc><w:tc><w:tcPr><w:tcW w:w="1020" w:type="dxa"/><w:tcBorders><w:top w:val="nil"/><w:left w:val="nil"/><w:bottom w:val="nil"/><w:right w:val="nil"/></w:tcBorders><w:shd w:val="clear" w:color="auto" w:fill="auto"/><w:noWrap/><w:vAlign w:val="bottom"/></w:tcPr><w:p wsp:rsidR="00BB6175" wsp:rsidRDefault="00BB6175"><w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:pPr></w:p></w:tc></w:tr><w:tr wsp:rsidR="00BB6175" wsp:rsidTr="00BB6175"><w:trPr><w:trHeight w:val="255"/></w:trPr><w:tc><w:tcPr><w:tcW w:w="2788" w:type="dxa"/><w:tcBorders><w:top w:val="nil"/><w:left w:val="nil"/><w:bottom w:val="nil"/><w:right w:val="nil"/></w:tcBorders><w:shd w:val="clear" w:color="auto" w:fill="auto"/><w:noWrap/><w:vAlign w:val="bottom"/></w:tcPr><w:p wsp:rsidR="00BB6175" wsp:rsidRDefault="00BB6175"><w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr><w:t>resource</w:t></w:r></w:p></w:tc><w:proofErr w:type="spellStart"/><w:tc><w:tcPr><w:tcW w:w="6172" w:type="dxa"/><w:tcBorders><w:top w:val="nil"/><w:left w:val="nil"/><w:bottom w:val="nil"/><w:right w:val="nil"/></w:tcBorders><w:shd w:val="clear" w:color="auto" w:fill="auto"/><w:noWrap/><w:vAlign w:val="bottom"/></w:tcPr><w:p wsp:rsidR="00BB6175" wsp:rsidRDefault="00BB6175"><w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr><w:t>get.cmd</w:t></w:r><w:proofErr w:type="spellEnd"/></w:p></w:tc><w:tc><w:tcPr><w:tcW w:w="1020" w:type="dxa"/><w:tcBorders><w:top w:val="nil"/><w:left w:val="nil"/><w:bottom w:val="nil"/><w:right w:val="nil"/></w:tcBorders><w:shd w:val="clear" w:color="auto" w:fill="auto"/><w:noWrap/><w:vAlign w:val="bottom"/></w:tcPr><w:p wsp:rsidR="00BB6175" wsp:rsidRDefault="00BB6175"><w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:pPr></w:p></w:tc></w:tr><w:tr wsp:rsidR="00BB6175" wsp:rsidTr="00BB6175"><w:trPr><w:trHeight w:val="255"/></w:trPr><w:tc><w:tcPr><w:tcW w:w="2788" w:type="dxa"/><w:tcBorders><w:top w:val="nil"/><w:left w:val="nil"/><w:bottom w:val="nil"/><w:right w:val="nil"/></w:tcBorders><w:shd w:val="clear" w:color="auto" w:fill="auto"/><w:noWrap/><w:vAlign w:val="bottom"/></w:tcPr><w:p wsp:rsidR="00BB6175" wsp:rsidRDefault="00BB6175"><w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr><w:t>resource</w:t></w:r></w:p></w:tc><w:proofErr w:type="spellStart"/><w:tc><w:tcPr><w:tcW w:w="6172" w:type="dxa"/><w:tcBorders><w:top w:val="nil"/><w:left w:val="nil"/><w:bottom w:val="nil"/><w:right w:val="nil"/></w:tcBorders><w:shd w:val="clear" w:color="auto" w:fill="auto"/><w:noWrap/><w:vAlign w:val="bottom"/></w:tcPr><w:p wsp:rsidR="00BB6175" wsp:rsidRDefault="00BB6175"><w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr><w:t>put.cmd</w:t></w:r><w:proofErr w:type="spellEnd"/></w:p></w:tc><w:tc><w:tcPr><w:tcW w:w="1020" w:type="dxa"/><w:tcBorders><w:top w:val="nil"/><w:left w:val="nil"/><w:bottom w:val="nil"/><w:right w:val="nil"/></w:tcBorders><w:shd w:val="clear" w:color="auto" w:fill="auto"/><w:noWrap/><w:vAlign w:val="bottom"/></w:tcPr><w:p wsp:rsidR="00BB6175" wsp:rsidRDefault="00BB6175"><w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:pPr></w:p></w:tc></w:tr><w:tr wsp:rsidR="00BB6175" wsp:rsidTr="00BB6175"><w:trPr><w:trHeight w:val="255"/></w:trPr><w:tc><w:tcPr><w:tcW w:w="2788" w:type="dxa"/><w:tcBorders><w:top w:val="nil"/><w:left w:val="nil"/><w:bottom w:val="nil"/><w:right w:val="nil"/></w:tcBorders><w:shd w:val="clear" w:color="auto" w:fill="auto"/><w:noWrap/><w:vAlign w:val="bottom"/></w:tcPr><w:p wsp:rsidR="00BB6175" wsp:rsidRDefault="00BB6175"><w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr><w:t>resource</w:t></w:r></w:p></w:tc><w:proofErr w:type="spellStart"/><w:tc><w:tcPr><w:tcW w:w="6172" w:type="dxa"/><w:tcBorders><w:top w:val="nil"/><w:left w:val="nil"/><w:bottom w:val="nil"/><w:right w:val="nil"/></w:tcBorders><w:shd w:val="clear" w:color="auto" w:fill="auto"/><w:noWrap/><w:vAlign w:val="bottom"/></w:tcPr><w:p wsp:rsidR="00BB6175" wsp:rsidRDefault="00BB6175"><w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr><w:t>delete.cmd</w:t></w:r><w:proofErr w:type="spellEnd"/></w:p></w:tc><w:tc><w:tcPr><w:tcW w:w="1020" w:type="dxa"/><w:tcBorders><w:top w:val="nil"/><w:left w:val="nil"/><w:bottom w:val="nil"/><w:right w:val="nil"/></w:tcBorders><w:shd w:val="clear" w:color="auto" w:fill="auto"/><w:noWrap/><w:vAlign w:val="bottom"/></w:tcPr><w:p wsp:rsidR="00BB6175" wsp:rsidRDefault="00BB6175"><w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:pPr></w:p></w:tc></w:tr><w:tr wsp:rsidR="00BB6175" wsp:rsidTr="00BB6175"><w:trPr><w:trHeight w:val="255"/></w:trPr><w:tc><w:tcPr><w:tcW w:w="2788" w:type="dxa"/><w:tcBorders><w:top w:val="nil"/><w:left w:val="nil"/><w:bottom w:val="nil"/><w:right w:val="nil"/></w:tcBorders><w:shd w:val="clear" w:color="auto" w:fill="auto"/><w:noWrap/><w:vAlign w:val="bottom"/></w:tcPr><w:p wsp:rsidR="00BB6175" wsp:rsidRDefault="00BB6175"><w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr><w:t>search</w:t></w:r></w:p></w:tc><w:proofErr w:type="spellStart"/><w:tc><w:tcPr><w:tcW w:w="6172" w:type="dxa"/><w:tcBorders><w:top w:val="nil"/><w:left w:val="nil"/><w:bottom w:val="nil"/><w:right w:val="nil"/></w:tcBorders><w:shd w:val="clear" w:color="auto" w:fill="auto"/><w:noWrap/><w:vAlign w:val="bottom"/></w:tcPr><w:p wsp:rsidR="00BB6175" wsp:rsidRDefault="00BB6175"><w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr><w:t>cmd</w:t></w:r><w:proofErr w:type="spellEnd"/></w:p></w:tc><w:tc><w:tcPr><w:tcW w:w="1020" w:type="dxa"/><w:tcBorders><w:top w:val="nil"/><w:left w:val="nil"/><w:bottom w:val="nil"/><w:right w:val="nil"/></w:tcBorders><w:shd w:val="clear" w:color="auto" w:fill="auto"/><w:noWrap/><w:vAlign w:val="bottom"/></w:tcPr><w:p wsp:rsidR="00BB6175" wsp:rsidRDefault="00BB6175"><w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:pPr></w:p></w:tc></w:tr><w:tr wsp:rsidR="00BB6175" wsp:rsidTr="00BB6175"><w:trPr><w:trHeight w:val="255"/></w:trPr><w:tc><w:tcPr><w:tcW w:w="2788" w:type="dxa"/><w:tcBorders><w:top w:val="nil"/><w:left w:val="nil"/><w:bottom w:val="nil"/><w:right w:val="nil"/></w:tcBorders><w:shd w:val="clear" w:color="auto" w:fill="auto"/><w:noWrap/><w:vAlign w:val="bottom"/></w:tcPr><w:p wsp:rsidR="00BB6175" wsp:rsidRDefault="00BB6175"><w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr><w:t>search</w:t></w:r></w:p></w:tc><w:proofErr w:type="spellStart"/><w:tc><w:tcPr><w:tcW w:w="6172" w:type="dxa"/><w:tcBorders><w:top w:val="nil"/><w:left w:val="nil"/><w:bottom w:val="nil"/><w:right w:val="nil"/></w:tcBorders><w:shd w:val="clear" w:color="auto" w:fill="auto"/><w:noWrap/><w:vAlign w:val="bottom"/></w:tcPr><w:p wsp:rsidR="00BB6175" wsp:rsidRDefault="00BB6175"><w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr><w:t>submit.for.tagging.cmd</w:t></w:r><w:proofErr w:type="spellEnd"/></w:p></w:tc><w:tc><w:tcPr><w:tcW w:w="1020" w:type="dxa"/><w:tcBorders><w:top w:val="nil"/><w:left w:val="nil"/><w:bottom w:val="nil"/><w:right w:val="nil"/></w:tcBorders><w:shd w:val="clear" w:color="auto" w:fill="auto"/><w:noWrap/><w:vAlign w:val="bottom"/></w:tcPr><w:p wsp:rsidR="00BB6175" wsp:rsidRDefault="00BB6175"><w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:pPr></w:p></w:tc></w:tr><w:tr wsp:rsidR="00BB6175" wsp:rsidTr="00BB6175"><w:trPr><w:trHeight w:val="255"/></w:trPr><w:tc><w:tcPr><w:tcW w:w="2788" w:type="dxa"/><w:tcBorders><w:top w:val="nil"/><w:left w:val="nil"/><w:bottom w:val="nil"/><w:right w:val="nil"/></w:tcBorders><w:shd w:val="clear" w:color="auto" w:fill="auto"/><w:noWrap/><w:vAlign w:val="bottom"/></w:tcPr><w:p wsp:rsidR="00BB6175" wsp:rsidRDefault="00BB6175"><w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr><w:t>arbitration</w:t></w:r></w:p></w:tc><w:proofErr w:type="spellStart"/><w:tc><w:tcPr><w:tcW w:w="6172" w:type="dxa"/><w:tcBorders><w:top w:val="nil"/><w:left w:val="nil"/><w:bottom w:val="nil"/><w:right w:val="nil"/></w:tcBorders><w:shd w:val="clear" w:color="auto" w:fill="auto"/><w:noWrap/><w:vAlign w:val="bottom"/></w:tcPr><w:p wsp:rsidR="00BB6175" wsp:rsidRDefault="00BB6175"><w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr><w:t>application.server.lookup.cmd</w:t></w:r><w:proofErr w:type="spellEnd"/></w:p></w:tc><w:tc><w:tcPr><w:tcW w:w="1020" w:type="dxa"/><w:tcBorders><w:top w:val="nil"/><w:left w:val="nil"/><w:bottom w:val="nil"/><w:right w:val="nil"/></w:tcBorders><w:shd w:val="clear" w:color="auto" w:fill="auto"/><w:noWrap/><w:vAlign w:val="bottom"/></w:tcPr><w:p wsp:rsidR="00BB6175" wsp:rsidRDefault="00BB6175"><w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:pPr></w:p></w:tc></w:tr><w:proofErr w:type="spellStart"/><w:tr wsp:rsidR="00BB6175" wsp:rsidTr="00BB6175"><w:trPr><w:trHeight w:val="255"/></w:trPr><w:tc><w:tcPr><w:tcW w:w="2788" w:type="dxa"/><w:tcBorders><w:top w:val="nil"/><w:left w:val="nil"/><w:bottom w:val="nil"/><w:right w:val="nil"/></w:tcBorders><w:shd w:val="clear" w:color="auto" w:fill="auto"/><w:noWrap/><w:vAlign w:val="bottom"/></w:tcPr><w:p wsp:rsidR="00BB6175" wsp:rsidRDefault="00BB6175"><w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr><w:t>util.exchange</w:t></w:r><w:proofErr w:type="spellEnd"/></w:p></w:tc><w:proofErr w:type="spellStart"/><w:tc><w:tcPr><w:tcW w:w="6172" w:type="dxa"/><w:tcBorders><w:top w:val="nil"/><w:left w:val="nil"/><w:bottom w:val="nil"/><w:right w:val="nil"/></w:tcBorders><w:shd w:val="clear" w:color="auto" w:fill="auto"/><w:noWrap/><w:vAlign w:val="bottom"/></w:tcPr><w:p wsp:rsidR="00BB6175" wsp:rsidRDefault="00BB6175"><w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr><w:t>file.verification.cmd</w:t></w:r><w:proofErr w:type="spellEnd"/></w:p></w:tc><w:tc><w:tcPr><w:tcW w:w="1020" w:type="dxa"/><w:tcBorders><w:top w:val="nil"/><w:left w:val="nil"/><w:bottom w:val="nil"/><w:right w:val="nil"/></w:tcBorders><w:shd w:val="clear" w:color="auto" w:fill="auto"/><w:noWrap/><w:vAlign w:val="bottom"/></w:tcPr><w:p wsp:rsidR="00BB6175" wsp:rsidRDefault="00BB6175"><w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:pPr></w:p></w:tc></w:tr><w:proofErr w:type="spellStart"/><w:tr wsp:rsidR="00BB6175" wsp:rsidTr="00BB6175"><w:trPr><w:trHeight w:val="255"/></w:trPr><w:tc><w:tcPr><w:tcW w:w="2788" w:type="dxa"/><w:tcBorders><w:top w:val="nil"/><w:left w:val="nil"/><w:bottom w:val="nil"/><w:right w:val="nil"/></w:tcBorders><w:shd w:val="clear" w:color="auto" w:fill="auto"/><w:noWrap/><w:vAlign w:val="bottom"/></w:tcPr><w:p wsp:rsidR="00BB6175" wsp:rsidRDefault="00BB6175"><w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr><w:t>util.install</w:t></w:r><w:proofErr w:type="spellEnd"/></w:p></w:tc><w:proofErr w:type="spellStart"/><w:tc><w:tcPr><w:tcW w:w="6172" w:type="dxa"/><w:tcBorders><w:top w:val="nil"/><w:left w:val="nil"/><w:bottom w:val="nil"/><w:right w:val="nil"/></w:tcBorders><w:shd w:val="clear" w:color="auto" w:fill="auto"/><w:noWrap/><w:vAlign w:val="bottom"/></w:tcPr><w:p wsp:rsidR="00BB6175" wsp:rsidRDefault="00BB6175"><w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr><w:t>get.info.cmd</w:t></w:r><w:proofErr w:type="spellEnd"/></w:p></w:tc><w:tc><w:tcPr><w:tcW w:w="1020" w:type="dxa"/><w:tcBorders><w:top w:val="nil"/><w:left w:val="nil"/><w:bottom w:val="nil"/><w:right w:val="nil"/></w:tcBorders><w:shd w:val="clear" w:color="auto" w:fill="auto"/><w:noWrap/><w:vAlign w:val="bottom"/></w:tcPr><w:p wsp:rsidR="00BB6175" wsp:rsidRDefault="00BB6175"><w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:pPr></w:p></w:tc></w:tr></w:tbl><w:p wsp:rsidR="00BB6175" wsp:rsidRDefault="00BB6175"/><w:p wsp:rsidR="00BA3064" wsp:rsidRDefault="00BA3064"/><w:p wsp:rsidR="00BA3064" wsp:rsidRDefault="00BA3064"><w:r><w:t>Message </w:t></w:r></w:p><w:p wsp:rsidR="00BA3064" wsp:rsidRDefault="00BA3064"><w:r><w:t>Topic</w:t></w:r></w:p><w:p wsp:rsidR="00BA3064" wsp:rsidRDefault="00BA3064"/><w:p wsp:rsidR="00BA3064" wsp:rsidRDefault="00BA3064"><w:r><w:t>Topic contains namespace and id – topic defines destination local or remote </w:t></w:r></w:p><w:p wsp:rsidR="00BA3064" wsp:rsidRDefault="00BA3064"/><w:p wsp:rsidR="00BA3064" wsp:rsidRDefault="00BA3064"/><w:p wsp:rsidR="00BA3064" wsp:rsidRDefault="00BA3064"/><w:p wsp:rsidR="00BA3064" wsp:rsidRDefault="007E3E05"><w:r><w:rPr><w:noProof/></w:rPr></w:r><w:r><w:pict><v:group id="_x0000_s1027" editas="canvas" style="width:6in;height:252pt;mso-position-horizontal-relative:char;mso-position-vertical-relative:line" coordorigin="2532,5772" coordsize="7200,4320"><o:lock v:ext="edit" aspectratio="t"/><v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"><v:stroke joinstyle="miter"/><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"/><v:f eqn="sum @0 1 0"/><v:f eqn="sum 0 0 @1"/><v:f eqn="prod @2 1 2"/><v:f eqn="prod @3 21600 pixelWidth"/><v:f eqn="prod @3 21600 pixelHeight"/><v:f eqn="sum @0 0 1"/><v:f eqn="prod @6 1 2"/><v:f eqn="prod @7 21600 pixelWidth"/><v:f eqn="sum @8 21600 0"/><v:f eqn="prod @7 21600 pixelHeight"/><v:f eqn="sum @10 21600 0"/></v:formulas><v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/><o:lock v:ext="edit" aspectratio="t"/></v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style="position:absolute;left:2532;top:5772;width:7200;height:4320" o:preferrelative="f"><v:fill o:detectmouseclick="t"/><v:path o:extrusionok="t" o:connecttype="none"/><o:lock v:ext="edit" text="t"/></v:shape><v:rect id="_x0000_s1028" style="position:absolute;left:2682;top:6081;width:1050;height:771"><v:textbox style="mso-next-textbox:#_x0000_s1028"><w:txbxContent><w:p wsp:rsidR="007E3E05" wsp:rsidRDefault="007E3E05"><w:r><w:t>Branch Manager</w:t></w:r></w:p></w:txbxContent></v:textbox></v:rect><v:rect id="_x0000_s1029" style="position:absolute;left:5682;top:6389;width:1650;height:464"><v:textbox style="mso-next-textbox:#_x0000_s1029"><w:txbxContent><w:p wsp:rsidR="0061196F" wsp:rsidRDefault="0061196F"><w:r><w:t>Message Broker</w:t></w:r></w:p></w:txbxContent></v:textbox></v:rect><v:oval id="_x0000_s1031" style="position:absolute;left:3132;top:8086;width:1500;height:772"><v:textbox style="mso-next-textbox:#_x0000_s1031"><w:txbxContent><w:p wsp:rsidR="0061196F" wsp:rsidRDefault="0061196F"><w:r><w:t>Messaging System</w:t></w:r></w:p></w:txbxContent></v:textbox></v:oval><v:rect id="_x0000_s1036" style="position:absolute;left:6732;top:8086;width:2400;height:1543"><v:textbox style="mso-next-textbox:#_x0000_s1036"><w:txbxContent><w:p wsp:rsidR="0061196F" wsp:rsidRDefault="0061196F"><w:r><w:t>Web Services</w:t></w:r></w:p></w:txbxContent></v:textbox></v:rect><v:line id="_x0000_s1037" style="position:absolute;flip:x" from="5232,8858" to="6732,8858"><v:stroke endarrow="block"/></v:line><v:line id="_x0000_s1038" style="position:absolute" from="5232,9321" to="6732,9321"><v:stroke endarrow="block"/></v:line><v:shapetype id="_x0000_t202" coordsize="21600,21600" o:spt="202" path="m,l,21600r21600,l21600,xe"><v:stroke joinstyle="miter"/><v:path gradientshapeok="t" o:connecttype="rect"/></v:shapetype><v:shape id="_x0000_s1039" type="#_x0000_t202" style="position:absolute;left:5382;top:8086;width:1050;height:617"><v:textbox style="mso-next-textbox:#_x0000_s1039"><w:txbxContent><w:p wsp:rsidR="0061196F" wsp:rsidRDefault="0061196F"><w:r><w:t>Publishes</w:t></w:r></w:p></w:txbxContent></v:textbox></v:shape><v:shape id="_x0000_s1040" type="#_x0000_t202" style="position:absolute;left:5382;top:9475;width:1200;height:463"><v:textbox style="mso-next-textbox:#_x0000_s1040"><w:txbxContent><w:p wsp:rsidR="0061196F" wsp:rsidRDefault="0061196F"><w:r><w:t>Subscribes</w:t></w:r></w:p></w:txbxContent></v:textbox></v:shape><w10:wrap type="none"/><w10:anchorlock/></v:group></w:pict></w:r></w:p><w:p wsp:rsidR="00BA3064" wsp:rsidRDefault="00BA3064"/><w:p wsp:rsidR="00BA3064" wsp:rsidRDefault="00BA3064"/><w:p wsp:rsidR="00BA3064" wsp:rsidRDefault="00BA3064"/><w:p wsp:rsidR="00BA3064" wsp:rsidRDefault="00BA3064"/><w:p wsp:rsidR="00BA3064" wsp:rsidRDefault="00BA3064"/><w:sectPr wsp:rsidR="00BA3064"><w:pgSz w:w="12240" w:h="15840"/><w:pgMar w:top="1440" w:right="1800" w:bottom="1440" w:left="1800" w:header="720" w:footer="720" w:gutter="0"/><w:cols w:space="720"/><w:docGrid w:line-pitch="360"/></w:sectPr></wx:sect></w:body></w:wordDocument> \ No newline at end of file
diff --git a/plugins/org.eclipse.osee.framework.messaging/jaxb/README.txt b/plugins/org.eclipse.osee.framework.messaging/jaxb/README.txt
new file mode 100644
index 0000000000..76cb7f79ea
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/jaxb/README.txt
@@ -0,0 +1 @@
+xjc testMessages.xsd -d ../src-gen -p org.eclipse.osee.framework.messaging.services.messages \ No newline at end of file
diff --git a/plugins/org.eclipse.osee.framework.messaging/jaxb/testMessages.xsd b/plugins/org.eclipse.osee.framework.messaging/jaxb/testMessages.xsd
new file mode 100644
index 0000000000..4a5e6dc1c3
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/jaxb/testMessages.xsd
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
+ jxb:version="2.0">
+
+<xsd:element name="ServiceHealth" type="ServiceHealth"/>
+<xsd:element name="ServiceHealthRequest" type="ServiceHealthRequest"/>
+
+<xsd:complexType name="ServiceDescriptionPair">
+ <xsd:sequence>
+ <xsd:element name="name" type="xsd:string"/>
+ <xsd:element name="value" type="xsd:string"/>
+ </xsd:sequence>
+</xsd:complexType>
+
+<xsd:complexType name="ServiceHealth">
+ <xsd:sequence>
+ <xsd:element name="serviceName" type="xsd:string"/>
+ <xsd:element name="serviceVersion" type="xsd:string"/>
+ <xsd:element name="serviceUniqueId" type="xsd:string"/>
+ <xsd:element name="brokerURI" type="xsd:string"/>
+ <xsd:element name="refreshRateInSeconds" type="xsd:int"/>
+ <xsd:element name="stopping" type="xsd:boolean"/>
+ <xsd:element name="serviceDescription" type="ServiceDescriptionPair" maxOccurs="unbounded"/>
+ </xsd:sequence>
+</xsd:complexType>
+
+<xsd:complexType name="ServiceHealthRequest">
+ <xsd:sequence>
+ <xsd:element name="serviceName" type="xsd:string"/>
+ <xsd:element name="serviceVersion" type="xsd:string"/>
+ <xsd:element name="serviceDescription" type="ServiceDescriptionPair" maxOccurs="unbounded"/>
+ </xsd:sequence>
+</xsd:complexType>
+
+</xsd:schema>
diff --git a/plugins/org.eclipse.osee.framework.messaging/msgSchemas/serviceMessages.xsd b/plugins/org.eclipse.osee.framework.messaging/msgSchemas/serviceMessages.xsd
new file mode 100644
index 0000000000..2eb936cf25
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/msgSchemas/serviceMessages.xsd
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
+ jxb:version="2.0">
+
+<xsd:element name="ServiceHealth" type="ServiceHealth"/>
+<xsd:element name="ServiceHealthRequest" type="ServiceHealthRequest"/>
+
+<xsd:complexType name="ServiceDescriptionPair">
+ <xsd:sequence>
+ <xsd:element name="name" type="xsd:string"/>
+ <xsd:element name="value" type="xsd:string"/>
+ </xsd:sequence>
+</xsd:complexType>
+
+<xsd:complexType name="ServiceHealth">
+ <xsd:sequence>
+ <xsd:element name="serviceName" type="xsd:string"/>
+ <xsd:element name="serviceVersion" type="xsd:string"/>
+ <xsd:element name="serviceUniqueId" type="xsd:string"/>
+ <xsd:element name="brokerURI" type="xsd:string"/>
+ <xsd:element name="refreshRateInSeconds" type="xsd:int"/>
+ <xsd:element name="serviceDescription" type="ServiceDescriptionPair" maxOccurs="unbounded"/>
+ </xsd:sequence>
+</xsd:complexType>
+
+<xsd:complexType name="ServiceHealthRequest">
+ <xsd:sequence>
+ <xsd:element name="serviceName" type="xsd:string"/>
+ <xsd:element name="serviceVersion" type="xsd:string"/>
+ <xsd:element name="serviceDescription" type="ServiceDescriptionPair" maxOccurs="unbounded"/>
+ </xsd:sequence>
+</xsd:complexType>
+
+</xsd:schema>
diff --git a/plugins/org.eclipse.osee.framework.messaging/src-gen/org/eclipse/osee/framework/messaging/services/messages/ObjectFactory.java b/plugins/org.eclipse.osee.framework.messaging/src-gen/org/eclipse/osee/framework/messaging/services/messages/ObjectFactory.java
new file mode 100644
index 0000000000..ddcc43a7ec
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src-gen/org/eclipse/osee/framework/messaging/services/messages/ObjectFactory.java
@@ -0,0 +1,86 @@
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
+// Any modifications to this file will be lost upon recompilation of the source schema.
+// Generated on: 2010.02.11 at 01:37:14 PM MST
+//
+
+
+package org.eclipse.osee.framework.messaging.services.messages;
+
+import javax.xml.bind.JAXBElement;
+import javax.xml.bind.annotation.XmlElementDecl;
+import javax.xml.bind.annotation.XmlRegistry;
+import javax.xml.namespace.QName;
+
+
+/**
+ * This object contains factory methods for each
+ * Java content interface and Java element interface
+ * generated in the org.eclipse.osee.framework.messaging.services.messages package.
+ * <p>An ObjectFactory allows you to programatically
+ * construct new instances of the Java representation
+ * for XML content. The Java representation of XML
+ * content can consist of schema derived interfaces
+ * and classes representing the binding of schema
+ * type definitions, element declarations and model
+ * groups. Factory methods for each of these are
+ * provided in this class.
+ *
+ */
+@XmlRegistry
+public class ObjectFactory {
+
+ private final static QName _ServiceHealth_QNAME = new QName("", "ServiceHealth");
+ private final static QName _ServiceHealthRequest_QNAME = new QName("", "ServiceHealthRequest");
+
+ /**
+ * Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: org.eclipse.osee.framework.messaging.services.messages
+ *
+ */
+ public ObjectFactory() {
+ }
+
+ /**
+ * Create an instance of {@link ServiceHealth }
+ *
+ */
+ public ServiceHealth createServiceHealth() {
+ return new ServiceHealth();
+ }
+
+ /**
+ * Create an instance of {@link ServiceHealthRequest }
+ *
+ */
+ public ServiceHealthRequest createServiceHealthRequest() {
+ return new ServiceHealthRequest();
+ }
+
+ /**
+ * Create an instance of {@link ServiceDescriptionPair }
+ *
+ */
+ public ServiceDescriptionPair createServiceDescriptionPair() {
+ return new ServiceDescriptionPair();
+ }
+
+ /**
+ * Create an instance of {@link JAXBElement }{@code <}{@link ServiceHealth }{@code >}}
+ *
+ */
+ @XmlElementDecl(namespace = "", name = "ServiceHealth")
+ public JAXBElement<ServiceHealth> createServiceHealth(ServiceHealth value) {
+ return new JAXBElement<ServiceHealth>(_ServiceHealth_QNAME, ServiceHealth.class, null, value);
+ }
+
+ /**
+ * Create an instance of {@link JAXBElement }{@code <}{@link ServiceHealthRequest }{@code >}}
+ *
+ */
+ @XmlElementDecl(namespace = "", name = "ServiceHealthRequest")
+ public JAXBElement<ServiceHealthRequest> createServiceHealthRequest(ServiceHealthRequest value) {
+ return new JAXBElement<ServiceHealthRequest>(_ServiceHealthRequest_QNAME, ServiceHealthRequest.class, null, value);
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src-gen/org/eclipse/osee/framework/messaging/services/messages/ServiceDescriptionPair.java b/plugins/org.eclipse.osee.framework.messaging/src-gen/org/eclipse/osee/framework/messaging/services/messages/ServiceDescriptionPair.java
new file mode 100644
index 0000000000..500343cca2
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src-gen/org/eclipse/osee/framework/messaging/services/messages/ServiceDescriptionPair.java
@@ -0,0 +1,97 @@
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
+// Any modifications to this file will be lost upon recompilation of the source schema.
+// Generated on: 2010.02.11 at 01:37:14 PM MST
+//
+
+
+package org.eclipse.osee.framework.messaging.services.messages;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for ServiceDescriptionPair complex type.
+ *
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ *
+ * <pre>
+ * &lt;complexType name="ServiceDescriptionPair">
+ * &lt;complexContent>
+ * &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * &lt;sequence>
+ * &lt;element name="name" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ * &lt;element name="value" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ * &lt;/sequence>
+ * &lt;/restriction>
+ * &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "ServiceDescriptionPair", propOrder = {
+ "name",
+ "value"
+})
+public class ServiceDescriptionPair {
+
+ @XmlElement(required = true)
+ protected String name;
+ @XmlElement(required = true)
+ protected String value;
+
+ /**
+ * Gets the value of the name property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * Sets the value of the name property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setName(String value) {
+ this.name = value;
+ }
+
+ /**
+ * Gets the value of the value property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getValue() {
+ return value;
+ }
+
+ /**
+ * Sets the value of the value property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setValue(String value) {
+ this.value = value;
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src-gen/org/eclipse/osee/framework/messaging/services/messages/ServiceHealth.java b/plugins/org.eclipse.osee.framework.messaging/src-gen/org/eclipse/osee/framework/messaging/services/messages/ServiceHealth.java
new file mode 100644
index 0000000000..5e5ec05a3b
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src-gen/org/eclipse/osee/framework/messaging/services/messages/ServiceHealth.java
@@ -0,0 +1,226 @@
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
+// Any modifications to this file will be lost upon recompilation of the source schema.
+// Generated on: 2010.02.11 at 01:37:14 PM MST
+//
+
+
+package org.eclipse.osee.framework.messaging.services.messages;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for ServiceHealth complex type.
+ *
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ *
+ * <pre>
+ * &lt;complexType name="ServiceHealth">
+ * &lt;complexContent>
+ * &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * &lt;sequence>
+ * &lt;element name="serviceName" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ * &lt;element name="serviceVersion" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ * &lt;element name="serviceUniqueId" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ * &lt;element name="brokerURI" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ * &lt;element name="refreshRateInSeconds" type="{http://www.w3.org/2001/XMLSchema}int"/>
+ * &lt;element name="stopping" type="{http://www.w3.org/2001/XMLSchema}boolean"/>
+ * &lt;element name="serviceDescription" type="{}ServiceDescriptionPair" maxOccurs="unbounded"/>
+ * &lt;/sequence>
+ * &lt;/restriction>
+ * &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "ServiceHealth", propOrder = {
+ "serviceName",
+ "serviceVersion",
+ "serviceUniqueId",
+ "brokerURI",
+ "refreshRateInSeconds",
+ "stopping",
+ "serviceDescription"
+})
+public class ServiceHealth {
+
+ @XmlElement(required = true)
+ protected String serviceName;
+ @XmlElement(required = true)
+ protected String serviceVersion;
+ @XmlElement(required = true)
+ protected String serviceUniqueId;
+ @XmlElement(required = true)
+ protected String brokerURI;
+ protected int refreshRateInSeconds;
+ protected boolean stopping;
+ @XmlElement(required = true)
+ protected List<ServiceDescriptionPair> serviceDescription;
+
+ /**
+ * Gets the value of the serviceName property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getServiceName() {
+ return serviceName;
+ }
+
+ /**
+ * Sets the value of the serviceName property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setServiceName(String value) {
+ this.serviceName = value;
+ }
+
+ /**
+ * Gets the value of the serviceVersion property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getServiceVersion() {
+ return serviceVersion;
+ }
+
+ /**
+ * Sets the value of the serviceVersion property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setServiceVersion(String value) {
+ this.serviceVersion = value;
+ }
+
+ /**
+ * Gets the value of the serviceUniqueId property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getServiceUniqueId() {
+ return serviceUniqueId;
+ }
+
+ /**
+ * Sets the value of the serviceUniqueId property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setServiceUniqueId(String value) {
+ this.serviceUniqueId = value;
+ }
+
+ /**
+ * Gets the value of the brokerURI property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getBrokerURI() {
+ return brokerURI;
+ }
+
+ /**
+ * Sets the value of the brokerURI property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setBrokerURI(String value) {
+ this.brokerURI = value;
+ }
+
+ /**
+ * Gets the value of the refreshRateInSeconds property.
+ *
+ */
+ public int getRefreshRateInSeconds() {
+ return refreshRateInSeconds;
+ }
+
+ /**
+ * Sets the value of the refreshRateInSeconds property.
+ *
+ */
+ public void setRefreshRateInSeconds(int value) {
+ this.refreshRateInSeconds = value;
+ }
+
+ /**
+ * Gets the value of the stopping property.
+ *
+ */
+ public boolean isStopping() {
+ return stopping;
+ }
+
+ /**
+ * Sets the value of the stopping property.
+ *
+ */
+ public void setStopping(boolean value) {
+ this.stopping = value;
+ }
+
+ /**
+ * Gets the value of the serviceDescription property.
+ *
+ * <p>
+ * This accessor method returns a reference to the live list,
+ * not a snapshot. Therefore any modification you make to the
+ * returned list will be present inside the JAXB object.
+ * This is why there is not a <CODE>set</CODE> method for the serviceDescription property.
+ *
+ * <p>
+ * For example, to add a new item, do as follows:
+ * <pre>
+ * getServiceDescription().add(newItem);
+ * </pre>
+ *
+ *
+ * <p>
+ * Objects of the following type(s) are allowed in the list
+ * {@link ServiceDescriptionPair }
+ *
+ *
+ */
+ public List<ServiceDescriptionPair> getServiceDescription() {
+ if (serviceDescription == null) {
+ serviceDescription = new ArrayList<ServiceDescriptionPair>();
+ }
+ return this.serviceDescription;
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src-gen/org/eclipse/osee/framework/messaging/services/messages/ServiceHealthRequest.java b/plugins/org.eclipse.osee.framework.messaging/src-gen/org/eclipse/osee/framework/messaging/services/messages/ServiceHealthRequest.java
new file mode 100644
index 0000000000..bc1fec6223
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src-gen/org/eclipse/osee/framework/messaging/services/messages/ServiceHealthRequest.java
@@ -0,0 +1,132 @@
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
+// Any modifications to this file will be lost upon recompilation of the source schema.
+// Generated on: 2010.02.11 at 01:37:14 PM MST
+//
+
+
+package org.eclipse.osee.framework.messaging.services.messages;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for ServiceHealthRequest complex type.
+ *
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ *
+ * <pre>
+ * &lt;complexType name="ServiceHealthRequest">
+ * &lt;complexContent>
+ * &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * &lt;sequence>
+ * &lt;element name="serviceName" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ * &lt;element name="serviceVersion" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ * &lt;element name="serviceDescription" type="{}ServiceDescriptionPair" maxOccurs="unbounded"/>
+ * &lt;/sequence>
+ * &lt;/restriction>
+ * &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "ServiceHealthRequest", propOrder = {
+ "serviceName",
+ "serviceVersion",
+ "serviceDescription"
+})
+public class ServiceHealthRequest {
+
+ @XmlElement(required = true)
+ protected String serviceName;
+ @XmlElement(required = true)
+ protected String serviceVersion;
+ @XmlElement(required = true)
+ protected List<ServiceDescriptionPair> serviceDescription;
+
+ /**
+ * Gets the value of the serviceName property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getServiceName() {
+ return serviceName;
+ }
+
+ /**
+ * Sets the value of the serviceName property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setServiceName(String value) {
+ this.serviceName = value;
+ }
+
+ /**
+ * Gets the value of the serviceVersion property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getServiceVersion() {
+ return serviceVersion;
+ }
+
+ /**
+ * Sets the value of the serviceVersion property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setServiceVersion(String value) {
+ this.serviceVersion = value;
+ }
+
+ /**
+ * Gets the value of the serviceDescription property.
+ *
+ * <p>
+ * This accessor method returns a reference to the live list,
+ * not a snapshot. Therefore any modification you make to the
+ * returned list will be present inside the JAXB object.
+ * This is why there is not a <CODE>set</CODE> method for the serviceDescription property.
+ *
+ * <p>
+ * For example, to add a new item, do as follows:
+ * <pre>
+ * getServiceDescription().add(newItem);
+ * </pre>
+ *
+ *
+ * <p>
+ * Objects of the following type(s) are allowed in the list
+ * {@link ServiceDescriptionPair }
+ *
+ *
+ */
+ public List<ServiceDescriptionPair> getServiceDescription() {
+ if (serviceDescription == null) {
+ serviceDescription = new ArrayList<ServiceDescriptionPair>();
+ }
+ return this.serviceDescription;
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/Component.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/Component.java
new file mode 100644
index 0000000000..2d00d5b9b2
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/Component.java
@@ -0,0 +1,40 @@
+/*
+ * Created on Jul 27, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.messaging;
+
+/**
+ * @author b1528444
+ */
+public enum Component {
+
+ VM("osee-vm"),
+ JMS("osee-jms");
+
+ private String name;
+ private String nameWithColon;
+
+ private Component(String name) {
+ this.name = name;
+ this.nameWithColon = name + ":";
+ }
+
+ @Override
+ public String toString() {
+ return name + ":";
+ }
+
+ public String getComponentName() {
+ return name;
+ }
+
+ public String getComponentNameForRoutes() {
+ return nameWithColon;
+ }
+
+ public boolean isVMComponent() {
+ return this.equals(Component.VM);
+ }
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/ComponentListener.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/ComponentListener.java
new file mode 100644
index 0000000000..213ff52df1
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/ComponentListener.java
@@ -0,0 +1,17 @@
+/*
+ * Created on Aug 5, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.messaging;
+
+/**
+ * @author b1528444
+ *
+ */
+public interface ComponentListener {
+
+ void onComponentAvailable(Component component);
+ void onComponentNotAvailable(Component component);
+
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/ConnectionListener.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/ConnectionListener.java
new file mode 100644
index 0000000000..fccdc537d4
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/ConnectionListener.java
@@ -0,0 +1,16 @@
+/*
+ * Created on Feb 18, 2010
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.messaging;
+
+
+/**
+ * @author b1528444
+ *
+ */
+public interface ConnectionListener {
+ void connected(ConnectionNode node);
+ void notConnected(ConnectionNode node);
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/ConnectionNode.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/ConnectionNode.java
new file mode 100644
index 0000000000..4f39b84f78
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/ConnectionNode.java
@@ -0,0 +1,31 @@
+/*
+ * Created on Jan 15, 2010
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.messaging;
+
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+
+/**
+ * @author b1122182
+ */
+public interface ConnectionNode {
+
+ public void subscribe(MessageID messageId, OseeMessagingListener listener, final OseeMessagingStatusCallback statusCallback);
+ public void unsubscribe(MessageID messageId, OseeMessagingListener listener, final OseeMessagingStatusCallback statusCallback);
+
+ public boolean subscribeToReply(MessageID messageId, OseeMessagingListener listener);
+ public boolean unsubscribteToReply(MessageID messageId, OseeMessagingListener listener);
+
+ public void send(MessageID topic, Object body, final OseeMessagingStatusCallback statusCallback) throws OseeCoreException;
+
+ public void addConnectionListener(ConnectionListener connectionListener);
+ public void removeConnectionListener(ConnectionListener connectionListener);
+
+ public void stop();
+
+ String getSummary();
+ String getSubscribers();
+ String getSenders();
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/ConnectionNodeFactory.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/ConnectionNodeFactory.java
new file mode 100644
index 0000000000..9fb8fd76dd
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/ConnectionNodeFactory.java
@@ -0,0 +1,16 @@
+/*
+ * Created on Jan 15, 2010
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.messaging;
+
+
+/**
+ * @author b1122182
+ */
+public interface ConnectionNodeFactory {
+
+ ConnectionNode create(NodeInfo nodeInfo);
+
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/ConnectionNodeFailoverSupport.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/ConnectionNodeFailoverSupport.java
new file mode 100644
index 0000000000..2e0a5e2b56
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/ConnectionNodeFailoverSupport.java
@@ -0,0 +1,17 @@
+/*
+ * Created on Feb 17, 2010
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.messaging;
+
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+
+/**
+ * @author b1528444
+ *
+ */
+public interface ConnectionNodeFailoverSupport extends ConnectionNode {
+ boolean isConnected();
+ public void start() throws OseeCoreException;
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/EndpointReceive.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/EndpointReceive.java
new file mode 100644
index 0000000000..d4cf082715
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/EndpointReceive.java
@@ -0,0 +1,71 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.messaging;
+
+import java.util.Properties;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.logging.Level;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.messaging.internal.Activator;
+import org.eclipse.osee.framework.messaging.internal.old.ApplicationDistributer;
+
+/**
+ * @author Andrew M. Finkbeiner
+ */
+public abstract class EndpointReceive {
+
+ private ApplicationDistributer distributer;
+ private ExecutorService executor;
+
+ public EndpointReceive() {
+ executor = Executors.newSingleThreadExecutor();
+ }
+
+ /**
+ * The MessagingGateway implementation must call this method to set the ApplicationDistributer callback so that
+ * received messages get propagated to the application.
+ *
+ * @param distributer
+ */
+ public void onBind(ApplicationDistributer distributer) {
+ this.distributer = distributer;
+ }
+
+ public void onUnbind(ApplicationDistributer distributer) {
+ this.distributer = null;
+ }
+
+ /**
+ * This method must be called by the implementing class when it receives a message so that it gets propagated to the
+ * MessagingGateway
+ */
+ protected void onReceive(final Message message) {
+ if (distributer == null) {
+ String errorMsg =
+ String.format(
+ "We have recieved message [%s] from [%s], but have no active ApplicationDistributer available.",
+ message.getId().toString(), message.getSource().toString());
+ OseeLog.log(Activator.class, Level.WARNING, errorMsg);
+ } else {
+ executor.execute(new Runnable() {
+ @Override
+ public void run() {
+ distributer.distribute(message);
+ }
+ });
+ }
+ }
+
+ public abstract void start(Properties properties);
+
+ public abstract void dispose();
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/EndpointSend.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/EndpointSend.java
new file mode 100644
index 0000000000..c83d9683cd
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/EndpointSend.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.messaging;
+
+import java.util.Properties;
+
+/**
+ * @author Andrew M. Finkbeiner
+ */
+public interface EndpointSend {
+ public void start(Properties properties);
+
+ public void send(Message message, ExceptionHandler exceptionHandler);
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/ExceptionHandler.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/ExceptionHandler.java
new file mode 100644
index 0000000000..3164ccf281
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/ExceptionHandler.java
@@ -0,0 +1,18 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.messaging;
+
+/**
+ * @author Andrew M. Finkbeiner
+ */
+public interface ExceptionHandler {
+ void handleException(Throwable th);
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/Message.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/Message.java
new file mode 100644
index 0000000000..59be83ace5
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/Message.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.messaging;
+
+import org.eclipse.osee.framework.messaging.id.MessageId;
+
+/**
+ * @author Andrew M. Finkbeiner
+ */
+public interface Message {
+ Source getSource();
+
+ MessageId getId();
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/MessageID.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/MessageID.java
new file mode 100644
index 0000000000..be813d4e76
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/MessageID.java
@@ -0,0 +1,21 @@
+/*
+ * Created on Jan 25, 2010
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.messaging;
+
+import org.eclipse.osee.framework.core.data.Identity;
+import org.eclipse.osee.framework.core.data.Named;
+
+/**
+ * @author b1528444
+ *
+ */
+public interface MessageID extends Named, Identity{
+
+ String getMessageDestination();
+ Class<?> getSerializationClass();
+ boolean isReplyRequired();
+ boolean isTopic();
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/MessageService.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/MessageService.java
new file mode 100644
index 0000000000..962ed4531f
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/MessageService.java
@@ -0,0 +1,27 @@
+/*
+ * Created on Jan 15, 2010
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.messaging;
+
+import java.util.Collection;
+
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+
+/**
+ * @author b1122182
+ */
+public interface MessageService {
+
+ ConnectionNode getDefault() throws OseeCoreException;
+
+ ConnectionNode get(NodeInfo nodeInfo) throws OseeCoreException;
+
+ Collection<NodeInfo> getAvailableConnections();
+
+ int size();
+
+ boolean isEmpty();
+
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/MessageServiceProvider.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/MessageServiceProvider.java
new file mode 100644
index 0000000000..16b400ebdd
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/MessageServiceProvider.java
@@ -0,0 +1,17 @@
+/*
+ * Created on Jan 15, 2010
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.messaging;
+
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+
+/**
+ * @author b1122182
+ */
+public interface MessageServiceProvider {
+
+ MessageService getMessageService() throws OseeCoreException;
+
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/MessagingGateway.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/MessagingGateway.java
new file mode 100644
index 0000000000..d7683a43d5
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/MessagingGateway.java
@@ -0,0 +1,53 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.messaging;
+
+import java.util.Collection;
+import org.eclipse.osee.framework.messaging.id.MessageId;
+import org.eclipse.osee.framework.messaging.id.ProtocolId;
+
+/**
+ * @author Andrew M. Finkbeiner
+ */
+public interface MessagingGateway {
+
+ public void send(Message message, ExceptionHandler exceptionHandler);
+
+ public void dispose();
+
+ public boolean bind(EndpointSend endpoint);
+
+ public boolean unbind(EndpointSend endpoint);
+
+ public boolean bind(EndpointReceive endpoint);
+
+ public boolean unbind(EndpointReceive endpoint);
+
+ public Collection<EndpointSend> getSendEndpoints();
+
+ public Collection<EndpointReceive> getReceiveEndpoints();
+
+ public boolean bindSendProtocol(ProtocolId protocolId, EndpointSend endpoint);
+
+ public boolean unbindSendProtocol(ProtocolId protocolId, EndpointSend endpoint);
+
+ public boolean bindSendMessage(MessageId messageId, ProtocolId protocolId);
+
+ public boolean unbindSendMessage(MessageId messageId, ProtocolId protocolId);
+
+ public void addSendListener(MessageId messageId, SendListener sendListener);
+
+ public void removeSendListener(MessageId messageId, SendListener sendListener);
+
+ public void addReceiveListener(MessageId messageId, ReceiveListener receiveListener);
+
+ public void removeReceiveListener(MessageId messageId, ReceiveListener receiveListener);
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/MessagingTracker.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/MessagingTracker.java
new file mode 100644
index 0000000000..ab7d3e603f
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/MessagingTracker.java
@@ -0,0 +1,22 @@
+/*
+ * Created on Oct 19, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.messaging;
+
+
+import org.eclipse.osee.framework.messaging.internal.Activator;
+import org.osgi.util.tracker.ServiceTracker;
+
+/**
+ * @author b1528444
+ *
+ */
+public class MessagingTracker extends ServiceTracker {
+
+ public MessagingTracker() {
+ super(Activator.getInstance().getContext(), OseeMessaging.class.getName(), null);
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/NodeInfo.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/NodeInfo.java
new file mode 100644
index 0000000000..8e1a8ebae2
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/NodeInfo.java
@@ -0,0 +1,88 @@
+/*
+ * Created on Jan 15, 2010
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.messaging;
+
+import java.net.URI;
+
+
+/**
+ * @author b1122182
+ */
+public class NodeInfo {
+
+ private final URI uri;
+ private final String name;
+ private String nameWithColon;
+
+ public NodeInfo(String name, URI uri) {
+ this.uri = uri;
+ this.name = name;
+ nameWithColon = name + ":";
+ }
+
+ public URI getUri() {
+ return uri;
+ }
+
+ @Override
+ public String toString() {
+ return name + ":" + uri;
+ }
+
+ public String getComponentName() {
+ return name;
+ }
+
+ public String getComponentNameForRoutes() {
+ return nameWithColon;
+ }
+
+ public boolean isVMComponent() {
+ return getComponentName().equals(Component.VM.getComponentName());
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#hashCode()
+ */
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((name == null) ? 0 : name.hashCode());
+ result = prime * result + ((uri == null) ? 0 : uri.hashCode());
+ return result;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ NodeInfo other = (NodeInfo) obj;
+ if (name == null) {
+ if (other.name != null)
+ return false;
+ } else if (!name.equals(other.name))
+ return false;
+ if (uri == null) {
+ if (other.uri != null)
+ return false;
+ } else if (!uri.equals(other.uri))
+ return false;
+ return true;
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/OseeMessaging.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/OseeMessaging.java
new file mode 100644
index 0000000000..688ccb2d7b
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/OseeMessaging.java
@@ -0,0 +1,18 @@
+/*
+ * Created on Jul 27, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.messaging;
+
+
+/**
+ * @author b1528444
+ */
+public interface OseeMessaging {
+
+ public void addListener(Component component, String topic, OseeMessagingListener listener, final OseeMessagingStatusCallback statusCallback);
+
+ public void sendMessage(Component component, String topic, Object body, final OseeMessagingStatusCallback statusCallback);
+
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/OseeMessagingListener.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/OseeMessagingListener.java
new file mode 100644
index 0000000000..a318563d52
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/OseeMessagingListener.java
@@ -0,0 +1,30 @@
+/*
+ * Created on Jul 27, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.messaging;
+
+import java.util.Map;
+
+/**
+ * @author b1528444
+ */
+public abstract class OseeMessagingListener {
+
+ private Class<?> clazz;
+
+ public OseeMessagingListener() {
+ this.clazz = null;
+ }
+
+ public OseeMessagingListener(Class<?> clazz) {
+ this.clazz = clazz;
+ }
+
+ public Class<?> getClazz(){
+ return clazz;
+ }
+
+ public abstract void process(Object message, Map<String, Object> headers, ReplyConnection replyConnection);
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/OseeMessagingStatusCallback.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/OseeMessagingStatusCallback.java
new file mode 100644
index 0000000000..3ef41c46aa
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/OseeMessagingStatusCallback.java
@@ -0,0 +1,16 @@
+/*
+ * Created on Oct 19, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.messaging;
+
+
+/**
+ * @author b1528444
+ *
+ */
+public interface OseeMessagingStatusCallback {
+ void success();
+ void fail(Throwable th);
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/ReceiveListener.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/ReceiveListener.java
new file mode 100644
index 0000000000..ec43a7c0b4
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/ReceiveListener.java
@@ -0,0 +1,18 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.messaging;
+
+/**
+ * @author Andrew M. Finkbeiner
+ */
+public interface ReceiveListener {
+ void handle(Message cmd);
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/ReplyConnection.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/ReplyConnection.java
new file mode 100644
index 0000000000..97c0cbc9aa
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/ReplyConnection.java
@@ -0,0 +1,17 @@
+/*
+ * Created on Jan 20, 2010
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.messaging;
+
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+
+/**
+ * @author b1528444
+ *
+ */
+public interface ReplyConnection {
+ public boolean isReplyRequested();
+ public void send(Object body, Class<?> clazz, final OseeMessagingStatusCallback statusCallback) throws OseeCoreException;
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/SendListener.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/SendListener.java
new file mode 100644
index 0000000000..25ae10bf78
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/SendListener.java
@@ -0,0 +1,18 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.messaging;
+
+/**
+ * @author Andrew M. Finkbeiner
+ */
+public interface SendListener {
+
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/Source.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/Source.java
new file mode 100644
index 0000000000..bea648ef51
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/Source.java
@@ -0,0 +1,18 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.messaging;
+
+/**
+ * @author Andrew M. Finkbeiner
+ */
+public interface Source {
+
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/SystemTopic.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/SystemTopic.java
new file mode 100644
index 0000000000..71d21738cb
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/SystemTopic.java
@@ -0,0 +1,51 @@
+/*
+ * Created on Aug 5, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.messaging;
+
+/**
+ * @author b1122182
+ */
+public enum SystemTopic implements MessageID {
+
+ JMS_HEALTH_STATUS("topic:jms.health.status"),
+ KILL_TEST_JMS_BROKER("jms.kill.broker");
+
+ private String name;
+
+ SystemTopic(String name) {
+ this.name = name;
+ }
+
+ @Override
+ public String getName() {
+ return name;
+ }
+
+ @Override
+ public String getMessageDestination() {
+ return name;
+ }
+
+ @Override
+ public Class<?> getSerializationClass() {
+ return null;
+ }
+
+ @Override
+ public boolean isReplyRequired() {
+ return false;
+ }
+
+ @Override
+ public String getGuid() {
+ return name;
+ }
+
+ @Override
+ public boolean isTopic() {
+ return true;
+ }
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/UriSource.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/UriSource.java
new file mode 100644
index 0000000000..501baad843
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/UriSource.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.messaging;
+
+import java.io.Serializable;
+import java.net.URI;
+
+/**
+ * @author Andrew M. Finkbeiner
+ */
+public class UriSource implements Source, Serializable {
+
+ private static final long serialVersionUID = -917397242786038197L;
+ private final URI source;
+
+ public UriSource(URI source) {
+ this.source = source;
+ }
+
+ public URI getSource() {
+ return source;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (!(obj instanceof UriSource)) {
+ return false;
+ }
+ return source.equals(((UriSource) obj).source);
+ }
+
+ @Override
+ public int hashCode() {
+ return source.hashCode();
+ }
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/definitions/PropertyStoreMessage.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/definitions/PropertyStoreMessage.java
new file mode 100644
index 0000000000..4ceab0e493
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/definitions/PropertyStoreMessage.java
@@ -0,0 +1,57 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.messaging.definitions;
+
+import java.io.Serializable;
+
+import org.eclipse.osee.framework.jdk.core.type.PropertyStore;
+import org.eclipse.osee.framework.messaging.Message;
+import org.eclipse.osee.framework.messaging.Source;
+import org.eclipse.osee.framework.messaging.id.MessageId;
+
+/**
+ * @author Michael P. Masterson
+ */
+public class PropertyStoreMessage implements Message, Serializable {
+
+ private static final long serialVersionUID = -8736301654726742145L;
+
+ private MessageId messageId;
+ private Source source;
+ private PropertyStore store;
+
+ public PropertyStoreMessage(MessageId messageId, Source source)
+ {
+ this.messageId = messageId;
+ this.source = source;
+ this.store = new PropertyStore("org.eclipse.osee.framework.messaging.definitions.PropertyStoreMessage");
+ }
+
+ @Override
+ public String toString() {
+ return String.format("PropertyStoreMessage\t[MessageId: %s]\t[source: %s]", messageId, source);
+ }
+
+ @Override
+ public MessageId getId() {
+ return messageId;
+ }
+
+ @Override
+ public Source getSource() {
+ return source;
+ }
+
+ public PropertyStore getStore() {
+ return store;
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/id/MessageId.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/id/MessageId.java
new file mode 100644
index 0000000000..1b31a8eb6a
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/id/MessageId.java
@@ -0,0 +1,20 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.messaging.id;
+
+/**
+ * @author Andrew M. Finkbeiner
+ */
+public interface MessageId {
+ Namespace getNamespace();
+
+ Name getName();
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/id/Name.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/id/Name.java
new file mode 100644
index 0000000000..15522cadb9
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/id/Name.java
@@ -0,0 +1,18 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.messaging.id;
+
+/**
+ * @author Andrew M. Finkbeiner
+ */
+public interface Name {
+
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/id/Namespace.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/id/Namespace.java
new file mode 100644
index 0000000000..c5895e3fa0
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/id/Namespace.java
@@ -0,0 +1,18 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.messaging.id;
+
+/**
+ * @author Andrew M. Finkbeiner
+ */
+public interface Namespace {
+
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/id/ProtocolId.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/id/ProtocolId.java
new file mode 100644
index 0000000000..5e3aaffd20
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/id/ProtocolId.java
@@ -0,0 +1,20 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.messaging.id;
+
+/**
+ * @author Andrew M. Finkbeiner
+ */
+public interface ProtocolId {
+ Namespace getNamespace();
+
+ Name getName();
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/id/StringId.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/id/StringId.java
new file mode 100644
index 0000000000..a584dadfec
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/id/StringId.java
@@ -0,0 +1,58 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.messaging.id;
+
+import java.io.Serializable;
+
+/**
+ * @author Andrew M. Finkbeiner
+ */
+public abstract class StringId implements Serializable {
+
+ private static final long serialVersionUID = 80655792810954088L;
+ private Namespace namespace;
+ private Name name;
+
+ public StringId(Namespace namespace, Name name) {
+ this.namespace = namespace;
+ this.name = name;
+ }
+
+ @Override
+ public String toString() {
+ return String.format("StringId (NameSpace: %s, Name: %s)", namespace.toString(), name.toString());
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj instanceof StringId) {
+ return namespace.equals(((StringId) obj).namespace) && name.equals(((StringId) obj).name);
+ } else {
+ return false;
+ }
+ }
+
+ @Override
+ public int hashCode() {
+ int hash = 7;
+ hash = 31 * hash + namespace.hashCode();
+ hash = 31 * hash + name.hashCode();
+ return hash;
+ }
+
+ public Name getName() {
+ return name;
+ }
+
+ public Namespace getNamespace() {
+ return namespace;
+ }
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/id/StringMessageId.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/id/StringMessageId.java
new file mode 100644
index 0000000000..acb269cdf1
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/id/StringMessageId.java
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.messaging.id;
+
+/**
+ * @author Andrew M. Finkbeiner
+ */
+public class StringMessageId extends StringId implements MessageId {
+
+ private static final long serialVersionUID = 5645233194938964314L;
+
+ public StringMessageId(Namespace namespace, Name name) {
+ super(namespace, name);
+ }
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/id/StringName.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/id/StringName.java
new file mode 100644
index 0000000000..1e6940d1fb
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/id/StringName.java
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.messaging.id;
+
+import java.io.Serializable;
+
+/**
+ * @author Andrew M. Finkbeiner
+ */
+public class StringName implements Name, Serializable {
+ private static final long serialVersionUID = -7215226960243262972L;
+ private String name;
+
+ public StringName(String name) {
+ this.name = name;
+ }
+
+ @Override
+ public String toString() {
+ return name;
+ }
+
+ @Override
+ public boolean equals(Object arg0) {
+ if (arg0 instanceof StringName) {
+ return name.equals(((StringName) arg0).name);
+ } else {
+ return false;
+ }
+ }
+
+ @Override
+ public int hashCode() {
+ return name.hashCode();
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/id/StringNamespace.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/id/StringNamespace.java
new file mode 100644
index 0000000000..5e46045f95
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/id/StringNamespace.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.messaging.id;
+
+import java.io.Serializable;
+
+/**
+ * @author Andrew M. Finkbeiner
+ */
+public class StringNamespace implements Namespace, Serializable {
+ private static final long serialVersionUID = -8903438134102328929L;
+ private String namespace;
+
+ public StringNamespace(String namespace) {
+ this.namespace = namespace;
+ }
+
+ @Override
+ public String toString() {
+ return namespace;
+ }
+
+ @Override
+ public boolean equals(Object arg0) {
+ if (arg0 instanceof StringNamespace) {
+ return namespace.equals(((StringNamespace) arg0).namespace);
+ } else {
+ return false;
+ }
+ }
+
+ @Override
+ public int hashCode() {
+ return namespace.hashCode();
+ }
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/id/StringProtocolId.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/id/StringProtocolId.java
new file mode 100644
index 0000000000..cff4d4e1b7
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/id/StringProtocolId.java
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.messaging.id;
+
+/**
+ * @author Andrew M. Finkbeiner
+ */
+public class StringProtocolId extends StringId implements ProtocolId {
+
+ private static final long serialVersionUID = 2526404617710228921L;
+
+ public StringProtocolId(Namespace namespace, Name name) {
+ super(namespace, name);
+ }
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/Activator.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/Activator.java
new file mode 100644
index 0000000000..6ece0850c6
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/Activator.java
@@ -0,0 +1,82 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.messaging.internal;
+
+import org.eclipse.osee.framework.messaging.MessageService;
+import org.eclipse.osee.framework.messaging.MessagingGateway;
+import org.eclipse.osee.framework.messaging.internal.old.MessagingGatewayImpl;
+import org.eclipse.osee.framework.messaging.services.internal.ServiceLookupAndRegistrarLifeCycle;
+import org.eclipse.osee.framework.plugin.core.util.ExportClassLoader;
+import org.eclipse.osgi.framework.console.CommandProvider;
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceRegistration;
+
+/**
+ * @author Andrew M. Finkbeiner
+ */
+public class Activator implements BundleActivator {
+ private static Activator me;
+ private BundleContext context;
+
+ private ServiceRegistration msgServiceRegistration;
+ private MessageServiceProviderImpl messageServiceProviderImpl;
+ private ServiceLookupAndRegistrarLifeCycle serviceLookupAndRegistrarLifeCycle;
+ // old
+ private ServiceRegistration registration;
+ private MessagingGatewayImpl messaging;
+ private ServiceRegistration msgCommandProvider;
+
+
+
+ public void start(BundleContext context) throws Exception {
+ this.context = context;
+ me = this;
+ serviceLookupAndRegistrarLifeCycle = new ServiceLookupAndRegistrarLifeCycle(context, ExportClassLoader.getInstance());
+ serviceLookupAndRegistrarLifeCycle.open(true);
+
+ messageServiceProviderImpl = new MessageServiceProviderImpl(ExportClassLoader.getInstance());
+ messageServiceProviderImpl.start();
+ msgServiceRegistration = context.registerService(MessageService.class.getName(), messageServiceProviderImpl.getMessageService(), null);
+
+ msgCommandProvider = context.registerService(CommandProvider.class.getName(), new MessageServiceConsole(messageServiceProviderImpl.getMessageService()), null);
+ //old
+ messaging = new MessagingGatewayImpl();
+ registration = context.registerService(MessagingGateway.class.getName(), messaging, null);
+ }
+
+ public void stop(BundleContext context) throws Exception {
+ me = null;
+ this.context = null;
+
+ if (msgServiceRegistration != null) {
+ msgServiceRegistration.unregister();
+ }
+ messageServiceProviderImpl.stop();
+ msgCommandProvider.unregister();
+ //old
+ if (registration != null) {
+ registration.unregister();
+ }
+
+ if (messaging != null) {
+ messaging.dispose();
+ }
+ }
+
+ public static Activator getInstance() {
+ return me;
+ }
+
+ public BundleContext getContext() {
+ return context;
+ }
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/FailoverConnectionNode.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/FailoverConnectionNode.java
new file mode 100644
index 0000000000..d60b3e1e60
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/FailoverConnectionNode.java
@@ -0,0 +1,208 @@
+/*
+ * Created on Feb 17, 2010
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.messaging.internal;
+
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+import java.util.logging.Level;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.messaging.ConnectionListener;
+import org.eclipse.osee.framework.messaging.ConnectionNode;
+import org.eclipse.osee.framework.messaging.ConnectionNodeFailoverSupport;
+import org.eclipse.osee.framework.messaging.MessageID;
+import org.eclipse.osee.framework.messaging.OseeMessagingListener;
+import org.eclipse.osee.framework.messaging.OseeMessagingStatusCallback;
+
+/**
+ * @author b1528444 This is written using ActiveMQ as the use case. So it will only retry connection and it will keep
+ * all subscribes so that when a valid connection is made it will do all of the requested subscriptions.
+ */
+public class FailoverConnectionNode implements ConnectionNode, Runnable {
+
+ private ConnectionNodeFailoverSupport connectionNode;
+ private List<SavedSubscribe> savedSubscribes;
+ private List<ConnectionListener> connectionListeners;
+ private ScheduledExecutorService scheduledExecutor;
+ private boolean lastConnectedState = false;
+
+ public FailoverConnectionNode(ConnectionNodeFailoverSupport connectionNode, ScheduledExecutorService scheduledExecutor) {
+ this.connectionNode = connectionNode;
+ savedSubscribes = new CopyOnWriteArrayList<SavedSubscribe>();
+ connectionListeners = new CopyOnWriteArrayList<ConnectionListener>();
+ this.scheduledExecutor = scheduledExecutor;
+ this.scheduledExecutor.scheduleAtFixedRate(this, 60, 60, TimeUnit.SECONDS);
+ }
+
+ @Override
+ public void send(MessageID topic, Object body, OseeMessagingStatusCallback statusCallback) throws OseeCoreException {
+ attemptSmartConnect();
+ connectionNode.send(topic, body, statusCallback);
+ }
+
+ private void attemptSmartConnect() {
+ if(!lastConnectedState){
+ run();
+ }
+ }
+
+ @Override
+ public void stop() {
+ connectionNode.stop();
+ }
+
+ @Override
+ public void subscribe(MessageID messageId, OseeMessagingListener listener, OseeMessagingStatusCallback statusCallback) {
+ savedSubscribes.add(new SavedSubscribe(messageId, listener, statusCallback));
+ attemptSmartConnect();
+ connectionNode.subscribe(messageId, listener, statusCallback);
+ }
+
+ @Override
+ public boolean subscribeToReply(MessageID messageId, OseeMessagingListener listener) {
+ return connectionNode.subscribeToReply(messageId, listener);
+ }
+
+ @Override
+ public void unsubscribe(MessageID messageId, OseeMessagingListener listener, OseeMessagingStatusCallback statusCallback) {
+ savedSubscribes.remove(new SavedSubscribe(messageId, listener, statusCallback));
+ connectionNode.unsubscribe(messageId, listener, statusCallback);
+ }
+
+ @Override
+ public boolean unsubscribteToReply(MessageID messageId, OseeMessagingListener listener) {
+ connectionNode.unsubscribteToReply(messageId, listener);
+ return false;
+ }
+
+ public void addConnectionListener(ConnectionListener connectionListener) {
+ connectionListeners.add(connectionListener);
+ if (lastConnectedState) {
+ connectionListener.connected(this);
+ } else {
+ connectionListener.notConnected(this);
+ }
+ }
+
+ public void removeConnectionListener(ConnectionListener connectionListener) {
+ connectionListeners.remove(connectionListener);
+ }
+
+ private void subscribeToMessages() {
+ for (SavedSubscribe subscribe : savedSubscribes) {
+ connectionNode.subscribe(subscribe.messageId, subscribe.listener, subscribe.statusCallback);
+ }
+ }
+
+ private class SavedSubscribe {
+ MessageID messageId;
+ OseeMessagingListener listener;
+ OseeMessagingStatusCallback statusCallback;
+
+ public SavedSubscribe(MessageID messageId, OseeMessagingListener listener, OseeMessagingStatusCallback statusCallback) {
+ this.messageId = messageId;
+ this.listener = listener;
+ this.statusCallback = statusCallback;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + getOuterType().hashCode();
+ result = prime * result + ((listener == null) ? 0 : listener.hashCode());
+ result = prime * result + ((messageId == null) ? 0 : messageId.hashCode());
+ result = prime * result + ((statusCallback == null) ? 0 : statusCallback.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) return true;
+ if (obj == null) return false;
+ if (getClass() != obj.getClass()) return false;
+ SavedSubscribe other = (SavedSubscribe) obj;
+ if (!getOuterType().equals(other.getOuterType())) return false;
+ if (listener == null) {
+ if (other.listener != null) return false;
+ } else if (!listener.equals(other.listener)) return false;
+ if (messageId == null) {
+ if (other.messageId != null) return false;
+ } else if (!messageId.equals(other.messageId)) return false;
+ if (statusCallback == null) {
+ if (other.statusCallback != null) return false;
+ } else if (!statusCallback.equals(other.statusCallback)) return false;
+ return true;
+ }
+
+ private FailoverConnectionNode getOuterType() {
+ return FailoverConnectionNode.this;
+ }
+
+ }
+
+ @Override
+ public void run() {
+ if (connectionNode.isConnected()) {
+ connected();
+ } else {
+ try {
+ connectionNode.start();
+ subscribeToMessages();
+ if(connectionNode.isConnected()){
+ connected();
+ }
+ } catch (OseeCoreException ex) {
+ OseeLog.log(FailoverConnectionNode.class, Level.FINE, ex);
+ notConnected();
+ }
+ }
+ }
+
+ private void connected() {
+ if (!lastConnectedState) {
+ notifyConnectionListenersConnected();
+ }
+ lastConnectedState = true;
+ }
+
+ private void notifyConnectionListenersConnected() {
+ for (ConnectionListener listener : connectionListeners) {
+ listener.connected(this);
+ }
+ }
+
+ private void notConnected() {
+ if (lastConnectedState) {
+ notifyConnectionListenersNotConnected();
+ }
+ lastConnectedState = false;
+ }
+
+ private void notifyConnectionListenersNotConnected() {
+ for (ConnectionListener listener : connectionListeners) {
+ listener.notConnected(this);
+ }
+ }
+
+ @Override
+ public String getSenders() {
+ return connectionNode.getSenders();
+ }
+
+ @Override
+ public String getSubscribers() {
+ return connectionNode.getSubscribers();
+ }
+
+ @Override
+ public String getSummary() {
+ return connectionNode.getSummary();
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/JAXBUtil.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/JAXBUtil.java
new file mode 100644
index 0000000000..3e11531c9d
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/JAXBUtil.java
@@ -0,0 +1,50 @@
+/*
+ * Created on Jan 22, 2010
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.messaging.internal;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.OutputStream;
+import java.io.UnsupportedEncodingException;
+
+import javax.xml.bind.JAXB;
+import javax.xml.transform.stream.StreamSource;
+
+import org.eclipse.osee.framework.messaging.OseeMessagingListener;
+
+/**
+ * @author b1528444
+ *
+ */
+public class JAXBUtil {
+
+ public static void marshal(Object obj, OutputStream stream){
+ JAXB.marshal(obj, stream);
+ }
+
+ public static String marshal(Object obj) throws UnsupportedEncodingException{
+ ByteArrayOutputStream os = new ByteArrayOutputStream();
+ marshal(obj, os);
+ return new String(os.toByteArray(), "UTF-8");
+ }
+
+ public static Object unmarshal(String str, Class<?> clazz) throws UnsupportedEncodingException{
+ ByteArrayInputStream is = new ByteArrayInputStream(str.getBytes("UTF-8"));
+ return JAXB.unmarshal(new StreamSource(is), clazz);
+ }
+
+ public static Object unmarshal(Object body, OseeMessagingListener listener) throws UnsupportedEncodingException{
+ Class<?> pojoType = listener.getClazz();
+ Object messageBody;
+ if (pojoType == null) {
+ messageBody = body;
+ } else {
+ messageBody = JAXBUtil.unmarshal(body.toString(), pojoType);
+ }
+ return messageBody;
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/MessageServiceConsole.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/MessageServiceConsole.java
new file mode 100644
index 0000000000..4bd9aa100a
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/MessageServiceConsole.java
@@ -0,0 +1,40 @@
+/*
+ * Created on Feb 24, 2010
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.messaging.internal;
+
+import org.eclipse.osee.framework.messaging.ConnectionNode;
+import org.eclipse.osee.framework.messaging.MessageService;
+import org.eclipse.osee.framework.messaging.NodeInfo;
+import org.eclipse.osgi.framework.console.CommandInterpreter;
+import org.eclipse.osgi.framework.console.CommandProvider;
+
+/**
+ * @author b1528444
+ */
+public class MessageServiceConsole implements CommandProvider {
+
+ private MessageService messageService;
+
+ MessageServiceConsole(MessageService messageService) {
+ this.messageService = messageService;
+ }
+
+ public void _printSummary(CommandInterpreter ci) throws Exception {
+ for (NodeInfo info : messageService.getAvailableConnections()) {
+ ConnectionNode node = messageService.get(info);
+ ci.println(node.getSummary());
+ }
+ }
+
+ @Override
+ public String getHelp() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("---Message Service Commands---\n");
+ sb.append("\tprintSummary - prints a Summary of all ConnectionNodes.\n");
+ return sb.toString();
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/MessageServiceImpl.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/MessageServiceImpl.java
new file mode 100644
index 0000000000..de09773b08
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/MessageServiceImpl.java
@@ -0,0 +1,90 @@
+/*
+ * Created on Jan 15, 2010
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.messaging.internal;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.logging.Level;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.messaging.ConnectionNode;
+import org.eclipse.osee.framework.messaging.ConnectionNodeFactory;
+import org.eclipse.osee.framework.messaging.MessageService;
+import org.eclipse.osee.framework.messaging.NodeInfo;
+
+/**
+ * @author b1122182
+ */
+public class MessageServiceImpl implements MessageService {
+ private static final String VM_URI = "vm://localhost?broker.persistent=false";
+
+ private final NodeInfo defaultNode;
+ private final Map<NodeInfo, ConnectionNode> connectionNodes;
+ private final ConnectionNodeFactory factory;
+
+ public MessageServiceImpl(ConnectionNodeFactory factory) {
+ this.connectionNodes = new ConcurrentHashMap<NodeInfo, ConnectionNode>();
+ this.factory = factory;
+ defaultNode = new NodeInfo("osee-jms", getDefaultURI());
+ }
+
+ private URI getDefaultURI() {
+ URI defaultURI = null;
+ String uri = System.getProperty("osee.broker.primary.uri");
+ if (uri == null) {
+ uri = VM_URI;
+ }
+ try {
+ defaultURI = new URI(uri);
+ } catch (URISyntaxException ex) {
+ try {
+ defaultURI = new URI(VM_URI);
+ } catch (URISyntaxException ex1) {
+ OseeLog.log(MessageServiceImpl.class, Level.SEVERE, ex1);
+ }
+ }
+ OseeLog.log(Activator.class, Level.FINER, String.format("Default URI for message Service [%s]", defaultURI.toASCIIString()));
+ return defaultURI;
+ }
+
+ @Override
+ public ConnectionNode getDefault() throws OseeCoreException {
+ return get(defaultNode);
+ }
+
+ public Collection<NodeInfo> getAvailableConnections() {
+ return new ArrayList<NodeInfo>(connectionNodes.keySet());
+ }
+
+ public int size() {
+ return connectionNodes.size();
+ }
+
+ public boolean isEmpty() {
+ return connectionNodes.isEmpty();
+ }
+
+ public ConnectionNode get(NodeInfo nodeInfo) throws OseeCoreException {
+ ConnectionNode node = connectionNodes.get(nodeInfo);
+ if (node == null) {
+ OseeLog.log(Activator.class, Level.FINEST, String.format("going to create a new Connection Node for [%s]", nodeInfo.toString()));
+ node = factory.create(nodeInfo);
+ connectionNodes.put(nodeInfo, (ConnectionNode)node);
+ OseeLog.log(Activator.class, Level.FINE, String.format("Created a new Connection Node for [%s]", nodeInfo.toString()));
+ }
+ return node;
+ }
+
+ void stop() {
+ for(ConnectionNode node:connectionNodes.values()){
+ node.stop();
+ }
+ }
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/MessageServiceProviderImpl.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/MessageServiceProviderImpl.java
new file mode 100644
index 0000000000..846e5a894e
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/MessageServiceProviderImpl.java
@@ -0,0 +1,42 @@
+/*
+ * Created on Jan 18, 2010
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.messaging.internal;
+
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.messaging.MessageService;
+import org.eclipse.osee.framework.messaging.MessageServiceProvider;
+import org.eclipse.osee.framework.messaging.internal.activemq.ConnectionNodeFactoryImpl;
+
+/**
+ * @author b1528444
+ */
+public class MessageServiceProviderImpl implements MessageServiceProvider {
+
+ private MessageServiceImpl messageService;
+ private ExecutorService executor;
+ private ClassLoader contextClassLoader;
+
+ MessageServiceProviderImpl(ClassLoader contextClassLoader) {
+ this.contextClassLoader = contextClassLoader;
+ }
+
+ public void start() throws Exception {
+ Thread.currentThread().setContextClassLoader(contextClassLoader);
+ executor = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
+ messageService = new MessageServiceImpl(new ConnectionNodeFactoryImpl("1.0", Integer.toString(hashCode()), executor));
+ }
+
+ public void stop() throws Exception {
+ messageService.stop();
+ }
+
+ @Override
+ public MessageService getMessageService() throws OseeCoreException {
+ return messageService;
+ }
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/activemq/ActiveMqMessageListenerWrapper.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/activemq/ActiveMqMessageListenerWrapper.java
new file mode 100644
index 0000000000..7860f3b42c
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/activemq/ActiveMqMessageListenerWrapper.java
@@ -0,0 +1,83 @@
+/*
+ * Created on Jul 27, 2009
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.messaging.internal.activemq;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.logging.Level;
+import javax.jms.Destination;
+import javax.jms.JMSException;
+import javax.jms.MessageListener;
+import javax.jms.MessageProducer;
+import javax.jms.Session;
+import org.apache.activemq.command.ActiveMQDestination;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.messaging.OseeMessagingListener;
+import org.eclipse.osee.framework.messaging.ReplyConnection;
+import org.eclipse.osee.framework.messaging.internal.Activator;
+
+/**
+ * @author b1528444
+ */
+class ActiveMqMessageListenerWrapper implements MessageListener {
+
+ private List<OseeMessagingListener> listeners;
+ private MessageProducer producer;
+ private Session session;
+ private ActiveMqUtil activeMqUtil;
+
+ ActiveMqMessageListenerWrapper(ActiveMqUtil activeMqUtil, MessageProducer producer, Session session){
+ this.producer = producer;
+ this.session = session;
+ listeners = new CopyOnWriteArrayList<OseeMessagingListener>();
+ this.activeMqUtil = activeMqUtil;
+ }
+
+ public void addListener(OseeMessagingListener listener){
+ listeners.add(listener);
+ }
+
+ public void removeListener(OseeMessagingListener listener){
+ listeners.remove(listener);
+ }
+
+ public boolean isEmpty(){
+ return listeners.isEmpty();
+ }
+
+ public void onMessage(javax.jms.Message jmsMessage){
+ try{
+ Destination destReply = jmsMessage.getJMSReplyTo();
+ if(destReply != null){
+ ActiveMQDestination dest = (ActiveMQDestination)jmsMessage.getJMSDestination();
+ String correlationId = dest.getPhysicalName();
+ ReplyConnectionActiveMqImpl replyConnectionActiveMqImpl = new ReplyConnectionActiveMqImpl(activeMqUtil, session, producer, destReply, correlationId);
+ process(jmsMessage, replyConnectionActiveMqImpl);
+ } else {
+ process(jmsMessage, new ReplyConnectionActiveMqImpl());
+ }
+ } catch (JMSException ex){
+ OseeLog.log(ActiveMqMessageListenerWrapper.class, Level.SEVERE, ex);
+ } catch (OseeCoreException ex) {
+ OseeLog.log(ActiveMqMessageListenerWrapper.class, Level.SEVERE, ex);
+ }
+ }
+
+ private void process(javax.jms.Message message, ReplyConnection replyConnection) throws JMSException, OseeCoreException{
+ Map<String, Object> headers = new HashMap<String, Object>();
+ for(OseeMessagingListener listener:listeners){
+ listener.process(activeMqUtil.translateMessage(message, listener.getClazz()), headers, replyConnection);
+ }
+ OseeLog.log(Activator.class, Level.FINE, String.format("recieved message %s - %s", message.getJMSDestination().toString(), message.toString()));
+ }
+
+ List<OseeMessagingListener> getListeners(){
+ return listeners;
+ }
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/activemq/ActiveMqUtil.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/activemq/ActiveMqUtil.java
new file mode 100644
index 0000000000..d625cb2195
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/activemq/ActiveMqUtil.java
@@ -0,0 +1,72 @@
+/*
+ * Created on Feb 16, 2010
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.messaging.internal.activemq;
+
+import java.io.UnsupportedEncodingException;
+import javax.jms.BytesMessage;
+import javax.jms.JMSException;
+import javax.jms.Message;
+import javax.jms.Session;
+import javax.jms.TextMessage;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.core.exception.OseeExceptions;
+import org.eclipse.osee.framework.messaging.internal.JAXBUtil;
+
+/**
+ * @author b1528444
+ */
+class ActiveMqUtil {
+
+ ActiveMqUtil(){
+
+ }
+
+ Object translateMessage(Message message, Class<?> clazz) throws OseeCoreException, JMSException {
+ Object messageBody = message;
+ if (message instanceof TextMessage) {
+ String text = ((TextMessage) message).getText();
+ if (clazz != null) {
+ try {
+ messageBody = JAXBUtil.unmarshal(text, clazz);
+ } catch (UnsupportedEncodingException ex) {
+ OseeExceptions.wrapAndThrow(ex);
+ }
+ } else {
+ messageBody = text;
+ }
+ } else if(message instanceof BytesMessage){
+ int length = (int)((BytesMessage)message).getBodyLength();
+ byte[] bytes = new byte[length];
+ ((BytesMessage)message).readBytes(bytes);
+ messageBody = bytes;
+ }
+ return messageBody;
+ }
+
+ Message createMessage(Session session, Class<?> clazz, Object body) throws OseeCoreException, JMSException {
+ body = tryToGetSerialized(clazz, body);
+ if (body instanceof String) {
+ return session.createTextMessage((String) body);
+ } else if (body instanceof byte[]) {
+ BytesMessage byteMessage = session.createBytesMessage();
+ byteMessage.writeBytes((byte[]) body);
+ return byteMessage;
+ } else {
+ throw new OseeCoreException(String.format("Unsupported java type [%s]", body.getClass().getName()));
+ }
+ }
+
+ private Object tryToGetSerialized(Class<?> clazz, Object body) throws OseeCoreException {
+ if (clazz != null) {
+ try {
+ return JAXBUtil.marshal(body);
+ } catch (UnsupportedEncodingException ex) {
+ OseeExceptions.wrapAndThrow(ex);
+ }
+ }
+ return body;
+ }
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/activemq/ConnectionNodeActiveMq.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/activemq/ConnectionNodeActiveMq.java
new file mode 100644
index 0000000000..fafe62becb
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/activemq/ConnectionNodeActiveMq.java
@@ -0,0 +1,307 @@
+/*
+ * Created on Feb 16, 2010
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.messaging.internal.activemq;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ExecutorService;
+import java.util.logging.Level;
+import javax.jms.Connection;
+import javax.jms.DeliveryMode;
+import javax.jms.JMSException;
+import javax.jms.Message;
+import javax.jms.MessageConsumer;
+import javax.jms.MessageListener;
+import javax.jms.MessageProducer;
+import javax.jms.Session;
+import javax.jms.TemporaryTopic;
+import javax.jms.Topic;
+import org.apache.activemq.ActiveMQConnectionFactory;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.core.exception.OseeWrappedException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.messaging.ConnectionListener;
+import org.eclipse.osee.framework.messaging.ConnectionNodeFailoverSupport;
+import org.eclipse.osee.framework.messaging.MessageID;
+import org.eclipse.osee.framework.messaging.NodeInfo;
+import org.eclipse.osee.framework.messaging.OseeMessagingListener;
+import org.eclipse.osee.framework.messaging.OseeMessagingStatusCallback;
+import org.eclipse.osee.framework.messaging.internal.Activator;
+
+/**
+ * @author b1528444
+ */
+class ConnectionNodeActiveMq implements ConnectionNodeFailoverSupport, MessageListener {
+
+ // private String version;
+ // private String sourceId;
+ private NodeInfo nodeInfo;
+ // private ExecutorService executor;
+ private Connection connection;
+ private Session session;
+ private TemporaryTopic temporaryTopic;
+ private MessageConsumer replyToConsumer;
+ private Map<String, OseeMessagingListener> replyListeners;
+ private Map<String, ActiveMqMessageListenerWrapper> regularListeners;
+ private boolean started = false;
+
+ private ConcurrentHashMap<String, Topic> topicCache;
+ private ConcurrentHashMap<Topic, MessageProducer> messageProducerCache;
+ private ConcurrentHashMap<Topic, MessageConsumer> messageConsumerCache;
+
+ private MessageProducer replyProducer;
+ private ActiveMqUtil activeMqUtil;
+
+ public ConnectionNodeActiveMq(String version, String sourceId, NodeInfo nodeInfo, ExecutorService executor) {
+ this.nodeInfo = nodeInfo;
+ activeMqUtil = new ActiveMqUtil();
+ topicCache = new ConcurrentHashMap<String, Topic>();
+ messageConsumerCache = new ConcurrentHashMap<Topic, MessageConsumer>();
+ messageProducerCache = new ConcurrentHashMap<Topic, MessageProducer>();
+ regularListeners = new ConcurrentHashMap<String, ActiveMqMessageListenerWrapper>();
+ replyListeners = new ConcurrentHashMap<String, OseeMessagingListener>();
+ }
+
+ public synchronized void start() throws OseeCoreException {
+ if (started) {
+ return;
+ }
+ try {
+ String uri = nodeInfo.getUri().toASCIIString();
+ ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(ActiveMQConnectionFactory.DEFAULT_USER, ActiveMQConnectionFactory.DEFAULT_PASSWORD, uri);
+ connection = factory.createConnection();
+ session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
+ temporaryTopic = session.createTemporaryTopic();
+ replyToConsumer = session.createConsumer(temporaryTopic);
+ replyToConsumer.setMessageListener(this);
+ replyProducer = session.createProducer(null);
+ connection.start();
+ started = true;
+ } catch (JMSException ex) {
+ throw new OseeWrappedException(ex);
+ }
+ }
+
+ @Override
+ public synchronized void send(MessageID topic, Object body, OseeMessagingStatusCallback statusCallback) throws OseeCoreException {
+ try {
+ if (topic.isTopic()) {
+ Topic destination = getOrCreateTopic(topic);
+ MessageProducer producer = getOrCreateProducer(destination);
+ Message msg = activeMqUtil.createMessage(session, topic.getSerializationClass(), body);
+ if (topic.isReplyRequired()) {
+ msg.setJMSReplyTo(temporaryTopic);
+ }
+ producer.send(msg);
+ OseeLog.log(Activator.class, Level.FINE, String.format("Sending message %s - %s", topic.getName(), topic.getGuid()));
+ statusCallback.success();
+ }
+ } catch (JMSException ex) {
+ statusCallback.fail(ex);
+ throw new OseeWrappedException(ex);
+ } catch (NullPointerException ex) {
+ statusCallback.fail(ex);
+ throw new OseeWrappedException(ex);
+ }
+ }
+
+ @Override
+ public synchronized void subscribe(MessageID messageId, OseeMessagingListener listener, OseeMessagingStatusCallback statusCallback) {
+ Topic destination;
+ try {
+ if (isConnectedThrow()) {
+ ActiveMqMessageListenerWrapper wrapperListener = regularListeners.get(messageId.getGuid());
+ if (wrapperListener == null) {
+ wrapperListener = new ActiveMqMessageListenerWrapper(activeMqUtil, replyProducer, session);
+ regularListeners.put(messageId.getGuid(), wrapperListener);
+ destination = getOrCreateTopic(messageId);
+ MessageConsumer consumer = getOrCreateConsumer(destination);
+ consumer.setMessageListener(wrapperListener);
+ }
+ wrapperListener.addListener(listener);
+ statusCallback.success();
+ } else {
+ statusCallback.fail(new OseeCoreException("This connection is not started."));
+ }
+ } catch (JMSException ex) {
+ statusCallback.fail(ex);
+ } catch (NullPointerException ex) {
+ statusCallback.fail(ex);
+ }
+ }
+
+ private Topic getOrCreateTopic(MessageID messageId) throws JMSException {
+ Topic topic = topicCache.get(messageId.getGuid());
+ if (topic == null) {
+ topic = session.createTopic(messageId.getGuid());
+ topicCache.put(messageId.getGuid(), topic);
+ }
+ return topic;
+ }
+
+ private MessageProducer getOrCreateProducer(Topic destination) throws JMSException {
+ MessageProducer producer = messageProducerCache.get(destination);
+ if (producer == null) {
+ producer = session.createProducer(destination);
+ producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
+ messageProducerCache.put(destination, producer);
+ }
+ return producer;
+ }
+
+ private MessageConsumer getOrCreateConsumer(Topic topic) throws JMSException {
+ MessageConsumer consumer = messageConsumerCache.get(topic);
+ if (consumer == null) {
+ consumer = session.createConsumer(topic);
+ messageConsumerCache.put(topic, consumer);
+ }
+ return consumer;
+ }
+
+ @Override
+ public boolean subscribeToReply(MessageID messageId, OseeMessagingListener listener) {
+ replyListeners.put(messageId.getGuid(), listener);
+ return true;
+ }
+
+ @Override
+ public void unsubscribe(MessageID messageId, OseeMessagingListener listener, OseeMessagingStatusCallback statusCallback) {
+ ActiveMqMessageListenerWrapper wrapperListener = regularListeners.get(messageId.getGuid());
+ if (wrapperListener != null) {
+ wrapperListener.removeListener(listener);
+ if (wrapperListener.isEmpty()) {
+ try {
+ Topic topic = getOrCreateTopic(messageId);
+ MessageConsumer consumer = getOrCreateConsumer(topic);
+ consumer.setMessageListener(null);
+ consumer.close();
+ messageConsumerCache.remove(topic);
+ } catch (JMSException ex) {
+ statusCallback.fail(ex);
+ }
+ }
+ }
+ statusCallback.success();
+ }
+
+ @Override
+ public boolean unsubscribteToReply(MessageID messageId, OseeMessagingListener listener) {
+ replyListeners.remove(messageId.getGuid());
+ return true;
+ }
+
+ @Override
+ public void onMessage(Message jmsMessage) {
+ try {
+ String correlationId = jmsMessage.getJMSCorrelationID();
+ if (correlationId != null) {
+ OseeMessagingListener listener = replyListeners.get(correlationId);
+ if (listener != null) {
+ listener.process(activeMqUtil.translateMessage(jmsMessage, listener.getClazz()), new HashMap<String, Object>(), new ReplyConnectionActiveMqImpl());
+ }
+ }
+ } catch (JMSException ex) {
+ OseeLog.log(ConnectionNodeActiveMq.class, Level.SEVERE, ex);
+ } catch (OseeCoreException ex) {
+ OseeLog.log(ConnectionNodeActiveMq.class, Level.SEVERE, ex);
+ }
+ OseeLog.log(Activator.class, Level.FINE, String.format("recieved reply message %s", jmsMessage.toString()));
+ }
+
+ @Override
+ public synchronized void stop() {
+ try {
+ if (session != null) {
+ session.close();
+ }
+ } catch (JMSException ex) {
+ OseeLog.log(ConnectionNodeActiveMq.class, Level.SEVERE, ex);
+ }
+ try {
+ if (connection != null) {
+ connection.close();
+ }
+ } catch (JMSException ex) {
+ OseeLog.log(ConnectionNodeActiveMq.class, Level.SEVERE, ex);
+ }
+ }
+
+ @Override
+ public synchronized boolean isConnected() {
+ try {
+ return isConnectedThrow();
+ } catch (JMSException ex) {
+ started = false;
+ return false;
+ }
+ }
+
+ private synchronized boolean isConnectedThrow() throws JMSException {
+ if (connection == null || started == false) {
+ return false;
+ }
+ connection.getMetaData();
+ return true;
+ }
+
+ @Override
+ public void addConnectionListener(ConnectionListener connectionListener) {
+ }
+
+ @Override
+ public void removeConnectionListener(ConnectionListener connectionListener) {
+ }
+
+
+ @Override
+ public String getSenders() {
+ StringBuilder sb = new StringBuilder();
+ for(Entry<Topic, MessageProducer> entry:this.messageProducerCache.entrySet()){
+ try {
+ sb.append(String.format("Topic [%s] \n", entry.getKey().getTopicName()));
+ sb.append(String.format("\tProducer Destination [%s]\n", entry.getValue().getDestination().toString()));
+ } catch (JMSException ex) {
+ OseeLog.log(Activator.class, Level.SEVERE, ex);
+ }
+ }
+ return sb.toString();
+ }
+
+ @Override
+ public String getSubscribers() {
+ StringBuilder sb = new StringBuilder();
+ for(Entry<Topic, MessageConsumer> entry:this.messageConsumerCache.entrySet()){
+ try {
+ sb.append(String.format("Topic [%s] \n", entry.getKey().getTopicName()));
+ sb.append(String.format("\tConsumer Selector [%s]\n", entry.getValue().getMessageSelector()));
+ MessageListener listener = entry.getValue().getMessageListener();
+ if(listener instanceof ActiveMqMessageListenerWrapper){
+ sb.append("\tConsumer Listeners:\n");
+ for(OseeMessagingListener item:((ActiveMqMessageListenerWrapper)listener).getListeners()){
+ sb.append(String.format("\t\t%s\n", item.toString()));
+ }
+ }
+ } catch (JMSException ex) {
+ OseeLog.log(Activator.class, Level.SEVERE, ex);
+ }
+ }
+ return sb.toString();
+ }
+
+ @Override
+ public String getSummary() {
+ StringBuilder sb = new StringBuilder();
+ sb.append(nodeInfo.toString());
+ sb.append("\n");
+ sb.append(String.format("\tisStarted[%b]\n", started));
+ sb.append(getSenders());
+ sb.append(getSubscribers());
+ return sb.toString();
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/activemq/ConnectionNodeFactoryImpl.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/activemq/ConnectionNodeFactoryImpl.java
new file mode 100644
index 0000000000..ee6ded0ca7
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/activemq/ConnectionNodeFactoryImpl.java
@@ -0,0 +1,50 @@
+/*
+ * Created on Jan 15, 2010
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.messaging.internal.activemq;
+
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.logging.Level;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.messaging.ConnectionNode;
+import org.eclipse.osee.framework.messaging.ConnectionNodeFactory;
+import org.eclipse.osee.framework.messaging.NodeInfo;
+import org.eclipse.osee.framework.messaging.internal.Activator;
+import org.eclipse.osee.framework.messaging.internal.FailoverConnectionNode;
+
+/**
+ * @author b1122182
+ */
+public class ConnectionNodeFactoryImpl implements ConnectionNodeFactory {
+
+ private final ExecutorService executor;
+ private final ScheduledExecutorService scheduledExecutor;
+ private final String version;
+ private final String sourceId;
+
+ public ConnectionNodeFactoryImpl(String version, String sourceId, ExecutorService executor) {
+ this.version = version;
+ this.sourceId = sourceId;
+ this.executor = executor;
+ this.scheduledExecutor = Executors.newSingleThreadScheduledExecutor();
+ }
+
+ @Override
+ public synchronized ConnectionNode create(NodeInfo nodeInfo) {
+ final ConnectionNodeActiveMq node = new ConnectionNodeActiveMq(version, sourceId, nodeInfo, executor);
+ OseeLog.log(Activator.class, Level.FINEST, "Going to start a connection node.");
+ try {
+ node.start();
+ } catch (OseeCoreException ex) {
+ OseeLog.log(ConnectionNodeFactoryImpl.class, Level.SEVERE, ex);
+ }
+ OseeLog.log(Activator.class, Level.FINE, "Started a connection node.");
+ return new FailoverConnectionNode(node, scheduledExecutor);
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/activemq/ReplyConnectionActiveMqImpl.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/activemq/ReplyConnectionActiveMqImpl.java
new file mode 100644
index 0000000000..ad3d58bdc4
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/activemq/ReplyConnectionActiveMqImpl.java
@@ -0,0 +1,66 @@
+/*
+ * Created on Feb 16, 2010
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.messaging.internal.activemq;
+
+import java.util.logging.Level;
+import javax.jms.Destination;
+import javax.jms.JMSException;
+import javax.jms.Message;
+import javax.jms.MessageProducer;
+import javax.jms.Session;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.core.exception.OseeWrappedException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.messaging.OseeMessagingStatusCallback;
+import org.eclipse.osee.framework.messaging.ReplyConnection;
+import org.eclipse.osee.framework.messaging.internal.Activator;
+
+
+/**
+ * @author b1528444
+ *
+ */
+class ReplyConnectionActiveMqImpl implements ReplyConnection {
+
+ private final boolean isReplyRequested;
+ private MessageProducer producer;
+ private Destination destReply;
+ private String correlationId;
+ private Session session;
+ private ActiveMqUtil activeMqUtil;
+
+ ReplyConnectionActiveMqImpl(ActiveMqUtil activeMqUtil, Session session, MessageProducer producer, Destination destReply, String correlationId) {
+ isReplyRequested = true;
+ this.producer = producer;
+ this.destReply = destReply;
+ this.correlationId = correlationId;
+ this.session = session;
+ this.activeMqUtil = activeMqUtil;
+ }
+
+ ReplyConnectionActiveMqImpl() {
+ isReplyRequested = false;
+ }
+
+ @Override
+ public boolean isReplyRequested() {
+ return isReplyRequested;
+ }
+
+ @Override
+ public void send(Object body, Class<?> clazz, OseeMessagingStatusCallback statusCallback) throws OseeCoreException {
+ try {
+ Message message = activeMqUtil.createMessage(session, clazz, body);
+ message.setJMSCorrelationID(correlationId);
+ producer.send(destReply, message);
+ OseeLog.log(Activator.class, Level.INFO, String.format("Sending Reply Message %s", message.toString()));
+ } catch (JMSException ex) {
+ statusCallback.fail(ex);
+ throw new OseeWrappedException(ex);
+ }
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/old/ApplicationDistributer.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/old/ApplicationDistributer.java
new file mode 100644
index 0000000000..5f54238b2c
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/old/ApplicationDistributer.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.messaging.internal.old;
+
+import org.eclipse.osee.framework.messaging.Message;
+
+/**
+ * @author Andrew M. Finkbeiner
+ */
+public interface ApplicationDistributer {
+
+ void distribute(Message message);
+
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/old/ConcurrentListMap.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/old/ConcurrentListMap.java
new file mode 100644
index 0000000000..0bcd295459
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/old/ConcurrentListMap.java
@@ -0,0 +1,66 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.messaging.internal.old;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+/**
+ * @author Andrew M. Finkbeiner
+ */
+public class ConcurrentListMap<MAP_TYPE, LIST_TYPE> {
+
+ private Map<MAP_TYPE, List<LIST_TYPE>> data;
+ private List<LIST_TYPE> EMPTY_LIST = new ArrayList<LIST_TYPE>();
+
+ public ConcurrentListMap() {
+ data = new HashMap<MAP_TYPE, List<LIST_TYPE>>();
+ }
+
+ public synchronized boolean add(MAP_TYPE key, LIST_TYPE value) {
+ List<LIST_TYPE> values = data.get(key);
+ if (values == null) {
+ values = new CopyOnWriteArrayList<LIST_TYPE>();
+ data.put(key, values);
+ }
+ if (values.contains(value)) {
+ return false;
+ } else {
+ values.add(value);
+ return true;
+ }
+ }
+
+ public synchronized List<LIST_TYPE> get(MAP_TYPE key) {
+ List<LIST_TYPE> values = data.get(key);
+ if (values == null) {
+ return EMPTY_LIST;
+ } else {
+ return values;
+ }
+ }
+
+ public synchronized boolean remove(MAP_TYPE key, LIST_TYPE value) {
+ List<LIST_TYPE> values = data.get(key);
+ if (values == null) {
+ return false;
+ } else {
+ return values.remove(value);
+ }
+ }
+
+ public void clear() {
+ data.clear();
+ }
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/old/EndpointReceiveCollection.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/old/EndpointReceiveCollection.java
new file mode 100644
index 0000000000..d61c763ddb
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/old/EndpointReceiveCollection.java
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.messaging.internal.old;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
+import org.eclipse.osee.framework.messaging.EndpointReceive;
+
+/**
+ * @author Andrew M. Finkbeiner
+ */
+public class EndpointReceiveCollection {
+
+ private final List<EndpointReceive> receivers;
+
+ public EndpointReceiveCollection() {
+ receivers = new CopyOnWriteArrayList<EndpointReceive>();
+ }
+
+ public synchronized boolean add(EndpointReceive endpoint) {
+ if (receivers.contains(endpoint)) {
+ return false;
+ } else {
+ return receivers.add(endpoint);
+ }
+ }
+
+ public synchronized boolean remove(EndpointReceive endpoint) {
+ return receivers.remove(endpoint);
+ }
+
+ public synchronized Collection<EndpointReceive> getAll() {
+ return receivers;
+ }
+
+ public synchronized void dispose() {
+ receivers.clear();
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/old/EndpointSendCollection.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/old/EndpointSendCollection.java
new file mode 100644
index 0000000000..630edfa366
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/old/EndpointSendCollection.java
@@ -0,0 +1,135 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.messaging.internal.old;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.CopyOnWriteArrayList;
+import org.eclipse.osee.framework.messaging.EndpointSend;
+import org.eclipse.osee.framework.messaging.id.MessageId;
+import org.eclipse.osee.framework.messaging.id.ProtocolId;
+
+/**
+ * @author Andrew M. Finkbeiner
+ */
+public class EndpointSendCollection {
+
+ private final List<EndpointSend> endpoints;
+ private Map<ProtocolId, EndpointSend> protocolMapping;
+ private Map<MessageId, ProtocolId> messageIdMapping;
+
+ public EndpointSendCollection() {
+ endpoints = new CopyOnWriteArrayList<EndpointSend>();
+ protocolMapping = new ConcurrentHashMap<ProtocolId, EndpointSend>();
+ messageIdMapping = new ConcurrentHashMap<MessageId, ProtocolId>();
+ }
+
+ public synchronized boolean add(EndpointSend endpoint) {
+ if (endpoints.contains(endpoint)) {
+ return false;
+ } else {
+ return endpoints.add(endpoint);
+ }
+ }
+
+ public synchronized boolean remove(EndpointSend endpoint) {
+ if (endpoints.remove(endpoint)) {
+ List<ProtocolId> protocolIdsToRemove = new ArrayList<ProtocolId>();
+ Iterator<ProtocolId> it = protocolMapping.keySet().iterator();
+ while (it.hasNext()) {
+ ProtocolId id = it.next();
+ if (protocolMapping.get(id).equals(endpoint)) {
+ it.remove();
+ protocolIdsToRemove.add(id);
+ }
+ }
+ for (ProtocolId id : protocolIdsToRemove) {
+ removeProtocolId(id);
+ }
+ return true;
+ }
+ return false;
+ }
+
+ public synchronized boolean bind(ProtocolId protocolId, EndpointSend endpoint) {
+ if (protocolMapping.containsKey(protocolId)) {
+ return false;
+ } else {
+ protocolMapping.put(protocolId, endpoint);
+ return true;
+ }
+ }
+
+ public synchronized boolean unbind(ProtocolId protocolId, EndpointSend endpoint) {
+ if (protocolMapping.containsKey(protocolId)) {
+ protocolMapping.remove(protocolId);
+
+ removeProtocolId(protocolId);
+
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ private void removeProtocolId(ProtocolId protocolId) {
+ Iterator<MessageId> it = messageIdMapping.keySet().iterator();
+ while (it.hasNext()) {
+ MessageId id = it.next();
+ if (messageIdMapping.get(id).equals(protocolId)) {
+ it.remove();
+ }
+ }
+ }
+
+ public synchronized boolean bind(MessageId messageId, ProtocolId protocolId) {
+ if (messageIdMapping.containsKey(messageId)) {
+ return false;
+ } else {
+ messageIdMapping.put(messageId, protocolId);
+ return true;
+ }
+ }
+
+ public synchronized boolean unbind(MessageId messageId, ProtocolId protocolId) {
+ if (messageIdMapping.containsKey(messageId)) {
+ messageIdMapping.remove(messageId);
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ public synchronized Collection<EndpointSend> getAll() {
+ return endpoints;
+ }
+
+ public synchronized void dispose() {
+ endpoints.clear();
+ protocolMapping.clear();
+ messageIdMapping.clear();
+ }
+
+ public synchronized EndpointSend get(MessageId id) {
+ ProtocolId protocolId = messageIdMapping.get(id);
+ if (protocolId != null) {
+ EndpointSend send = protocolMapping.get(protocolId);
+ if (send != null) {
+ return send;
+ }
+ }
+ return null;
+ }
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/old/MessageListenerCollection.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/old/MessageListenerCollection.java
new file mode 100644
index 0000000000..7009ad52df
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/old/MessageListenerCollection.java
@@ -0,0 +1,58 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.messaging.internal.old;
+
+import org.eclipse.osee.framework.messaging.Message;
+import org.eclipse.osee.framework.messaging.ReceiveListener;
+import org.eclipse.osee.framework.messaging.SendListener;
+import org.eclipse.osee.framework.messaging.id.MessageId;
+
+/**
+ * @author Andrew M. Finkbeiner
+ */
+public class MessageListenerCollection {
+
+ private ConcurrentListMap<MessageId, ReceiveListener> receiveListeners;
+ private ConcurrentListMap<MessageId, SendListener> sendListeners;
+
+ public MessageListenerCollection() {
+ receiveListeners = new ConcurrentListMap<MessageId, ReceiveListener>();
+ sendListeners = new ConcurrentListMap<MessageId, SendListener>();
+ }
+
+ public boolean addReceiveListener(MessageId messageId, ReceiveListener receiveListener) {
+ return receiveListeners.add(messageId, receiveListener);
+ }
+
+ public boolean addSendListener(MessageId messageId, SendListener sendListener) {
+ return sendListeners.add(messageId, sendListener);
+ }
+
+ public boolean removeReceiveListener(MessageId messageId, ReceiveListener receiveListener) {
+ return receiveListeners.remove(messageId, receiveListener);
+ }
+
+ public boolean removeSendListener(MessageId messageId, SendListener sendListener) {
+ return sendListeners.remove(messageId, sendListener);
+ }
+
+ public void notifyReceiveListeners(Message message) {
+ for (ReceiveListener listener : receiveListeners.get(message.getId())) {
+ listener.handle(message);
+ }
+ }
+
+ public void dispose() {
+ receiveListeners.clear();
+ sendListeners.clear();
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/old/MessagingGatewayImpl.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/old/MessagingGatewayImpl.java
new file mode 100644
index 0000000000..e6b9486aa1
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/internal/old/MessagingGatewayImpl.java
@@ -0,0 +1,136 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.framework.messaging.internal.old;
+
+import java.util.Collection;
+import org.eclipse.osee.framework.messaging.EndpointReceive;
+import org.eclipse.osee.framework.messaging.EndpointSend;
+import org.eclipse.osee.framework.messaging.ExceptionHandler;
+import org.eclipse.osee.framework.messaging.Message;
+import org.eclipse.osee.framework.messaging.MessagingGateway;
+import org.eclipse.osee.framework.messaging.ReceiveListener;
+import org.eclipse.osee.framework.messaging.SendListener;
+import org.eclipse.osee.framework.messaging.id.MessageId;
+import org.eclipse.osee.framework.messaging.id.ProtocolId;
+
+/**
+ * @author Andrew M. Finkbeiner
+ */
+public class MessagingGatewayImpl implements MessagingGateway, ApplicationDistributer {
+
+ private MessageListenerCollection messageListeners;
+ private EndpointReceiveCollection endpointReceivers;
+ private EndpointSendCollection endpointSenders;
+
+ public MessagingGatewayImpl() {
+ messageListeners = new MessageListenerCollection();
+ endpointReceivers = new EndpointReceiveCollection();
+ endpointSenders = new EndpointSendCollection();
+ }
+
+ @Override
+ public void addReceiveListener(MessageId messageId, ReceiveListener receiveListener) {
+ messageListeners.addReceiveListener(messageId, receiveListener);
+ }
+
+ @Override
+ public void addSendListener(MessageId messageId, SendListener sendListener) {
+ messageListeners.addSendListener(messageId, sendListener);
+ }
+
+ @Override
+ public void removeReceiveListener(MessageId messageId, ReceiveListener receiveListener) {
+ messageListeners.removeReceiveListener(messageId, receiveListener);
+ }
+
+ @Override
+ public void removeSendListener(MessageId messageId, SendListener sendListener) {
+ messageListeners.removeSendListener(messageId, sendListener);
+ }
+
+ @Override
+ public void distribute(Message message) {
+ messageListeners.notifyReceiveListeners(message);
+ }
+
+ @Override
+ public boolean bind(EndpointReceive endpoint) {
+ if (endpointReceivers.add(endpoint)) {
+ endpoint.onBind(this);
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public boolean unbind(EndpointReceive endpoint) {
+ endpoint.onUnbind(this);
+ return endpointReceivers.remove(endpoint);
+ }
+
+ @Override
+ public Collection<EndpointReceive> getReceiveEndpoints() {
+ return endpointReceivers.getAll();
+ }
+
+ @Override
+ public boolean bind(EndpointSend endpoint) {
+ return endpointSenders.add(endpoint);
+ }
+
+ @Override
+ public boolean unbind(EndpointSend endpoint) {
+ return endpointSenders.remove(endpoint);
+ }
+
+ @Override
+ public boolean bindSendProtocol(ProtocolId protocolId, EndpointSend endpoint) {
+ return endpointSenders.bind(protocolId, endpoint);
+ }
+
+ @Override
+ public boolean unbindSendProtocol(ProtocolId protocolId, EndpointSend endpoint) {
+ return endpointSenders.unbind(protocolId, endpoint);
+ }
+
+ @Override
+ public boolean bindSendMessage(MessageId messageId, ProtocolId protocolId) {
+ return endpointSenders.bind(messageId, protocolId);
+ }
+
+ @Override
+ public boolean unbindSendMessage(MessageId messageId, ProtocolId protocolId) {
+ return endpointSenders.unbind(messageId, protocolId);
+ }
+
+ @Override
+ public Collection<EndpointSend> getSendEndpoints() {
+ return endpointSenders.getAll();
+ }
+
+ @Override
+ public void send(Message message, ExceptionHandler exceptionHandler) {
+ EndpointSend sender = endpointSenders.get(message.getId());
+ if (sender == null) {
+ String errorMessage = String.format("No registered senders for messageId[%s].", message.getId().toString());
+ exceptionHandler.handleException(new Exception(errorMessage));
+ } else {
+ sender.send(message, exceptionHandler);
+ }
+ }
+
+ @Override
+ public void dispose() {
+ messageListeners.dispose();
+ endpointReceivers.dispose();
+ endpointSenders.dispose();
+ }
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/olderFiles.txt b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/olderFiles.txt
new file mode 100644
index 0000000000..7ed3153fa0
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/olderFiles.txt
@@ -0,0 +1,11 @@
+We'll want these to be gone eventually
+
+EndpointReceive.java
+EndpointSend.java
+ExceptionHandler.java
+Message.java
+MessagingGateway.java
+ReceiveListener.java
+SendListener.java
+Source.java
+UriSource.java \ No newline at end of file
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/BaseMessages.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/BaseMessages.java
new file mode 100644
index 0000000000..07a816a5f5
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/BaseMessages.java
@@ -0,0 +1,68 @@
+/*
+ * Created on Jan 25, 2010
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.messaging.services;
+
+import org.eclipse.osee.framework.messaging.MessageID;
+import org.eclipse.osee.framework.messaging.services.messages.ServiceHealth;
+import org.eclipse.osee.framework.messaging.services.messages.ServiceHealthRequest;
+
+/**
+ * @author b1528444
+ *
+ */
+public enum BaseMessages implements MessageID {
+ ServiceHealth(true, "ABjyjamBQRvvAGcWpRQA", "topic:osee.message.core.ServiceHealth", ServiceHealth.class, false),
+ ServiceHealthRequest(true, "ABkAHOSFQ3VUZcfzsAgA", "topic:osee.message.core.ServiceHealthRequest", ServiceHealthRequest.class, true);
+
+ private String name;
+ private Class<?> clazz;
+ boolean isReplyRequired;
+ private String guid;
+ private String destination;
+ private boolean isTopic;
+
+ BaseMessages(boolean isTopic, String guid, String name, Class<?> clazz, boolean isReplyRequired){
+ this.guid = guid;
+ this.name = name;
+ this.clazz = clazz;
+ this.isReplyRequired = isReplyRequired;
+ this.isTopic = isTopic;
+ if(isTopic){
+ destination = "topic:"+guid;
+ } else {
+ destination = guid;
+ }
+ }
+
+ @Override
+ public String getName() {
+ return name;
+ }
+
+ @Override
+ public Class<?> getSerializationClass() {
+ return clazz;
+ }
+
+ @Override
+ public boolean isReplyRequired() {
+ return isReplyRequired;
+ }
+
+ @Override
+ public String getGuid() {
+ return guid;
+ }
+
+ @Override
+ public String getMessageDestination() {
+ return destination;
+ }
+
+ public boolean isTopic(){
+ return isTopic;
+ }
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/RegisteredServiceReference.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/RegisteredServiceReference.java
new file mode 100644
index 0000000000..013d2303ac
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/RegisteredServiceReference.java
@@ -0,0 +1,14 @@
+/*
+ * Created on Feb 23, 2010
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.messaging.services;
+
+/**
+ * @author b1528444
+ *
+ */
+public interface RegisteredServiceReference {
+ void update();
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/RemoteServiceLookup.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/RemoteServiceLookup.java
new file mode 100644
index 0000000000..29270e0ced
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/RemoteServiceLookup.java
@@ -0,0 +1,18 @@
+/*
+ * Created on Jan 25, 2010
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.messaging.services;
+
+/**
+ * @author b1528444
+ *
+ */
+public interface RemoteServiceLookup {
+ void start();
+ void stop();
+ void sendOutRequestsForServiceHealth();
+ void register(String serviceId, String serviceVersion, ServiceNotification notification);
+ boolean unregister(String serviceId, String serviceVersion, ServiceNotification notification);
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/RemoteServiceRegistrar.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/RemoteServiceRegistrar.java
new file mode 100644
index 0000000000..92c458aff2
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/RemoteServiceRegistrar.java
@@ -0,0 +1,19 @@
+/*
+ * Created on Jan 25, 2010
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.messaging.services;
+
+import java.net.URI;
+
+/**
+ * @author b1528444
+ *
+ */
+public interface RemoteServiceRegistrar {
+ void start();
+ void stop();
+ RegisteredServiceReference registerService(String serviceName, String serviceVersion, String serviceUniqueId, URI broker, ServiceInfoPopulator infoPopulator, int refreshRateInSeconds);
+ boolean unregisterService(String serviceName, String serviceVersion, String serviceUniqueId);
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/ServiceInfoPopulator.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/ServiceInfoPopulator.java
new file mode 100644
index 0000000000..cec85148cf
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/ServiceInfoPopulator.java
@@ -0,0 +1,18 @@
+/*
+ * Created on Jan 25, 2010
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.messaging.services;
+
+import java.util.List;
+
+import org.eclipse.osee.framework.messaging.services.messages.ServiceDescriptionPair;
+
+/**
+ * @author b1528444
+ *
+ */
+public interface ServiceInfoPopulator {
+ void updateServiceInfo(List<ServiceDescriptionPair> serviceDescription);
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/ServiceNotification.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/ServiceNotification.java
new file mode 100644
index 0000000000..e1a97456ef
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/ServiceNotification.java
@@ -0,0 +1,17 @@
+/*
+ * Created on Jan 25, 2010
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.messaging.services;
+
+import org.eclipse.osee.framework.messaging.services.messages.ServiceHealth;
+
+/**
+ * @author b1528444
+ *
+ */
+public interface ServiceNotification {
+ void onServiceUpdate(ServiceHealth serviceHealth);
+ void onServiceGone(ServiceHealth serviceHealth);
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/internal/HealthRequestListener.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/internal/HealthRequestListener.java
new file mode 100644
index 0000000000..5c721707f2
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/internal/HealthRequestListener.java
@@ -0,0 +1,45 @@
+/*
+ * Created on Jan 26, 2010
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.messaging.services.internal;
+
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.osee.framework.jdk.core.type.CompositeKeyHashMap;
+import org.eclipse.osee.framework.messaging.OseeMessagingListener;
+import org.eclipse.osee.framework.messaging.ReplyConnection;
+import org.eclipse.osee.framework.messaging.services.messages.ServiceHealthRequest;
+
+/**
+ * @author b1528444
+ *
+ */
+public class HealthRequestListener extends OseeMessagingListener {
+ private CompositeKeyHashMap<String, String, List<UpdateStatus>> mapForReplys;
+
+ public HealthRequestListener(
+ CompositeKeyHashMap<String, String, List<UpdateStatus>> mapForReplys) {
+ super(ServiceHealthRequest.class);
+ this.mapForReplys = mapForReplys;
+ }
+
+ @Override
+ public void process(Object message, Map<String, Object> headers,
+ ReplyConnection replyConnection) {
+ if (replyConnection.isReplyRequested()) {
+ ServiceHealthRequest request = (ServiceHealthRequest)message;
+ List<UpdateStatus> updates = mapForReplys.get(request.getServiceName(), request.getServiceVersion());
+ if(updates != null){
+ for(UpdateStatus update:updates){
+ if(update != null){
+ update.run();
+ }
+ }
+ }
+ }
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/internal/HealthServiceListener.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/internal/HealthServiceListener.java
new file mode 100644
index 0000000000..16bbe1cd86
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/internal/HealthServiceListener.java
@@ -0,0 +1,64 @@
+/*
+ * Created on Jan 25, 2010
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.messaging.services.internal;
+
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import org.eclipse.osee.framework.jdk.core.type.CompositeKeyHashMap;
+import org.eclipse.osee.framework.messaging.OseeMessagingListener;
+import org.eclipse.osee.framework.messaging.ReplyConnection;
+import org.eclipse.osee.framework.messaging.services.ServiceNotification;
+import org.eclipse.osee.framework.messaging.services.messages.ServiceHealth;
+
+/**
+ * @author b1528444
+ *
+ */
+class HealthServiceListener extends OseeMessagingListener {
+
+ private static final int WIGGLE_ROOM = 20000;
+
+ private CompositeKeyHashMap<String/* serviceName */, String /* serviceVersion */, Map<String /* serviceUniqueId */,ServiceHealthPlusTimeout>> map;
+ private CompositeKeyHashMap<String/* serviceName */, String /* serviceVersion */, List<ServiceNotification>> callbacks;
+
+ HealthServiceListener(CompositeKeyHashMap<String, String, Map<String, ServiceHealthPlusTimeout>> map, CompositeKeyHashMap<String, String, List<ServiceNotification>> callbacks){
+ super(ServiceHealth.class);
+ this.map = map;
+ this.callbacks = callbacks;
+ }
+
+ @Override
+ public void process(Object message, Map<String, Object> headers,
+ ReplyConnection replyConnection) {
+ ServiceHealth health = (ServiceHealth)message;
+
+ if(health.isStopping()){
+ List<ServiceNotification> itemsToNotify = callbacks.get(health.getServiceName(), health.getServiceVersion());
+ if(itemsToNotify != null){
+ for(ServiceNotification notification :itemsToNotify){
+ notification.onServiceGone(health);
+ }
+ }
+ } else {
+ Map<String, ServiceHealthPlusTimeout> idMap = map.get(health.getServiceName(), health.getServiceVersion());
+ if(idMap == null){
+ idMap = new ConcurrentHashMap<String, ServiceHealthPlusTimeout>();
+ map.put(health.getServiceName(), health.getServiceVersion(), idMap);
+ }
+ long shouldHaveRenewedTime = System.currentTimeMillis() + (health.getRefreshRateInSeconds()*1000) + WIGGLE_ROOM;
+ idMap.put(health.getServiceUniqueId(), new ServiceHealthPlusTimeout(health, shouldHaveRenewedTime));
+
+ List<ServiceNotification> itemsToNotify = callbacks.get(health.getServiceName(), health.getServiceVersion());
+ if(itemsToNotify != null){
+ for(ServiceNotification notification :itemsToNotify){
+ notification.onServiceUpdate(health);
+ }
+ }
+ }
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/internal/MonitorTimedOutServices.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/internal/MonitorTimedOutServices.java
new file mode 100644
index 0000000000..db219eb0ec
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/internal/MonitorTimedOutServices.java
@@ -0,0 +1,73 @@
+/*
+ * Created on Jan 26, 2010
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.messaging.services.internal;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.Map.Entry;
+import org.eclipse.osee.framework.jdk.core.type.CompositeKeyHashMap;
+import org.eclipse.osee.framework.jdk.core.type.Pair;
+import org.eclipse.osee.framework.messaging.services.ServiceNotification;
+
+/**
+ * @author b1528444
+ *
+ */
+class MonitorTimedOutServices implements Runnable {
+
+ private CompositeKeyHashMap<String, String, Map<String, ServiceHealthPlusTimeout>> map;
+ private CompositeKeyHashMap<String, String, List<ServiceNotification>> callbacks;
+
+ public MonitorTimedOutServices(
+ CompositeKeyHashMap<String, String, Map<String, ServiceHealthPlusTimeout>> map, CompositeKeyHashMap<String, String, List<ServiceNotification>> callbacks) {
+ this.map = map;
+ this.callbacks = callbacks;
+ }
+
+ @Override
+ public void run() {
+ List<ThreeItems> toRemove = new ArrayList<ThreeItems>();
+ long currentSystemTime = System.currentTimeMillis();
+ Set<Pair<String, String>> keySet = map.keySet();
+ for(Pair<String, String> pair:keySet){
+ Map<String, ServiceHealthPlusTimeout> items = map.get(pair.getFirst(), pair.getSecond());
+ for(Entry<String, ServiceHealthPlusTimeout> key:items.entrySet()){
+ if(key.getValue().isTimedOut(currentSystemTime)){
+ toRemove.add(new ThreeItems(pair.getFirst(), pair.getSecond(), key.getKey()));
+ List<ServiceNotification> list = callbacks.get(pair.getFirst(), pair.getSecond());
+ for(ServiceNotification notify:list){
+ notify.onServiceGone(key.getValue().getServiceHealth());
+ }
+ }
+ }
+ }
+ for(ThreeItems item:toRemove){
+ Map<String, ServiceHealthPlusTimeout> innerMap = map.get(item.first, item.second);
+ innerMap.remove(item.key);
+ System.out.println(item.key);
+ if(innerMap.size() == 0){
+ map.remove(item.first, item.second);
+ System.out.println("removed " + item.first + item.second);
+ }
+ }
+ }
+
+ private static class ThreeItems {
+
+ String first;
+ String second;
+ String key;
+
+ ThreeItems(String first, String second, String key){
+ this.first = first;
+ this.second = second;
+ this.key = key;
+ }
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/internal/OseeMessagingStatusImpl.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/internal/OseeMessagingStatusImpl.java
new file mode 100644
index 0000000000..0eaea6f481
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/internal/OseeMessagingStatusImpl.java
@@ -0,0 +1,37 @@
+/*
+ * Created on Jan 25, 2010
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.messaging.services.internal;
+
+import java.util.logging.Level;
+
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.messaging.OseeMessagingStatusCallback;
+
+/**
+ * @author b1528444
+ *
+ */
+public class OseeMessagingStatusImpl implements OseeMessagingStatusCallback {
+
+ private String message;
+ private Class<?> clazz;
+
+ public OseeMessagingStatusImpl(String message, Class<?> clazz){
+ this.message = message;
+ this.clazz = clazz;
+ }
+
+ @Override
+ public void fail(Throwable th) {
+ th.printStackTrace();
+ OseeLog.log(clazz, Level.SEVERE, message, th);
+ }
+
+ @Override
+ public void success() {
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/internal/RemoteServiceLookupImpl.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/internal/RemoteServiceLookupImpl.java
new file mode 100644
index 0000000000..632b24ca1c
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/internal/RemoteServiceLookupImpl.java
@@ -0,0 +1,123 @@
+/*
+ * Created on Jan 25, 2010
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.messaging.services.internal;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+import java.util.logging.Level;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.type.CompositeKeyHashMap;
+import org.eclipse.osee.framework.jdk.core.type.Pair;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.messaging.ConnectionNode;
+import org.eclipse.osee.framework.messaging.services.BaseMessages;
+import org.eclipse.osee.framework.messaging.services.RemoteServiceLookup;
+import org.eclipse.osee.framework.messaging.services.ServiceNotification;
+import org.eclipse.osee.framework.messaging.services.messages.ServiceHealthRequest;
+
+/**
+ * @author b1528444
+ *
+ */
+public class RemoteServiceLookupImpl implements RemoteServiceLookup {
+
+ private ConnectionNode connectionNode;
+ private CompositeKeyHashMap<String, String, Map<String, ServiceHealthPlusTimeout>> map;
+ private CompositeKeyHashMap<String, String, List<ServiceNotification>> callbacks;
+ private HealthServiceListener healthServiceListener;
+
+ public RemoteServiceLookupImpl(ConnectionNode node, ScheduledExecutorService executor) {
+ this.connectionNode = node;
+ map = new CompositeKeyHashMap<String, String, Map<String, ServiceHealthPlusTimeout>>(25, true);
+ callbacks = new CompositeKeyHashMap<String, String, List<ServiceNotification>>(
+ 25, true);
+ healthServiceListener = new HealthServiceListener(map, callbacks);
+ connectionNode.subscribeToReply(BaseMessages.ServiceHealthRequest,
+ healthServiceListener);
+ executor.scheduleAtFixedRate(new MonitorTimedOutServices(map, callbacks), 30, 30, TimeUnit.SECONDS);
+ }
+
+ public void start(){
+ connectionNode.subscribe(BaseMessages.ServiceHealth,
+ healthServiceListener,
+ new OseeMessagingStatusImpl("Failed to subscribe to " + BaseMessages.ServiceHealth.getName(),
+ RemoteServiceLookupImpl.class));
+
+ }
+
+ public void stop(){
+ connectionNode.unsubscribe(BaseMessages.ServiceHealth,
+ healthServiceListener,
+ new OseeMessagingStatusImpl("Failed to subscribe to " + BaseMessages.ServiceHealth.getName(),
+ RemoteServiceLookupImpl.class));
+ }
+
+
+ @Override
+ public void register(String serviceName, String serviceVersion,
+ ServiceNotification notification) {
+ addListener(serviceName, serviceVersion, notification);
+ Map<String, ServiceHealthPlusTimeout> healthMap = map.get(serviceName, serviceVersion);
+ if (healthMap != null) {
+ for(ServiceHealthPlusTimeout serviceHealth:healthMap.values()){
+ notification.onServiceUpdate(serviceHealth.getServiceHealth());
+ }
+ } else {
+ sendOutRequest(serviceName, serviceVersion);
+ }
+ }
+
+ public void sendOutRequestsForServiceHealth(){
+ Set<Pair<String, String>> pairs = callbacks.keySet();
+ for(Pair<String, String> pair:pairs){
+ sendOutRequest(pair.getFirst(), pair.getSecond());
+ }
+ }
+
+ private void sendOutRequest(String serviceName, String serviceVersion){
+ ServiceHealthRequest request = new ServiceHealthRequest();
+ request.setServiceName(serviceName);
+ request.setServiceVersion(serviceVersion);
+ try {
+ connectionNode.send(BaseMessages.ServiceHealthRequest, request, new OseeMessagingStatusImpl(String.format("Failed to send Health Request for %s [%s]", serviceName, serviceVersion), RemoteServiceLookup.class));
+ } catch (OseeCoreException ex) {
+ OseeLog.log(RemoteServiceLookupImpl.class, Level.SEVERE, ex);
+ }
+ }
+
+ private void addListener(String serviceName, String serviceVersion,
+ ServiceNotification notification) {
+ List<ServiceNotification> itemsToNotify = callbacks.get(serviceName,
+ serviceVersion);
+ if (itemsToNotify == null) {
+ itemsToNotify = new CopyOnWriteArrayList<ServiceNotification>();
+ callbacks.put(serviceName, serviceVersion, itemsToNotify);
+ }
+ itemsToNotify.add(notification);
+ }
+
+ @Override
+ public boolean unregister(String serviceName,
+ String serviceVersion, ServiceNotification notification) {
+ return removeListener(serviceName, serviceVersion, notification);
+ }
+
+ private boolean removeListener(String serviceName,
+ String serviceVersion, ServiceNotification notification) {
+ List<ServiceNotification> itemsToNotify = callbacks.get(serviceName,
+ serviceVersion);
+ boolean removed = false;
+ if (itemsToNotify != null) {
+ removed = itemsToNotify.remove(notification);
+ }
+ return removed;
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/internal/RemoteServiceRegistrarImpl.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/internal/RemoteServiceRegistrarImpl.java
new file mode 100644
index 0000000000..d11a915318
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/internal/RemoteServiceRegistrarImpl.java
@@ -0,0 +1,109 @@
+/*
+ * Created on Jan 26, 2010
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.messaging.services.internal;
+
+import java.net.URI;
+import java.util.List;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledFuture;
+import java.util.concurrent.TimeUnit;
+import org.eclipse.osee.framework.jdk.core.type.CompositeKeyHashMap;
+import org.eclipse.osee.framework.messaging.ConnectionNode;
+import org.eclipse.osee.framework.messaging.services.BaseMessages;
+import org.eclipse.osee.framework.messaging.services.RemoteServiceRegistrar;
+import org.eclipse.osee.framework.messaging.services.ServiceInfoPopulator;
+import org.eclipse.osee.framework.messaging.services.RegisteredServiceReference;
+
+/**
+ * @author b1528444
+ */
+public class RemoteServiceRegistrarImpl implements RemoteServiceRegistrar {
+
+ private ConnectionNode connectionNode;
+ private ConcurrentHashMap<String, ScheduledFuture<?>> map;
+ private ConcurrentHashMap<String, UpdateStatus> mapOfUpdateStatus;
+ private CompositeKeyHashMap<String, String, List<UpdateStatus>> mapForReplys;
+ private ScheduledExecutorService executor;
+ private HealthRequestListener healthRequestListener;
+
+ public RemoteServiceRegistrarImpl(ConnectionNode node, ScheduledExecutorService executor) {
+ this.connectionNode = node;
+ this.executor = executor;
+ mapOfUpdateStatus = new ConcurrentHashMap<String, UpdateStatus>();
+ map = new ConcurrentHashMap<String, ScheduledFuture<?>>();
+ mapForReplys = new CompositeKeyHashMap<String, String, List<UpdateStatus>>(8, true);
+ healthRequestListener = new HealthRequestListener(mapForReplys);
+ }
+
+ public void start() {
+ connectionNode.subscribe(BaseMessages.ServiceHealthRequest, healthRequestListener, new OseeMessagingStatusImpl("Failed to subscribe to " + BaseMessages.ServiceHealthRequest.getName(), RemoteServiceRegistrarImpl.class));
+ }
+
+ public void stop() {
+ connectionNode.subscribe(BaseMessages.ServiceHealthRequest, healthRequestListener, new OseeMessagingStatusImpl("Failed to subscribe to " + BaseMessages.ServiceHealthRequest.getName(), RemoteServiceRegistrarImpl.class));
+ }
+
+ @Override
+ public RegisteredServiceReference registerService(String serviceName, String serviceVersion, String serviceUniqueId, URI broker, ServiceInfoPopulator infoPopulator, int refreshRateInSeconds) {
+ String key = getKey(serviceName, serviceVersion, serviceUniqueId);
+ if (!mapOfUpdateStatus.containsKey(key)) {
+ UpdateStatus updateStatus = new UpdateStatus(this.connectionNode, serviceName, serviceVersion, serviceUniqueId, broker, refreshRateInSeconds, infoPopulator);
+ ScheduledFuture<?> scheduled = executor.scheduleAtFixedRate(updateStatus, 0, refreshRateInSeconds, TimeUnit.SECONDS);
+ map.put(key, scheduled);
+ mapOfUpdateStatus.put(key, updateStatus);
+ addToReplyMap(serviceName, serviceVersion, updateStatus);
+ }
+ return new ServiceReferenceImp(mapOfUpdateStatus.get(key));
+ }
+
+ private String getKey(String serviceName, String serviceVersion, String serviceUniqueId){
+ return serviceName + serviceVersion + serviceUniqueId;
+ }
+
+ @Override
+ public boolean unregisterService(String serviceName, String serviceVersion, String serviceUniqueId) {
+ String key = getKey(serviceName, serviceVersion, serviceUniqueId);
+
+ UpdateStatus updateStatus = mapOfUpdateStatus.remove(key);
+ if(updateStatus != null){
+ updateStatus.close();
+ removeFromReplyMap(serviceName, serviceVersion, updateStatus);
+ }
+
+ ScheduledFuture<?> scheduled = map.remove(key);
+ if (scheduled == null) {
+ return false;
+ } else {
+ return scheduled.cancel(false);
+ }
+ }
+
+ public void addToReplyMap(String serviceName, String serviceVersion, UpdateStatus updateForReply) {
+ List<UpdateStatus> list = mapForReplys.get(serviceName, serviceVersion);
+ if (list == null) {
+ list = new CopyOnWriteArrayList<UpdateStatus>();
+ mapForReplys.put(serviceName, serviceVersion, list);
+ }
+ list.add(updateForReply);
+ }
+
+ public boolean removeFromReplyMap(String serviceName, String serviceVersion, UpdateStatus updateForReply) {
+ List<UpdateStatus> list = mapForReplys.get(serviceName, serviceVersion);
+ if (list != null) {
+ return list.remove(updateForReply);
+ }
+ return false;
+ }
+
+ void updateService(String key) {
+ UpdateStatus update = mapOfUpdateStatus.get(key);
+ if(update != null){
+ update.run();
+ }
+ }
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/internal/ServiceHealthPlusTimeout.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/internal/ServiceHealthPlusTimeout.java
new file mode 100644
index 0000000000..9985b6bc0c
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/internal/ServiceHealthPlusTimeout.java
@@ -0,0 +1,33 @@
+/*
+ * Created on Jan 26, 2010
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.messaging.services.internal;
+
+import org.eclipse.osee.framework.messaging.services.messages.ServiceHealth;
+
+/**
+ * @author b1528444
+ *
+ */
+public class ServiceHealthPlusTimeout {
+
+ private ServiceHealth health;
+ private long shouldHaveRenewedTime;
+
+ public ServiceHealthPlusTimeout(ServiceHealth health,
+ long shouldHaveRenewedTime) {
+ this.health = health;
+ this.shouldHaveRenewedTime = shouldHaveRenewedTime;
+ }
+
+ public boolean isTimedOut(long currentSystemTime){
+ return (currentSystemTime > shouldHaveRenewedTime);
+ }
+
+ public ServiceHealth getServiceHealth(){
+ return health;
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/internal/ServiceLookupAndRegistrarLifeCycle.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/internal/ServiceLookupAndRegistrarLifeCycle.java
new file mode 100644
index 0000000000..3977b203a6
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/internal/ServiceLookupAndRegistrarLifeCycle.java
@@ -0,0 +1,83 @@
+/*
+ * Created on Feb 3, 2010
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.messaging.services.internal;
+
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.logging.Level;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.messaging.MessageService;
+import org.eclipse.osee.framework.messaging.internal.Activator;
+import org.eclipse.osee.framework.messaging.services.RemoteServiceLookup;
+import org.eclipse.osee.framework.messaging.services.RemoteServiceRegistrar;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
+import org.osgi.framework.ServiceRegistration;
+import org.osgi.util.tracker.ServiceTracker;
+
+/**
+ * @author b1528444
+ *
+ */
+public class ServiceLookupAndRegistrarLifeCycle extends ServiceTracker {
+
+ private RemoteServiceRegistrar registrar;
+ private RemoteServiceLookup lookup;
+ private ServiceRegistration lookupRegistration;
+ private ServiceRegistration registrarRegistration;
+ private ClassLoader contextClassLoader;
+ /**
+ * @param context
+ * @param filter
+ * @param customizer
+ */
+ public ServiceLookupAndRegistrarLifeCycle(BundleContext context, ClassLoader contextClassLoader) {
+ super(context, MessageService.class.getName(), null);
+ this.contextClassLoader = contextClassLoader;
+ }
+
+ @Override
+ public Object addingService(ServiceReference reference) {
+ OseeLog.log(Activator.class, Level.INFO, String.format("Found %s service.", MessageService.class.getName()));
+ OseeLog.log(Activator.class, Level.FINEST, String.format("GOING TO GET THE REF"));
+ MessageService messageService = (MessageService) context.getService(reference);
+ OseeLog.log(Activator.class, Level.FINEST, String.format("got the service ref"));
+ ScheduledExecutorService executor = Executors.newScheduledThreadPool(2);
+ OseeLog.log(Activator.class, Level.FINEST, String.format("got exec"));
+ try{
+ OseeLog.log(Activator.class, Level.FINEST, String.format("set context classloader"));
+ Thread.currentThread().setContextClassLoader(contextClassLoader);
+ OseeLog.log(Activator.class, Level.FINEST, String.format("done set context classloader"));
+ RemoteServiceRegistrar registrar = new RemoteServiceRegistrarImpl(messageService.getDefault(), executor);
+ OseeLog.log(Activator.class, Level.FINEST, String.format("Getting ready to start %s.", RemoteServiceRegistrarImpl.class.getName()));
+ registrar.start();
+ OseeLog.log(Activator.class, Level.FINEST, String.format("started %s.", RemoteServiceRegistrarImpl.class.getName()));
+ RemoteServiceLookup lookup = new RemoteServiceLookupImpl(messageService.getDefault(), executor);
+ OseeLog.log(Activator.class, Level.FINEST, String.format("Getting ready to start %s.", RemoteServiceLookupImpl.class.getName()));
+ lookup.start();
+ OseeLog.log(Activator.class, Level.FINEST, String.format("started %s.", RemoteServiceLookupImpl.class.getName()));
+
+ lookupRegistration = context.registerService(RemoteServiceLookup.class.getName(), lookup, null);
+ OseeLog.log(Activator.class, Level.INFO, String.format("Registered %s.", RemoteServiceLookup.class.getName()));
+ registrarRegistration = context.registerService(RemoteServiceRegistrar.class.getName(), registrar, null);
+ OseeLog.log(Activator.class, Level.INFO, String.format("Registered %s.", RemoteServiceRegistrar.class.getName()));
+ } catch (OseeCoreException ex){
+ OseeLog.log(ServiceLookupAndRegistrarLifeCycle.class, Level.SEVERE, ex);
+ }
+ return super.addingService(reference);
+ }
+
+ @Override
+ public void removedService(ServiceReference reference, Object service) {
+ lookupRegistration.unregister();
+ registrarRegistration.unregister();
+ lookup.stop();
+ registrar.stop();
+ super.removedService(reference, service);
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/internal/ServiceReferenceImp.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/internal/ServiceReferenceImp.java
new file mode 100644
index 0000000000..5fc58c0f7f
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/internal/ServiceReferenceImp.java
@@ -0,0 +1,27 @@
+/*
+ * Created on Feb 23, 2010
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.messaging.services.internal;
+
+import org.eclipse.osee.framework.messaging.services.RegisteredServiceReference;
+
+/**
+ * @author b1528444
+ *
+ */
+class ServiceReferenceImp implements RegisteredServiceReference {
+
+ UpdateStatus updateStatus;
+
+ ServiceReferenceImp(UpdateStatus updateStatus){
+ this.updateStatus = updateStatus;
+ }
+
+ @Override
+ public void update() {
+ updateStatus.run();
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/internal/UpdateStatus.java b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/internal/UpdateStatus.java
new file mode 100644
index 0000000000..15c812ad24
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.messaging/src/org/eclipse/osee/framework/messaging/services/internal/UpdateStatus.java
@@ -0,0 +1,57 @@
+/*
+ * Created on Jan 26, 2010
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.framework.messaging.services.internal;
+
+import java.net.URI;
+import java.util.logging.Level;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.messaging.ConnectionNode;
+import org.eclipse.osee.framework.messaging.services.BaseMessages;
+import org.eclipse.osee.framework.messaging.services.ServiceInfoPopulator;
+import org.eclipse.osee.framework.messaging.services.messages.ServiceHealth;
+
+/**
+ * @author b1528444
+ *
+ */
+public class UpdateStatus implements Runnable {
+
+ private ConnectionNode connectionNode;
+ private ServiceInfoPopulator infoPopulator;
+ private ServiceHealth health;
+ private String errorMsg;
+
+ UpdateStatus(ConnectionNode connectionNode, String serviceName, String serviceVersion, String serviceUniqueId, URI broker, int refreshRateInSeconds, ServiceInfoPopulator infoPopulator){
+ this.connectionNode = connectionNode;
+ health = new ServiceHealth();
+ health.setBrokerURI(broker.toASCIIString());
+ health.setServiceName(serviceName);
+ health.setServiceVersion(serviceVersion);
+ health.setServiceUniqueId(serviceUniqueId);
+ health.setRefreshRateInSeconds(refreshRateInSeconds);
+ health.setStopping(false);
+ errorMsg = String.format("Failed to send %s to %s v[%s][%s]", BaseMessages.ServiceHealth.getName(), health.getServiceName(),
+ health.getServiceVersion(), health.getServiceUniqueId());
+ this.infoPopulator = infoPopulator;
+ }
+
+ @Override
+ public synchronized void run() {
+ try {
+ health.getServiceDescription().clear();
+ infoPopulator.updateServiceInfo(health.getServiceDescription());
+ connectionNode.send(BaseMessages.ServiceHealth, health, new OseeMessagingStatusImpl(errorMsg, UpdateStatus.class));
+ } catch (Exception ex) {
+ OseeLog.log(UpdateStatus.class, Level.SEVERE, ex);
+ }
+ }
+
+ public synchronized void close() {
+ health.setStopping(true);
+ run();
+ }
+
+}

Back to the top