You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by db...@apache.org on 2005/11/22 06:34:51 UTC
svn commit: r348100 -
/geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/AbstractContinuumBuildAgent.java
Author: dblevins
Date: Mon Nov 21 21:34:47 2005
New Revision: 348100
URL: http://svn.apache.org/viewcvs?rev=348100&view=rev
Log:
Each connection now has thread running that sends a small message on a BUILD.PING topic every minute
Hopefully this will keep connections from dropping due to no being used.
Modified:
geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/AbstractContinuumBuildAgent.java
Modified: geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/AbstractContinuumBuildAgent.java
URL: http://svn.apache.org/viewcvs/geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/AbstractContinuumBuildAgent.java?rev=348100&r1=348099&r2=348100&view=diff
==============================================================================
--- geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/AbstractContinuumBuildAgent.java (original)
+++ geronimo/gbuild/trunk/gbuild-agent/src/main/java/org/apache/geronimo/gbuild/agent/AbstractContinuumBuildAgent.java Mon Nov 21 21:34:47 2005
@@ -33,6 +33,7 @@
import javax.jms.DeliveryMode;
import javax.jms.ObjectMessage;
import javax.jms.Message;
+import javax.jms.TextMessage;
import java.util.Map;
/**
@@ -163,13 +164,15 @@
private final ExceptionListener listener;
private final Logger logger;
private boolean connected = true;
+ private final Ping ping;
- private Client(Client old, Connection connection, Session session) {
+ private Client(Client old, Connection connection, Session session, Ping ping) {
this.brokerUrl = old.brokerUrl;
this.connection = connection;
this.session = session;
this.listener = old.listener;
this.logger = old.logger;
+ this.ping = ping;
}
public Client(String brokerUrl, ExceptionListener listener, Logger logger) throws JMSException {
@@ -181,6 +184,8 @@
this.listener = listener;
this.session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
this.logger = logger;
+ this.ping = new Ping(session);
+ ping.start();
}
public synchronized boolean isConnected() {
@@ -222,12 +227,19 @@
public synchronized Client reconnect() throws JMSException {
failed();
+
Connection connection = connect();
+
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
- return new Client(this, connection, session);
+
+ Ping ping = new Ping(session);
+ ping.start();
+
+ return new Client(this, connection, session, ping);
}
public synchronized void close() throws JMSException {
+ ping.stop();
session.close();
connection.close();
}
@@ -274,6 +286,55 @@
public void onException(JMSException jmsException) {
getLogger().info("JMSException "+this.hashCode());
this.listener.onException(jmsException);
+ }
+ }
+
+ public static class Ping implements Runnable {
+ private boolean run;
+ private final Session session;
+ private final MessageProducer producer;
+
+ public void start() {
+ Thread thread = new Thread(this);
+ thread.setDaemon(true);
+ thread.start();
+ }
+
+ public void stop(){
+ setRun(false);
+ }
+
+ public Ping(Session session) throws JMSException {
+ this.session = session;
+ Topic topic = session.createTopic("BUILD.PING");
+ producer = session.createProducer(topic);
+ }
+
+ public synchronized boolean isRunning() {
+ return run;
+ }
+
+ public synchronized void setRun(boolean run) {
+ this.run = run;
+ }
+
+ public void run() {
+ while (isRunning()){
+ try {
+ ping();
+ } catch (JMSException e) {
+ e.printStackTrace();
+ }
+ try {
+ Thread.sleep(60000);
+ } catch (InterruptedException e) {
+ }
+ }
+ }
+
+ private void ping() throws JMSException {
+ TextMessage message = session.createTextMessage(Long.toString(System.currentTimeMillis()));
+ producer.send(message);
}
}
}