You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by cw...@apache.org on 2018/10/16 16:30:51 UTC

svn commit: r1844027 - in /uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws: config/WebServerConfiguration.java self/message/WebServerStateProcessor.java

Author: cwiklik
Date: Tue Oct 16 16:30:51 2018
New Revision: 1844027

URL: http://svn.apache.org/viewvc?rev=1844027&view=rev
Log:
UIMA-5894 modified camel route to use JmsTemplate to publish JMS pings to test broker viability. The JmsTemplate creates new broker connection for every ping.

Modified:
    uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/config/WebServerConfiguration.java
    uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/self/message/WebServerStateProcessor.java

Modified: uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/config/WebServerConfiguration.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/config/WebServerConfiguration.java?rev=1844027&r1=1844026&r2=1844027&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/config/WebServerConfiguration.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/config/WebServerConfiguration.java Tue Oct 16 16:30:51 2018
@@ -29,9 +29,12 @@ import org.apache.camel.Predicate;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.jms.JmsMessage;
+import org.apache.uima.ducc.common.authentication.BrokerCredentials;
+import org.apache.uima.ducc.common.authentication.BrokerCredentials.Credentials;
 import org.apache.uima.ducc.common.config.CommonConfiguration;
 import org.apache.uima.ducc.common.config.DuccBlastGuardPredicate;
 import org.apache.uima.ducc.common.utils.DuccLogger;
+import org.apache.uima.ducc.common.utils.Utils;
 import org.apache.uima.ducc.common.utils.id.DuccId;
 import org.apache.uima.ducc.transport.DuccTransportConfiguration;
 import org.apache.uima.ducc.transport.dispatcher.DuccEventDispatcher;
