diff --git a/hsarback/src/main/java/de/hsadmin/servlets/QueueStatusReceiverServlet.java b/hsarback/src/main/java/de/hsadmin/servlets/QueueStatusReceiverServlet.java index 91395f1..9cd33bb 100644 --- a/hsarback/src/main/java/de/hsadmin/servlets/QueueStatusReceiverServlet.java +++ b/hsarback/src/main/java/de/hsadmin/servlets/QueueStatusReceiverServlet.java @@ -112,6 +112,7 @@ public class QueueStatusReceiverServlet extends HttpServlet @Override public void onMessage(Message jmsMessage) { + assert jmsMessage != null; Transaction transaction = null; messageCount++; try { @@ -123,7 +124,13 @@ public class QueueStatusReceiverServlet extends HttpServlet transaction.beginTransaction(); EntityManager em = transaction.getEntityManager(); em.clear(); - QueueTask persistentQT = em.find(QueueTask.class, detachedQT.getId()); + final long queueTaskId = detachedQT.getId(); + QueueTask persistentQT = em.find(QueueTask.class, queueTaskId); + if (persistentQT == null) { + jmsMessage.acknowledge(); + errorCount++; + throw new TechnicalException("QueueTask not found, id: " + queueTaskId); + } persistentQT.assign(detachedQT); Processor processor = persistentQT.getProcessor(); if (processor != null) { @@ -133,6 +140,7 @@ public class QueueStatusReceiverServlet extends HttpServlet em.flush(); transaction.commitTransaction(); } else { + errorCount++; final String err = "Deserialization failed " + new Date(); System.out.println(err); throw new TechnicalException(err); diff --git a/qserv-test/.classpath b/qserv-test/.classpath new file mode 100644 index 0000000..4559ca0 --- /dev/null +++ b/qserv-test/.classpath @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/qserv-test/.gitignore b/qserv-test/.gitignore new file mode 100644 index 0000000..b83d222 --- /dev/null +++ b/qserv-test/.gitignore @@ -0,0 +1 @@ +/target/ diff --git a/qserv-test/.project b/qserv-test/.project new file mode 100644 index 0000000..d1d24d6 --- /dev/null +++ b/qserv-test/.project @@ -0,0 +1,23 @@ + + + hsadmin-qserv-test + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + + diff --git a/qserv-test/.settings/org.eclipse.core.resources.prefs b/qserv-test/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..e9441bb --- /dev/null +++ b/qserv-test/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +encoding//src/main/java=UTF-8 +encoding/=UTF-8 diff --git a/qserv-test/.settings/org.eclipse.jdt.core.prefs b/qserv-test/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..2af1e7b --- /dev/null +++ b/qserv-test/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,8 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 +org.eclipse.jdt.core.compiler.compliance=11 +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=11 diff --git a/qserv-test/.settings/org.eclipse.m2e.core.prefs b/qserv-test/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000..f897a7f --- /dev/null +++ b/qserv-test/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/qserv-test/pom.xml b/qserv-test/pom.xml new file mode 100644 index 0000000..cd1c9d3 --- /dev/null +++ b/qserv-test/pom.xml @@ -0,0 +1,68 @@ + + 4.0.0 + de.hsadmin.core + hsadmin-qserv-test + 4.0.16 + + UTF-8 + 11 + + + + de.hsadmin.core + hsadmin-util + 4.0.16 + + + de.hsadmin.core + hsadmin-qserv + 4.0.16 + + + commons-lang + commons-lang + 2.6 + + + commons-net + commons-net + 3.9.0 + + + org.apache.velocity + velocity-engine-core + 2.3 + + + org.apache.openjpa + openjpa + 3.2.2 + + + org.apache.activemq + activemq-client + 5.17.5 + + + junit + junit + 4.13.2 + test + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.11.0 + + 11 + 11 + + + + + diff --git a/qserv-test/src/main/java/de/hsadmin/qserv/test/Pull.java b/qserv-test/src/main/java/de/hsadmin/qserv/test/Pull.java new file mode 100644 index 0000000..7dbd06f --- /dev/null +++ b/qserv-test/src/main/java/de/hsadmin/qserv/test/Pull.java @@ -0,0 +1,71 @@ +package de.hsadmin.qserv.test; + +import java.io.Serializable; + +import javax.jms.JMSException; +import javax.jms.Message; +import javax.jms.MessageListener; +import javax.jms.ObjectMessage; +import javax.jms.Queue; +import javax.jms.QueueConnection; +import javax.jms.QueueReceiver; +import javax.jms.QueueSession; + +import org.apache.activemq.ActiveMQConnectionFactory; + +import de.hsadmin.core.qserv.ProcessorException; +import de.hsadmin.core.qserv.TaskTransfer; + +public class Pull implements MessageListener { + + public static void main(String[] args) { + ActiveMQConnectionFactory cxFact = new ActiveMQConnectionFactory("ssl://hsh02.hostsharing.net:61619"); + try { +// QueueConnection qCx = cxFact.createQueueConnection("hsar", ""); + QueueConnection queueConnect = cxFact.createQueueConnection("user-h98", ""); + QueueSession session = queueConnect.createQueueSession(false, QueueSession.CLIENT_ACKNOWLEDGE); + Queue queue = session.createQueue("queue.hsadminSystem-h98"); + QueueReceiver receiver = session.createReceiver(queue); + receiver.setMessageListener(new Pull()); + queueConnect.start(); + boolean doContinue = true; + while (doContinue) { + try { + Thread.sleep(2000L); + } catch (InterruptedException e) { + doContinue = false; + } + } + queueConnect.stop(); + session.close(); + queueConnect.close(); + } catch (JMSException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + @Override + public void onMessage(Message message) { + if (message instanceof ObjectMessage) { + try { + ObjectMessage objMesg = (ObjectMessage) message; + Serializable serializable = objMesg.getObject(); + if (serializable instanceof TaskTransfer) { + TaskTransfer task = (TaskTransfer) serializable; + task.getProcessor().process(); + } + } catch (ProcessorException | JMSException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + try { + message.acknowledge(); + } catch (JMSException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + +} diff --git a/qserv-test/src/main/java/de/hsadmin/qserv/test/Push.java b/qserv-test/src/main/java/de/hsadmin/qserv/test/Push.java new file mode 100644 index 0000000..6e07e71 --- /dev/null +++ b/qserv-test/src/main/java/de/hsadmin/qserv/test/Push.java @@ -0,0 +1,37 @@ +package de.hsadmin.qserv.test; + +import java.util.Date; + +import javax.jms.JMSException; +import javax.jms.Message; +import javax.jms.MessageProducer; +import javax.jms.Queue; +import javax.jms.QueueConnection; +import javax.jms.QueueSession; + +import org.apache.activemq.ActiveMQConnectionFactory; + +import de.hsadmin.core.qserv.NullProcessor; +import de.hsadmin.core.qserv.TaskTransfer; + +public class Push { + + public static void main(String[] args) { + ActiveMQConnectionFactory cxFact = new ActiveMQConnectionFactory("ssl://hsh02.hostsharing.net:61619"); + try { +// QueueConnection qCx = cxFact.createQueueConnection("user-h98", ""); + QueueConnection qCx = cxFact.createQueueConnection("hsar", "Eix4Baijee2ae1aighetaik8"); + QueueSession session = qCx.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE); + Queue queue = session.createQueue("queue.hsadminSystem-h98"); + MessageProducer producer = session.createProducer(queue); + Message message = session.createObjectMessage(new TaskTransfer(1L, "anonymous", new Date(), null, "hello world", "hello world detail", new NullProcessor(), null)); + producer.send(queue, message); + session.close(); + qCx.close(); + } catch (JMSException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + +} 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 9930ac9..4685a49 100644 --- a/qserv/src/main/java/de/hsadmin/core/model/Transaction.java +++ b/qserv/src/main/java/de/hsadmin/core/model/Transaction.java @@ -145,7 +145,9 @@ public class Transaction { if (transactionActive) { rollbackTransaction(); } - entityManager.close(); + if (entityManager != null) { + entityManager.close(); + } } /**