modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/SystemGWTServiceImpl.java
| 24 -
modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/client/RemoteClientServlet.java
| 98 ------
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/RemoteClientManagerBean.java
| 149 ++++++++++
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/RemoteClientManagerLocal.java
| 67 ++++
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/ServerPluginService.java
| 2
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/LookupUtil.java
| 6
6 files changed, 230 insertions(+), 116 deletions(-)
New commits:
commit 9c9b1c4efb093e45f871dbb116f0aa881a1cc15f
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Fri Nov 30 15:01:12 2012 -0500
name the master PC's data directory name so it better identifies itself as being
owned by rhq
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/ServerPluginService.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/ServerPluginService.java
index e421ee5..2bd3b2b 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/ServerPluginService.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/ServerPluginService.java
@@ -132,7 +132,7 @@ public class ServerPluginService implements ServerPluginServiceMBean
{
File pluginDir = getServerPluginsDirectory();
File serverDataDir = LookupUtil.getCoreServer().getJBossServerDataDir();
- File dataDir = new File(serverDataDir, "server-plugins");
+ File dataDir = new File(serverDataDir, "rhq-masterpc-server-plugins");
dataDir.mkdirs(); // make sure the data directory exists
File tmpDir = LookupUtil.getCoreServer().getJBossServerTempDir();
commit cbd256f0f18d4ecd89f914386ded765701ef9f77
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Fri Nov 30 15:00:43 2012 -0500
add new remote client SLSB so it can manage the version file in the data directory
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/SystemGWTServiceImpl.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/SystemGWTServiceImpl.java
index 9ae1b11..0080751 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/SystemGWTServiceImpl.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/SystemGWTServiceImpl.java
@@ -31,6 +31,7 @@ import org.rhq.core.domain.common.ServerDetails;
import org.rhq.core.domain.common.composite.SystemSettings;
import org.rhq.enterprise.gui.coregui.client.gwt.SystemGWTService;
import org.rhq.enterprise.server.core.AgentManagerLocal;
+import org.rhq.enterprise.server.core.RemoteClientManagerLocal;
import org.rhq.enterprise.server.system.SystemManagerLocal;
import org.rhq.enterprise.server.util.LookupUtil;
@@ -47,6 +48,7 @@ public class SystemGWTServiceImpl extends AbstractGWTServiceImpl
implements Syst
private SystemManagerLocal systemManager = LookupUtil.getSystemManager();
private AgentManagerLocal agentManager = LookupUtil.getAgentManager();
+ private RemoteClientManagerLocal remoteClientManager =
LookupUtil.getRemoteClientManager();
@Override
public ProductInfo getProductInfo() throws RuntimeException {
@@ -171,18 +173,11 @@ public class SystemGWTServiceImpl extends AbstractGWTServiceImpl
implements Syst
@Override
public HashMap<String, String> getClientVersionProperties() throws
RuntimeException {
- File versionFile = new File(getClientDataDownloadDir(),
"rhq-client-version.properties");
try {
- Properties p = new Properties();
- FileInputStream inStream = new FileInputStream(versionFile);
- try {
- p.load(inStream);
- } finally {
- inStream.close();
- }
- return convertFromProperties(p);
+ Properties props = remoteClientManager.getRemoteClientVersionFileContent();
+ return convertFromProperties(props);
} catch (Throwable t) {
- throw getExceptionToThrowToClient(t, "Unable to retrieve client version
info.");
+ throw getExceptionToThrowToClient(t, "Unable to retrieve CLI version
info.");
}
}
@@ -240,15 +235,6 @@ public class SystemGWTServiceImpl extends AbstractGWTServiceImpl
implements Syst
return downloadDir;
}
- private File getClientDataDownloadDir() {
- File earDir = LookupUtil.getCoreServer().getJBossServerDataDir();
- File downloadDir = new File(earDir, "rhq-downloads/rhq-client");
- if (!downloadDir.isDirectory()) {
- throw new RuntimeException("Server is missing client download directory
at [" + downloadDir + "]");
- }
- return downloadDir;
- }
-
private File getBundleDeployerDownloadDir() {
File homeDir = getDownloadHomeDir();
File downloadDir = new File(homeDir, "bundle-deployer");
diff --git
a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/client/RemoteClientServlet.java
b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/client/RemoteClientServlet.java
index baceb79..9127927 100644
---
a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/client/RemoteClientServlet.java
+++
b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/client/RemoteClientServlet.java
@@ -20,8 +20,6 @@ package org.rhq.enterprise.gui.client;
import java.io.File;
import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
import java.io.IOException;
import javax.servlet.ServletException;
@@ -33,9 +31,7 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.rhq.core.domain.cloud.Server.OperationMode;
-import org.rhq.core.util.MessageDigestGenerator;
import org.rhq.core.util.stream.StreamUtil;
-import org.rhq.enterprise.server.core.CoreServerMBean;
import org.rhq.enterprise.server.util.LookupUtil;
/**
@@ -47,10 +43,6 @@ public class RemoteClientServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
- private static final String RHQ_SERVER_VERSION = "rhq-server.version";
- private static final String RHQ_SERVER_BUILD_NUMBER =
"rhq-server.build-number";
- private static final String RHQ_CLIENT_MD5 = "rhq-client.md5";
-
// the system property that defines how many concurrent downloads we will allow
private static String SYSPROP_CLIENT_DOWNLOADS_LIMIT =
"rhq.server.client-downloads-limit";
@@ -69,29 +61,6 @@ public class RemoteClientServlet extends HttpServlet {
private Log log = LogFactory.getLog(this.getClass());
@Override
- public void init() throws ServletException {
- log.info("Starting the RHQ remote client servlet...");
-
- // make sure we have a binary distro file; log its location
- try {
- log.info("Remote Client Binary File: " + getRemoteClientZip());
- } catch (Throwable t) {
- log.error("Remote client is not available for deployment - cause: "
+ t);
- return;
- }
-
- // make sure we create a version file if we have to by getting the version file
now
- try {
- File versionFile = getVersionFile();
-
- // log the version info - this also makes sure we can read it back in
- log.debug(versionFile + ":\n" + new String(StreamUtil.slurp(new
FileInputStream(versionFile))));
- } catch (Throwable t) {
- log.error("Cannot determine the remote client version
information.", t);
- }
- }
-
- @Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws
ServletException, IOException {
// seeing odd browser caching issues, even though we set Last-Modified. so force
no caching for now
disableBrowserCache(resp);
@@ -133,7 +102,7 @@ public class RemoteClientServlet extends HttpServlet {
}
try {
- File zip = getRemoteClientZip();
+ File zip = LookupUtil.getRemoteClientManager().getRemoteClientBinaryFile();
if (!zip.exists()) {
disableBrowserCache(resp);
resp.sendError(HttpServletResponse.SC_NOT_FOUND, "Remote Client
binary does not exist: "
@@ -161,42 +130,9 @@ public class RemoteClientServlet extends HttpServlet {
return;
}
- private File getRemoteClientZip() throws Exception {
- File dir = getDownloadDir();
- for (File file : dir.listFiles()) {
- if (file.getName().endsWith(".zip")) {
- return file;
- }
- }
-
- throw new FileNotFoundException("Missing remote client binary in [" +
dir + "]");
- }
-
- private File getDownloadDir() throws Exception {
- File earDir = LookupUtil.getCoreServer().getEarDeploymentDir();
- File downloadDir = new File(earDir, "rhq-downloads/rhq-client");
- if (!downloadDir.exists()) {
- throw new FileNotFoundException("Missing remote client download
directory at [" + downloadDir + "]");
- }
- return downloadDir;
- }
-
- private File getDataDownloadDir() throws Exception {
- File earDir = LookupUtil.getCoreServer().getJBossServerDataDir();
- File downloadDir = new File(earDir, "rhq-downloads/rhq-client");
- if (!downloadDir.isDirectory()) {
- downloadDir.mkdirs();
- if (!downloadDir.isDirectory()) {
- throw new FileNotFoundException("Missing remote client data download
directory at [" + downloadDir
- + "]");
- }
- }
- return downloadDir;
- }
-
private void getVersion(HttpServletRequest req, HttpServletResponse resp) throws
ServletException, IOException {
try {
- File versionFile = getVersionFile();
+ File versionFile =
LookupUtil.getRemoteClientManager().getRemoteClientVersionFile();
resp.setContentType("text/plain");
resp.setDateHeader("Last-Modified", versionFile.lastModified());
@@ -248,36 +184,6 @@ public class RemoteClientServlet extends HttpServlet {
resp.sendError(ERROR_CODE_TOO_MANY_DOWNLOADS, "Maximum limit exceeded -
download client later");
}
- private File getVersionFile() throws Exception {
- File versionFile = new File(getDataDownloadDir(),
"rhq-client-version.properties");
- if (!versionFile.exists()) {
- // we do not have the version properties file yet, let's extract some
info and create one
- StringBuilder serverVersionInfo = new StringBuilder();
-
- CoreServerMBean coreServer = LookupUtil.getCoreServer();
- serverVersionInfo.append(RHQ_SERVER_VERSION +
'=').append(coreServer.getVersion()).append('\n');
- serverVersionInfo.append(RHQ_SERVER_BUILD_NUMBER +
'=').append(coreServer.getBuildNumber()).append('\n');
-
- // calculate the MD5 of the client zip
- File zip = getRemoteClientZip();
- String md5Property = RHQ_CLIENT_MD5 + '=' +
MessageDigestGenerator.getDigestString(zip) + '\n';
-
- // now write the server version info in our internal version file our servlet
will use
- FileOutputStream versionFileOutputStream = new
FileOutputStream(versionFile);
- try {
- versionFileOutputStream.write(serverVersionInfo.toString().getBytes());
- versionFileOutputStream.write(md5Property.getBytes());
- } finally {
- try {
- versionFileOutputStream.close();
- } catch (Exception ignore) {
- }
- }
- }
-
- return versionFile;
- }
-
private boolean isServerAcceptingRequests() {
try {
OperationMode mode =
LookupUtil.getServerManager().getServer().getOperationMode();
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/RemoteClientManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/RemoteClientManagerBean.java
new file mode 100644
index 0000000..2d053eb
--- /dev/null
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/RemoteClientManagerBean.java
@@ -0,0 +1,149 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2008 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+package org.rhq.enterprise.server.core;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.util.Properties;
+
+import javax.ejb.Stateless;
+import javax.interceptor.ExcludeDefaultInterceptors;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import org.rhq.core.util.MessageDigestGenerator;
+import org.rhq.enterprise.server.util.LookupUtil;
+
+/**
+ * Provides access to the remote client binary distribution (the CLI).
+ *
+ * @author John Mazzitelli
+ */
+@Stateless
+public class RemoteClientManagerBean implements RemoteClientManagerLocal {
+ private final Log log = LogFactory.getLog(RemoteClientManagerBean.class);
+
+ // constants used for the cli version file
+ private static final String RHQ_SERVER_VERSION = "rhq-server.version";
+ private static final String RHQ_SERVER_BUILD_NUMBER =
"rhq-server.build-number";
+ private static final String RHQ_CLIENT_MD5 = "rhq-client.md5";
+
+ @ExcludeDefaultInterceptors
+ @Override
+ public File getRemoteClientVersionFile() throws Exception {
+ File versionFile = new File(getDataDownloadDir(),
"rhq-client-version.properties");
+ if (!versionFile.exists()) {
+ // we do not have the version properties file yet, let's extract some
info and create one
+ StringBuilder serverVersionInfo = new StringBuilder();
+
+ CoreServerMBean coreServer = LookupUtil.getCoreServer();
+ serverVersionInfo.append(RHQ_SERVER_VERSION +
'=').append(coreServer.getVersion()).append('\n');
+ serverVersionInfo.append(RHQ_SERVER_BUILD_NUMBER +
'=').append(coreServer.getBuildNumber()).append('\n');
+
+ // calculate the MD5 of the client zip
+ File zip = getRemoteClientBinaryFile();
+ log.info("Remote Client Binary File: " + zip.getAbsolutePath());
+
+ String md5Property = RHQ_CLIENT_MD5 + '=' +
MessageDigestGenerator.getDigestString(zip) + '\n';
+
+ // now write the server version info in our internal version file our servlet
will use
+ FileOutputStream versionFileOutputStream = new
FileOutputStream(versionFile);
+ try {
+ versionFileOutputStream.write(serverVersionInfo.toString().getBytes());
+ versionFileOutputStream.write(md5Property.getBytes());
+ } finally {
+ try {
+ versionFileOutputStream.close();
+ } catch (Exception ignore) {
+ }
+ }
+
+ log.info("Remote Client Version File: " + versionFile);
+ }
+
+ return versionFile;
+ }
+
+ @ExcludeDefaultInterceptors
+ @Override
+ public Properties getRemoteClientVersionFileContent() throws Exception {
+ FileInputStream stream = new FileInputStream(getRemoteClientVersionFile());
+ try {
+ Properties props = new Properties();
+ props.load(stream);
+ return props;
+ } finally {
+ try {
+ stream.close();
+ } catch (Exception e) {
+ }
+ }
+ }
+
+ @ExcludeDefaultInterceptors
+ @Override
+ public File getRemoteClientBinaryFile() throws Exception {
+ File downloadDir = getDownloadDir();
+ for (File file : downloadDir.listFiles()) {
+ if (file.getName().endsWith(".zip")) {
+ return file;
+ }
+ }
+
+ throw new FileNotFoundException("Missing CLI binary in [" + downloadDir
+ "]");
+ }
+
+ /**
+ * The directory on the server's file system where the CLI binary file is found.
+ *
+ * @return directory where the downloads are found
+ *
+ * @throws Exception if could not determine the location or it does not exist
+ */
+ private File getDownloadDir() throws Exception {
+ File earDir = LookupUtil.getCoreServer().getEarDeploymentDir();
+ File downloadDir = new File(earDir, "rhq-downloads/rhq-client");
+ if (!downloadDir.isDirectory()) {
+ throw new FileNotFoundException("Missing remote client download
directory at [" + downloadDir + "]");
+ }
+ return downloadDir;
+ }
+
+ /**
+ * The directory on the server's file system where the CLI version file is
found.
+ *
+ * @return directory where the version file is found
+ *
+ * @throws Exception if could not determine the location or it does not exist
+ */
+ private File getDataDownloadDir() throws Exception {
+ File earDir = LookupUtil.getCoreServer().getJBossServerDataDir();
+ File downloadDir = new File(earDir, "rhq-downloads/rhq-client");
+ if (!downloadDir.isDirectory()) {
+ downloadDir.mkdirs();
+ if (!downloadDir.isDirectory()) {
+ throw new FileNotFoundException("Missing remote client data download
directory [" + downloadDir + "]");
+ }
+ }
+ return downloadDir;
+ }
+}
\ No newline at end of file
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/RemoteClientManagerLocal.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/RemoteClientManagerLocal.java
new file mode 100644
index 0000000..1f8ebb5
--- /dev/null
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/RemoteClientManagerLocal.java
@@ -0,0 +1,67 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2008 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+package org.rhq.enterprise.server.core;
+
+import java.io.File;
+import java.util.Properties;
+
+import javax.ejb.Local;
+
+/**
+ * Local interface to the {@link RemoteAgentClientManagerBean} SLSB. This manager
performs
+ * things related to the remote client (CLI) distribution.
+ *
+ * @author John Mazzitelli
+ */
+@Local
+public interface RemoteClientManagerLocal {
+
+ /**
+ * Returns the path on the server's file system where the CLI version file is
found.
+ * The CLI version file contains information about the CLI binary, such
+ * as what version it is.
+ *
+ * @return version file location
+ *
+ * @throws Exception if the file could not be created or found
+ */
+ File getRemoteClientVersionFile() throws Exception;
+
+ /**
+ * Returns the content of the CLI version file, which simply consists
+ * of some name/value pairs.
+ * The version file contains information about the CLI binary, such
+ * as what version it is.
+ *
+ * @return version properties found in the version file.
+ *
+ * @throws Exception if cannot read the version file
+ */
+ Properties getRemoteClientVersionFileContent() throws Exception;
+
+ /**
+ * Returns the path on the server's file system where the CLI binary is found.
+ * This is the actual CLI distribution that can be installed on remote client
machines.
+ *
+ * @return binary location
+ *
+ * @throws Exception if the binary file does not exist
+ */
+ File getRemoteClientBinaryFile() throws Exception;
+}
\ No newline at end of file
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/LookupUtil.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/LookupUtil.java
index 7b784fa..a7bd680 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/LookupUtil.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/LookupUtil.java
@@ -102,6 +102,8 @@ import org.rhq.enterprise.server.core.AgentManagerLocal;
import org.rhq.enterprise.server.core.CoreServerMBean;
import org.rhq.enterprise.server.core.EmailManagerBean;
import org.rhq.enterprise.server.core.EmailManagerLocal;
+import org.rhq.enterprise.server.core.RemoteClientManagerBean;
+import org.rhq.enterprise.server.core.RemoteClientManagerLocal;
import org.rhq.enterprise.server.core.plugin.PluginDeploymentScannerMBean;
import org.rhq.enterprise.server.dashboard.DashboardManagerBean;
import org.rhq.enterprise.server.dashboard.DashboardManagerLocal;
@@ -275,6 +277,10 @@ public final class LookupUtil {
return lookupLocal(AlertConditionConsumerBean.class);
}
+ public static RemoteClientManagerLocal getRemoteClientManager() {
+ return lookupLocal(RemoteClientManagerBean.class);
+ }
+
public static AgentManagerLocal getAgentManager() {
return lookupLocal(AgentManagerBean.class);
}