public void TestACustomCreatedExceptionHandlerWhichReturnsAValueAsResultThatGetsInvokedWithOutgoingPort() { string destination = TcpUrlOpenEngSB + tmpGuid.ToString(); IOutgoingPort outPort = new JmsOutgoingPort(destination, new TestCustomExceptionHandler(), ConnectorId); outPort.Close(); outPort.Send("Error"); Assert.AreEqual <int>(TestCustomExceptionHandler.Executions, 2); }
public void TestJmsOutgoingPortWithQueueNameExceptionHandler() { Guid tmpGuid = Guid.NewGuid(); string destination = TcpUrlOpenEngSB + tmpGuid.ToString(); IOutgoingPort outPort = new JmsOutgoingPort(destination, new TestCustomExceptionHandler(), ConnectorId); outPort.Close(); outPort.Send("Error", "NotExist"); Assert.AreEqual <int>(TestCustomExceptionHandler.Executions, 2); }
/// <summary> /// Blocks an waits for messages. /// </summary> public override void Listen() { try { while (IsEnabled) { String textMsg; textMsg = PortIn.Receive(); if (textMsg == null) { continue; } MethodCallMessage methodCallRequest = Marshaller.UnmarshallObject <MethodCallMessage>(textMsg); if (methodCallRequest.MethodCall.Args == null) { methodCallRequest.MethodCall.Args = new List <Object>(); } MethodResultMessage methodReturnMessage = CallMethod(methodCallRequest); if (methodCallRequest.Answer) { string returnMsg = Marshaller.MarshallObject(methodReturnMessage); JmsDestination dest = new JmsDestination(Destination); IOutgoingPort portOut = new JmsOutgoingPort(JmsDestination.CreateDestinationString(dest.Host, methodCallRequest.CallId), ExceptionHandler, ConnectorId); portOut.Send(returnMsg); portOut.Close(); if (methodReturnMessage.Result.Type.Equals(ReturnType.Exception)) { throw new BridgeException("A exception occurs, while the message has been created", new BridgeException(methodReturnMessage.Result.Arg.ToString())); } } } } catch (Exception e) { if (IsEnabled) { ExceptionHandler.Changed += delegate(object[] obj) { Listen(); return(null); }; ExceptionHandler.HandleException(e); } } }
/// <summary> /// Creates an Proxy on the bus. /// </summary> public override void CreateRemoteProxy() { Logger.Info("Create a new connector"); IDictionary <string, string> metaData = new Dictionary <string, string>(); metaData.Add("serviceId", CreationServiceId); metaData.Add("contextId", ContextId); RegisterId = ConnectorId; IList <string> classes = new List <string>(); LocalType localType = new LocalType(typeof(String)); classes.Add(localType.RemoteTypeFullName); classes.Add("org.openengsb.core.api.model.ConnectorDescription"); IList <object> args = new List <object>(); Org.Openengsb.Loom.CSharp.Bridge.OpenEngSB300.Remote.RemoteObjects.ConnectorDescription connectorDescription = new Org.Openengsb.Loom.CSharp.Bridge.OpenEngSB300.Remote.RemoteObjects.ConnectorDescription(); connectorDescription.Attributes.Add("serviceId", ConnectorId); connectorDescription.Attributes.Add("portId", CreationPort); connectorDescription.Attributes.Add("destination", Destination); connectorDescription.ConnectorType = CreationConnectorType; connectorDescription.DomainType = DomainName; args.Add(RegisterId); args.Add(connectorDescription); RemoteMethodCall creationCall = RemoteMethodCall.CreateInstance(CreationMethodName, args, metaData, classes, null); JmsDestination destinationinfo = new JmsDestination(Destination); destinationinfo.Queue = CreationQueue; String id = Guid.NewGuid().ToString(); BeanDescription autinfo = BeanDescription.CreateInstance(AuthentificationClass); autinfo.Data.Add("value", Password); MethodCallMessage secureRequest = MethodCallMessage.CreateInstance(Username, autinfo, creationCall, id, true, String.Empty); IOutgoingPort portOut = new JmsOutgoingPort(destinationinfo.FullDestination, ExceptionHandler, ConnectorId); string request = Marshaller.MarshallObject(secureRequest); portOut.Send(request, id); WaitAndCheckAnswer(destinationinfo, id); RegistrationProcess = ERegistration.CREATED; portOut.Close(); Logger.Info("Create done"); }
/// <summary> /// Connect a connector to xlink /// </summary> /// <param name="ServiceId"></param> /// <param name="hostId"></param> /// <param name="toolName"></param> /// <param name="modelsToViews"></param> /// <returns></returns> public override XLinkUrlBlueprint ConnectToXLink(string toolName, String hostId, ModelToViewsTuple[] modelsToViews) { Logger.Info("Create a Xlink connector"); IDictionary <string, string> metaData = new Dictionary <string, string>(); metaData.Add("serviceId", CreationServiceId); metaData.Add("contextId", ContextId); IList <string> classes = new List <string>(); LocalType localType = new LocalType(typeof(String)); classes.Add(localType.RemoteTypeFullName); classes.Add(localType.RemoteTypeFullName); classes.Add(localType.RemoteTypeFullName); localType = new LocalType(modelsToViews.GetType()); classes.Add(localType.RemoteTypeFullName); IList <object> args = new List <object>(); args.Add(RegisterId); args.Add(hostId); args.Add(toolName); args.Add(modelsToViews); RemoteMethodCall creationCall = RemoteMethodCall.CreateInstance(XlinkMethodName, args, metaData, classes, null); JmsDestination destinationinfo = new JmsDestination(Destination); destinationinfo.Queue = CreationQueue; String id = Guid.NewGuid().ToString(); BeanDescription autinfo = BeanDescription.CreateInstance(AuthentificationClass); autinfo.Data.Add("value", Password); MethodCallMessage methodCall = MethodCallMessage.CreateInstance(Username, autinfo, creationCall, id, true, String.Empty); IOutgoingPort portOut = new JmsOutgoingPort(destinationinfo.FullDestination, ExceptionHandler, ConnectorId); string request = Marshaller.MarshallObject(methodCall); portOut.Send(request, id); portOut.Close(); MethodResultMessage result = WaitAndCheckAnswer(destinationinfo, id); RegistrationProcess = ERegistration.XLINK; Logger.Info("Create done"); return(Marshaller.UnmarshallObject <XLinkUrlBlueprint>(result.Result.Arg.ToString())); }
/// <summary> /// Creates an Proxy on the bus. /// </summary> public override void UnRegisterConnector() { if (!RegistrationProcess.Equals(ERegistration.REGISTERED)) { return; } Logger.Info("Unregister the connector with ID: " + ConnectorId); IDictionary <string, string> metaData = new Dictionary <string, string>(); metaData.Add("serviceId", CreationRegistration); metaData.Add("contextId", ContextId); LocalType localType = new LocalType(typeof(String)); IList <string> classes = new List <string>(); classes.Add(localType.RemoteTypeFullName); IList <object> args = new List <object>(); args.Add(ConnectorId); RemoteMethodCall creationCall = RemoteMethodCall.CreateInstance(UnregistrationMethodName, args, metaData, classes, null); JmsDestination destinationinfo = new JmsDestination(Destination); destinationinfo.Queue = CreationQueue; BeanDescription autinfo = BeanDescription.CreateInstance(AuthentificationClass); autinfo.Data.Add("value", Password); String id = Guid.NewGuid().ToString(); MethodCallMessage secureRequest = MethodCallMessage.CreateInstance(Username, autinfo, creationCall, id, true, String.Empty); IOutgoingPort portOut = new JmsOutgoingPort(destinationinfo.FullDestination, ExceptionHandler, ConnectorId); string request = Marshaller.MarshallObject(secureRequest); portOut.Send(request, id); WaitAndCheckAnswer(destinationinfo, id); if (RegistrationProcess.Equals(ERegistration.REGISTERED)) { RegistrationProcess = ERegistration.CREATED; } portOut.Close(); Logger.Info("Unregister done"); }
/// <summary> /// Disconnect the Connector from XLink /// </summary> public override void DisconnectFromXLink(String hostId) { Logger.Info("Disconnect connector from xlink with the serviceId: " + ConnectorId); IDictionary <string, string> metaData = new Dictionary <string, string>(); metaData.Add("serviceId", CreationServiceId); metaData.Add("contextId", ContextId); LocalType localType = new LocalType(typeof(String)); IList <String> classes = new List <String>(); classes.Add(localType.RemoteTypeFullName); classes.Add(localType.RemoteTypeFullName); IList <object> args = new List <object>(); args.Add(RegisterId); args.Add(hostId); RemoteMethodCall deletionCall = RemoteMethodCall.CreateInstance(RemoveXlinkConnectorMethodName, args, metaData, classes, null); String id = Guid.NewGuid().ToString(); BeanDescription authentification = BeanDescription.CreateInstance(AuthentificationClass); authentification.Data.Add("value", Password); MethodCallMessage callRequest = MethodCallMessage.CreateInstance(Username, authentification, deletionCall, id, true, String.Empty); JmsDestination destinationinfo = new JmsDestination(Destination); destinationinfo.Queue = CreationQueue; IOutgoingPort portOut = new JmsOutgoingPort(destinationinfo.FullDestination, ExceptionHandler, ConnectorId); string request = Marshaller.MarshallObject(callRequest); portOut.Send(request, id); WaitAndCheckAnswer(destinationinfo, id); portOut.Close(); RegistrationProcess = ERegistration.REGISTERED; Logger.Info("XLink is disconnected"); }