[jboss-cvs] JBossAS SVN: r93315 - in trunk/server/src/main/org/jboss: web/deployers and 1 other directory.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Wed Sep 9 11:55:10 EDT 2009
Author: remy.maucherat at jboss.com
Date: 2009-09-09 11:55:10 -0400 (Wed, 09 Sep 2009)
New Revision: 93315
Modified:
trunk/server/src/main/org/jboss/deployment/AnnotationMetaDataDeployer.java
trunk/server/src/main/org/jboss/web/deployers/MergedJBossWebMetaDataDeployer.java
Log:
- Add metadata-complete for the fragments.
- Review the design of the fragment merging after reading the specification again.
Modified: trunk/server/src/main/org/jboss/deployment/AnnotationMetaDataDeployer.java
===================================================================
--- trunk/server/src/main/org/jboss/deployment/AnnotationMetaDataDeployer.java 2009-09-09 13:51:24 UTC (rev 93314)
+++ trunk/server/src/main/org/jboss/deployment/AnnotationMetaDataDeployer.java 2009-09-09 15:55:10 UTC (rev 93315)
@@ -45,6 +45,7 @@
import org.jboss.metadata.ejb.spec.EjbJar3xMetaData;
import org.jboss.metadata.ejb.spec.EjbJarMetaData;
import org.jboss.metadata.web.spec.Web25MetaData;
+import org.jboss.metadata.web.spec.Web30MetaData;
import org.jboss.metadata.web.spec.WebMetaData;
import org.jboss.virtual.VFSUtils;
import org.jboss.virtual.VirtualFile;
@@ -128,15 +129,22 @@
isComplete = true;
}
WebMetaData webMetaData = unit.getAttachment(WebMetaData.class);
- if(webMetaData != null && webMetaData instanceof Web25MetaData)
+ if(webMetaData != null)
{
- isComplete |= ((Web25MetaData)webMetaData).isMetadataComplete();
+ if (webMetaData instanceof Web25MetaData)
+ {
+ isComplete |= ((Web25MetaData)webMetaData).isMetadataComplete();
+ }
+ else if (webMetaData instanceof Web30MetaData)
+ {
+ isComplete |= ((Web30MetaData)webMetaData).isMetadataComplete();
+ }
+ else
+ {
+ // Any web.xml 2.4 or earlier deployment is metadata complete
+ isComplete = true;
+ }
}
- else if(webMetaData != null)
- {
- // Any web.xml 2.4 or earlier deployment is metadata complete
- isComplete = true;
- }
ApplicationClientMetaData clientMetaData = unit.getAttachment(ApplicationClientMetaData.class);
if(clientMetaData != null)
isComplete |= clientMetaData.isMetadataComplete();
Modified: trunk/server/src/main/org/jboss/web/deployers/MergedJBossWebMetaDataDeployer.java
===================================================================
--- trunk/server/src/main/org/jboss/web/deployers/MergedJBossWebMetaDataDeployer.java 2009-09-09 13:51:24 UTC (rev 93314)
+++ trunk/server/src/main/org/jboss/web/deployers/MergedJBossWebMetaDataDeployer.java 2009-09-09 15:55:10 UTC (rev 93315)
@@ -68,6 +68,17 @@
public static final String WEB_ORDER_ATTACHMENT_NAME = "order."+WebMetaData.class.getName();
public static final String WEB_OVERLAYS_ATTACHMENT_NAME = "overlays."+WebMetaData.class.getName();
+ private boolean metaDataCompleteIsDefault = false;
+
+ public boolean isMetaDataCompleteIsDefault()
+ {
+ return metaDataCompleteIsDefault;
+ }
+ public void setMetaDataCompleteIsDefault(boolean metaDataCompleteIsDefault)
+ {
+ this.metaDataCompleteIsDefault = metaDataCompleteIsDefault;
+ }
+
/**
* Create a new MergedJBossWebMetaDataDeployer.
*/
@@ -95,8 +106,25 @@
if(specMetaData == null && metaData == null)
return;
- // FIXME: Check metadata-complete (see AnnotationMetaDataDeployer)
-
+ // Check metadata-complete (see AnnotationMetaDataDeployer)
+ boolean isComplete = this.isMetaDataCompleteIsDefault();
+ if(specMetaData != null)
+ {
+ if (specMetaData instanceof Web25MetaData)
+ {
+ isComplete |= ((Web25MetaData)specMetaData).isMetadataComplete();
+ }
+ else if (specMetaData instanceof Web30MetaData)
+ {
+ isComplete |= ((Web30MetaData)specMetaData).isMetadataComplete();
+ }
+ else
+ {
+ // Any web.xml 2.4 or earlier deployment is metadata complete
+ isComplete = true;
+ }
+ }
+
// Find all fragments that have been processed by deployers, and place them in a map keyed by location
LinkedList<String> order = new LinkedList<String>();
List<WebOrdering> orderings = new ArrayList<WebOrdering>();
@@ -130,92 +158,97 @@
}
}
- String base = unit.getName();
- int pos = base.indexOf(':');
- if (pos > 0)
+ if (!isComplete)
{
- base = base.substring(pos);
- }
+
+ String base = unit.getName();
+ int pos = base.indexOf(':');
+ if (pos > 0)
+ {
+ base = base.substring(pos);
+ }
- Iterator<String> attachementNames = unit.getAttachments().keySet().iterator();
- HashSet<String> jarsWithoutFragmentsSet = (HashSet<String>) jarsSet.clone();
- while (attachementNames.hasNext())
- {
- String location = attachementNames.next();
- Object attachement = unit.getAttachment(location);
- if (attachement != null && attachement instanceof WebFragmentMetaData)
+ Iterator<String> attachementNames = unit.getAttachments().keySet().iterator();
+ HashSet<String> jarsWithoutFragmentsSet = (HashSet<String>) jarsSet.clone();
+ while (attachementNames.hasNext())
{
- pos = location.indexOf(':');
- if (pos > 0)
+ String location = attachementNames.next();
+ Object attachement = unit.getAttachment(location);
+ if (attachement != null && attachement instanceof WebFragmentMetaData)
{
- location = location.substring(pos);
- }
- if (!location.startsWith(base))
- {
- // If there is only one fragment, it will also get mapped as this attachement
- continue;
- }
- String relativeLocation = "/" + location.substring(base.length());
- String jarName = null;
- if (relativeLocation.startsWith("/WEB-INF/lib/"))
- {
- jarName = relativeLocation.substring("/WEB-INF/lib/".length());
- }
- if (jarName == null)
- {
- continue;
- }
- fragmentFound = true;
- WebFragmentMetaData fragmentMetaData = (WebFragmentMetaData) attachement;
- webFragments.put(jarName, fragmentMetaData);
- WebOrdering webOrdering = new WebOrdering();
- webOrdering.setName(fragmentMetaData.getName());
- webOrdering.setJar(jarName);
- jarsWithoutFragmentsSet.remove(jarName);
- if (fragmentMetaData.getOrdering() != null)
- {
- if (fragmentMetaData.getOrdering().getAfter() != null)
+ pos = location.indexOf(':');
+ if (pos > 0)
{
- for (OrderingElementMetaData orderingElementMetaData :
- fragmentMetaData.getOrdering().getAfter().getOrdering())
+ location = location.substring(pos);
+ }
+ if (!location.startsWith(base))
+ {
+ // If there is only one fragment, it will also get mapped as this attachement
+ continue;
+ }
+ String relativeLocation = "/" + location.substring(base.length());
+ String jarName = null;
+ if (relativeLocation.startsWith("/WEB-INF/lib/"))
+ {
+ jarName = relativeLocation.substring("/WEB-INF/lib/".length());
+ }
+ if (jarName == null)
+ {
+ continue;
+ }
+ fragmentFound = true;
+ WebFragmentMetaData fragmentMetaData = (WebFragmentMetaData) attachement;
+ webFragments.put(jarName, fragmentMetaData);
+ WebOrdering webOrdering = new WebOrdering();
+ webOrdering.setName(fragmentMetaData.getName());
+ webOrdering.setJar(jarName);
+ jarsWithoutFragmentsSet.remove(jarName);
+ if (fragmentMetaData.getOrdering() != null)
+ {
+ if (fragmentMetaData.getOrdering().getAfter() != null)
{
- if (orderingElementMetaData.isOthers())
+ for (OrderingElementMetaData orderingElementMetaData :
+ fragmentMetaData.getOrdering().getAfter().getOrdering())
{
- webOrdering.setAfterOthers(true);
+ if (orderingElementMetaData.isOthers())
+ {
+ webOrdering.setAfterOthers(true);
+ }
+ else
+ {
+ webOrdering.addAfter(orderingElementMetaData.getName());
+ }
}
- else
- {
- webOrdering.addAfter(orderingElementMetaData.getName());
- }
}
- }
- if (fragmentMetaData.getOrdering().getBefore() != null)
- {
- for (OrderingElementMetaData orderingElementMetaData :
- fragmentMetaData.getOrdering().getBefore().getOrdering())
+ if (fragmentMetaData.getOrdering().getBefore() != null)
{
- if (orderingElementMetaData.isOthers())
+ for (OrderingElementMetaData orderingElementMetaData :
+ fragmentMetaData.getOrdering().getBefore().getOrdering())
{
- webOrdering.setBeforeOthers(true);
+ if (orderingElementMetaData.isOthers())
+ {
+ webOrdering.setBeforeOthers(true);
+ }
+ else
+ {
+ webOrdering.addBefore(orderingElementMetaData.getName());
+ }
}
- else
- {
- webOrdering.addBefore(orderingElementMetaData.getName());
- }
}
}
+ orderings.add(webOrdering);
}
- orderings.add(webOrdering);
}
+ // If there is no fragment, still consider it for ordering as a
+ // fragment specifying no name and no order
+ for (String jarName : jarsWithoutFragmentsSet)
+ {
+ WebOrdering ordering = new WebOrdering();
+ ordering.setJar(jarName);
+ orderings.add(ordering);
+ }
+
}
- // If there is no fragment, still consider it for ordering as a
- // fragment specifying no name and no order
- for (String jarName : jarsWithoutFragmentsSet)
- {
- WebOrdering ordering = new WebOrdering();
- ordering.setJar(jarName);
- orderings.add(ordering);
- }
}
if (!fragmentFound)
@@ -226,7 +259,7 @@
// Generate web fragments parsing order
AbsoluteOrderingMetaData absoluteOrderingMetaData = null;
- if (specMetaData instanceof Web30MetaData)
+ if (!isComplete && specMetaData instanceof Web30MetaData)
{
absoluteOrderingMetaData = ((Web30MetaData) specMetaData).getAbsoluteOrdering();
}
@@ -302,18 +335,49 @@
}
}
}
-
- // FIXME: Find classes which extend, implement, or are annotated by HandlesTypes
-
+ // TODO: Find classes which extend, implement, or are annotated by HandlesTypes
+
// The fragments and corresponding annotations will need to be merged in order
- // 1: Merge specMetaData into mergedMetaData
- // 2: For each JAR in the order:
- // 2.1: Merge the fragment metadata into specMetaData, according to the Servlet 3.0 overriding rules
- // 2.1: Merge the annotation metadata into specMetaData, according to the Servlet 3.0 overriding rules
- // 3: Merge the Servlet annotations for all declared Servlets ?
+ // 1: For each JAR in the order: Merge the fragment metadata into specMetaData
+ // 2: For each JAR in the order: Merge the annotation metadata into specMetaData
+ // 3: Merge the Servlet annotations for all declared Servlets (FIXME: decide if we do it) (FIXME: processed in Catalina right now)
// 4: Override with metaData (JBossWebMetaData)
- // FIXME: Implement
+ // Step 1
+ // TODO: remove comments after implementing in meta data
+ WebMetaData finalSpecMetaData = null;
+ if (!isComplete)
+ {
+ finalSpecMetaData = new WebMetaData();
+ WebFragmentMetaData mergedFragmentMetaData = new WebFragmentMetaData();
+ for (String jar : order)
+ {
+ WebFragmentMetaData webFragmentMetaData = webFragments.get(jar);
+ if (webFragmentMetaData != null)
+ {
+ // Merge fragment meta data
+ try
+ {
+ //mergedFragmentMetaData.augment(webFragmentMetaData, specMetaData);
+ }
+ catch (Exception e)
+ {
+ DeploymentException.rethrowAsDeploymentException("Exception processing fragment for JAR: " + jar, e);
+ }
+ }
+ }
+ //finalSpecMetaData.augment(specMetaData);
+ //finalSpecMetaData.augment(mergedFragmentMetaData);
+ }
+ else
+ {
+ finalSpecMetaData = specMetaData;
+ }
+ //specMetaData = finalSpecMetaData;
+
+ // Step 2
+ // TODO: REDO (see above): merge annotation meta data corresponding to the JAR here,
+ // according to the order (servlets, filters, listeners and init params)
// Check for an annotated view
String key = AnnotationMetaDataDeployer.WEB_ANNOTATED_ATTACHMENT_NAME;
Web25MetaData annotatedMetaData = unit.getAttachment(key, Web25MetaData.class);
@@ -330,6 +394,10 @@
specMetaData = annotatedMetaData;
}
+ // Step 3
+ // TODO maybe
+
+ // Step 4
// Create a merged view
JBossWebMetaData mergedMetaData = new JBossWebMetaData();
mergedMetaData.merge(metaData, specMetaData);
More information about the jboss-cvs-commits
mailing list