modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleManagerBean.java
| 17 ++++++
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleManagerRemote.java
| 19 +++++++
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/webservices/WebservicesManagerBean.java
| 27 ++++------
3 files changed, 49 insertions(+), 14 deletions(-)
New commits:
commit 3787402100e5afe67b710b4024775880ab4ba078
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Wed Sep 28 11:29:09 2011 -0400
[BZ 681708] allow upload of bundle distro files as byte array to support CLI. note
this requires the file to be loaded in memory which can cause OOM in either the server OR
the CLI.
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleManagerBean.java
index ee3a1ba..d08c625 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleManagerBean.java
@@ -552,6 +552,23 @@ public class BundleManagerBean implements BundleManagerLocal,
BundleManagerRemot
@Override
@RequiredPermission(Permission.MANAGE_BUNDLE)
@TransactionAttribute(TransactionAttributeType.NEVER)
+ public BundleVersion createBundleVersionViaByteArray(Subject subject, byte[]
fileBytes) throws Exception {
+
+ File tmpFile = File.createTempFile("bundleDistroBits",
".zip");
+ try {
+ StreamUtil.copy(new ByteArrayInputStream(fileBytes), new
FileOutputStream(tmpFile));
+ BundleVersion bundleVersion = createBundleVersionViaFile(subject, tmpFile);
+ return bundleVersion;
+ } finally {
+ if (tmpFile != null) {
+ tmpFile.delete();
+ }
+ }
+ }
+
+ @Override
+ @RequiredPermission(Permission.MANAGE_BUNDLE)
+ @TransactionAttribute(TransactionAttributeType.NEVER)
public BundleVersion createBundleVersionViaURL(Subject subject, String
distributionFileUrl) throws Exception {
// validate by immediately creating a URL
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleManagerRemote.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleManagerRemote.java
index 41ec97c..c15c44e 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleManagerRemote.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/bundle/BundleManagerRemote.java
@@ -100,6 +100,8 @@ public interface BundleManagerRemote {
/**
* A convenience method taking a byte array as opposed to a stream for the file
bits.
+ * WARNING: obviously, this requires the entire bundle file to have been loaded fully
in memory.
+ * For very large files, this could cause OutOfMemoryErrors.
*
* @see {@link addBundleFile(Subject, int, String, String, Architecture, InputStream,
boolean)}
*/
@@ -220,6 +222,23 @@ public interface BundleManagerRemote {
@WebParam(name = "distributionFile") File distributionFile) throws
Exception;
/**
+ * Creates a bundle version based on the actual bytes of a Bundle Distribution file.
This is essentially
+ * the same as {@link #createBundleVersionViaFile(Subject, File)} but the caller is
providing the actual
+ * bytes of the file as opposed to the file itself.
+ * WARNING: obviously, this requires the entire distribution file to have been loaded
fully in memory.
+ * For very large distribution files, this could cause OutOfMemoryErrors.
+ *
+ * @param subject
+ * @param fileBytes the file bits that make up the entire bundle distribution file
+ * @return the persisted BundleVersion with alot of the internal relationships filled
in to help the caller
+ * understand all that this method did. Bundle files specifically are
returned.
+ */
+ @WebMethod
+ BundleVersion createBundleVersionViaByteArray( //
+ @WebParam(name = "subject") Subject subject, //
+ @WebParam(name = "fileBytes") byte[] fileBytes) throws Exception;
+
+ /**
* Creates a bundle version based on a Bundle Distribution file. Typically a zip
file, the bundle distribution
* contains the recipe for a supported bundle type, along with 0, 1 or more bundle
files that will be associated
* with the bundle version. The recipe specifies the bundle name, version, version
name and version description.
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/webservices/WebservicesManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/webservices/WebservicesManagerBean.java
index 9f204d1..0258dbb 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/webservices/WebservicesManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/webservices/WebservicesManagerBean.java
@@ -80,8 +80,6 @@ import org.rhq.core.domain.criteria.BundleFileCriteria;
import org.rhq.core.domain.criteria.BundleResourceDeploymentCriteria;
import org.rhq.core.domain.criteria.BundleVersionCriteria;
import org.rhq.core.domain.criteria.Criteria;
-import org.rhq.core.domain.criteria.DriftChangeSetCriteria;
-import org.rhq.core.domain.criteria.DriftCriteria;
import org.rhq.core.domain.criteria.EventCriteria;
import org.rhq.core.domain.criteria.GroupOperationHistoryCriteria;
import org.rhq.core.domain.criteria.InstalledPackageCriteria;
@@ -98,9 +96,6 @@ import org.rhq.core.domain.criteria.ResourceOperationHistoryCriteria;
import org.rhq.core.domain.criteria.ResourceTypeCriteria;
import org.rhq.core.domain.criteria.RoleCriteria;
import org.rhq.core.domain.criteria.SubjectCriteria;
-import org.rhq.core.domain.drift.Drift;
-import org.rhq.core.domain.drift.DriftChangeSet;
-import org.rhq.core.domain.drift.DriftSnapshot;
import org.rhq.core.domain.event.Event;
import org.rhq.core.domain.event.EventSeverity;
import org.rhq.core.domain.measurement.Availability;
@@ -218,7 +213,7 @@ public class WebservicesManagerBean implements WebservicesRemote {
private SupportManagerLocal supportManager = LookupUtil.getSupportManager();
private SystemManagerLocal systemManager = LookupUtil.getSystemManager();
private SynchronizationManagerLocal synchronizationManager =
LookupUtil.getSynchronizationManager();
-
+
//ALERTMANAGER: BEGIN ------------------------------------------
public PageList<Alert> findAlertsByCriteria(Subject subject, AlertCriteria
criteria) {
return alertManager.findAlertsByCriteria(subject, criteria);
@@ -331,6 +326,10 @@ public class WebservicesManagerBean implements WebservicesRemote {
return bundleManager.createBundleVersionViaFile(subject, distributionFile);
}
+ public BundleVersion createBundleVersionViaByteArray(Subject subject, byte[]
fileBytes) throws Exception {
+ return bundleManager.createBundleVersionViaByteArray(subject, fileBytes);
+ }
+
public BundleVersion createBundleVersionViaURL(Subject subject, String
distributionFileUrl) throws Exception {
return bundleManager.createBundleVersionViaURL(subject, distributionFileUrl);
}
@@ -1197,28 +1196,28 @@ public class WebservicesManagerBean implements WebservicesRemote
{
//SYSTEMMANAGER: END ------------------------------------
//SYNCHRONIZATIONMANANGER: BEGIN -------------------------
-
+
public ExportReport exportAllSubsystems(Subject subject) {
return synchronizationManager.exportAllSubsystems(subject);
}
-
+
public void validate(Subject subject, byte[] exportFile) throws ValidationException
{
synchronizationManager.validate(subject, exportFile);
}
-
+
public List<ImportConfigurationDefinition>
getImportConfigurationDefinitionOfAllSynchronizers() {
return
synchronizationManager.getImportConfigurationDefinitionOfAllSynchronizers();
}
-
+
public ImportConfigurationDefinition getImportConfigurationDefinition(String
importerClass) {
return synchronizationManager.getImportConfigurationDefinition(importerClass);
}
-
- public void importAllSubsystems(Subject subject, byte[] exportFile,
- List<ImportConfiguration> importerConfigurations) throws
ValidationException, ImportException {
+
+ public void importAllSubsystems(Subject subject, byte[] exportFile,
List<ImportConfiguration> importerConfigurations)
+ throws ValidationException, ImportException {
synchronizationManager.importAllSubsystems(subject, exportFile,
importerConfigurations);
}
-
+
//SYNCHRONIZATIONMANANGER: END -------------------------
private void checkParametersPassedIn(Subject subject, Criteria criteria) {
if (subject == null) {