@Override
public void deploy(final DeploymentPhaseContext phaseContext) throws DeploymentUnitProcessingException {
final DeploymentUnit deploymentUnit = phaseContext.getDeploymentUnit();
final ResourceRoot deploymentRoot = deploymentUnit.getAttachment(Attachments.DEPLOYMENT_ROOT);
final ModuleSpecification moduleSpecification = deploymentUnit.getAttachment(Attachments.MODULE_SPECIFICATION);
final ModuleLoader moduleLoader = deploymentUnit.getAttachment(Attachments.SERVICE_MODULE_LOADER);
final ModuleIdentifier moduleIdentifier = deploymentUnit.getAttachment(Attachments.MODULE_IDENTIFIER);
// non-spec behavior: always process permissions declared in META-INF/jboss-permissions.xml.
VirtualFile jbossPermissionsXML = deploymentRoot.getRoot().getChild(JBOSS_PERMISSIONS_XML);
if (jbossPermissionsXML.exists() && jbossPermissionsXML.isFile()) {
List<PermissionFactory> factories = this.parsePermissions(jbossPermissionsXML, moduleLoader, moduleIdentifier);
for (PermissionFactory factory : factories) {
moduleSpecification.addPermissionFactory(factory);
}
// add the permissions specified in the minimum set.
for (PermissionFactory factory : this.minPermissions) {
moduleSpecification.addPermissionFactory(factory);
}
}
// spec compliant behavior: only top-level deployments are processed (sub-deployments inherit permissions
// defined at the .ear level, if any).
else {
if (deploymentUnit.getParent() == null) {
VirtualFile permissionsXML = deploymentRoot.getRoot().getChild(PERMISSIONS_XML);
if (permissionsXML.exists() && permissionsXML.isFile()) {
// parse the permissions and attach them in the deployment unit.
List<PermissionFactory> factories = this.parsePermissions(permissionsXML, moduleLoader, moduleIdentifier);
for (PermissionFactory factory : factories) {
moduleSpecification.addPermissionFactory(factory);
}
}
// add the minimum set of permissions to top-level deployments - sub-deployments will inherit them automatically.
for (PermissionFactory factory : this.minPermissions) {
moduleSpecification.addPermissionFactory(factory);
}
} else {
ModuleSpecification parentSpecification = deploymentUnit.getParent().getAttachment(Attachments.MODULE_SPECIFICATION);
List<PermissionFactory> factories = parentSpecification.getPermissionFactories();
if (factories != null && factories.size() > 0) {
// parent deployment contains permissions: subdeployments inherit those permissions.
for (PermissionFactory factory : factories) {
moduleSpecification.addPermissionFactory(factory);
}