From a504f3c6baacb44032a2382e90717e6c32a390c8 Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Mon, 1 Jul 2013 09:58:13 +0200
Subject: [PATCH] OO-613: adapt BPS code for Onyx to JBoss + close the consumer
 / queue to prevent stale Tomcat

---
 INSTALL.APPSERVER.README                      |  4 ++
 .../onyx/util/ExamPoolManagerProvider.java    | 24 ++++++++++++
 .../onyx/util/_spring/examControlContext.xml  | 24 ++++--------
 .../util/_spring/examControlJms_activemq.xml  | 17 +++++++++
 .../onyx/util/_spring/examControlJms_jndi.xml | 37 +++++++++++++++++++
 .../search/service/indexer/JmsIndexer.java    |  2 +
 .../resources/serviceconfig/olat.properties   |  1 +
 7 files changed, 92 insertions(+), 17 deletions(-)
 create mode 100644 src/main/java/de/bps/onyx/util/_spring/examControlJms_activemq.xml
 create mode 100644 src/main/java/de/bps/onyx/util/_spring/examControlJms_jndi.xml

diff --git a/INSTALL.APPSERVER.README b/INSTALL.APPSERVER.README
index 6e66b50d3a6..a8f55bce0fa 100644
--- a/INSTALL.APPSERVER.README
+++ b/INSTALL.APPSERVER.README
@@ -36,6 +36,8 @@ Configuration JBoss AS 7.1
      jms.broker.jndi=java:/ConnectionFactory
      sysbus.broker.jndi=java:jboss/exported/jms/topic/sysbus
      search.broker.jndi=java:jboss/exported/jms/queue/searchQueue
+     index.broker.jndi=java:jboss/exported/jms/queue/indexQueue
+     exam.broker.jndi=java:jboss/exported/jms/queue/examQueue
 
 
 Configuration Glassfish 3.1
@@ -61,6 +63,8 @@ Configuration Glassfish 3.1
      jms.broker.jndi=OpenOLATConnectionFactory
      sysbus.broker.jndi=topic/sysbus
      search.broker.jndi=queue/searchQueue
+     index.broker.jndi=queue/indexQueue
+     exam.broker.jndi=queue/examQueue
 
 
 Features located on the application server
diff --git a/src/main/java/de/bps/onyx/util/ExamPoolManagerProvider.java b/src/main/java/de/bps/onyx/util/ExamPoolManagerProvider.java
index 883f520125c..8812e7ceedf 100644
--- a/src/main/java/de/bps/onyx/util/ExamPoolManagerProvider.java
+++ b/src/main/java/de/bps/onyx/util/ExamPoolManagerProvider.java
@@ -197,6 +197,30 @@ public class ExamPoolManagerProvider implements MessageListener {
 		connection.start();
 		log.info("springInit: JMS connection started with connectionFactory=" + connectionFactory);
 	}
