diff --git a/hsarback/pom.xml b/hsarback/pom.xml
index 89331f5..739d21f 100644
--- a/hsarback/pom.xml
+++ b/hsarback/pom.xml
@@ -5,7 +5,7 @@
de.hsadmin
hsar
war
- 4.0.15
+ 4.0.16
HSAdmin Stable Backend Webapp
http://maven.apache.org
@@ -36,12 +36,12 @@
de.hsadmin.core
hsadmin-util
- 4.0.15
+ 4.0.16
de.hsadmin.core
hsadmin-qserv
- 4.0.15
+ 4.0.16
commons-httpclient
@@ -78,6 +78,11 @@
openjpa
3.2.2
+
+ org.apache.activemq
+ activemq-client
+ 5.17.5
+
junit
junit
@@ -90,18 +95,6 @@
4.0.1
provided
-
- org.apache.activemq
- activemq-all
- 5.18.1
- provided
-
-
- org.apache.geronimo.specs
- geronimo-jms_1.1_spec
- 1.1.1
- provided
-
hsar
diff --git a/hsarback/src/main/java/de/hsadmin/servlets/QueueStatusReceiverServlet.java b/hsarback/src/main/java/de/hsadmin/servlets/QueueStatusReceiverServlet.java
index 3c72b77..91395f1 100644
--- a/hsarback/src/main/java/de/hsadmin/servlets/QueueStatusReceiverServlet.java
+++ b/hsarback/src/main/java/de/hsadmin/servlets/QueueStatusReceiverServlet.java
@@ -2,6 +2,8 @@ package de.hsadmin.servlets;
import java.io.IOException;
import java.io.PrintWriter;
+import java.io.Serializable;
+import java.util.Date;
import javax.jms.ExceptionListener;
import javax.jms.JMSException;
@@ -10,15 +12,9 @@ import javax.jms.MessageListener;
import javax.jms.ObjectMessage;
import javax.jms.Queue;
import javax.jms.QueueConnection;
-import javax.jms.QueueConnectionFactory;
import javax.jms.QueueReceiver;
import javax.jms.QueueSession;
import javax.jms.Session;
-import javax.naming.Context;
-import javax.naming.InitialContext;
-import javax.naming.NameClassPair;
-import javax.naming.NamingEnumeration;
-import javax.naming.NamingException;
import javax.persistence.EntityManager;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
@@ -31,21 +27,20 @@ import org.apache.activemq.ActiveMQConnectionFactory;
import de.hsadmin.core.model.TechnicalException;
import de.hsadmin.core.model.TicketValidator;
import de.hsadmin.core.model.Transaction;
-import de.hsadmin.core.qserv.NullProcessor;
import de.hsadmin.core.qserv.Processor;
import de.hsadmin.core.qserv.QueueTask;
+import de.hsadmin.core.qserv.TaskTransfer;
import de.hsadmin.core.util.Config;
public class QueueStatusReceiverServlet extends HttpServlet
implements MessageListener, ExceptionListener {
private static final long serialVersionUID = -5701350884034782083L;
-
- private static boolean initQueuesDone = false;
-
+
+ private String jmsUrl;
private String jmsUser;
private String jmsPass;
- private QueueConnectionFactory queueConnectionFactory;
+ private String jmsStatusQueue;
private QueueConnection queueConnection;
private QueueSession queueSession;
private boolean isConnected;
@@ -61,39 +56,24 @@ 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) {
- throw new ServletException(e);
- }
+ connect();
}
- private void connect() throws NamingException {
+ private void connect() {
Config config = Config.getInstance();
+ jmsUrl = config.getProperty("hsadmin.jms.url", "tcp://localhost:61616");
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);
- }
+ jmsStatusQueue = config.getProperty("hsadmin.jms.status-queue", "queue.Status");
+ final ActiveMQConnectionFactory mqConnectionFactory = new ActiveMQConnectionFactory(jmsUrl);
+ mqConnectionFactory.setTrustAllPackages(true);
int timeoutCounter = 10;
while (!isConnected && (timeoutCounter > 0)) {
try {
- queueConnection = queueConnectionFactory.createQueueConnection(jmsUser, jmsPass);
+ queueConnection = mqConnectionFactory.createQueueConnection(jmsUser, jmsPass);
queueConnection.setExceptionListener(this);
queueSession = queueConnection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
- Queue queue = (Queue) env.lookup("jms/hsadminStatus");
+ Queue queue = queueSession.createQueue(jmsStatusQueue);
queueConnection.start();
QueueReceiver receiver = queueSession.createReceiver(queue);
receiver.setMessageListener(this);
@@ -108,29 +88,6 @@ public class QueueStatusReceiverServlet extends HttpServlet
}
}
- private void initQueues() throws NamingException {
- InitialContext ctx = new InitialContext();
- NamingEnumeration list = ctx.list("java:comp/env/jms");
- Transaction transaction = new Transaction("anonymous");
- transaction.beginTransaction();
- EntityManager entityManager = transaction.getEntityManager();
- while (list.hasMore()) {
- NameClassPair pair = list.next();
- String jndiName = pair.getName();
- if (jndiName != null && jndiName.startsWith("hsadminSystem-")) {
- QueueTask task = new QueueTask();
- task.setProcessor(new NullProcessor());
- entityManager.persist(task);
- entityManager.flush();
- String hive = jndiName.substring(14);
- transaction.enqueue(hive, task);
- }
- }
- transaction.commitTransaction();
- transaction.close();
- ctx.close();
- }
-
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
@@ -159,20 +116,27 @@ public class QueueStatusReceiverServlet extends HttpServlet
messageCount++;
try {
ObjectMessage objMessage = (ObjectMessage) jmsMessage;
- QueueTask detachedQT = (QueueTask) objMessage.getObject();
- transaction = new Transaction("statusreceiver");
- transaction.beginTransaction();
- EntityManager em = transaction.getEntityManager();
- em.clear();
- QueueTask persistentQT = em.find(QueueTask.class, detachedQT.getId());
- persistentQT.assign(detachedQT);
- Processor processor = persistentQT.getProcessor();
- if (processor != null) {
- processor.finalize(transaction, persistentQT);
+ final Serializable object = objMessage.getObject();
+ if (object != null) {
+ TaskTransfer detachedQT = (TaskTransfer) object;
+ transaction = new Transaction("statusreceiver");
+ transaction.beginTransaction();
+ EntityManager em = transaction.getEntityManager();
+ em.clear();
+ QueueTask persistentQT = em.find(QueueTask.class, detachedQT.getId());
+ persistentQT.assign(detachedQT);
+ Processor processor = persistentQT.getProcessor();
+ if (processor != null) {
+ processor.finalize(transaction, persistentQT);
+ }
+ em.persist(persistentQT);
+ em.flush();
+ transaction.commitTransaction();
+ } else {
+ final String err = "Deserialization failed " + new Date();
+ System.out.println(err);
+ throw new TechnicalException(err);
}
- em.persist(persistentQT);
- em.flush();
- transaction.commitTransaction();
} catch (Exception e) {
errorCount++;
if (transaction != null) transaction.rollbackTransaction();
@@ -186,7 +150,7 @@ public class QueueStatusReceiverServlet extends HttpServlet
public void onException(JMSException exception) {
close();
try { Thread.sleep(10000); } catch (InterruptedException e) { }
- try { connect(); } catch (NamingException e) { }
+ connect();
}
}
diff --git a/hsarback/src/main/webapp/META-INF/context.xml b/hsarback/src/main/webapp/META-INF/context.xml
index 808ab2b..5690171 100644
--- a/hsarback/src/main/webapp/META-INF/context.xml
+++ b/hsarback/src/main/webapp/META-INF/context.xml
@@ -5,29 +5,4 @@
global="jdbc/HSAdminDB"
type="javax.sql.DataSource"/>
-
-
-
-
-
-
-
-
-
-
diff --git a/hsarback/src/main/webapp/WEB-INF/web.xml b/hsarback/src/main/webapp/WEB-INF/web.xml
index 7b91d45..1c2f6f3 100644
--- a/hsarback/src/main/webapp/WEB-INF/web.xml
+++ b/hsarback/src/main/webapp/WEB-INF/web.xml
@@ -57,36 +57,5 @@
Container
-
- jms/QueueCF
- javax.jms.QueueConnectionFactory
- Container
- Shareable
-
-
-
- jms/hsadminSystem-h99
- javax.jms.Queue
- Container
- Shareable
-
-
- jms/hsadminSystem-testdns
- javax.jms.Queue
- Container
- Shareable
-
-
- jms/hsadminSystem-testmail
- javax.jms.Queue
- Container
- Shareable
-
-
- jms/hsadminStatus
- javax.jms.Queue
- Container
- Shareable
-
-
-
\ No newline at end of file
+
+
diff --git a/qserv/.gitignore b/qserv/.gitignore
index 21d4321..424bb27 100644
--- a/qserv/.gitignore
+++ b/qserv/.gitignore
@@ -4,4 +4,4 @@
.classpath
.project
.settings/
-
+hsadmin.properties
diff --git a/qserv/pom.xml b/qserv/pom.xml
index d2694d6..785d36d 100644
--- a/qserv/pom.xml
+++ b/qserv/pom.xml
@@ -4,7 +4,7 @@
4.0.0
de.hsadmin.core
hsadmin-qserv
- 4.0.15
+ 4.0.16
UTF-8
11
@@ -13,7 +13,7 @@
de.hsadmin.core
hsadmin-util
- 4.0.15
+ 4.0.16
commons-lang
diff --git a/qserv/src/main/java/de/hsadmin/core/model/AbstractModuleImpl.java b/qserv/src/main/java/de/hsadmin/core/model/AbstractModuleImpl.java
index eadb74a..663e683 100644
--- a/qserv/src/main/java/de/hsadmin/core/model/AbstractModuleImpl.java
+++ b/qserv/src/main/java/de/hsadmin/core/model/AbstractModuleImpl.java
@@ -14,6 +14,7 @@ import de.hsadmin.core.qserv.EntityProcessorFactory;
import de.hsadmin.core.qserv.NullProcessor;
import de.hsadmin.core.qserv.Processor;
import de.hsadmin.core.qserv.QueueTask;
+import de.hsadmin.core.qserv.TaskTransfer;
import de.hsadmin.core.util.HSAdminException;
import de.hsadmin.mods.user.UnixUser;
@@ -199,8 +200,10 @@ public abstract class AbstractModuleImpl implements ModuleInterface {
StringBuilder details = new StringBuilder();
String title = entityTypeName + " (" + entity.createStringKey() + ") " + action;
QueueTask task = new QueueTask(user, title, details.toString(), proc);
- transaction.getEntityManager().persist(task);
- transaction.enqueue(entity.getHiveName(), task);
+ final EntityManager entityManager = transaction.getEntityManager();
+ entityManager.persist(task);
+ entityManager.refresh(task);
+ transaction.enqueue(entity.getHiveName(), TaskTransfer.getTransferObject(task));
}
public String toString(StackTraceElement[] stackTrace) {
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 4e7f890..2ee331d 100644
--- a/qserv/src/main/java/de/hsadmin/core/model/Transaction.java
+++ b/qserv/src/main/java/de/hsadmin/core/model/Transaction.java
@@ -6,11 +6,11 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
+import javax.jms.JMSException;
import javax.jms.Queue;
+import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
-import javax.naming.Context;
-import javax.naming.InitialContext;
-import javax.naming.NamingException;
+import javax.jms.QueueSession;
import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.persistence.Query;
@@ -19,7 +19,7 @@ import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.openjpa.persistence.OpenJPAEntityManager;
import de.hsadmin.core.qserv.QueueClient;
-import de.hsadmin.core.qserv.QueueTask;
+import de.hsadmin.core.qserv.TaskTransfer;
import de.hsadmin.core.util.Config;
import de.hsadmin.mods.cust.Customer;
import de.hsadmin.mods.pac.Pac;
@@ -32,24 +32,23 @@ public class Transaction {
private String loginName;
private Map taskStores;
private boolean transactionActive;
- private InitialContext ctx;
+ private Config config;
+ private String jmsServerUrl;
+ private String jmsUsername;
+ private String jmsPassword;
public Transaction(String loginName) {
+ this.config = Config.getInstance();
+ this.jmsServerUrl = config.getProperty("hsadmin.jms.url", "tcp://localhost:61616");
+ this.jmsUsername = config.getProperty("hsadmin.jms.username", "hsar");
+ this.jmsPassword = config.getProperty("hsadmin.jms.password", "default");
this.transactionActive = false;
this.entityManager = PersistenceManager.getEntityManager("hsadmin");
this.loginName = loginName;
this.taskStores = new HashMap();
- try {
- 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);
- }
+ final ActiveMQConnectionFactory mqConnectionFactory = new ActiveMQConnectionFactory(jmsServerUrl);
+ mqConnectionFactory.setTrustAllPackages(true);
+ this.queueConnectionFactory = mqConnectionFactory;
}
public EntityManager getEntityManager() {
@@ -61,15 +60,14 @@ public class Transaction {
}
public Queue lookupJMSQueue(String queueName) {
- if (ctx != null) {
- try {
- Context env = (Context) ctx.lookup("java:comp/env");
- return (Queue) env.lookup("jms/" + queueName);
- } catch (NamingException e) {
- throw new TechnicalException("no jms queue: jms/" + queueName, e);
- }
+ try {
+ final QueueConnection queueConnection = queueConnectionFactory.createQueueConnection(jmsUsername, jmsPassword);
+ final QueueSession session = queueConnection.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE);
+ final Queue queue = session.createQueue(queueName);
+ return queue;
+ } catch (JMSException e) {
+ throw new TechnicalException("no jms queue: jms/" + queueName, e);
}
- return null;
}
public String getLoginName() {
@@ -79,7 +77,7 @@ public class Transaction {
throw new TechnicalException("no login");
}
- public void enqueue(String hiveName, QueueTask task) {
+ public void enqueue(String hiveName, TaskTransfer task) {
QueueTaskStore taskStore = taskStores.get(hiveName);
if (taskStore == null) {
taskStore = new QueueTaskStore();
@@ -96,8 +94,8 @@ public class Transaction {
QueueClient qClient = null;
try {
qClient = new QueueClient(queueConnectionFactory, jmsSystemQueue);
- for (QueueTask task : store.getTasks()) {
- qClient.send(task);
+ for (TaskTransfer taskTransfer : store.getTasks()) {
+ qClient.send(taskTransfer);
}
} catch (Exception e) {
throw new TechnicalException(e);
@@ -151,7 +149,7 @@ public class Transaction {
}
/**
- * Detach entities from hibernate session.
+ * Detach entities from JPA session.
* Used to detach entities before update. Makes it possible to compare
* old and new attribute values.
*/
@@ -163,17 +161,17 @@ public class Transaction {
}
class QueueTaskStore {
- private List taskList;
+ private List taskList;
QueueTaskStore() {
- taskList = new ArrayList();
+ taskList = new ArrayList();
}
public void clear() {
- taskList = new ArrayList();
+ taskList = new ArrayList();
}
- void add(QueueTask t) {
+ void add(TaskTransfer t) {
taskList.add(t);
}
- Iterable getTasks() {
+ Iterable getTasks() {
return taskList;
}
}
diff --git a/qserv/src/main/java/de/hsadmin/core/qserv/AbstractProcessor.java b/qserv/src/main/java/de/hsadmin/core/qserv/AbstractProcessor.java
index f88bcc7..693f662 100644
--- a/qserv/src/main/java/de/hsadmin/core/qserv/AbstractProcessor.java
+++ b/qserv/src/main/java/de/hsadmin/core/qserv/AbstractProcessor.java
@@ -14,4 +14,9 @@ abstract public class AbstractProcessor implements Processor {
task.done();
}
+ @Override
+ public String toString() {
+ return "a Processor of class " + this.getClass().getCanonicalName();
+ }
+
}
diff --git a/qserv/src/main/java/de/hsadmin/core/qserv/NullProcessor.java b/qserv/src/main/java/de/hsadmin/core/qserv/NullProcessor.java
index 6d42f2f..6d741e1 100644
--- a/qserv/src/main/java/de/hsadmin/core/qserv/NullProcessor.java
+++ b/qserv/src/main/java/de/hsadmin/core/qserv/NullProcessor.java
@@ -3,7 +3,7 @@ package de.hsadmin.core.qserv;
public class NullProcessor extends AbstractProcessor {
- private static final long serialVersionUID = 1L;
+ private static final long serialVersionUID = -3667951484545665538L;
@Override
public Object process() throws ProcessorException {
diff --git a/qserv/src/main/java/de/hsadmin/core/qserv/QueueClient.java b/qserv/src/main/java/de/hsadmin/core/qserv/QueueClient.java
index 449faee..ff8ef1a 100644
--- a/qserv/src/main/java/de/hsadmin/core/qserv/QueueClient.java
+++ b/qserv/src/main/java/de/hsadmin/core/qserv/QueueClient.java
@@ -18,7 +18,7 @@ import de.hsadmin.core.util.Config;
*
* @author mi
*/
-public class QueueClient extends QueueCommons {
+public class QueueClient {
private QueueConnectionFactory jmsConnectionFactory;
private Queue jmsSystemQueue;
@@ -36,11 +36,11 @@ public class QueueClient extends QueueCommons {
String jmsUser = config.getProperty("hsadmin.jms.username", "hsadmin");
String jmsPass = config.getProperty("hsadmin.jms.password", "hsadmin-pw");
jmsConnection = jmsConnectionFactory.createQueueConnection(jmsUser, jmsPass);
- jmsSession = jmsConnection.createQueueSession(DEFAULT, Session.AUTO_ACKNOWLEDGE);
+ jmsSession = jmsConnection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
jmsSender = jmsSession.createSender(jmsSystemQueue);
}
- public void send(QueueTask task) throws ProcessorException {
+ public void send(TaskTransfer task) throws ProcessorException {
try {
ObjectMessage jmsMessage = jmsSession.createObjectMessage(task);
jmsSender.send(jmsMessage);
diff --git a/qserv/src/main/java/de/hsadmin/core/qserv/QueueCommons.java b/qserv/src/main/java/de/hsadmin/core/qserv/QueueCommons.java
deleted file mode 100644
index 41305af..0000000
--- a/qserv/src/main/java/de/hsadmin/core/qserv/QueueCommons.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package de.hsadmin.core.qserv;
-
-public class QueueCommons
-{
- protected static final boolean TRANSACTED = true;
- protected static final boolean IMMEDIATE = false;
- protected static final boolean DEFAULT = IMMEDIATE;
-
- public QueueCommons()
- {
- super();
- }
-
-}
\ No newline at end of file
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 f997a7b..f98596e 100644
--- a/qserv/src/main/java/de/hsadmin/core/qserv/QueueServer.java
+++ b/qserv/src/main/java/de/hsadmin/core/qserv/QueueServer.java
@@ -1,13 +1,8 @@
package de.hsadmin.core.qserv;
-import java.io.File;
-import java.io.FileInputStream;
-import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;
-import javax.jms.Connection;
-import javax.jms.Destination;
import javax.jms.ExceptionListener;
import javax.jms.JMSException;
import javax.jms.Message;
@@ -16,68 +11,49 @@ import javax.jms.MessageProducer;
import javax.jms.ObjectMessage;
import javax.jms.Queue;
import javax.jms.QueueConnection;
-import javax.jms.QueueConnectionFactory;
import javax.jms.QueueReceiver;
import javax.jms.QueueSession;
-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 {
+import de.hsadmin.core.util.Config;
+
+public class QueueServer implements MessageListener, ExceptionListener {
- private static final String VERSION_NO = "4.0.11";
+ private static final String VERSION_NO = "4.0.16";
private Logger logger;
- private QueueConnection conn;
- private QueueSession queueSession;
- private String jmsStatusQueue;
- private String jmsPassWord;
- private String jmsUserName;
+
+ private String jmsUrl;
+ private String jmsUsername;
+ private String jmsPassword;
private String jmsSystemQueue;
- private String jmsFactory;
+ private String jmsStatusQueue;
private String serviceEMail;
private String fromEMail;
+ private QueueConnection queueConnection;
+
/**
* Runs the QueueServer, using the arguments as ConnectionFactory
* and Topic names.
*/
public static void main(String[] args) throws Exception {
- File propFile = new File(System.getProperty("user.dir"), "conf/qserv.properties");
- if (args.length == 1) {
- propFile = new File(args[0]);
- } else {
- if (args.length != 0) {
- throw new Exception(userHelp(propFile));
- }
- }
- FileInputStream propStream = null;
- try {
- propStream = new FileInputStream(propFile);
- } catch (Exception e) {
- System.out.println("couldn't read config file " + propFile.getAbsolutePath());
- System.exit(1);
- }
- Properties props = new Properties(System.getProperties());
- props.load(propStream);
- propStream.close();
- System.setProperty("java.util.logging.config.file", props.getProperty("hsadmin.log.config", System.getProperty("user.home") + "/.hsadmin.log.properties"));
+ final Config config = Config.getInstance();
+ System.setProperty("java.util.logging.config.file", config.getProperty("hsadmin.log.config", System.getProperty("user.home") + "/.hsadmin.log.properties"));
final QueueServer qServ = new QueueServer();
- qServ.setJmsFactory(props.getProperty("hsadmin.jms.factory"));
- qServ.setJmsSystemQueue(props.getProperty("hsadmin.jms.system-queue"));
- qServ.setJmsStatusQueue(props.getProperty("hsadmin.jms.status-queue"));
- qServ.setJmsUserName(props.getProperty("hsadmin.jms.username"));
- qServ.setJmsPassWord(props.getProperty("hsadmin.jms.password"));
- qServ.setServiceEMail(props.getProperty("hsadmin.log.email"));
- qServ.setFromEMail(props.getProperty("hsadmin.log.from"));
+ qServ.setJmsURL(config.getProperty("hsadmin.jms.url"));
+ qServ.setJmsSystemQueue(config.getProperty("hsadmin.jms.system-queue"));
+ qServ.setJmsStatusQueue(config.getProperty("hsadmin.jms.status-queue"));
+ qServ.setJmsUserName(config.getProperty("hsadmin.jms.username"));
+ qServ.setJmsPassWord(config.getProperty("hsadmin.jms.password"));
+ qServ.setServiceEMail(config.getProperty("hsadmin.log.email"));
+ qServ.setFromEMail(config.getProperty("hsadmin.log.from"));
Logger logger = Logger.getLogger("de.hsadmin.core.qserv");
logger.log(Level.CONFIG, "hsadmin-qserv " + VERSION_NO + " started using:"
- + "\nqueue server: " + props.getProperty("hsadmin.jms.factory")
- + "\nsystem queue: " + props.getProperty("hsadmin.jms.system-queue")
- + "\nstatus queue: " + props.getProperty("hsadmin.jms.status-queue")
- + "\nqueue user: " + props.getProperty("hsadmin.jms.username"));
+ + "\nsystem queue: " + config.getProperty("hsadmin.jms.system-queue")
+ + "\nstatus queue: " + config.getProperty("hsadmin.jms.status-queue")
+ + "\nqueue user: " + config.getProperty("hsadmin.jms.username"));
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
@@ -92,18 +68,14 @@ public class QueueServer extends QueueCommons implements MessageListener, Except
}
}
- private static String userHelp(File propFile) {
- return "Wrong number of arguments.\n"
- + "With no arguments '"
- + propFile
- + "' will be used as config file.\n"
- + "Or give a properties file as single argument.\n\n"
- + "Example config file:\n\n"
- + "hsadmin.jms.factory=QueueCF\n"
- + "hsadmin.jms.system-queue=hive-h01\n"
- + "hsadmin.jms.status-queue=queue/hsadminStatus\n"
- + "hsadmin.jms.username=hive-h01\n"
- + "hsadmin.jms.password=geheimeskennwort\n";
+ protected void close() {
+ if (queueConnection != null) {
+ try {
+ queueConnection.close();
+ } catch (JMSException e) {
+ logger.log(Level.SEVERE, e.getMessage());
+ }
+ }
}
public QueueServer() {
@@ -127,20 +99,15 @@ public class QueueServer extends QueueCommons implements MessageListener, Except
}
private boolean connect() {
- // create JMS connection and session
try {
- Context ctx = new InitialContext();
- 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);
- Queue queue = (Queue) ctx.lookup(jmsSystemQueue);
- conn.start();
- QueueReceiver receiver = queueSession.createReceiver(queue);
+ final ActiveMQConnectionFactory mqConnectionFactory = new ActiveMQConnectionFactory(jmsUrl);
+ mqConnectionFactory.setTrustAllPackages(true);
+ queueConnection = mqConnectionFactory.createQueueConnection(jmsUsername, jmsPassword);
+ queueConnection.setExceptionListener(this);
+ final QueueSession session = queueConnection.createQueueSession(false, QueueSession.CLIENT_ACKNOWLEDGE);
+ Queue queue = session.createQueue(jmsSystemQueue);
+ queueConnection.start();
+ final QueueReceiver receiver = session.createReceiver(queue);
receiver.setMessageListener(this);
return true;
} catch (Exception e) {
@@ -151,10 +118,10 @@ public class QueueServer extends QueueCommons implements MessageListener, Except
public synchronized void onMessage(Message jmsMessage) {
logger.log(Level.INFO, jmsMessage.toString());
- QueueTask task = null;
+ TaskTransfer task = null;
try {
ObjectMessage jmsObjectMessage = (ObjectMessage) jmsMessage;
- task = (QueueTask) jmsObjectMessage.getObject();
+ task = (TaskTransfer) jmsObjectMessage.getObject();
Processor processor = task.getProcessor();
logger.log(Level.INFO, "processing (" + task.getTitle() + " | started("
+ task.getStarted() + ") |" + task.getDetails() + "|"
@@ -164,12 +131,12 @@ public class QueueServer extends QueueCommons implements MessageListener, Except
logger.log(Level.INFO, "done");
} catch (ProcessorException e) {
logException(e);
- task.setException(e);
+ task.setException(e.getMessage());
SmtpHelper.send(fromEMail, serviceEMail, jmsSystemQueue, processor.logInfo());
}
} catch (Throwable throwable) {
logException(throwable);
- task.setException(throwable);
+ task.setException(throwable.getMessage());
} finally {
sendStatus(task);
notifyAll();
@@ -187,7 +154,6 @@ public class QueueServer extends QueueCommons implements MessageListener, Except
@Override
public void onException(JMSException e) {
logger.log(Level.WARNING, e.getMessage(), e);
- close();
while (!connect()) {
try {
Thread.sleep(10000);
@@ -195,67 +161,44 @@ public class QueueServer extends QueueCommons implements MessageListener, Except
}
}
- public void close() {
- if (queueSession != null) {
- try {
- queueSession.close();
- } catch (JMSException e1) { }
- }
- if (conn != null) {
- try {
- conn.close();
- } catch (JMSException e1) { }
- }
- }
-
- protected void sendStatus(QueueTask queueMessage) {
+ protected void sendStatus(TaskTransfer queueMessage) {
+ final ActiveMQConnectionFactory mqConnectionFactory = new ActiveMQConnectionFactory(jmsUrl);
+ mqConnectionFactory.setTrustAllPackages(true);
MessageProducer producer = null;
- Session statusSession = null;
- Connection statusConnection = null;
- try {
- logger.log(Level.INFO, "sendStatus(" + queueMessage + ")");
- Context ctx = new InitialContext();
- 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);
- producer = statusSession.createProducer(queue);
- ObjectMessage statusMessage = statusSession.createObjectMessage(queueMessage);
+ QueueSession session = null;
+ try (QueueConnection queueConnection = mqConnectionFactory.createQueueConnection(jmsUsername, jmsPassword)) {
+ queueConnection.setExceptionListener(this);
+ session = queueConnection.createQueueSession(false, QueueSession.CLIENT_ACKNOWLEDGE);
+ final Queue queue = session.createQueue(jmsStatusQueue);
+ queueConnection.start();
+ producer = session.createProducer(queue);
+ final ObjectMessage statusMessage = session.createObjectMessage(queueMessage);
logger.log(Level.INFO, "send(" + statusMessage + ")");
producer.send(statusMessage);
} catch (Exception statusException) {
logger.log(Level.SEVERE, statusException.getMessage(), statusException);
- } finally {
- // close JMS
- try { producer.close(); } catch (Exception exc) { }
- try { statusSession.close(); } catch (Exception exc) { }
- try { statusConnection.close(); } catch (Exception exc) { }
}
}
- public void setJmsStatusQueue(String property) {
- jmsStatusQueue = property;
+ private void setJmsURL(String property) {
+ jmsUrl = property;
}
public void setJmsPassWord(String property) {
- jmsPassWord = property;
+ jmsPassword = property;
}
public void setJmsUserName(String property) {
- jmsUserName = property;
+ jmsUsername = property;
}
public void setJmsSystemQueue(String property) {
jmsSystemQueue = property;
}
- public void setJmsFactory(String property) {
- jmsFactory = property;
+ public void setJmsStatusQueue(String property) {
+ jmsStatusQueue = property;
}
}
diff --git a/qserv/src/main/java/de/hsadmin/core/qserv/QueueTask.java b/qserv/src/main/java/de/hsadmin/core/qserv/QueueTask.java
index 6ef6086..d6c2387 100644
--- a/qserv/src/main/java/de/hsadmin/core/qserv/QueueTask.java
+++ b/qserv/src/main/java/de/hsadmin/core/qserv/QueueTask.java
@@ -223,14 +223,13 @@ public class QueueTask extends AbstractEntity implements Serializable {
* assigns all data field of qt to this instance, with
* the exception of the id
*/
- public void assign(QueueTask qt) {
- this.user = qt.user;
- this.title = qt.title;
- this.details = qt.details;
- this.started = qt.started;
- this.finished = qt.finished;
- this.proc = qt.proc;
- this.exception = qt.exception;
+ public void assign(TaskTransfer qt) {
+ this.title = qt.getTitle();
+ this.details = qt.getDetails();
+ this.started = qt.getStarted();
+ this.finished = qt.getFinished();
+ this.proc = qt.getProcessor();
+ this.exception = qt.getException();
}
@Override
diff --git a/qserv/src/main/java/de/hsadmin/core/qserv/ShellProcessor.java b/qserv/src/main/java/de/hsadmin/core/qserv/ShellProcessor.java
index df545e0..6360cec 100644
--- a/qserv/src/main/java/de/hsadmin/core/qserv/ShellProcessor.java
+++ b/qserv/src/main/java/de/hsadmin/core/qserv/ShellProcessor.java
@@ -8,8 +8,8 @@ package de.hsadmin.core.qserv;
*/
public class ShellProcessor extends AbstractProcessor {
- private static final long serialVersionUID = 1L;
-
+ private static final long serialVersionUID = -8340381162948081669L;
+
private String aSystemCall;
private String aInput;
private String aOutput;
diff --git a/qserv/src/main/java/de/hsadmin/core/qserv/TaskTransfer.java b/qserv/src/main/java/de/hsadmin/core/qserv/TaskTransfer.java
new file mode 100644
index 0000000..b6a383f
--- /dev/null
+++ b/qserv/src/main/java/de/hsadmin/core/qserv/TaskTransfer.java
@@ -0,0 +1,130 @@
+package de.hsadmin.core.qserv;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import de.hsadmin.mods.user.UnixUser;
+
+public class TaskTransfer implements Serializable {
+
+ private static final long serialVersionUID = -2120247737335542484L;
+
+ private long id;
+ private String unixuser;
+ private Date started;
+ private Date finished;
+ private String title;
+ private String details;
+ private Processor proc;
+ private String exception;
+
+ public TaskTransfer() {
+ id = 0L;
+ unixuser = "anonymous";
+ started = new Date();
+ finished = null;
+ title = "untitled";
+ details = "none";
+ setProcessor(new NullProcessor());
+ setException("");
+ }
+
+ public TaskTransfer(long id, String unixuser, Date started, Date finished, String title, String details, Processor proc, String exception) {
+ this.id = id;
+ this.unixuser = unixuser;
+ this.started = started;
+ this.finished = finished;
+ this.title = title;
+ this.details = details;
+ this.setProcessor(proc);
+ this.setException(exception);
+ }
+
+ public long getId() {
+ return id;
+ }
+
+ public void setId(long id) {
+ this.id = id;
+ }
+
+ public String getUnixuser() {
+ return unixuser;
+ }
+
+ public void setUnixuser(String unixuser) {
+ this.unixuser = unixuser;
+ }
+
+ public Date getStarted() {
+ return started;
+ }
+
+ public void setStarted(Date started) {
+ this.started = started;
+ }
+
+ public Date getFinished() {
+ return finished;
+ }
+
+ public void setFinished(Date finished) {
+ this.finished = finished;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ public String getDetails() {
+ return details;
+ }
+
+ public void setDetails(String details) {
+ this.details = details;
+ }
+
+ public Processor getProcessor() {
+ return proc;
+ }
+
+ public void setProcessor(Processor proc) {
+ this.proc = proc;
+ }
+
+ public String getException() {
+ return exception;
+ }
+
+ public void setException(String exception) {
+ this.exception = exception;
+ }
+
+ @Override
+ public String toString() {
+ return Long.toString(id) + "|" + title + "|" + started.toString();
+ }
+
+ public static TaskTransfer getTransferObject(QueueTask task) {
+ long id = task.getId();
+ final UnixUser user = task.getUser();
+ String username = "anonymous";
+ if (user == null) {
+ username = "anonymous";
+ } else {
+ username = user.getName();
+ }
+ Date started = task.getStarted();
+ Date finished = task.getFinished();
+ String title = task.getTitle();
+ String details = task.getDetails();
+ Processor proc = task.getProcessor();
+ String exception = task.getException();
+ return new TaskTransfer(id, username, started, finished, title, details, proc, exception);
+ }
+
+}
diff --git a/qserv/src/main/java/de/hsadmin/core/qserv/WaitingTasksProcessor.java b/qserv/src/main/java/de/hsadmin/core/qserv/WaitingTasksProcessor.java
index 54b6539..01ec018 100644
--- a/qserv/src/main/java/de/hsadmin/core/qserv/WaitingTasksProcessor.java
+++ b/qserv/src/main/java/de/hsadmin/core/qserv/WaitingTasksProcessor.java
@@ -4,6 +4,8 @@ import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
+import javax.persistence.EntityManager;
+
import de.hsadmin.core.model.Transaction;
public class WaitingTasksProcessor extends AbstractProcessor {
@@ -29,8 +31,10 @@ public class WaitingTasksProcessor extends AbstractProcessor {
for (WaitingProcessor p : waitingTasks) {
QueueTask wTask =
new QueueTask(task.getUser(), task.getTitle() + " / " + p.getTitle(), task.getTitle() + " / " + p.getTitle(), p.getProc());
- transaction.getEntityManager().persist(wTask);
- transaction.enqueue(p.getHost(), wTask);
+ final EntityManager entityManager = transaction.getEntityManager();
+ entityManager.persist(wTask);
+ entityManager.refresh(wTask);
+ transaction.enqueue(p.getHost(), TaskTransfer.getTransferObject(wTask));
}
}
super.finalize(transaction, task);
diff --git a/util/pom.xml b/util/pom.xml
index 9a3de76..5539f63 100644
--- a/util/pom.xml
+++ b/util/pom.xml
@@ -4,7 +4,7 @@
4.0.0
de.hsadmin.core
hsadmin-util
- 4.0.15
+ 4.0.16
UTF-8
11