@@ -62,7 +65,9 @@ public class WebServerConfiguration {
 	private DuccId jobid = null;
 	
 	private AtomicBoolean singleton = new AtomicBoolean(false);
+	private Credentials brokerCredentials;
 	
+
 	/**
 	 * Instantiate {@link WebServerEventListener} which will handle incoming messages.
 	 * 
@@ -109,13 +114,17 @@ public class WebServerConfiguration {
 	 */
 	private RouteBuilder routeBuilderForWebServerStatePost(final String targetEndpointToReceiveWebServerStateUpdate, final int statePublishRate) throws Exception {
 		final WebServerStateProcessor wssp =  // an object responsible for generating the state 
-			new WebServerStateProcessor();
+				new WebServerStateProcessor(common.brokerUrl,
+						brokerCredentials.getUsername(), 
+						brokerCredentials.getPassword(),
+						targetEndpointToReceiveWebServerStateUpdate
+						);
 		
 		return new RouteBuilder() {
 		      public void configure() {		            
 		    	
 		    	final Predicate blastFilter = new DuccBlastGuardPredicate(duccLogger);
-		    	
+		    	onException(Exception.class).handled(true).process(new ErrorProcessor());
 		        from("timer:webserverStateDumpTimer?fixedRate=true&period=" + statePublishRate)
 		              // This route uses a filter to prevent sudden bursts of messages which
 		        	  // may flood DUCC daemons causing chaos. The filter disposes any event
@@ -124,12 +133,19 @@ public class WebServerConfiguration {
 		              //.process(xmStart)
 		        	  .process(wssp)
 		        	  //.process(xmEnded)
-		        	  .to(targetEndpointToReceiveWebServerStateUpdate)
+		        	  //.to(targetEndpointToReceiveWebServerStateUpdate)
 		        	  ;
 		      }
 		    };
 	}
-	
+	  public class ErrorProcessor implements Processor {
+
+		    public void process(Exchange exchange) throws Exception {
+		      // the caused by exception is stored in a property on the exchange
+		      Throwable causedBy = exchange.getProperty(Exchange.EXCEPTION_CAUGHT, Throwable.class);
+		      duccLogger.error("ErrorProcessor.process", jobid, causedBy);
+		    }
+		  }
 	/**
 	 * Creates and initializes {@link WebServerComponent} instance. @Bean annotation identifies {@link WebServerComponent}
 	 * as a Spring framework Bean which will be managed by Spring container.  
@@ -143,6 +159,19 @@ public class WebServerConfiguration {
 		String methodName = "webServer";
 		WebServerComponent ws = null;
 		try {
+			String brokerCredentialsFile = 
+					System.getProperty("ducc.broker.credentials.file");
+			duccLogger.info("webServer", jobid, "Credentials File:"+brokerCredentialsFile);
+	   	    String path =
+			       Utils.resolvePlaceholderIfExists(brokerCredentialsFile, System.getProperties());
+			duccLogger.info("webServer", jobid, "Path:"+path);
+		    brokerCredentials = BrokerCredentials.get(path);
+			
+		} catch( Throwable e) {
+			duccLogger.error("webServer", jobid, e);
+			
+		}
+		try {
 			if(singleton.getAndSet(true)) {
 				try {
 					throw new RuntimeException("singleton already present!");

Modified: uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/self/message/WebServerStateProcessor.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/self/message/WebServerStateProcessor.java?rev=1844027&r1=1844026&r2=1844027&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/self/message/WebServerStateProcessor.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/self/message/WebServerStateProcessor.java Tue Oct 16 16:30:51 2018
@@ -18,20 +18,75 @@
 */
 package org.apache.uima.ducc.ws.self.message;
 
+import javax.jms.JMSException;
+import javax.jms.Message;
+import javax.jms.ObjectMessage;
+import javax.jms.Session;
+
+import org.apache.activemq.ActiveMQConnectionFactory;
+import org.apache.activemq.command.ActiveMQTopic;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
+import org.apache.uima.ducc.common.utils.DuccLogger;
+import org.springframework.jms.core.JmsTemplate;
+import org.springframework.jms.core.MessageCreator;
 
 /**
  * Processor of received webserver messages to self via broker
  */
 public class WebServerStateProcessor implements Processor {
-	
+	private final String brokerUrl;
+	private final String username;
+	private final String password;
+	private final String endpoint;
+	private DuccLogger duccLogger = DuccLogger.getLogger(WebServerStateProcessor.class);
+	public WebServerStateProcessor(String brokerUrl, String username, String password, String endpoint) {
+		this.brokerUrl = brokerUrl;
+		this.username = username;
+		this.password = password;
+		this.endpoint = endpoint;
+	}
 	@Override
 	public void process(Exchange exchange) throws Exception {
-		WebServerStateDuccEvent wse = new WebServerStateDuccEvent();
-		WebServerState wss = new WebServerState();
-		wse.setState(wss);
-		exchange.getIn().setBody(wse);
+		try {
+			ActiveMQConnectionFactory amqcf =
+					new ActiveMQConnectionFactory(username, password, brokerUrl);
+			amqcf.setTrustAllPackages(true);
+			// this dispatcher will create a new connection for every ping.
+			// No cleanup is needed as this also closes session and connection
+			// after each ping.
+			JmsTemplate jmsDispatcher = 
+					new JmsTemplate(amqcf);
+			// The endpoint is configured for Camel use and has the following
+			// syntax: activemq:topic:<name>
+			// Strip the activemq:topic: part to just get the name of the jms
+			// topic which will be used to create ActiveMQTopic
+			int pos = endpoint.indexOf("topic:")+"topic:".length();
+			
+			String topicName = endpoint.substring(pos);
+			ActiveMQTopic topic = new ActiveMQTopic(topicName);
+			jmsDispatcher.send(topic, new MessageCreator() {
+				
+				@Override
+				public Message createMessage(Session session) throws JMSException {
+					// create a ping event message
+					ObjectMessage body = session.createObjectMessage();
+					WebServerStateDuccEvent wse = new WebServerStateDuccEvent();
+					WebServerState wss = new WebServerState();
+					wse.setState(wss);
+					body.setObject(wse);
+					return body;
+				}
+			
+			});
+			
+		} catch( Throwable t ) {
+			duccLogger.error("process",null, t);
+		}
+//		WebServerStateDuccEvent wse = new WebServerStateDuccEvent();
+//		WebServerState wss = new WebServerState();
+//		wse.setState(wss);
+//		exchange.getIn().setBody(wse);
 	}
 
 }