modules/core/dbutils/pom.xml
| 2
modules/core/dbutils/src/main/scripts/dbsetup/content-schema.xml
| 2
modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml
| 21 +++++++
modules/core/domain/src/main/java/org/rhq/core/domain/bundle/BundleType.java
| 24 ++++++++
modules/core/domain/src/main/java/org/rhq/core/domain/bundle/BundleVersion.java
| 22 +++++++
modules/core/domain/src/test/java/org/rhq/core/domain/bundle/test/BundleTest.java
| 28 ++++++++--
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/bundle/BundleManagerBeanTest.java
| 24 ++++++++
7 files changed, 116 insertions(+), 7 deletions(-)
New commits:
commit 66475210ee515ebff6e856feb4199da91c9d82db
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Fri Jan 29 19:35:12 2010 -0500
add new relationships to have bundle type associated with a resource type and a config
def associated with a bundle version
diff --git a/modules/core/dbutils/pom.xml b/modules/core/dbutils/pom.xml
index 1053bb4..28d6925 100644
--- a/modules/core/dbutils/pom.xml
+++ b/modules/core/dbutils/pom.xml
@@ -22,7 +22,7 @@
<properties>
<scm.module.path>modules/core/dbutils/</scm.module.path>
- <db.schema.version>2.77.2</db.schema.version>
+ <db.schema.version>2.78</db.schema.version>
</properties>
<dependencies>
diff --git a/modules/core/dbutils/src/main/scripts/dbsetup/content-schema.xml
b/modules/core/dbutils/src/main/scripts/dbsetup/content-schema.xml
index d1ae3ad..5ec58f1 100644
--- a/modules/core/dbutils/src/main/scripts/dbsetup/content-schema.xml
+++ b/modules/core/dbutils/src/main/scripts/dbsetup/content-schema.xml
@@ -491,6 +491,7 @@
<table name="RHQ_BUNDLE_TYPE">
<column name="ID" default="sequence-only"
initial="10001" primarykey="true" required="true"
type="INTEGER"/>
<column name="NAME" size="200" type="VARCHAR2"
required="true"/>
+ <column name="RESOURCE_TYPE_ID" type="INTEGER"
required="true" references="RHQ_RESOURCE_TYPE"/>
</table>
<!-- BUNDLE is a named piece of content that can be versioned and installed
somewhere -->
@@ -506,6 +507,7 @@
<column name="NAME" size="200" type="VARCHAR2"
required="true"/>
<column name="VERSION" size="500"
type="VARCHAR2" required="true"/>
<column name="ACTION" type="CLOB"
required="true"/>
+ <column name="CONFIG_DEF_ID" type="INTEGER"
required="false" references="RHQ_CONFIG_DEF" />
<column name="BUNDLE_ID" type="INTEGER"
required="true" references="RHQ_BUNDLE"/>
<column name="DISTRIBUTION_ID" type="INTEGER"
required="false" references="RHQ_DISTRIBUTION"/>
</table>
diff --git a/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml
b/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml
index dd16274..45efd6d 100644
--- a/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml
+++ b/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml
@@ -3014,6 +3014,27 @@
<schema-deleteColumn table="RHQ_ALERT_NOTIFICATION"
column="snmp_oid"/>
<schema-deleteColumn table="RHQ_ALERT_NOTIFICATION"
column="email_address"/>
</schemaSpec>
+
+ <schemaSpec version="2.78">
+ <schema-addColumn table="RHQ_BUNDLE_VERSION"
column="CONFIG_DEF_ID" columnType="INTEGER" />
+ <schema-directSQL>
+ <statement desc="Creating RHQ_BUNDLE_VERSION foreign key
relation to RHQ_CONFIG_DEF">
+ ALTER TABLE RHQ_BUNDLE_VERSION
+ ADD CONSTRAINT RHQ_CONFIG_DEF_ID_FK
+ FOREIGN KEY (CONFIG_DEF_ID)
+ REFERENCES RHQ_CONFIG_DEF (ID)
+ </statement>
+ </schema-directSQL>
+ <schema-addColumn table="RHQ_BUNDLE_TYPE"
column="RESOURCE_TYPE_ID" columnType="INTEGER" />
+ <schema-directSQL>
+ <statement desc="Creating RHQ_BUNDLE_TYPE foreign key
relation to RHQ_RESOURCE_TYPE">
+ ALTER TABLE RHQ_BUNDLE_TYPE
+ ADD CONSTRAINT RHQ_RESOURCE_TYPE_ID_FK
+ FOREIGN KEY (RESOURCE_TYPE_ID)
+ REFERENCES RHQ_RESOURCE_TYPE (ID)
+ </statement>
+ </schema-directSQL>
+ </schemaSpec>
</dbupgrade>
</target>
</project>
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/bundle/BundleType.java
b/modules/core/domain/src/main/java/org/rhq/core/domain/bundle/BundleType.java
index 6433df4..7de269c 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/bundle/BundleType.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/bundle/BundleType.java
@@ -29,6 +29,8 @@ import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.SequenceGenerator;
@@ -36,6 +38,8 @@ import javax.persistence.Table;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
+import org.rhq.core.domain.resource.ResourceType;
+
/**
* Defines a type of bundle that can exist in the system. Bundle types are used to
determine
* how a bundle is to be processed.
@@ -63,12 +67,17 @@ public class BundleType implements Serializable {
@Column(name = "NAME", nullable = false)
private String name;
+ @JoinColumn(name = "RESOURCE_TYPE_ID", referencedColumnName =
"ID", nullable = false)
+ @ManyToOne
+ private ResourceType resourceType;
+
public BundleType() {
// for JPA use
}
- public BundleType(String name) {
+ public BundleType(String name, ResourceType resourceType) {
setName(name);
+ setResourceType(resourceType);
}
public int getId() {
@@ -87,6 +96,19 @@ public class BundleType implements Serializable {
this.name = name;
}
+ /**
+ * Returns the resource type that is responsible for deploying and managing bundles
of this bundle type.
+ *
+ * @return resource type that supports this bundle type
+ */
+ public ResourceType getResourceType() {
+ return resourceType;
+ }
+
+ public void setResourceType(ResourceType resourceType) {
+ this.resourceType = resourceType;
+ }
+
@Override
public String toString() {
return "BundleType[id=" + id + ",name=" + name +
"]";
diff --git
a/modules/core/domain/src/main/java/org/rhq/core/domain/bundle/BundleVersion.java
b/modules/core/domain/src/main/java/org/rhq/core/domain/bundle/BundleVersion.java
index f2ea97c..7a488dd 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/bundle/BundleVersion.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/bundle/BundleVersion.java
@@ -24,6 +24,7 @@ package org.rhq.core.domain.bundle;
import java.io.Serializable;
+import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
@@ -39,6 +40,7 @@ import javax.persistence.Table;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
+import org.rhq.core.domain.configuration.definition.ConfigurationDefinition;
import org.rhq.core.domain.content.Distribution;
/**
@@ -82,6 +84,10 @@ public class BundleVersion implements Serializable {
@ManyToOne(fetch = FetchType.LAZY)
private Distribution distribution;
+ @JoinColumn(name = "CONFIG_DEF_ID", referencedColumnName = "ID",
nullable = true)
+ @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
+ private ConfigurationDefinition configurationDefinition;
+
public BundleVersion() {
// for JPA use
}
@@ -140,6 +146,22 @@ public class BundleVersion implements Serializable {
this.distribution = distribution;
}
+ /**
+ * Returns the metadata that describes the configuration that must be set in order
for this
+ * bundle to be properly deployed. Think of this as "the questions that the user
must answer"
+ * in order to provide values that are needed to deploy the content. This definition
+ * describes the {@link BundleConfig#getConfiguration() bundle config data}.
+ *
+ * @return defines the values that must be set in order for this bundle to be
deployed properly
+ */
+ public ConfigurationDefinition getConfigurationDefinition() {
+ return configurationDefinition;
+ }
+
+ public void setConfigurationDefinition(ConfigurationDefinition
configurationDefinition) {
+ this.configurationDefinition = configurationDefinition;
+ }
+
@Override
public String toString() {
return "BundleVersion[id=" + id + ",name=" + name +
",version=" + version + ",bundle=" + bundle + "]";
diff --git
a/modules/core/domain/src/test/java/org/rhq/core/domain/bundle/test/BundleTest.java
b/modules/core/domain/src/test/java/org/rhq/core/domain/bundle/test/BundleTest.java
index 0ac6459..28a7162 100644
--- a/modules/core/domain/src/test/java/org/rhq/core/domain/bundle/test/BundleTest.java
+++ b/modules/core/domain/src/test/java/org/rhq/core/domain/bundle/test/BundleTest.java
@@ -37,6 +37,8 @@ import org.rhq.core.domain.bundle.BundleVersionRepoPK;
import org.rhq.core.domain.content.Distribution;
import org.rhq.core.domain.content.DistributionType;
import org.rhq.core.domain.content.Repo;
+import org.rhq.core.domain.resource.ResourceCategory;
+import org.rhq.core.domain.resource.ResourceType;
import org.rhq.core.domain.test.AbstractEJB3Test;
@Test
@@ -63,7 +65,7 @@ public class BundleTest extends AbstractEJB3Test {
q.setParameter("id", repo2.getId());
assert q.getResultList().size() == 0 : "should not have repo2 mapping in
the db yet";
- BundleType bundleType = new BundleType(name + "-Type");
+ BundleType bundleType = new BundleType(name + "-Type",
createResourceType(em));
Bundle bundle = new Bundle(name + "-Bundle", bundleType);
em.persist(bundle);
BundleVersion bundleVersion = new BundleVersion(name, "1.0.0.BETA",
bundle);
@@ -127,7 +129,7 @@ public class BundleTest extends AbstractEJB3Test {
String name = "BundleTest-testBundleVersion";
String action = "action/script/recipe is here";
- BundleType bundleType = new BundleType(name + "-Type");
+ BundleType bundleType = new BundleType(name + "-Type",
createResourceType(em));
Bundle bundle = new Bundle(name + "-Bundle", bundleType);
em.persist(bundle);
id = bundle.getId();
@@ -203,6 +205,8 @@ public class BundleTest extends AbstractEJB3Test {
em.remove(bundleType);
assert q.getResultList().size() == 0 : "didn't clean up test
bundle";
assert em.find(BundleType.class, bundleType.getId()) == null :
"didn't clean up bundle type";
+
+ deleteResourceType(em, bundleType.getResourceType());
em.close();
getTransactionManager().commit();
@@ -226,7 +230,7 @@ public class BundleTest extends AbstractEJB3Test {
String name = "BundleTest-testBundle";
- BundleType bundleType = new BundleType(name + "-Type");
+ BundleType bundleType = new BundleType(name + "-Type",
createResourceType(em));
Bundle b = new Bundle(name, bundleType);
Query q = em.createNamedQuery(Bundle.QUERY_FIND_BY_NAME);
@@ -274,6 +278,8 @@ public class BundleTest extends AbstractEJB3Test {
BundleType bt = (BundleType) q.getSingleResult();
em.remove(bt);
assert q.getResultList().size() == 0 : "didn't clean up test bundle
type";
+
+ deleteResourceType(em, bundleType.getResourceType());
em.close();
getTransactionManager().commit();
@@ -297,7 +303,7 @@ public class BundleTest extends AbstractEJB3Test {
String name = "BundleTest-testBundleType";
- BundleType bt = new BundleType(name);
+ BundleType bt = new BundleType(name, createResourceType(em));
Query q = em.createNamedQuery(BundleType.QUERY_FIND_BY_NAME);
q.setParameter("name", bt.getName());
@@ -330,6 +336,8 @@ public class BundleTest extends AbstractEJB3Test {
doomed = em.getReference(BundleType.class, doomed.getId());
em.remove(doomed);
assert q.getResultList().size() == 0 : "didn't remove the
entity";
+
+ deleteResourceType(em, bt.getResourceType());
em.close();
getTransactionManager().commit();
done = true;
@@ -342,4 +350,16 @@ public class BundleTest extends AbstractEJB3Test {
}
}
}
+
+ private ResourceType createResourceType(EntityManager em) {
+ ResourceType rt = new ResourceType("BundleTest",
"BundleTestPlugin", ResourceCategory.PLATFORM, null);
+ em.persist(rt);
+ return rt;
+ }
+
+ private ResourceType deleteResourceType(EntityManager em, ResourceType rt) {
+ rt = em.find(ResourceType.class, rt.getId());
+ em.remove(rt);
+ return rt;
+ }
}
diff --git
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/bundle/BundleManagerBeanTest.java
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/bundle/BundleManagerBeanTest.java
index 90888f1..a6e3776 100644
---
a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/bundle/BundleManagerBeanTest.java
+++
b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/bundle/BundleManagerBeanTest.java
@@ -24,6 +24,7 @@ import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Query;
+import javax.transaction.TransactionManager;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
@@ -33,6 +34,8 @@ import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.bundle.Bundle;
import org.rhq.core.domain.bundle.BundleType;
import org.rhq.core.domain.bundle.BundleVersion;
+import org.rhq.core.domain.resource.ResourceCategory;
+import org.rhq.core.domain.resource.ResourceType;
import org.rhq.enterprise.server.test.AbstractEJB3Test;
import org.rhq.enterprise.server.util.LookupUtil;
@@ -82,6 +85,12 @@ public class BundleManagerBeanTest extends AbstractEJB3Test {
em.remove(em.getReference(BundleType.class, ((BundleType)
removeMe).getId()));
}
+ q = em.createQuery("SELECT rt FROM ResourceType rt WHERE rt.name LIKE
'" + TEST_PREFIX + "%'");
+ doomed = q.getResultList();
+ for (Object removeMe : doomed) {
+ em.remove(em.getReference(ResourceType.class, ((ResourceType)
removeMe).getId()));
+ }
+
getTransactionManager().commit();
em.close();
em = null;
@@ -129,13 +138,26 @@ public class BundleManagerBeanTest extends AbstractEJB3Test {
private BundleType createBundleType(String name) throws Exception {
final String fullName = TEST_PREFIX + "-type-" + name;
- BundleType bt = new BundleType(fullName);
+ BundleType bt = new BundleType(fullName, createResourceType(name));
bt = bundleManagerBean.createBundleType(bt);
assert bt.getId() > 0;
assert bt.getName().endsWith(fullName);
return bt;
}
+ private ResourceType createResourceType(String name) throws Exception {
+ final String fullName = TEST_PREFIX + "-resourcetype-" + name;
+ ResourceType rt = new ResourceType(fullName, "BundleManagerBeanTest",
ResourceCategory.PLATFORM, null);
+
+ TransactionManager txMgr = getTransactionManager();
+ txMgr.begin();
+ EntityManager em = getEntityManager();
+ em.persist(rt);
+ em.close();
+ txMgr.commit();
+ return rt;
+ }
+
private Subject getOverlord() {
return LookupUtil.getSubjectManager().getOverlord();
}