diff --git a/hsarback/src/main/java/de/hsadmin/servlets/QueueStatusReceiverServlet.java b/hsarback/src/main/java/de/hsadmin/servlets/QueueStatusReceiverServlet.java index 1fad1fe..3c72b77 100644 --- a/hsarback/src/main/java/de/hsadmin/servlets/QueueStatusReceiverServlet.java +++ b/hsarback/src/main/java/de/hsadmin/servlets/QueueStatusReceiverServlet.java @@ -2,7 +2,6 @@ package de.hsadmin.servlets; import java.io.IOException; import java.io.PrintWriter; -import java.util.Set; import javax.jms.ExceptionListener; import javax.jms.JMSException; @@ -27,8 +26,7 @@ import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.apache.activemq.ActiveMQConnection; -import org.apache.activemq.command.ActiveMQQueue; +import org.apache.activemq.ActiveMQConnectionFactory; import de.hsadmin.core.model.TechnicalException; import de.hsadmin.core.model.TicketValidator; @@ -43,6 +41,8 @@ public class QueueStatusReceiverServlet extends HttpServlet private static final long serialVersionUID = -5701350884034782083L; + private static boolean initQueuesDone = false; + private String jmsUser; private String jmsPass; private QueueConnectionFactory queueConnectionFactory; @@ -61,6 +61,14 @@ public class QueueStatusReceiverServlet extends HttpServlet isConnected = false; messageCount = 0; errorCount = 0; + try { + if (!initQueuesDone) { + initQueues(); + } + initQueuesDone = true; + } catch (NamingException e) { + throw new ServletException(e); + } try { connect(); } catch (NamingException e) { @@ -72,6 +80,35 @@ public class QueueStatusReceiverServlet extends HttpServlet Config config = Config.getInstance(); jmsUser = config.getProperty("hsadmin.jms.username", "hsadmin"); jmsPass = config.getProperty("hsadmin.jms.password", "hsadmin-pw"); + InitialContext ctx = new InitialContext(); + Context env = (Context) ctx.lookup("java:comp/env"); + queueConnectionFactory = (QueueConnectionFactory) env.lookup("jms/QueueCF"); + if (queueConnectionFactory instanceof ActiveMQConnectionFactory) { + ActiveMQConnectionFactory activeMQConnectionFactory = (ActiveMQConnectionFactory) queueConnectionFactory; + activeMQConnectionFactory.setTrustAllPackages(true); + } + int timeoutCounter = 10; + while (!isConnected && (timeoutCounter > 0)) { + try { + queueConnection = queueConnectionFactory.createQueueConnection(jmsUser, jmsPass); + queueConnection.setExceptionListener(this); + queueSession = queueConnection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE); + Queue queue = (Queue) env.lookup("jms/hsadminStatus"); + queueConnection.start(); + QueueReceiver receiver = queueSession.createReceiver(queue); + receiver.setMessageListener(this); + isConnected = true; + } catch (JMSException e) { + close(); + try { + timeoutCounter--; + Thread.sleep(2000); + } catch (InterruptedException e1) { } + } + } + } + + private void initQueues() throws NamingException { InitialContext ctx = new InitialContext(); NamingEnumeration list = ctx.list("java:comp/env/jms"); Transaction transaction = new Transaction("anonymous"); @@ -91,43 +128,7 @@ public class QueueStatusReceiverServlet extends HttpServlet } transaction.commitTransaction(); transaction.close(); - Context env = (Context) ctx.lookup("java:comp/env"); - queueConnectionFactory = (QueueConnectionFactory) env.lookup("jms/QueueCF"); - int timeoutCounter = 10; - while (!isConnected && (timeoutCounter > 0)) { - try { - queueConnection = queueConnectionFactory.createQueueConnection(jmsUser, jmsPass); - queueConnection.setExceptionListener(this); - if (queueConnection instanceof ActiveMQConnection) { - checkQueues((ActiveMQConnection) queueConnection, new PrintWriter(System.out)); - } - queueSession = queueConnection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE); - Queue queue = (Queue) env.lookup("jms/hsadminStatus"); - queueConnection.start(); - QueueReceiver receiver = queueSession.createReceiver(queue); - receiver.setMessageListener(this); - isConnected = true; - } catch (JMSException e) { - close(); - try { - timeoutCounter--; - Thread.sleep(2000); - } catch (InterruptedException e1) { } - } - } - } - - private void checkQueues(ActiveMQConnection amqConn, PrintWriter writer) { - try { - writer.print("\n"); - Set queues = amqConn.getDestinationSource().getQueues(); - for (ActiveMQQueue queue : queues) { - writer.print("Phys: " + queue.getPhysicalName() + " - Qual: " + queue.getQualifiedName() + "\n"); - } - } catch (JMSException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } + ctx.close(); } @Override @@ -138,9 +139,6 @@ public class QueueStatusReceiverServlet extends HttpServlet writer.println("Verbindungsstatus: " + (isConnected ? "OK" : "ERROR")); writer.println("Verarbeitete Nachrichten: " + messageCount); writer.println("Verarbeitungsfehler: " + errorCount); - if (queueConnection instanceof ActiveMQConnection) { - checkQueues((ActiveMQConnection) queueConnection, writer); - } writer.close(); } diff --git a/qserv-deploy/src/deb/systemd/hsadmin-qserv.service b/qserv-deploy/src/deb/systemd/hsadmin-qserv.service index f13a32c..1729e9a 100644 --- a/qserv-deploy/src/deb/systemd/hsadmin-qserv.service +++ b/qserv-deploy/src/deb/systemd/hsadmin-qserv.service @@ -5,7 +5,7 @@ After=network.target nss-lookup.target [Service] Type=simple Environment="PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin" -Environment="JAVA_OPTS=-Xbootclasspath/a:/etc/hsadmin/qserv/ -Djavax.net.ssl.keyStore=/etc/hsadmin/qserv/keystore -Djavax.net.ssl.keyStorePassword=password -Djavax.net.ssl.trustStore=/etc/hsadmin/qserv/truststore -Djavax.net.ssl.trustStorePassword=password -Dorg.apache.activemq.SERIALIZABLE_PACKAGES=java.lang,javax.security,java.util,org.apache.activemq,org.fusesource.hawtbuf,com.thoughtworks.xstream.mapper,de.hsadmin.core.qserv,de.hsadmin.mods.cust,de.hsadmin.mods.db,de.hsadmin.mods.dom,de.hsadmin.mods.email,de.hsadmin.mods.pac,de.hsadmin.mods.qstat,de.hsadmin.mods.user" +Environment="JAVA_OPTS=-Xbootclasspath/a:/etc/hsadmin/qserv/ -Djavax.net.ssl.keyStore=/etc/hsadmin/qserv/keystore -Djavax.net.ssl.keyStorePassword=password -Djavax.net.ssl.trustStore=/etc/hsadmin/qserv/truststore -Djavax.net.ssl.trustStorePassword=password -Dorg.apache.activemq.SERIALIZABLE_PACKAGES=*" ExecStart=/usr/bin/java $JAVA_OPTS -jar /usr/local/lib/hostsharing/hsadmin/hsadmin-qserv-full.jar /etc/hsadmin/qserv/qserv.properties StandardOutput=file:/var/log/hostsharing/hsadmin/hsar-qserv.err StandardError=inherit diff --git a/qserv/src/main/java/de/hsadmin/core/model/Transaction.java b/qserv/src/main/java/de/hsadmin/core/model/Transaction.java index cf5857f..4e7f890 100644 --- a/qserv/src/main/java/de/hsadmin/core/model/Transaction.java +++ b/qserv/src/main/java/de/hsadmin/core/model/Transaction.java @@ -15,6 +15,7 @@ import javax.persistence.EntityManager; import javax.persistence.EntityTransaction; import javax.persistence.Query; +import org.apache.activemq.ActiveMQConnectionFactory; import org.apache.openjpa.persistence.OpenJPAEntityManager; import de.hsadmin.core.qserv.QueueClient; @@ -42,6 +43,10 @@ public class Transaction { ctx = new InitialContext(); Context env = (Context) ctx.lookup("java:comp/env"); queueConnectionFactory = (QueueConnectionFactory) env.lookup("jms/QueueCF"); + if (queueConnectionFactory instanceof ActiveMQConnectionFactory) { + ActiveMQConnectionFactory activeMQconnectionFatory = (ActiveMQConnectionFactory) queueConnectionFactory; + activeMQconnectionFatory.setTrustAllPackages(true); + } } catch (NamingException e) { throw new TechnicalException("no jms queue: jms/QueueCF", e); } diff --git a/qserv/src/main/java/de/hsadmin/core/qserv/QueueServer.java b/qserv/src/main/java/de/hsadmin/core/qserv/QueueServer.java index 2095088..f997a7b 100644 --- a/qserv/src/main/java/de/hsadmin/core/qserv/QueueServer.java +++ b/qserv/src/main/java/de/hsadmin/core/qserv/QueueServer.java @@ -7,7 +7,6 @@ import java.util.logging.Level; import java.util.logging.Logger; import javax.jms.Connection; -import javax.jms.ConnectionFactory; import javax.jms.Destination; import javax.jms.ExceptionListener; import javax.jms.JMSException; @@ -24,6 +23,8 @@ import javax.jms.Session; import javax.naming.Context; import javax.naming.InitialContext; +import org.apache.activemq.ActiveMQConnectionFactory; + public class QueueServer extends QueueCommons implements MessageListener, ExceptionListener { private static final String VERSION_NO = "4.0.11"; @@ -84,7 +85,7 @@ public class QueueServer extends QueueCommons implements MessageListener, Except } }); while (!qServ.connect()) { - Thread.sleep(120000); + Thread.sleep(30000); } while (true) { Thread.sleep(10000); @@ -129,8 +130,11 @@ public class QueueServer extends QueueCommons implements MessageListener, Except // create JMS connection and session try { Context ctx = new InitialContext(); - QueueConnectionFactory connectionFactory = - (QueueConnectionFactory) ctx.lookup(jmsFactory); + QueueConnectionFactory connectionFactory = (QueueConnectionFactory) ctx.lookup(jmsFactory); + if (connectionFactory instanceof ActiveMQConnectionFactory) { + ActiveMQConnectionFactory activeMQConnectionFactory = (ActiveMQConnectionFactory) connectionFactory; + activeMQConnectionFactory.setTrustAllPackages(true); + } conn = connectionFactory.createQueueConnection(jmsUserName, jmsPassWord); conn.setExceptionListener(this); queueSession = conn.createQueueSession(false, Session.AUTO_ACKNOWLEDGE); @@ -211,7 +215,11 @@ public class QueueServer extends QueueCommons implements MessageListener, Except try { logger.log(Level.INFO, "sendStatus(" + queueMessage + ")"); Context ctx = new InitialContext(); - ConnectionFactory connectionFactory = (ConnectionFactory) ctx.lookup(jmsFactory); + QueueConnectionFactory connectionFactory = (QueueConnectionFactory) ctx.lookup(jmsFactory); + if (connectionFactory instanceof ActiveMQConnectionFactory) { + ActiveMQConnectionFactory activeMQConnectionFactory = (ActiveMQConnectionFactory) connectionFactory; + activeMQConnectionFactory.setTrustAllPackages(true); + } Destination queue = (Destination) ctx.lookup(jmsStatusQueue); statusConnection = connectionFactory.createConnection(jmsUserName, jmsPassWord); statusSession = statusConnection.createSession(false, Session.AUTO_ACKNOWLEDGE);