diff --git a/hsarback/conf/WEB-INF/dev-web.xml b/hsarback/conf/WEB-INF/dev-web.xml index 18aed7a..6c722bb 100644 --- a/hsarback/conf/WEB-INF/dev-web.xml +++ b/hsarback/conf/WEB-INF/dev-web.xml @@ -14,6 +14,12 @@ 1 + + Queue PacTasks Servlet + de.hsadmin.mods.pac.PacTasksServlet + 1 + + XmlRpcServlet de.hsadmin.remote.HSXmlRpcServlet @@ -29,8 +35,8 @@ - CLI Client Connector - /hsadmin/cli-interface/ + Queue PacTasks Servlet + /queuePacTasks @@ -75,5 +81,11 @@ Container Shareable + + jms/hsadminSystem-pactasks + javax.jms.Queue + Container + Shareable + diff --git a/hsarback/conf/WEB-INF/prod-web.xml b/hsarback/conf/WEB-INF/prod-web.xml index 4899424..2e937c2 100644 --- a/hsarback/conf/WEB-INF/prod-web.xml +++ b/hsarback/conf/WEB-INF/prod-web.xml @@ -22,6 +22,12 @@ 1 + + Queue PacTasks Servlet + de.hsadmin.mods.pac.PacTasksServlet + 1 + + XmlRpcServlet de.hsadmin.remote.HSXmlRpcServlet @@ -36,6 +42,11 @@ /queueStatus + + Queue PacTasks Servlet + /queuePacTasks + + XmlRpcServlet /xmlrpc/* @@ -678,6 +689,12 @@ Container Shareable + + jms/hsadminSystem-pactasks + javax.jms.Queue + Container + Shareable + diff --git a/hsarback/conf/WEB-INF/test-web.xml b/hsarback/conf/WEB-INF/test-web.xml index 47c2dd5..cb180a5 100644 --- a/hsarback/conf/WEB-INF/test-web.xml +++ b/hsarback/conf/WEB-INF/test-web.xml @@ -22,6 +22,12 @@ 1 + + Queue PacTasks Servlet + de.hsadmin.mods.pac.PacTasksServlet + 1 + + XmlRpcServlet de.hsadmin.remote.HSXmlRpcServlet @@ -41,6 +47,11 @@ /xmlrpc/* + + Queue PacTasks Servlet + /queuePacTasks + + jdbc/HSAdminDB javax.sql.DataSource @@ -78,6 +89,12 @@ Container Shareable + + jms/hsadminSystem-pactasks + javax.jms.Queue + Container + Shareable + diff --git a/hsarback/src/de/hsadmin/mods/pac/PacTasksServlet.java b/hsarback/src/de/hsadmin/mods/pac/PacTasksServlet.java new file mode 100644 index 0000000..ecc9771 --- /dev/null +++ b/hsarback/src/de/hsadmin/mods/pac/PacTasksServlet.java @@ -0,0 +1,133 @@ +package de.hsadmin.mods.pac; + +import java.io.IOException; +import java.io.PrintWriter; + +import javax.jms.ExceptionListener; +import javax.jms.JMSException; +import javax.jms.Message; +import javax.jms.MessageListener; +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.jms.TextMessage; +import javax.naming.Context; +import javax.naming.InitialContext; +import javax.naming.NamingException; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import de.hsadmin.core.model.TechnicalException; +import de.hsadmin.core.model.Transaction; +import de.hsadmin.core.util.Config; + +public class PacTasksServlet extends HttpServlet + implements MessageListener, ExceptionListener { + + private static final long serialVersionUID = -5701350884034782083L; + + private String jmsUser; + private String jmsPass; + private QueueConnectionFactory queueConnectionFactory; + private QueueConnection queueConnection; + private QueueSession queueSession; + private boolean isConnected; + private int messageCount; + private int errorCount; + + @Override + public void init() throws ServletException { + isConnected = false; + messageCount = 0; + errorCount = 0; + try { + connect(); + } catch (NamingException e) { + throw new ServletException(e); + } + } + + private void connect() throws NamingException { + 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"); + while (!isConnected) { + try { + queueConnection = queueConnectionFactory.createQueueConnection(jmsUser, jmsPass); + queueConnection.setExceptionListener(this); + queueSession = queueConnection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE); + Queue queue = (Queue) env.lookup("jms/hsadminSystem-pactasks"); + queueConnection.start(); + QueueReceiver receiver = queueSession.createReceiver(queue); + receiver.setMessageListener(this); + isConnected = true; + } catch (JMSException e) { + close(); + try { + Thread.sleep(2000); + } catch (InterruptedException e1) { } + } + } + } + + @Override + protected void doGet(HttpServletRequest req, HttpServletResponse resp) + throws ServletException, IOException { + resp.setContentType("text/plain"); + PrintWriter writer = resp.getWriter(); + writer.println("Verbindungsstatus: " + (isConnected ? "OK" : "ERROR")); + writer.println("Verarbeitete Nachrichten: " + messageCount); + writer.println("Verarbeitungsfehler: " + errorCount); + writer.close(); + } + + @Override + public void destroy() { + close(); + } + + private void close() { + try { if (queueSession != null) queueSession.close(); } catch (JMSException e) { } + try { if (queueConnection != null) queueConnection.close(); } catch (JMSException e) { } + isConnected = false; + } + + @Override + public void onMessage(Message jmsMessage) { + Transaction transaction = null; + messageCount++; + try { + final TextMessage txtMessage = (TextMessage) jmsMessage; + System.out.println(txtMessage.getText()); +// transaction = new Transaction("pactasks"); +// transaction.beginTransaction(); +// EntityManager em = transaction.getEntityManager(); +// em.clear(); +// em.persist(persistentQT); +// em.flush(); +// transaction.commitTransaction(); + } catch (Exception e) { + errorCount++; +// if (transaction != null) transaction.rollbackTransaction(); + throw new TechnicalException(e); + } finally { + if (transaction != null) transaction.close(); + } + } + + @Override + public void onException(JMSException exception) { + close(); + try { Thread.sleep(10000); } catch (InterruptedException e) { } + try { connect(); } catch (NamingException e) { } + } + +}