[jboss-svn-commits] JBoss Portal SVN: r5692 - in trunk/core/src: main/org/jboss/portal/core/deployment/jboss main/org/jboss/portal/core/metadata resources/portal-core-sar resources/portal-samples-war/WEB-INF
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Mon Nov 20 16:47:16 EST 2006
Author: julien at jboss.com
Date: 2006-11-20 16:47:08 -0500 (Mon, 20 Nov 2006)
New Revision: 5692
Modified:
trunk/core/src/main/org/jboss/portal/core/deployment/jboss/ObjectDeployment.java
trunk/core/src/main/org/jboss/portal/core/deployment/jboss/PortletAppDeployment.java
trunk/core/src/main/org/jboss/portal/core/metadata/InstanceMetaData.java
trunk/core/src/resources/portal-core-sar/portal-aop.xml
trunk/core/src/resources/portal-samples-war/WEB-INF/portlet-instances.xml
Log:
JBPORTAL-1015 : Allow reconfiguration of a portlet instance from the deployment descriptor portlet-instances.xml
Modified: trunk/core/src/main/org/jboss/portal/core/deployment/jboss/ObjectDeployment.java
===================================================================
--- trunk/core/src/main/org/jboss/portal/core/deployment/jboss/ObjectDeployment.java 2006-11-20 21:08:42 UTC (rev 5691)
+++ trunk/core/src/main/org/jboss/portal/core/deployment/jboss/ObjectDeployment.java 2006-11-20 21:47:08 UTC (rev 5692)
@@ -50,7 +50,6 @@
public class ObjectDeployment extends Deployment
{
- //
/** . */
public static final int OVERWRITE_IF_EXISTS = 0;
Modified: trunk/core/src/main/org/jboss/portal/core/deployment/jboss/PortletAppDeployment.java
===================================================================
--- trunk/core/src/main/org/jboss/portal/core/deployment/jboss/PortletAppDeployment.java 2006-11-20 21:08:42 UTC (rev 5691)
+++ trunk/core/src/main/org/jboss/portal/core/deployment/jboss/PortletAppDeployment.java 2006-11-20 21:47:08 UTC (rev 5692)
@@ -28,16 +28,25 @@
import org.jboss.portal.common.net.URLVisitor;
import org.jboss.portal.common.util.Tools;
import org.jboss.portal.common.util.XML;
+import org.jboss.portal.common.value.Value;
+import org.jboss.portal.common.value.StringValue;
import org.jboss.portal.core.metadata.InstanceMetaData;
-import org.jboss.portal.core.metadata.InstancesMetaData;
import org.jboss.portal.core.metadata.ServiceMetaData;
+import org.jboss.portal.core.metadata.PreferencesMetaData;
import org.jboss.portal.core.metadata.portlet.JBossApplicationMetaData;
import org.jboss.portal.core.model.instance.DuplicateInstanceException;
-import org.jboss.portal.core.model.instance.InstanceContainer;
+import org.jboss.portal.core.model.instance.Instance;
import org.jboss.portal.portlet.InvalidPortletIdException;
import org.jboss.portal.portlet.NoSuchPortletException;
import org.jboss.portal.portlet.PortletInvokerException;
+import org.jboss.portal.portlet.impl.jsr168.metadata.PreferenceMetaData;
+import org.jboss.portal.portlet.state.PropertyChange;
import org.jboss.portal.security.spi.provider.SecurityConfigurationException;
+import org.jboss.portal.security.spi.provider.AuthorizationDomain;
+import org.jboss.portal.security.spi.provider.DomainConfigurator;
+import org.jboss.portal.security.metadata.SecurityConstraintsMetaData;
+import org.jboss.portal.security.RoleSecurityBinding;
+import org.jboss.portal.security.SecurityConstants;
import org.jboss.portal.server.deployment.PortalWebApp;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
@@ -60,6 +69,12 @@
{
/** . */
+ public static final int OVERWRITE_IF_EXISTS = 0;
+
+ /** . */
+ public static final int KEEP_IF_EXISTS = 1;
+
+ /** . */
private PortletAppDeploymentFactory factory;
public PortletAppDeployment(URL url, PortalWebApp pwa, MBeanServer mbeanServer, PortletAppDeploymentFactory factory)
@@ -134,7 +149,7 @@
final DocumentBuilder builder = XML.getDocumentBuilderFactory().newDocumentBuilder();
// All the meta data gathered
- final ArrayList instanceMDs = new ArrayList();
+ final ArrayList metaDataCtxs = new ArrayList();
// Parse instances from legacy -object.xml
log.debug("Looking for the WEB-INF path of " + pwa.getId());
@@ -167,6 +182,8 @@
for (Iterator i = XML.getChildrenIterator(deploymentsElt, "deployment"); i.hasNext();)
{
Element deploymentElt = (Element)i.next();
+
+ //
Element instanceElt = XML.getUniqueChild(deploymentElt, "instance", false);
//
@@ -179,12 +196,13 @@
}
//
- InstanceMetaData instanceMD = InstanceMetaData.buildLegacyMetaData(instanceElt, pwa.getId());
+ InstanceMetaData metaData = InstanceMetaData.buildLegacyMetaData(instanceElt, pwa.getId());
//
- if (instanceMD != null)
+ if (metaData != null)
{
- instanceMDs.add(instanceMD);
+ InstanceMetaDataContext metaDataCtx = new InstanceMetaDataContext(metaData, KEEP_IF_EXISTS);
+ metaDataCtxs.add(metaDataCtx);
}
}
}
@@ -207,13 +225,13 @@
}
// Output legacy file on the console
- if (instanceMDs.size() > 0)
+ if (metaDataCtxs.size() > 0)
{
Document doc = builder.newDocument();
Element deployments = (Element)doc.appendChild(doc.createElement("deployments"));
- for (int i = 0; i < instanceMDs.size(); i++)
+ for (int i = 0; i < metaDataCtxs.size(); i++)
{
- InstanceMetaData instanceMD = (InstanceMetaData)instanceMDs.get(i);
+ InstanceMetaData instanceMD = (InstanceMetaData)metaDataCtxs.get(i);
Element deploymentElt = (Element)deployments.appendChild(doc.createElement("deployment"));
Element instanceElt = (Element)deploymentElt.appendChild(doc.createElement("instance"));
Element instanceIdElt = (Element)instanceElt.appendChild(doc.createElement("instance-id"));
@@ -244,10 +262,29 @@
Element instanceElt = XML.getUniqueChild(deploymentElt, "instance", true);
//
- InstanceMetaData instanceMD = InstanceMetaData.buildMetaData(instanceElt);
+ InstanceMetaData metaData = InstanceMetaData.buildMetaData(instanceElt);
//
- instanceMDs.add(instanceMD);
+ Element ifExistsElt = XML.getUniqueChild(deploymentElt, "if-exists", false);
+ int ifExists = KEEP_IF_EXISTS;
+ if (ifExistsElt != null)
+ {
+ String tmp = XML.asString(ifExistsElt);
+ if ("overwrite".equals(tmp))
+ {
+ ifExists = OVERWRITE_IF_EXISTS;
+ }
+ else if ("keep".equals(tmp))
+ {
+ ifExists = KEEP_IF_EXISTS;
+ }
+ }
+
+ //
+ InstanceMetaDataContext metaDataCtx = new InstanceMetaDataContext(metaData, ifExists);
+
+ //
+ metaDataCtxs.add(metaDataCtx);
}
}
}
@@ -257,9 +294,9 @@
}
// Create instances when we have
- if (instanceMDs.size() > 0)
+ if (metaDataCtxs.size() > 0)
{
- createInstances(instanceMDs);
+ createInstances(metaDataCtxs);
}
}
catch (Exception e)
@@ -268,79 +305,135 @@
}
}
- private void createInstances(List instanceMDs) throws Exception
+ private void createInstances(List metaDataCtxs) throws Exception
{
// Create all the instances when possible
- for (int i = 0; i < instanceMDs.size(); i++)
+ for (int i = 0; i < metaDataCtxs.size(); i++)
{
- InstanceMetaData instanceMD = (InstanceMetaData)instanceMDs.get(i);
-
+ InstanceMetaDataContext metaDataCtx = (InstanceMetaDataContext)metaDataCtxs.get(i);
//
- if (factory.getInstanceContainer().getInstance(instanceMD.getId()) == null)
+ try
{
- createInstance(instanceMD);
+ handleInstance(metaDataCtx);
}
- else
+ catch (NoSuchPortletException e)
{
- log.debug("Instance " + instanceMD.getId() + " exist");
+ String msg = "Failed to create instance " + metaDataCtx.metaData.getId() + " of portlet " + e.getPortletId() +
+ " because portlet " + e.getPortletId() + " is not available";
+ log.warn(msg);
+ log.debug(msg, e);
}
+ catch (InvalidPortletIdException e)
+ {
+ String msg = "Failed to create instance " + metaDataCtx.metaData.getId() + " of portlet " + e.getPortletId() +
+ " because portlet id " + e.getPortletId() + " is invalid";
+ log.warn(msg);
+ log.debug(msg, e);
+ }
+ catch (PortletInvokerException e)
+ {
+ String msg = "Failed to create instance " + metaDataCtx.metaData.getId() + " of portlet";
+ log.warn(msg);
+ log.debug(msg, e);
+ }
+ catch (DuplicateInstanceException e)
+ {
+ String msg = "Instance " + metaDataCtx.metaData.getId() + " already exists";
+ log.warn(msg);
+ log.debug(msg, e);
+ }
+ catch (SecurityConfigurationException e)
+ {
+ String msg = "Cannot configure security of instance " + metaDataCtx.metaData.getId();
+ log.warn(msg);
+ log.debug(msg, e);
+ }
}
}
/**
* Requires a transaction to execute, setup in aop configuration.
- *
- * @param instanceMD the instance meta data
*/
- private void createInstance(InstanceMetaData instanceMD)
+ private void handleInstance(InstanceMetaDataContext metaDataCtx) throws PortletInvokerException, SecurityConfigurationException, DuplicateInstanceException
{
- try
+ InstanceMetaData metaData = metaDataCtx.metaData;
+ Instance instance = factory.getInstanceContainer().getInstance(metaData.getId());
+ if (instance == null)
{
- log.debug("Creating portlet instance " + instanceMD.getId());
- instanceMD.create(new InstancesMetaData.BuildContext()
- {
- public InstanceContainer getContainer()
- {
- return factory.getInstanceContainer();
- }
-
- public String resolvePortletRef(String ref)
- {
- return "local." + pwa.getId() + "." + ref;
- }
- });
+ createInstance(metaData);
}
- catch (NoSuchPortletException e)
+ else if (metaDataCtx.ifExists == OVERWRITE_IF_EXISTS)
{
- String msg = "Failed to create instance " + instanceMD.getId() + " of portlet " + e.getPortletId() +
- " because portlet " + e.getPortletId() + " is not available";
- log.warn(msg);
- log.debug(msg, e);
+ log.debug("Reconfiguring instance " + metaData.getId() + " that already exists");
+ configureInstance(instance, metaData);
}
- catch (InvalidPortletIdException e)
+ else
{
- String msg = "Failed to create instance " + instanceMD.getId() + " of portlet " + e.getPortletId() +
- " because portlet id " + e.getPortletId() + " is invalid";
- log.warn(msg);
- log.debug(msg, e);
+ log.debug("Instance " + metaData.getId() + " exists");
}
- catch (PortletInvokerException e)
+ }
+
+ private void configureInstance(Instance instance, InstanceMetaData metaData) throws PortletInvokerException, SecurityConfigurationException
+ {
+ PreferencesMetaData preferencesMetaData = metaData.getPreferences();
+
+ // Configure preferences only if needed
+ if (preferencesMetaData != null && preferencesMetaData.size() > 0)
{
- String msg = "Failed to create instance " + instanceMD.getId() + " of portlet";
- log.warn(msg);
- log.debug(msg, e);
+ PropertyChange[] changes = new PropertyChange[preferencesMetaData.size()];
+ int idx = 0;
+ for (Iterator i = preferencesMetaData.iterator(); i.hasNext();)
+ {
+ PreferenceMetaData preference = (PreferenceMetaData)i.next();
+ Value value = new StringValue(preference.getValues());
+ changes[idx++] = PropertyChange.newUpdate(preference.getName(), value);
+ }
+ instance.setProperties(changes);
}
- catch (DuplicateInstanceException e)
+
+ // Configure security
+ SecurityConstraintsMetaData securityConstraints = metaData.getSecurityConstraints();
+ if (securityConstraints == null)
{
- String msg = "Instance " + instanceMD.getId() + " already exists";
- log.warn(msg);
- log.debug(msg, e);
+ securityConstraints = new SecurityConstraintsMetaData();
+ securityConstraints.getConstraints().add(new RoleSecurityBinding("view", SecurityConstants.UNCHECKED_ROLE_NAME));
}
- catch (SecurityConfigurationException e)
+ AuthorizationDomain authDomain = instance.getContainer().getAuthorizationDomain();
+ DomainConfigurator domainConfigurator = authDomain.getConfigurator();
+ domainConfigurator.setSecurityBindings(instance.getId(), securityConstraints.getConstraints());
+ }
+
+ private void createInstance(InstanceMetaData metaData) throws PortletInvokerException, DuplicateInstanceException, SecurityConfigurationException
+ {
+ log.debug("Creating portlet instance " + metaData.getId());
+
+ // Resolve the portlet ref
+ String resolvedRef = resolvePortletRef(metaData.getPortletRef());
+
+ // Create the instance
+ Instance instance = factory.getInstanceContainer().createInstance(metaData.getId(), resolvedRef);
+
+ // Configure
+ configureInstance(instance, metaData);
+ }
+
+ private String resolvePortletRef(String ref)
+ {
+ return "local." + pwa.getId() + "." + ref;
+ }
+
+ private class InstanceMetaDataContext
+ {
+ /** . */
+ private InstanceMetaData metaData;
+
+ /** . */
+ private int ifExists;
+
+ public InstanceMetaDataContext(InstanceMetaData metaData, int ifExists)
{
- String msg = "Cannot configure security of instance " + instanceMD.getId();
- log.warn(msg);
- log.debug(msg, e);
+ this.metaData = metaData;
+ this.ifExists = ifExists;
}
}
}
Modified: trunk/core/src/main/org/jboss/portal/core/metadata/InstanceMetaData.java
===================================================================
--- trunk/core/src/main/org/jboss/portal/core/metadata/InstanceMetaData.java 2006-11-20 21:08:42 UTC (rev 5691)
+++ trunk/core/src/main/org/jboss/portal/core/metadata/InstanceMetaData.java 2006-11-20 21:47:08 UTC (rev 5692)
@@ -104,7 +104,7 @@
this.portletRef = portletRef;
}
- protected SecurityConstraintsMetaData getSecurityConstraints()
+ public SecurityConstraintsMetaData getSecurityConstraints()
{
return securityConstraints;
}
@@ -273,44 +273,4 @@
preferenceMD.setValues(values);
return preferenceMD;
}
-
- public Instance create(InstancesMetaData.BuildContext buildContext) throws PortletInvokerException, DuplicateInstanceException, SecurityConfigurationException
- {
- // Resolve the portlet ref
- String resolvedRef = buildContext.resolvePortletRef(portletRef);
-
- // Get the instance container
- InstanceContainer instanceContainer = buildContext.getContainer();
-
- // Create the instance
- Instance instance = instanceContainer.createInstance(id, resolvedRef);
-
- // Configure preferences only if needed
- if (preferences != null && preferences.size() > 0)
- {
- PropertyChange[] changes = new PropertyChange[preferences.size()];
- int idx = 0;
- for (Iterator i = preferences.iterator(); i.hasNext();)
- {
- PreferenceMetaData preference = (PreferenceMetaData)i.next();
- Value value = new StringValue(preference.getValues());
- changes[idx++] = PropertyChange.newUpdate(preference.getName(), value);
- }
- instance.setProperties(changes);
- }
-
- // Configure security
- SecurityConstraintsMetaData securityConstraints = getSecurityConstraints();
- if (securityConstraints == null)
- {
- securityConstraints = new SecurityConstraintsMetaData();
- securityConstraints.getConstraints().add(new RoleSecurityBinding("view", SecurityConstants.UNCHECKED_ROLE_NAME));
- }
- AuthorizationDomain authDomain = instanceContainer.getAuthorizationDomain();
- DomainConfigurator domainConfigurator = authDomain.getConfigurator();
- domainConfigurator.setSecurityBindings(id, securityConstraints.getConstraints());
-
- //
- return instance;
- }
}
Modified: trunk/core/src/resources/portal-core-sar/portal-aop.xml
===================================================================
--- trunk/core/src/resources/portal-core-sar/portal-aop.xml 2006-11-20 21:08:42 UTC (rev 5691)
+++ trunk/core/src/resources/portal-core-sar/portal-aop.xml 2006-11-20 21:47:08 UTC (rev 5692)
@@ -89,8 +89,8 @@
<metadata
tag="transaction"
class="org.jboss.portal.core.deployment.jboss.PortletAppDeployment">
- <method name="createInstance">
- <trans-attribute>Required</trans-attribute>
+ <method name="handleInstance">
+ <trans-attribute>RequiresNew</trans-attribute>
</method>
</metadata>
<metadata
Modified: trunk/core/src/resources/portal-samples-war/WEB-INF/portlet-instances.xml
===================================================================
--- trunk/core/src/resources/portal-samples-war/WEB-INF/portlet-instances.xml 2006-11-20 21:08:42 UTC (rev 5691)
+++ trunk/core/src/resources/portal-samples-war/WEB-INF/portlet-instances.xml 2006-11-20 21:47:08 UTC (rev 5692)
@@ -54,6 +54,7 @@
</instance>
</deployment>
<deployment>
+ <if-exists>overwrite</if-exists>
<instance>
<instance-id>NewsPortletInstance2</instance-id>
<portlet-ref>NewsPortlet</portlet-ref>
More information about the jboss-svn-commits
mailing list