diff --git a/javaUtilities/com.raytheon.wes2bridge.common/src/com/raytheon/wes2bridge/common/configuration/Wes2BridgeConfiguration.java b/javaUtilities/com.raytheon.wes2bridge.common/src/com/raytheon/wes2bridge/common/configuration/Wes2BridgeConfiguration.java index 150c9fd01c..a83da7ea95 100644 --- a/javaUtilities/com.raytheon.wes2bridge.common/src/com/raytheon/wes2bridge/common/configuration/Wes2BridgeConfiguration.java +++ b/javaUtilities/com.raytheon.wes2bridge.common/src/com/raytheon/wes2bridge/common/configuration/Wes2BridgeConfiguration.java @@ -34,6 +34,8 @@ import org.apache.commons.configuration.XMLConfiguration; * Jan 18, 2012 1490 bkowal Added httpdPypiesPort and * pypiesLoggingPort as configurable * parameters. + * Apr 18, 2013 1899 bkowal Added qpidHttpPort and qpidJmxPort + * as configurable parameters. * * * @@ -49,6 +51,8 @@ import org.apache.commons.configuration.XMLConfiguration; * int * int * int + * int + * int * int * int * int @@ -62,6 +66,8 @@ public class Wes2BridgeConfiguration { public static final String XML_DATABASE_PORT = "databasePort"; public static final String XML_EDEX_HTTP_PORT = "edexHttpPort"; public static final String XML_JMS_PORT = "jmsPort"; + public static final String XML_QPID_HTTP_PORT = "qpidHttpPort"; + public static final String XML_QPID_JMX_PORT = "qpidJmxPort"; public static final String XML_WEB_PORT = "webPort"; public static final String XML_CONFIDENTIAL_PORT = "confidentialPort"; public static final String XML_HTTPD_PYPIES_PORT = "httpdPypiesPort"; @@ -77,6 +83,8 @@ public class Wes2BridgeConfiguration { private int databasePort = -1; private int edexHttpPort = -1; private int jmsPort = -1; + private int qpidHttpPort = -1; + private int qpidJmxPort = -1; private int webPort = -1; private int confidentialPort = -1; private int httpdPypiesPort = -1; @@ -112,6 +120,10 @@ public class Wes2BridgeConfiguration { this.edexHttpPort = xmlConfiguration .getInt(XML_SCHEMA.XML_EDEX_HTTP_PORT); this.jmsPort = xmlConfiguration.getInt(XML_SCHEMA.XML_JMS_PORT); + this.qpidHttpPort = + xmlConfiguration.getInt(XML_SCHEMA.XML_QPID_HTTP_PORT); + this.qpidJmxPort = + xmlConfiguration.getInt(XML_SCHEMA.XML_QPID_JMX_PORT); this.webPort = xmlConfiguration.getInt(XML_SCHEMA.XML_WEB_PORT); this.confidentialPort = xmlConfiguration .getInt(XML_SCHEMA.XML_CONFIDENTIAL_PORT); @@ -161,7 +173,23 @@ public class Wes2BridgeConfiguration { this.jmsPort = jmsPort; } - public int getWebPort() { + public int getQpidHttpPort() { + return qpidHttpPort; + } + + public void setQpidHttpPort(int qpidHttpPort) { + this.qpidHttpPort = qpidHttpPort; + } + + public int getQpidJmxPort() { + return qpidJmxPort; + } + + public void setQpidJmxPort(int qpidJmxPort) { + this.qpidJmxPort = qpidJmxPort; + } + + public int getWebPort() { return webPort; } diff --git a/javaUtilities/com.raytheon.wes2bridge.manager/META-INF/MANIFEST.MF b/javaUtilities/com.raytheon.wes2bridge.manager/META-INF/MANIFEST.MF index 261a5ebfb2..32b71d25dd 100644 --- a/javaUtilities/com.raytheon.wes2bridge.manager/META-INF/MANIFEST.MF +++ b/javaUtilities/com.raytheon.wes2bridge.manager/META-INF/MANIFEST.MF @@ -6,5 +6,5 @@ Bundle-Version: 1.0.0.qualifier Bundle-Vendor: RAYTHEON Bundle-RequiredExecutionEnvironment: JavaSE-1.6 Require-Bundle: com.raytheon.wes2bridge.common;bundle-version="1.0.0", - org.apache.commons.configuration;bundle-version="1.6.0", - org.apache.commons.lang;bundle-version="2.3.0" + org.apache.commons.lang;bundle-version="2.3.0", + org.apache.commons.configuration;bundle-version="1.6.0" diff --git a/javaUtilities/com.raytheon.wes2bridge.manager/src/com/raytheon/wes2bridge/manager/IQpidConfigurationXML.java b/javaUtilities/com.raytheon.wes2bridge.manager/src/com/raytheon/wes2bridge/manager/IQpidConfigurationXML.java new file mode 100644 index 0000000000..bc036eeb47 --- /dev/null +++ b/javaUtilities/com.raytheon.wes2bridge.manager/src/com/raytheon/wes2bridge/manager/IQpidConfigurationXML.java @@ -0,0 +1,48 @@ +/** + * This software was developed and / or modified by Raytheon Company, + * pursuant to Contract DG133W-05-CQ-1067 with the US Government. + * + * U.S. EXPORT CONTROLLED TECHNICAL DATA + * This software product contains export-restricted data whose + * export/transfer/disclosure is restricted by U.S. law. Dissemination + * to non-U.S. persons whether in the United States or abroad requires + * an export license or other authorization. + * + * Contractor Name: Raytheon Company + * Contractor Address: 6825 Pine Street, Suite 340 + * Mail Stop B8 + * Omaha, NE 68106 + * 402.291.0100 + * + * See the AWIPS II Master Rights File ("Master Rights File.pdf") for + * further licensing information. + **/ +package com.raytheon.wes2bridge.manager; + +/** + * Identifies XML tag names of interest as constants within the qpid config.xml + * configuration. + * + *
+ * 
+ * SOFTWARE HISTORY
+ * 
+ * Date         Ticket#    Engineer    Description
+ * ------------ ---------- ----------- --------------------------
+ * Apr 17, 2013            bkowal     Initial creation
+ * 
+ * 
+ * + * @author bkowal + * @version 1.0 + */ + +public interface IQpidConfigurationXML { + public static final String XML_BROKER = "broker"; + public static final String XML_CONNECTOR = "connector"; + public static final String XML_MANAGEMENT = "management"; + public static final String XML_JMXPORT = "jmxport"; + public static final String XML_HTTP = "http"; + public static final String XML_REGISTRY_SERVER = "registryServer"; + public static final String XML_PORT = "port"; +} diff --git a/javaUtilities/com.raytheon.wes2bridge.manager/src/com/raytheon/wes2bridge/manager/Wes2BridgeManager.java b/javaUtilities/com.raytheon.wes2bridge.manager/src/com/raytheon/wes2bridge/manager/Wes2BridgeManager.java index ac28e175cc..ff16a2cd89 100644 --- a/javaUtilities/com.raytheon.wes2bridge.manager/src/com/raytheon/wes2bridge/manager/Wes2BridgeManager.java +++ b/javaUtilities/com.raytheon.wes2bridge.manager/src/com/raytheon/wes2bridge/manager/Wes2BridgeManager.java @@ -28,10 +28,24 @@ import java.io.BufferedWriter; import java.io.IOException; import java.util.regex.Pattern; import java.util.regex.Matcher; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerException; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.TransformerFactoryConfigurationError; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.lang.StringUtils; +import org.w3c.dom.Document; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.xml.sax.SAXException; +import com.raytheon.wes2bridge.manager.IQpidConfigurationXML; import com.raytheon.wes2bridge.common.configuration.Wes2BridgeConfiguration; /** @@ -49,6 +63,7 @@ import com.raytheon.wes2bridge.common.configuration.Wes2BridgeConfiguration; * ------------ ---------- ----------- -------------------------- * Jan 18, 2012 1490 bkowal Pypies is now added to each * edex-environment instance + * Apr 18, 2013 1899 bkowal Updates qpid 0.18 configuration now. * * * @@ -57,15 +72,24 @@ import com.raytheon.wes2bridge.common.configuration.Wes2BridgeConfiguration; */ public class Wes2BridgeManager { private static final String AWIPSII = "/awips2"; + private static final String AWIPSII_WES2BRIDGE_SCRIPTS = AWIPSII + "/edex-environment/scripts"; + private static final String WES2BRIDGE_DIRECTORY = "/usr/local/edex-environment"; + private static final int GROUP_INDEX_ONE = 1; + private static final int GROUP_INDEX_TWO = 2; + private static final int EXIT_FAILURE = -1; + private static final int EXIT_SUCCESS = 0; + private static final String DEFAULT_HDF5_DIRECTORY = "/edex/data/hdf5"; + private Wes2BridgeConfiguration configuration = null; + private String wes2BridgeScripts = null; /** @@ -324,49 +348,87 @@ public class Wes2BridgeManager { bw.close(); } - public void reconfigureQPID() throws FileNotFoundException, IOException { + public void reconfigureQPID() throws FileNotFoundException, IOException, + ParserConfigurationException, SAXException, + TransformerFactoryConfigurationError, TransformerException { final String srcQpidDirectory = AWIPSII + "/" + "qpid"; final String qpidDirectory = WES2BRIDGE_DIRECTORY + "/" + this.configuration.getTestCaseName() + "/" + "qpid"; - this.updateQpidConf(srcQpidDirectory, qpidDirectory); + this.updateQpidConfigXML(srcQpidDirectory, qpidDirectory); this.updateQPIDD(qpidDirectory); - this.updateQueueCreatorSH(qpidDirectory); } - /* Updates qpidd.conf */ - private void updateQpidConf(String srcQpidDirectory, String qpidDirectory) - throws FileNotFoundException, IOException { - String srcqpidd_conf = srcQpidDirectory + "/etc/qpidd.conf"; - String qpidd_conf = qpidDirectory + "/etc/qpidd.conf"; + /* Updates qpid config.xml */ + private void updateQpidConfigXML(String srcQpidDirectory, + String qpidDirectory) throws FileNotFoundException, IOException, + ParserConfigurationException, SAXException, + TransformerFactoryConfigurationError, TransformerException { + String srcconfig_xml = srcQpidDirectory + "/etc/config.xml"; + String config_xml = qpidDirectory + "/etc/config.xml"; - BufferedReader br = this.getBufferedReader(srcqpidd_conf); - BufferedWriter bw = this.getBufferedWriter(qpidd_conf); + DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance() + .newDocumentBuilder(); + Document document = documentBuilder.parse(srcconfig_xml); + + // Get the root broker node. + Node brokerNode = document.getElementsByTagName( + IQpidConfigurationXML.XML_BROKER).item(0); + // Get the connector node. + Node connectorNode = this.getChildNodeByName(brokerNode, + IQpidConfigurationXML.XML_CONNECTOR); + // Get the management node. + Node managementNode = this.getChildNodeByName(brokerNode, + IQpidConfigurationXML.XML_MANAGEMENT); + // Get the jmxport node. + Node jmxPortNode = this.getChildNodeByName(managementNode, + IQpidConfigurationXML.XML_JMXPORT); + // Get the http port node. + Node httpPortNode = this.getChildNodeByName(managementNode, + IQpidConfigurationXML.XML_HTTP); + + Node portNode = null; + + // Get the connector port node. + portNode = this.getChildNodeByName(connectorNode, + IQpidConfigurationXML.XML_PORT); + portNode.setTextContent(Integer.toString(this.configuration + .getJmsPort())); + // Get the jmxport registryServer node + portNode = this.getChildNodeByName(jmxPortNode, + IQpidConfigurationXML.XML_REGISTRY_SERVER); + portNode.setTextContent(Integer.toString(this.configuration + .getQpidJmxPort())); + // Get the http port node. + portNode = this.getChildNodeByName(httpPortNode, + IQpidConfigurationXML.XML_PORT); + portNode.setTextContent(Integer.toString(this.configuration + .getQpidHttpPort())); - final String line1 = "data-dir="; - final String line2 = "store-dir="; - final String line3 = "pid-dir="; /* - * add the port to qpidd.conf + * Write the updated configuration file to its destination. */ - final String line4 = "auth=no"; + Transformer transformer = TransformerFactory.newInstance() + .newTransformer(); + DOMSource domSource = new DOMSource(document); + StreamResult streamResult = new StreamResult(new File(config_xml)); + transformer.transform(domSource, streamResult); + } - String line = StringUtils.EMPTY; - while ((line = br.readLine()) != null) { - if (line.startsWith(line1)) { - line = line1 + qpidDirectory + "/data"; - } else if (line.startsWith(line2)) { - line = line2 + qpidDirectory + "/messageStore"; - } else if (line.startsWith(line3)) { - line = line3 + qpidDirectory + "/var/lock"; - } else if (line.startsWith(line4)) { - line = line4 + "\nport=" + this.configuration.getJmsPort(); - } - - bw.write(line + "\n"); + private Node getChildNodeByName(Node parentNode, String childName) { + if (parentNode.hasChildNodes() == false) { + return null; } - br.close(); - bw.close(); + + NodeList nodeList = parentNode.getChildNodes(); + for (int i = 0; i < nodeList.getLength(); i++) { + Node node = nodeList.item(i); + if (node.getNodeName().equals(childName)) { + return node; + } + } + + return null; } private void updateQPIDD(String qpidDirectory) @@ -378,34 +440,23 @@ public class Wes2BridgeManager { BufferedWriter bw = this.getBufferedWriter(qpidd); final String line1 = "QPID_HOME="; + /* + * Need to update the 'ps' command that determines if qpid is running or + * not. + */ + final String line2 = "isRunning=`ps -ef | grep org.apache.qpid.server.Main | grep -c \"PNAME=QPBRKR \"`"; String line = StringUtils.EMPTY; while ((line = br.readLine()) != null) { if (line.startsWith(line1)) { line = line1 + qpidDirectory; - } - - bw.write(line + "\n"); - } - br.close(); - bw.close(); - } - - private void updateQueueCreatorSH(String qpidDirectory) - throws FileNotFoundException, IOException { - final String srcqueue = AWIPSII_WES2BRIDGE_SCRIPTS + "/" - + "queueCreator.sh"; - final String queue = qpidDirectory + "/sbin/queueCreator.sh"; - - BufferedReader br = this.getBufferedReader(srcqueue); - BufferedWriter bw = this.getBufferedWriter(queue); - - final String line1 = "port="; - - String line = StringUtils.EMPTY; - while ((line = br.readLine()) != null) { - if (line.startsWith(line1)) { - line = line1 + this.configuration.getJmsPort(); + } else if (line.contains(line2)) { + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder + .append("isRunning=`ps -ef | grep org.apache.qpid.server.Main | grep QPID_HOME="); + stringBuilder.append(qpidDirectory); + stringBuilder.append("| grep -c \"PNAME=QPBRKR \"`"); + line = stringBuilder.toString(); } bw.write(line + "\n"); diff --git a/rpms/awips2.core/Installer.edex-environment/edex/component.spec b/rpms/awips2.core/Installer.edex-environment/edex/component.spec index a0a1e1e5d0..bc7690ee03 100644 --- a/rpms/awips2.core/Installer.edex-environment/edex/component.spec +++ b/rpms/awips2.core/Installer.edex-environment/edex/component.spec @@ -19,9 +19,9 @@ AutoReq: no provides: awips2-edex-environment requires: awips2-edex-base requires: awips2-postgresql -requires: awips2-qpid-server-store -requires: awips2-qpid-client -requires: awips2-qpid-server +requires: qpid-java-broker +requires: qpid-java-client +requires: qpid-java-common requires: awips2-python requires: awips2-java requires: awips2-psql @@ -112,12 +112,11 @@ if [ $? -ne 0 ]; then exit 1 fi -_QPID_VERSION="0.7" +_QPID_VERSION="0.18" RPM_PROJECT="%{_baseline_workspace}/rpms" POSTGRES_INITD="${RPM_PROJECT}/awips2.core/Installer.postgres/scripts/init.d/edex_postgres" QPID_INITD="${RPM_PROJECT}/awips2.qpid/${_QPID_VERSION}/SOURCES/qpidd" -QUEUE_SH="${RPM_PROJECT}/awips2.qpid/${_QPID_VERSION}/SOURCES/queueCreator.sh" -EDEX_INITD="${RPM_PROJECT}/awips2.edex/Installer.edex-base/scripts/init.d/edex_camel" +EDEX_INITD="${RPM_PROJECT}/awips2.edex/Installer.edex/scripts/init.d/edex_camel" HTTPD_PYPIES_INITD="${RPM_PROJECT}/awips2.core/Installer.httpd-pypies/configuration/etc/init.d/httpd-pypies" # Copy the startup scripts. @@ -131,11 +130,6 @@ cp ${QPID_INITD} \ if [ $? -ne 0 ]; then exit 1 fi -cp ${QUEUE_SH} \ - %{_build_root}%{_installation_directory}/edex-environment/scripts -if [ $? -ne 0 ]; then - exit 1 -fi cp ${EDEX_INITD} \ %{_build_root}%{_installation_directory}/edex-environment/scripts if [ $? -ne 0 ]; then