+	
+
+	public void springStop() throws JMSException {
+		closeQueue();
+	}
+	
+	private void closeQueue() {
+		if(consumer != null) {
+			try {
+				consumer.close();
+				System.out.println("Close consumer exam pool");
+			} catch (JMSException e) {
+				log.error("", e);
+			}
+		}
+		if(connection != null) {
+			try {
+				connection.close();
+				System.out.println("Close connection exam pool");
+			} catch (JMSException e) {
+				log.error("", e);
+			}
+		}
+	}
 
 	private synchronized Session acquireSession() throws JMSException {
 		if (sessions.size() == 0) {
diff --git a/src/main/java/de/bps/onyx/util/_spring/examControlContext.xml b/src/main/java/de/bps/onyx/util/_spring/examControlContext.xml
index 8aa0ed03e83..0d4a688f4e5 100644
--- a/src/main/java/de/bps/onyx/util/_spring/examControlContext.xml
+++ b/src/main/java/de/bps/onyx/util/_spring/examControlContext.xml
@@ -1,13 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <beans xmlns="http://www.springframework.org/schema/beans"
 	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xmlns:context="http://www.springframework.org/schema/context" 
 	xsi:schemaLocation="http://www.springframework.org/schema/beans 
-                        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
-                        http://www.springframework.org/schema/context 
-                        http://www.springframework.org/schema/context/spring-context-3.0.xsd">
-
-	<context:property-placeholder location="classpath:serviceconfig/olat.properties, classpath:olat.local.properties" />
+                        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
 
 	<!-- general reference-holder -->
 	<!-- ================================= -->
@@ -18,7 +13,7 @@
 	<!-- SEARCH SERVICE SIDE CONFIGURATION -->
 	<!-- ================================= -->
 
-	<bean id="examControl.master.true" class="de.bps.onyx.util.ExamPoolManagerProvider" init-method="springInit" lazy-init="true">
+	<bean id="examControl.master.true" class="de.bps.onyx.util.ExamPoolManagerProvider" init-method="springInit" destroy-method="springStop" lazy-init="true">
 		<constructor-arg name="examPoolManager" ref="examPoolManagerServer"/>
 		<property name="connectionFactory" ref="examControlConnectionFactory"/>
 		<property name="searchQueue" ref="examControlQueue"/>
@@ -37,19 +32,14 @@
 		<property name="timeToLive" value="45000"/>
 	</bean>
 
+	<!-- SEARCH COMMON CONFIGURATION (PROXY-SIDE AND SERVICE-SIDE) -->
+	<!-- ========================================================= -->
+	
+	
 	<!-- SEARCH COMMON CONFIGURATION (PROXY-SIDE AND SERVICE-SIDE) -->
 	<!-- ========================================================= -->
 
-	<!-- JMS Stuff -->
-	<bean id="examControlConnectionFactory" class="org.apache.activemq.spring.ActiveMQConnectionFactory" lazy-init="true">
-		<property name="brokerURL" value="${search.broker.url}" /> 
-	</bean>
-
-	<!-- used for sending the search requests -->
-	<bean id="examControlQueue" class="org.apache.activemq.command.ActiveMQQueue" lazy-init="true">
-		<constructor-arg value="olat/examQueue" />
-	</bean>
-
+	<import resource="classpath:de/bps/onyx/util/_spring/examControlJms_${jms.provider}.xml" />
 
 </beans>
 
diff --git a/src/main/java/de/bps/onyx/util/_spring/examControlJms_activemq.xml b/src/main/java/de/bps/onyx/util/_spring/examControlJms_activemq.xml
new file mode 100644
index 00000000000..6a4efda0467
--- /dev/null
+++ b/src/main/java/de/bps/onyx/util/_spring/examControlJms_activemq.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://www.springframework.org/schema/beans 
+                        http://www.springframework.org/schema/beans/spring-beans.xsd">
+                        
+	<!-- JMS Stuff -->
+	<bean id="examControlConnectionFactory" class="org.apache.activemq.spring.ActiveMQConnectionFactory" lazy-init="true">
+		<property name="brokerURL" value="${search.broker.url}" /> 
+	</bean>
+
+	<!-- used for sending the search requests -->
+	<bean id="examControlQueue" class="org.apache.activemq.command.ActiveMQQueue" lazy-init="true">
+		<constructor-arg value="olat/examQueue" />
+	</bean>
+
+</beans>
diff --git a/src/main/java/de/bps/onyx/util/_spring/examControlJms_jndi.xml b/src/main/java/de/bps/onyx/util/_spring/examControlJms_jndi.xml
new file mode 100644
index 00000000000..f22a8d5c1f7
--- /dev/null
+++ b/src/main/java/de/bps/onyx/util/_spring/examControlJms_jndi.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://www.springframework.org/schema/beans 
+                        http://www.springframework.org/schema/beans/spring-beans.xsd">
+                        
+	<!-- JMS Stuff -->
+	<bean id="examControlConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean" lazy-init="true">
+        <property name="jndiName"><value>${jms.broker.jndi}</value></property>
+    </bean>
+
+	<!-- used for sending the search requests -->
+	<bean id="examControlQueue" class="org.apache.activemq.command.ActiveMQQueue" lazy-init="true">
+		<constructor-arg value="olat/examQueue" />
+	</bean>           
+                        
+            
+    <bean id="examControlQueue" class="org.springframework.jndi.JndiObjectFactoryBean" lazy-init="true">
+		<property name="jndiName"><value>${exam.broker.jndi}</value></property>
+	</bean>            
+                        
+
+	<!-- JMS Stuff -->
+	<bean id="searchConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean" lazy-init="true">
+        <property name="jndiName"><value>${jms.broker.jndi}</value></property>
+    </bean>
+    <bean id="searchQueue" class="org.springframework.jndi.JndiObjectFactoryBean" lazy-init="true">
+		<property name="jndiName"><value>${search.broker.jndi}</value></property>
+	</bean>
+	
+	<bean id="indexConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean" lazy-init="true">
+        <property name="jndiName"><value>${jms.broker.jndi}</value></property>
+    </bean>
+    <bean id="indexQueue" class="org.springframework.jndi.JndiObjectFactoryBean" lazy-init="true">
+		<property name="jndiName"><value>${index.broker.jndi}</value></property>
+	</bean>
+</beans>
diff --git a/src/main/java/org/olat/search/service/indexer/JmsIndexer.java b/src/main/java/org/olat/search/service/indexer/JmsIndexer.java
index a521c2f6038..89bbe6c8465 100644
--- a/src/main/java/org/olat/search/service/indexer/JmsIndexer.java
+++ b/src/main/java/org/olat/search/service/indexer/JmsIndexer.java
@@ -211,6 +211,7 @@ public class JmsIndexer implements MessageListener, LifeFullIndexer {
 		if(consumer != null) {
 			try {
 				consumer.close();
+				System.out.println("Close consumer JMSINDEXER");
 			} catch (JMSException e) {
 				log.error("", e);
 			}
@@ -219,6 +220,7 @@ public class JmsIndexer implements MessageListener, LifeFullIndexer {
 			try {
 				indexerSession.close();
 				connection.close();
+				System.out.println("Close connection JMSINDEXER");
 			} catch (JMSException e) {
 				log.error("", e);
 			}
diff --git a/src/main/resources/serviceconfig/olat.properties b/src/main/resources/serviceconfig/olat.properties
index a139d207c5a..8cd3b2e52ea 100644
--- a/src/main/resources/serviceconfig/olat.properties
+++ b/src/main/resources/serviceconfig/olat.properties
@@ -674,6 +674,7 @@ jms.broker.jndi=OpenOLATConnectionFactory
 sysbus.broker.jndi=topic/sysbus
 search.broker.jndi=queue/searchQueue
 index.broker.jndi=queue/indexQueue
+exam.broker.jndi=queue/examQueue
 
 
 # enable/disable codepoint/breakpoint framework
-- 
GitLab