[jboss-cvs] JBossAS SVN: r62558 - trunk/server/src/main/org/jboss/deployment/security.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Wed Apr 25 11:10:11 EDT 2007
Author: anil.saldhana at jboss.com
Date: 2007-04-25 11:10:11 -0400 (Wed, 25 Apr 2007)
New Revision: 62558
Added:
trunk/server/src/main/org/jboss/deployment/security/PolicyConfigurationFacade.java
trunk/server/src/main/org/jboss/deployment/security/PolicyConfigurationFacadeMBean.java
Modified:
trunk/server/src/main/org/jboss/deployment/security/JaccPolicy.java
trunk/server/src/main/org/jboss/deployment/security/JaccPolicyMBean.java
trunk/server/src/main/org/jboss/deployment/security/JaccPolicyUtil.java
trunk/server/src/main/org/jboss/deployment/security/SecurityDeployer.java
Log:
JBAS-4348: Jacc related work moved to security deployer
Modified: trunk/server/src/main/org/jboss/deployment/security/JaccPolicy.java
===================================================================
--- trunk/server/src/main/org/jboss/deployment/security/JaccPolicy.java 2007-04-25 15:08:18 UTC (rev 62557)
+++ trunk/server/src/main/org/jboss/deployment/security/JaccPolicy.java 2007-04-25 15:10:11 UTC (rev 62558)
@@ -21,21 +21,12 @@
*/
package org.jboss.deployment.security;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
import javax.security.jacc.PolicyConfiguration;
import javax.security.jacc.PolicyConfigurationFactory;
import javax.security.jacc.PolicyContextException;
-import org.jboss.deployers.spi.deployer.DeploymentUnit;
-import org.jboss.ejb.EJBPermissionMapping;
import org.jboss.logging.Logger;
-import org.jboss.metadata.BeanMetaData;
import org.jboss.metadata.MetaData;
-import org.jboss.metadata.WebMetaData;
-import org.jboss.web.WebPermissionMapping;
//$Id$
@@ -51,30 +42,32 @@
private boolean trace = log.isTraceEnabled();
private PolicyConfiguration parentPC = null;
- private String contextID = null;
+ private String contextID = null;
+
+ private MetaData metaData;
- /** List of contextIds for all sub deployments that are jacc capable **/
- private List<String> subDeployments = new ArrayList<String>();
+ private Boolean standaloneDeployment = Boolean.FALSE;
+
- public static String BASE_OBJECT_NAME = "jboss:service=jacc,id=";
-
- /** Original list of jacc sub deployments **/
- private int jaccDeploymentsCount = 0;
-
/**
* Ctr
* @param id Jacc Context Id for the top level deployment
* @throws IllegalArgumentException if id passed is null
*/
- public JaccPolicy(String id, DeploymentUnit unit, Collection<String> ignoreSuffix)
+ public JaccPolicy(String id)
{
if(id == null)
throw new IllegalArgumentException("Jacc Context Id passed is null");
- this.contextID = id;
- subDeployments.addAll(JaccPolicyUtil.getJaccDeployments(unit, ignoreSuffix));
- jaccDeploymentsCount = subDeployments.size();
+ this.contextID = id;
}
+ public JaccPolicy(String id, MetaData metaData, Boolean standaloneDeployment)
+ {
+ this(id);
+ this.metaData = metaData;
+ this.standaloneDeployment = standaloneDeployment;
+ }
+
/**
* @see JaccPolicyMBean#create()
*/
@@ -89,24 +82,42 @@
{
throw new RuntimeException("Cannot initialize policy configuration:",e);
}
+ if(this.standaloneDeployment == Boolean.TRUE)
+ {
+ try
+ {
+ JaccPolicyUtil.createPermissions(parentPC, metaData);
+ }
+ catch (PolicyContextException e)
+ {
+
+ throw new RuntimeException("Cannot create permissions:",e);
+ }
+ }
}
/**
* @see JaccPolicyMBean#destroy()
*/
public void destroy()
- {
+ {
+ parentPC= null;
}
/**
* @see JaccPolicyMBean#start()
*/
public void start()
- {
- /**
- * We cannot start the policy configuration until all the subdeployments
- * have linked
- */
+ {
+ //All the sub deployments have started
+ try
+ {
+ parentPC.commit();
+ }
+ catch (PolicyContextException e)
+ {
+ log.error("Cannot commit Parent Policy Configuration:",e);
+ }
}
/**
@@ -114,76 +125,24 @@
*/
public void stop()
{
- }
-
- /**
- * @see JaccPolicyMBean#createPermissions(MetaData, String, PolicyConfiguration)
- */
- public PolicyConfiguration createPermissions(MetaData metadata, String jaccID,
- PolicyConfiguration pc)
- throws PolicyContextException
- {
- if(metadata instanceof WebMetaData)
+ try
{
- WebMetaData wmd = (WebMetaData)metadata;
- if(pc == null)
- pc = createPolicyConfiguration(jaccID, true);
- WebPermissionMapping.createPermissions(wmd, pc);
+ this.parentPC.delete();
}
- else
- if(metadata instanceof BeanMetaData)
- {
- BeanMetaData bmd = (BeanMetaData)metadata;
- if(pc == null)
- pc = createPolicyConfiguration(jaccID, true);
- EJBPermissionMapping.createPermissions(bmd, pc);
- }
- else
- throw new IllegalStateException("Unknown metadata");
- return pc;
- }
-
+ catch (PolicyContextException e)
+ {
+ throw new RuntimeException(e);
+ }
+ }
+
/**
* @see JaccPolicyMBean#link(PolicyConfiguration)
*/
public void link(PolicyConfiguration pc) throws PolicyContextException
- {
- if(jaccDeploymentsCount == 0)
- return; //There is just one deployment and the component deployment will commit
-
+ {
if(trace)
log.trace("Linking " + pc + " to parent pc=" + parentPC);
- parentPC.linkConfiguration(pc);
- this.subDeployments.remove(pc.getContextID());
- if(this.subDeployments.size() == 0)
- {
- parentPC.commit(); //Ready to be inService
- }
- }
-
- /**
- * Create a Policy Configuration from the factory
- * @param jaccid Jacc Context ID
- * @param removeAllPerms Whether the policy configuration that is obtained
- * needs to be a fresh one (such that old permissions are removed)
- * @return policy configuration
- * @throws RuntimeException initialization of PC fails
- */
- private PolicyConfiguration createPolicyConfiguration(String jaccid, boolean removeAllPerms)
- {
- if(jaccid == null)
- throw new IllegalArgumentException("Jacc id is null");
- PolicyConfiguration pc = null;
- try
- {
- PolicyConfigurationFactory pcf = PolicyConfigurationFactory.getPolicyConfigurationFactory();
- pc = pcf.getPolicyConfiguration(jaccid, removeAllPerms);
- }
- catch(Exception e)
- {
- throw new RuntimeException("Cannot initialize policy configuration:",e);
- }
- return pc;
- }
+ parentPC.linkConfiguration(pc);
+ }
}
Modified: trunk/server/src/main/org/jboss/deployment/security/JaccPolicyMBean.java
===================================================================
--- trunk/server/src/main/org/jboss/deployment/security/JaccPolicyMBean.java 2007-04-25 15:08:18 UTC (rev 62557)
+++ trunk/server/src/main/org/jboss/deployment/security/JaccPolicyMBean.java 2007-04-25 15:10:11 UTC (rev 62558)
@@ -24,8 +24,6 @@
import javax.security.jacc.PolicyConfiguration;
import javax.security.jacc.PolicyContextException;
-import org.jboss.metadata.MetaData;
-
//$Id$
/**
@@ -39,21 +37,9 @@
public void create();
public void destroy();
public void start();
- public void stop();
+ public void stop();
/**
- * Create the permissions from the metadata passed
- * @param metadata WebMetaData,BeanMetaData etc
- * @param jaccID Jacc Context ID
- * @param pc Prebuilt policy configuration or pass null to create a fresh one
- * @return Policy Configuration that is populated with the permissions
- * @throws PolicyContextException
- * @throws RuntimeException if the metadata is unknown
- */
- public PolicyConfiguration createPermissions(MetaData metadata, String jaccID,
- PolicyConfiguration pc) throws PolicyContextException;
-
- /**
* Link the policy Configuration with the top-level policy configuration
* @param pc
* @throws PolicyContextException
Modified: trunk/server/src/main/org/jboss/deployment/security/JaccPolicyUtil.java
===================================================================
--- trunk/server/src/main/org/jboss/deployment/security/JaccPolicyUtil.java 2007-04-25 15:08:18 UTC (rev 62557)
+++ trunk/server/src/main/org/jboss/deployment/security/JaccPolicyUtil.java 2007-04-25 15:10:11 UTC (rev 62558)
@@ -23,13 +23,21 @@
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Iterator;
import java.util.List;
import java.util.Set;
+import javax.security.jacc.PolicyConfiguration;
+import javax.security.jacc.PolicyContextException;
+
import org.jboss.deployers.spi.deployer.DeploymentUnit;
import org.jboss.deployers.spi.structure.DeploymentContext;
-import org.jboss.system.metadata.ServiceAttributeMetaData;
-import org.jboss.system.metadata.ServiceDependencyValueMetaData;
+import org.jboss.ejb.EJBPermissionMapping;
+import org.jboss.metadata.ApplicationMetaData;
+import org.jboss.metadata.BeanMetaData;
+import org.jboss.metadata.MetaData;
+import org.jboss.metadata.WebMetaData;
+import org.jboss.web.WebPermissionMapping;
//$Id$
@@ -42,17 +50,6 @@
*/
public class JaccPolicyUtil
{
- /**
- * Given the current deployment, get the object name of the jaccpolicy
- * that is driving the top-level deployment
- * @param unit
- * @return
- */
- public static String getJaccPolicyServiceName(DeploymentUnit unit)
- {
- DeploymentUnit du = getTopLevelDeployment(unit);
- return JaccPolicy.BASE_OBJECT_NAME + du.getSimpleName();
- }
/**
* Given a deployment unit, get all the deployments underneath
@@ -89,30 +86,10 @@
list.add(childName);
}
return list;
- }
+ }
- /**
- * Get the service attribute metadata that will add dependence on the JaccPolicy
- * @param unit
- * @return
- */
- public static void getServiceAttributeMetaData(DeploymentUnit unit,
- List<ServiceAttributeMetaData> attrs)
- {
- if( unit.getAttachment("jboss.jaccpolicy") != null )
- {
- ServiceAttributeMetaData jaccAttr = new ServiceAttributeMetaData();
- jaccAttr.setName("JaccPolicy");
- ServiceDependencyValueMetaData jaccDepends = new ServiceDependencyValueMetaData();
- jaccDepends.setDependency(getJaccPolicyServiceName(unit));
- jaccDepends.setProxyType("attribute");
- jaccAttr.setValue(jaccDepends);
- attrs.add(jaccAttr);
- }
- }
-
//TODO:Replace with ejb3 deployment logic
- private static boolean isEJBDeployment(DeploymentUnit du)
+ public static boolean isEJBDeployment(DeploymentUnit du)
{
boolean ejbxml = du.getMetaDataFile("ejb-jar.xml") != null;
boolean jbossxml = du.getMetaDataFile("jboss.xml") != null;
@@ -120,20 +97,41 @@
}
/**
- * Given a deployment unit, return the top-level deployment unit
- * @param unit
- * @return
+ * Create the JACC Permissions and add to the policy configuration passed
+ * @param policyConfiguration
+ * @param metadata
+ * @throws PolicyContextException
*/
- private static DeploymentUnit getTopLevelDeployment(DeploymentUnit unit)
+ public static void createPermissions(PolicyConfiguration policyConfiguration, MetaData metadata)
+ throws PolicyContextException
{
- DeploymentUnit tempDU = unit;
- DeploymentUnit toplevel = tempDU.getParent();
-
- if(toplevel != null)
+ if(metadata == null)
+ throw new IllegalArgumentException("Meta Data is null");
+ if(policyConfiguration == null)
+ throw new IllegalArgumentException("Policy Configuration is null");
+
+ if(metadata instanceof WebMetaData)
{
- tempDU = toplevel;
- toplevel = tempDU.getParent();
+ WebMetaData wmd = (WebMetaData)metadata;
+ WebPermissionMapping.createPermissions(wmd, policyConfiguration);
}
- return tempDU;
- }
+ else
+ if(metadata instanceof BeanMetaData)
+ {
+ BeanMetaData bmd = (BeanMetaData)metadata;
+ EJBPermissionMapping.createPermissions(bmd, policyConfiguration);
+ }
+ else
+ if(metadata instanceof ApplicationMetaData)
+ {
+ Iterator beans = ((ApplicationMetaData)metadata).getEnterpriseBeans();
+ while(beans.hasNext())
+ {
+ BeanMetaData bmd = (BeanMetaData)beans.next();
+ EJBPermissionMapping.createPermissions(bmd, policyConfiguration);
+ }
+ }
+ else
+ throw new IllegalStateException("Unknown metadata");
+ }
}
Added: trunk/server/src/main/org/jboss/deployment/security/PolicyConfigurationFacade.java
===================================================================
--- trunk/server/src/main/org/jboss/deployment/security/PolicyConfigurationFacade.java (rev 0)
+++ trunk/server/src/main/org/jboss/deployment/security/PolicyConfigurationFacade.java 2007-04-25 15:10:11 UTC (rev 62558)
@@ -0,0 +1,129 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2007, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.deployment.security;
+
+import java.security.Policy;
+
+import javax.security.jacc.PolicyConfiguration;
+import javax.security.jacc.PolicyConfigurationFactory;
+import javax.security.jacc.PolicyContextException;
+
+import org.jboss.logging.Logger;
+import org.jboss.metadata.MetaData;
+
+//$Id$
+
+/**
+ * A facade for the JACC Policy Configuration
+ * @author Anil.Saldhana at redhat.com
+ * @since Apr 23, 2007
+ * @version $Revision$
+ */
+public class PolicyConfigurationFacade implements PolicyConfigurationFacadeMBean
+{
+ private static Logger log = Logger.getLogger(PolicyConfigurationFacade.class);
+
+ private String jaccContextId;
+ private PolicyConfiguration policyConfiguration;
+ private JaccPolicyMBean jaccPolicyMBean;
+ private MetaData metaData;
+
+
+ public PolicyConfigurationFacade(String id, MetaData md)
+ {
+ if(id == null)
+ throw new IllegalArgumentException("Context ID is null");
+ if(md == null)
+ throw new IllegalArgumentException("Meta Data is null");
+ this.jaccContextId = id;
+ this.metaData = md;
+ }
+
+ public void create()
+ {
+ try
+ {
+ log.error("PolicyConfigurationFacade create");
+ PolicyConfigurationFactory pcf = PolicyConfigurationFactory.getPolicyConfigurationFactory();
+ policyConfiguration = pcf.getPolicyConfiguration(this.jaccContextId, true);
+
+ JaccPolicyUtil.createPermissions(policyConfiguration, metaData);
+ }
+ catch (ClassNotFoundException e)
+ {
+ new RuntimeException(e);
+ }
+ catch (PolicyContextException e)
+ {
+ new RuntimeException(e);
+ }
+
+ }
+
+ public void destroy()
+ {
+ this.policyConfiguration = null;
+ }
+
+ public void start()
+ {
+ try
+ {
+ log.error("PolicyConfigurationFacade start:metadata="+metaData);
+
+ if(jaccPolicyMBean != null)
+ {
+ jaccPolicyMBean.link(policyConfiguration);
+ }
+ policyConfiguration.commit();
+ // Allow the policy to incorporate the policy configs
+ Policy.getPolicy().refresh();
+ }
+ catch (PolicyContextException e)
+ {
+ new RuntimeException(e);
+ }
+ }
+
+ public void stop()
+ {
+ log.error("PolicyConfigurationFacade stop");
+ try
+ {
+ this.policyConfiguration.delete();
+ }
+ catch (PolicyContextException e)
+ {
+ new RuntimeException(e);
+ }
+ }
+
+ public JaccPolicyMBean getJaccPolicyMBean()
+ {
+ return this.jaccPolicyMBean;
+ }
+
+ public void setJaccPolicyMBean(JaccPolicyMBean jaccPolicy)
+ {
+ this.jaccPolicyMBean = jaccPolicy;
+ }
+}
Added: trunk/server/src/main/org/jboss/deployment/security/PolicyConfigurationFacadeMBean.java
===================================================================
--- trunk/server/src/main/org/jboss/deployment/security/PolicyConfigurationFacadeMBean.java (rev 0)
+++ trunk/server/src/main/org/jboss/deployment/security/PolicyConfigurationFacadeMBean.java 2007-04-25 15:10:11 UTC (rev 62558)
@@ -0,0 +1,41 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2007, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.deployment.security;
+
+//$Id$
+
+/**
+ * MBean interface for the Policy Configuration facade service bean
+ * @author Anil.Saldhana at redhat.com
+ * @since Apr 23, 2007
+ * @version $Revision$
+ */
+public interface PolicyConfigurationFacadeMBean
+{
+ public void create();
+ public void destroy();
+ public void start();
+ public void stop();
+
+ public JaccPolicyMBean getJaccPolicyMBean();
+ public void setJaccPolicyMBean(JaccPolicyMBean jaccPolicy);
+}
Modified: trunk/server/src/main/org/jboss/deployment/security/SecurityDeployer.java
===================================================================
--- trunk/server/src/main/org/jboss/deployment/security/SecurityDeployer.java 2007-04-25 15:08:18 UTC (rev 62557)
+++ trunk/server/src/main/org/jboss/deployment/security/SecurityDeployer.java 2007-04-25 15:10:11 UTC (rev 62558)
@@ -22,16 +22,26 @@
package org.jboss.deployment.security;
import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashSet;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
-import javax.management.ObjectName;
+import javax.management.ObjectName;
-import org.jboss.deployers.plugins.deployer.AbstractSimpleDeployer;
+import org.jboss.dependency.spi.ControllerState;
+import org.jboss.deployers.plugins.deployer.AbstractSimpleDeployer;
import org.jboss.deployers.spi.DeploymentException;
-import org.jboss.deployers.spi.deployer.DeploymentUnit;
+import org.jboss.deployers.spi.deployer.DeploymentUnit;
+import org.jboss.deployers.spi.structure.DeploymentContext;
+import org.jboss.metadata.ApplicationMetaData;
+import org.jboss.metadata.BeanMetaData;
+import org.jboss.metadata.MetaData;
+import org.jboss.metadata.WebMetaData;
+import org.jboss.system.metadata.ServiceAttributeMetaData;
import org.jboss.system.metadata.ServiceConstructorMetaData;
+import org.jboss.system.metadata.ServiceDependencyMetaData;
import org.jboss.system.metadata.ServiceDeployment;
+import org.jboss.system.metadata.ServiceInjectionValueMetaData;
import org.jboss.system.metadata.ServiceMetaData;
//$Id$
@@ -47,6 +57,8 @@
{
private HashSet<String> ignoreSuffixes = null;
+ String BASE_OBJECT_NAME = "jboss:service=jacc,id=";
+
public SecurityDeployer()
{
this.setRelativeOrder(COMPONENT_DEPLOYER - 1);
@@ -55,17 +67,18 @@
public void setIgnoreSuffixes(HashSet<String> suffixSet)
{
this.ignoreSuffixes = suffixSet;
- }
-
+ }
+
@Override
- public void deploy(DeploymentUnit unit ) throws DeploymentException
+ public void deploy(DeploymentUnit unit) throws DeploymentException
{
- //Consider only the top level deployments for processing
+
if(unit.getParent() != null)
- return;
+ return; //deal with top level deployments only
//Ignore some of the extensions
- String contextId = unit.getSimpleName();
+ String contextId = unit.getSimpleName();
+
for(String suffix : ignoreSuffixes)
{
String dotSuffix = "." + suffix;
@@ -75,36 +88,169 @@
return;
}
}
+
+ //Need to get an estimate of all the deployments underneath that are jacc capable
+ List<String> jaccDeployments = JaccPolicyUtil.getJaccDeployments(unit, ignoreSuffixes);
+
+ if(jaccDeployments.size() == 0)
+ {
+ boolean ejbJar = (contextId.endsWith("jar") && JaccPolicyUtil.isEJBDeployment(unit));
+ if((contextId.endsWith("war")) || ejbJar)
+ {
+ createTopLevelServiceBeanWithMetaData(contextId,unit);
+ return;
+ }
+ return; //No need to process if there are no jacc deployments
+ }
+
+ //Create a top level Jacc Policy Bean
+ if(getMetaData(unit) != null)
+ this.createTopLevelServiceBeanWithMetaData(contextId, unit);
+ else
+ this.createTopLevelServiceBean(contextId, unit);
+
+ //Now for each of the deployments underneath, create a policy configuration facade
+ for(String str:jaccDeployments)
+ {
+ //get the deployment unit for str
+ DeploymentUnit childDU = getChildDeployment(unit,str);
+
+ MetaData metadata = getMetaData(childDU);
+ if(metadata == null)
+ {
+ log.debug("meta data is null for child deployment:" + childDU.getSimpleName()
+ + "; No Jacc policy created.");
+ continue;
+ }
+
+ ServiceMetaData subjaccPolicy = new ServiceMetaData();
+ subjaccPolicy.setCode(PolicyConfigurationFacade.class.getName());
+ try
+ {
+ subjaccPolicy.setObjectName(new ObjectName(BASE_OBJECT_NAME + str ));
+ }
+ catch (Exception e)
+ {
+ throw new RuntimeException(e);
+ }
+ //Provide a constructor for the service bean
+ ServiceConstructorMetaData constructor = new ServiceConstructorMetaData();
+ constructor.setSignature(new String[] { String.class.getName(), MetaData.class.getName()});
+ constructor.setParameters(new Object[] {str, getMetaData(childDU)});
+ subjaccPolicy.setConstructor(constructor);
+
+ ArrayList<ServiceMetaData> services = new ArrayList<ServiceMetaData>();
+ services.add(subjaccPolicy);
+ childDU.addAttachment("jboss.jacc", subjaccPolicy, ServiceMetaData.class );
+
+ //Add a dependence into the top level jacc policy bean
+ ServiceMetaData parentJacc = (ServiceMetaData)childDU.getParent().getAttachment("jboss.jacc");
+ if(parentJacc == null)
+ throw new IllegalStateException("Parent JACC Policy is null");
+
+ List<ServiceDependencyMetaData> dependencies = new ArrayList<ServiceDependencyMetaData>();
+ ServiceDependencyMetaData sdmd = new ServiceDependencyMetaData();
+ sdmd.setIDependOnObjectName(subjaccPolicy.getObjectName());
+ dependencies.add(sdmd);
+ parentJacc.setDependencies(dependencies);
+
+ //Inject the top level jacc policy bean
+ List<ServiceAttributeMetaData> attributes = new ArrayList<ServiceAttributeMetaData>();
+ ServiceAttributeMetaData attribute = new ServiceAttributeMetaData();
+ attribute.setName("JaccPolicyMBean");
+ String parentObjectName = parentJacc.getObjectName().getCanonicalName();
+ ServiceInjectionValueMetaData sivmd = new ServiceInjectionValueMetaData(parentObjectName);
+ sivmd.setDependentState(ControllerState.CONFIGURED);
+ attribute.setValue(sivmd);
+ attributes.add(attribute);
+ attributes.addAll(subjaccPolicy.getAttributes());
+ subjaccPolicy.setAttributes(attributes);
+ }
+ }
+
+ @Override
+ public void undeploy(DeploymentUnit unit )
+ {
+ unit.removeAttachment("jboss.jaccpolicy", ServiceDeployment.class);
+ List<String> jaccDeployments = JaccPolicyUtil.getJaccDeployments(unit, ignoreSuffixes);
+ for(String deployment: jaccDeployments)
+ {
+ DeploymentUnit childDU = this.getChildDeployment(unit, deployment);
+ if(childDU != null)
+ childDU.removeAttachment("jboss.jaccpolicy", ServiceDeployment.class);
+ }
+ }
+
+
+ //Private Methods
+
+ private DeploymentUnit getChildDeployment(DeploymentUnit parent, String id)
+ {
+ DeploymentContext dc = parent.getDeploymentContext();
+ Set<DeploymentContext> childSet = dc.getChildren();
+ for(DeploymentContext childDC: childSet)
+ {
+ DeploymentUnit du = childDC.getDeploymentUnit();
+ if(id.equals(du.getSimpleName()))
+ return du;
+ }
+
+ return null;
+ }
+
+ private void createTopLevelServiceBeanWithMetaData(String contextId, DeploymentUnit unit)
+ {
+ //Provide a constructor for the service bean
+ ServiceConstructorMetaData constructor = new ServiceConstructorMetaData();
+ constructor.setSignature(new String[] { String.class.getName(),
+ MetaData.class.getName(),Boolean.class.getName()});
+ constructor.setParameters(new Object[] {contextId,getMetaData(unit), Boolean.TRUE});
+ createJaccPolicyBean(constructor, unit);
+ }
+
+ private void createTopLevelServiceBean(String contextId, DeploymentUnit unit)
+ {
+ //Provide a constructor for the service bean
+ ServiceConstructorMetaData constructor = new ServiceConstructorMetaData();
+ constructor.setSignature(new String[] { String.class.getName()});
+ constructor.setParameters(new Object[] {contextId});
+
+ createJaccPolicyBean(constructor, unit);
+ }
+
+ private void createJaccPolicyBean(ServiceConstructorMetaData constructor, DeploymentUnit unit)
+ {
//Create a Service Bean for the JACC Policy
ServiceMetaData jaccPolicy = new ServiceMetaData();
jaccPolicy.setCode(JaccPolicy.class.getName());
try
{
- jaccPolicy.setObjectName(new ObjectName(JaccPolicy.BASE_OBJECT_NAME + contextId));
+ jaccPolicy.setObjectName(new ObjectName(BASE_OBJECT_NAME + unit.getSimpleName()));
}
catch (Exception e)
{
- }
-
- //Provide a constructor for the service bean
- ServiceConstructorMetaData constructor = new ServiceConstructorMetaData();
- constructor.setSignature(new String[] { String.class.getName(),
- DeploymentUnit.class.getName(), Collection.class.getName()});
- constructor.setParameters(new Object[] {contextId, unit, ignoreSuffixes});
+ throw new RuntimeException(e);
+ }
+ //Provide a constructor for the service bean
jaccPolicy.setConstructor(constructor);
ArrayList<ServiceMetaData> services = new ArrayList<ServiceMetaData>();
services.add(jaccPolicy);
- //Now add this service bean to the unit
- ServiceDeployment sd = new ServiceDeployment();
- sd.setServices(services);
- unit.addAttachment("jboss.jaccpolicy", sd, ServiceDeployment.class);
+ unit.addAttachment("jboss.jacc", jaccPolicy, ServiceMetaData.class);
}
-
- @Override
- public void undeploy(DeploymentUnit unit )
+
+ private MetaData getMetaData(DeploymentUnit du)
{
- unit.removeAttachment("jboss.jaccpolicy", ServiceDeployment.class);
+ MetaData md = null;
+ //Look for WebMetaData
+ md = (MetaData) du.getAttachment(WebMetaData.class.getName());
+ //Look for ApplicationMetaData
+ if(md == null)
+ md = (MetaData) du.getAttachment(ApplicationMetaData.class.getName());
+ //Look for BeanMetaData??
+ if(md == null)
+ md = (MetaData)du.getAttachment(BeanMetaData.class.getName());
+ return md;
}
}
More information about the jboss-cvs-commits
mailing list