[jboss-cvs] JBossAS SVN: r72297 - trunk/server/src/main/org/jboss/deployment.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Wed Apr 16 12:21:54 EDT 2008
Author: scott.stark at jboss.org
Date: 2008-04-16 12:21:54 -0400 (Wed, 16 Apr 2008)
New Revision: 72297
Modified:
trunk/server/src/main/org/jboss/deployment/MappedReferenceMetaDataResolverDeployer.java
Log:
Synch the current endpoint map updates
Modified: trunk/server/src/main/org/jboss/deployment/MappedReferenceMetaDataResolverDeployer.java
===================================================================
--- trunk/server/src/main/org/jboss/deployment/MappedReferenceMetaDataResolverDeployer.java 2008-04-16 16:20:01 UTC (rev 72296)
+++ trunk/server/src/main/org/jboss/deployment/MappedReferenceMetaDataResolverDeployer.java 2008-04-16 16:21:54 UTC (rev 72297)
@@ -26,21 +26,30 @@
import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import org.jboss.deployers.spi.DeploymentException;
import org.jboss.deployers.spi.deployer.DeploymentStages;
import org.jboss.deployers.spi.deployer.helpers.AbstractRealDeployer;
import org.jboss.deployers.structure.spi.DeploymentUnit;
+import org.jboss.deployment.dependency.ContainerDependencyMetaData;
+import org.jboss.deployment.dependency.JndiDependencyMetaData;
+import org.jboss.deployment.plugin.MappedDeploymentEndpointResolver;
+import org.jboss.deployment.spi.DeploymentEndpointResolver;
+import org.jboss.deployment.spi.EndpointInfo;
+import org.jboss.deployment.spi.EndpointType;
import org.jboss.logging.Logger;
import org.jboss.metadata.client.jboss.JBossClientMetaData;
import org.jboss.metadata.ejb.jboss.JBossEnterpriseBeanMetaData;
import org.jboss.metadata.ejb.jboss.JBossEnterpriseBeansMetaData;
import org.jboss.metadata.ejb.jboss.JBossEntityBeanMetaData;
+import org.jboss.metadata.ejb.jboss.JBossGenericBeanMetaData;
import org.jboss.metadata.ejb.jboss.JBossMetaData;
import org.jboss.metadata.ejb.jboss.JBossSessionBeanMetaData;
import org.jboss.metadata.ejb.spec.BusinessLocalsMetaData;
import org.jboss.metadata.ejb.spec.BusinessRemotesMetaData;
+import org.jboss.metadata.javaee.spec.AnnotatedEJBReferenceMetaData;
import org.jboss.metadata.javaee.spec.AnnotatedEJBReferencesMetaData;
import org.jboss.metadata.javaee.spec.EJBLocalReferenceMetaData;
import org.jboss.metadata.javaee.spec.EJBLocalReferencesMetaData;
@@ -62,6 +71,12 @@
*/
public class MappedReferenceMetaDataResolverDeployer extends AbstractRealDeployer
{
+ /** Key for Map<String, ContainerDependencyMetaData> attachment */
+ public static final String ENDPOINT_MAP_KEY = "MappedReferenceMetaDataResolverDeployer.endpointMap";
+ /** Key for Set<ContainerDependencyMetaData> attachment */
+ public static final String DEPENDS_SET_KEY = "MappedReferenceMetaDataResolverDeployer.dependsSet";
+ /** Key for Map<String, String> of alternate endpoint resolution to the endpointMap key */
+ public static final String ALTERNATE_MAP_KEY = "MappedReferenceMetaDataResolverDeployer.endpointAlternateMap";
private static Logger log = Logger.getLogger(MappedReferenceMetaDataResolverDeployer.class);
/** */
private boolean failOnUnresolvedRefs;
@@ -74,6 +89,7 @@
inputs.add(JBossMetaData.class.getName());
inputs.add(JBossWebMetaData.class.getName());
super.setInputs(inputs);
+ super.setOutput(DeploymentEndpointResolver.class);
}
/**
@@ -99,7 +115,8 @@
* Look for ejb, web or client metadata to resolve references without
* mapped names.
*/
- public void internalDeploy(DeploymentUnit unit) throws DeploymentException
+ public void internalDeploy(DeploymentUnit unit)
+ throws DeploymentException
{
JBossMetaData ejbMetaData = unit.getAttachment(JBossMetaData.class);
JBossWebMetaData webMetaData = unit.getAttachment(JBossWebMetaData.class);
@@ -109,20 +126,35 @@
// Create a map of the reference endpoints if it does not exist in the top unit
DeploymentUnit top = unit.getTopLevel();
- Map<String, String> endpointMap = top.getAttachment("MappedReferenceMetaDataResolverDeployer.endpointMap", Map.class);
+ Map<String, ContainerDependencyMetaData> endpointMap = top.getAttachment(ENDPOINT_MAP_KEY, Map.class);
+ Map<String, String> endpointAlternateMap = top.getAttachment(ALTERNATE_MAP_KEY, Map.class);
if(endpointMap == null)
{
- endpointMap = new ConcurrentHashMap<String, String>();
- mapEndpoints(top, endpointMap);
- top.addAttachment("MappedReferenceMetaDataResolverDeployer.endpointMap", endpointMap, Map.class);
+ endpointMap = new ConcurrentHashMap<String, ContainerDependencyMetaData>();
+ endpointAlternateMap = new ConcurrentHashMap<String, String>();
+ mapEndpoints(top, endpointMap, endpointAlternateMap);
+ top.addAttachment(ENDPOINT_MAP_KEY, endpointMap, Map.class);
+ top.addAttachment(ALTERNATE_MAP_KEY, endpointAlternateMap);
+ DeploymentEndpointResolver resolver = new MappedDeploymentEndpointResolver(endpointMap, endpointAlternateMap, unit.getRelativePath());
+ top.addAttachment(DeploymentEndpointResolver.class, resolver);
}
+ DeploymentEndpointResolver resolver = new MappedDeploymentEndpointResolver(
+ endpointMap, endpointAlternateMap, unit.getRelativePath());
dump(unit);
if(ejbMetaData != null)
{
JBossEnterpriseBeansMetaData beans = ejbMetaData.getEnterpriseBeans();
// Process ejb references
- List<String> unresolvedPaths = resolve(unit, endpointMap, beans);
+ List<String> unresolvedPaths;
+ try
+ {
+ unresolvedPaths = resolve(unit, endpointMap, beans, resolver);
+ }
+ catch (Exception e)
+ {
+ throw new DeploymentException(e);
+ }
if(unresolvedPaths != null && unresolvedPaths.size() > 0)
log.warn("Unresolved references exist in JBossMetaData:"+unresolvedPaths);
}
@@ -130,7 +162,7 @@
{
// Process web app references
List<String> unresolvedPaths = new ArrayList<String>();
- resolve(unit, endpointMap, webMetaData.getJndiEnvironmentRefsGroup(), unresolvedPaths);
+ //resolve(unit, endpointMap, webMetaData.getJndiEnvironmentRefsGroup(), unresolvedPaths);
if(unresolvedPaths != null && unresolvedPaths.size() > 0)
log.warn("Unresolved references exist in JBossWebMetaData:"+unresolvedPaths);
}
@@ -138,10 +170,19 @@
{
// Process client app references
List<String> unresolvedPaths = new ArrayList<String>();
- resolve(unit, endpointMap, clientMetaData.getJndiEnvironmentRefsGroup(), unresolvedPaths);
+ //resolve(unit, endpointMap, clientMetaData.getJndiEnvironmentRefsGroup(), unresolvedPaths);
if(unresolvedPaths != null && unresolvedPaths.size() > 0)
log.warn("Unresolved references exist in JBossClientMetaData: "+unresolvedPaths);
}
+ // Add the unique set of ContainerDependencyMetaData
+ Set<ContainerDependencyMetaData> depends = new HashSet<ContainerDependencyMetaData>();
+ for(ContainerDependencyMetaData cdmd : endpointMap.values())
+ {
+ depends.add(cdmd);
+ }
+ top.addAttachment(DEPENDS_SET_KEY, depends, Set.class);
+
+ unit.addAttachment(DeploymentEndpointResolver.class, resolver);
}
/**
@@ -150,39 +191,61 @@
* @param unit - the deployment top level unit to start the mapping from
* @param endpointMap - the endpoint
*/
- protected void mapEndpoints(DeploymentUnit unit, Map<String, String> endpointMap)
+ protected void mapEndpoints(DeploymentUnit unit, Map<String, ContainerDependencyMetaData> endpointMap,
+ Map<String, String> endpointAlternateMap)
{
boolean trace = log.isTraceEnabled();
// First map the ejbs
- mapEjbs(unit, endpointMap, trace);
+ mapEjbs(unit, endpointMap, endpointAlternateMap, trace);
// Map all sources of message-destinations
mapMessageDestinations(unit, endpointMap, trace);
+ // Map persistence units
+ mapPersistenceUnits(unit, endpointMap, trace);
+ // Display the endpoint map for debugging
+ displayEndpoints(unit.getName(), endpointMap);
}
- protected void mapMessageDestinations(DeploymentUnit unit, Map<String, String> endpointMap, boolean trace)
+
+ /**
+ * @param unit
+ * @param endpointMap
+ * @param trace
+ */
+ protected void mapPersistenceUnits(DeploymentUnit unit,
+ Map<String, ContainerDependencyMetaData> endpointMap, boolean trace)
{
+ // TODO Auto-generated method stub
String vfsPath = unit.getRelativePath();
+ //PersistenceUnitsMetaData ejbMetaData = unit.getAttachment(PersistenceUnitsMetaData.class);
+
+ }
+
+ protected void mapMessageDestinations(DeploymentUnit unit, Map<String, ContainerDependencyMetaData> endpointMap, boolean trace)
+ {
+ String vfsPath = unit.getRelativePath();
JBossMetaData ejbMetaData = unit.getAttachment(JBossMetaData.class);
MessageDestinationsMetaData msgDestinations = null;
+ ClassLoader loader = unit.getClassLoader();
if(ejbMetaData != null)
{
ejbMetaData.getAssemblyDescriptor().getMessageDestinations();
- mapMessageDestinations(vfsPath, msgDestinations, endpointMap, trace);
+ mapMessageDestinations(vfsPath, msgDestinations, endpointMap, loader, trace);
}
JBossWebMetaData webMetaData = unit.getAttachment(JBossWebMetaData.class);
if(webMetaData != null)
{
msgDestinations = webMetaData.getMessageDestinations();
- mapMessageDestinations(vfsPath, msgDestinations, endpointMap, trace);
+ mapMessageDestinations(vfsPath, msgDestinations, endpointMap, loader, trace);
}
JBossClientMetaData clientMetaData = unit.getAttachment(JBossClientMetaData.class);
if(clientMetaData != null)
{
msgDestinations = clientMetaData.getMessageDestinations();
- mapMessageDestinations(vfsPath, msgDestinations, endpointMap, trace);
+ mapMessageDestinations(vfsPath, msgDestinations, endpointMap, loader, trace);
}
}
protected void mapMessageDestinations(String vfsPath, MessageDestinationsMetaData msgDestinations,
- Map<String, String> endpointMap, boolean trace)
+ Map<String, ContainerDependencyMetaData> endpointMap,
+ ClassLoader loader, boolean trace)
{
if(msgDestinations == null || msgDestinations.size() == 0)
return;
@@ -196,8 +259,9 @@
log.debug("Message-destination: "+destName+" has no mappedName");
continue;
}
- String destPath = prefix + "/" + destName;
- endpointMap.put(destPath, mappedName);
+ String destPath = prefix + "#" + destName;
+ ContainerDependencyMetaData destMD = new ContainerDependencyMetaData(mappedName, destName, vfsPath);
+ endpointMap.put(destPath, destMD);
if(trace)
log.trace("mapMessageDestinations: "+destPath+", mappedName: "+mappedName);
}
@@ -211,7 +275,8 @@
* @param unit
* @param endpointMap
*/
- protected void mapEjbs(DeploymentUnit unit, Map<String, String> endpointMap, boolean trace)
+ protected void mapEjbs(DeploymentUnit unit, Map<String, ContainerDependencyMetaData> endpointMap,
+ Map<String, String> endpointAlternateMap, boolean trace)
{
JBossMetaData ejbMetaData = unit.getAttachment(JBossMetaData.class);
JBossEnterpriseBeansMetaData beans = null;
@@ -223,30 +288,60 @@
String prefix = "ejb/" + vfsPath;
for(JBossEnterpriseBeanMetaData bean : beans)
{
- String ejbPath = prefix + "/" + bean.getEjbName();
- String mappedName = bean.getMappedName();
- if(mappedName != null)
+ // The unique id for this ejb in the deployment
+ String ejbCompID = prefix + "#" + bean.getEjbName();
+ String jndiName = getJndiName(bean, bean.isMessageDriven());
+ ContainerDependencyMetaData cdmd = new ContainerDependencyMetaData(jndiName, bean.getEjbName(), vfsPath);
+ endpointMap.put(ejbCompID, cdmd);
+ // debug info for the mappings each ejb has
+ ArrayList<String> mappings = new ArrayList<String>();
+ // Alternate mappings
+ String ejbNameKey = "ejb/" + bean.getEjbName();
+ if(endpointAlternateMap.containsKey(ejbNameKey) == false)
{
- endpointMap.put(ejbPath, mappedName);
+ endpointAlternateMap.put(ejbNameKey, ejbCompID);
+ mappings.add(ejbNameKey);
if(trace)
- log.trace("mapEjbs: "+ejbPath+", mappedName: "+mappedName);
+ log.trace("mapEjbs, added alternate root ejb-name: "+ejbNameKey);
}
+ else
+ {
+ log.debug("Duplicate root ejb-name: "+ejbNameKey+" from: "+ejbCompID);
+ }
// Create mappings based on the bean business interfaces
if(bean instanceof JBossSessionBeanMetaData)
{
JBossSessionBeanMetaData sbean = (JBossSessionBeanMetaData) bean;
+ cdmd.addJndiName(sbean.determineJndiName());
+ cdmd.addJndiName(sbean.determineLocalJndiName());
String ejbName = sbean.getEjbName();
BusinessLocalsMetaData locals = sbean.getBusinessLocals();
if(locals != null)
{
for(String local : locals)
{
- String ifacePath = prefix + "/" + local;
+ // Add ejb/vfsPath at iface
+ String ifacePath = prefix + "@" + local;
+ if(endpointAlternateMap.containsKey(ifacePath))
+ log.debug(ejbName+" duplicates business local: "+local+", existing: "+endpointAlternateMap.get(ifacePath));
+ else
+ {
+ endpointAlternateMap.put(ifacePath, ejbCompID);
+ mappings.add(ifacePath);
+ if(trace)
+ log.trace("mapEjbs, business-local: "+ifacePath+", ejbName: "+ejbName);
+ }
+ // Add ejb/iface
+ ifacePath = "ejb@" + local;
if(endpointMap.containsKey(ifacePath))
- log.debug(ejbName+" duplicates business local: "+local+", existing: "+endpointMap.get(ifacePath));
+ {
+ // TODO: may need to track the duplicates to create an error
+ log.debug(ejbName+" duplicates business-local: "+local+", existing: "+endpointMap.get(ifacePath));
+ }
else
{
- endpointMap.put(ifacePath, ejbName);
+ endpointAlternateMap.put(ifacePath, ejbCompID);
+ mappings.add(ifacePath);
if(trace)
log.trace("mapEjbs, business-local: "+ifacePath+", ejbName: "+ejbName);
}
@@ -257,18 +352,37 @@
{
for(String remote : remotes)
{
- String ifacePath = prefix + "/" + remote;
- if(endpointMap.containsKey(ifacePath))
- log.debug(ejbName+" duplicates business remote: "+remote+", existing: "+endpointMap.get(ifacePath));
+ // Add ejb/vfsPath/iface
+ String ifacePath = prefix + "@" + remote;
+ if(endpointAlternateMap.containsKey(ifacePath))
+ log.debug(ejbName+" duplicates business remote: "+remote+", existing: "+endpointAlternateMap.get(ifacePath));
else
{
- endpointMap.put(ifacePath, ejbName);
+ endpointAlternateMap.put(ifacePath, ejbCompID);
+ mappings.add(ifacePath);
if(trace)
log.trace("mapEjbs, business-remote: "+ifacePath+", ejbName: "+ejbName);
}
+ // Add ejb/iface
+ ifacePath = "ejb@" + remote;
+ if(endpointAlternateMap.containsKey(ifacePath))
+ log.debug(ejbName+" duplicates business-remote: "+remote+", existing: "+endpointAlternateMap.get(ifacePath));
+ else
+ {
+ endpointAlternateMap.put(ifacePath, ejbCompID);
+ mappings.add(ifacePath);
+ if(trace)
+ log.trace("mapEjbs, business-remote: "+ifacePath+", ejbName: "+ejbName);
+ }
}
}
+ if(trace)
+ log.trace("mapEjbs: "+ejbCompID+", mappings: "+mappings);
}
+ else if(bean instanceof JBossGenericBeanMetaData)
+ {
+ log.warn("JBossGenericBeanMetaData seen for: "+bean.getEjbName());
+ }
}
}
@@ -277,152 +391,289 @@
if(children != null)
{
for(DeploymentUnit child : children)
- mapEjbs(child, endpointMap, trace);
+ mapEjbs(child, endpointMap, endpointAlternateMap, trace);
}
}
- protected void resolve(DeploymentUnit unit, Map<String, String> endpointMap, Environment env, List<String> unresolvedRefs)
+ /**
+ *
+ * @param unit
+ * @param endpointMap
+ * @param referenceeKey
+ * @param env
+ * @param unresolvedRefs
+ */
+ protected void resolve(ContainerDependencyMetaData cdmd, DeploymentUnit unit,
+ Map<String, ContainerDependencyMetaData> endpointMap,
+ Environment env,
+ DeploymentEndpointResolver resolver,
+ List<String> unresolvedRefs)
+ throws Exception
{
if(env == null)
return;
AnnotatedEJBReferencesMetaData annotatedRefs = env.getAnnotatedEjbReferences();
+ resolveEjbAnnotatedRefs(cdmd, unit, endpointMap, annotatedRefs, resolver, unresolvedRefs);
EJBLocalReferencesMetaData localRefs = env.getEjbLocalReferences();
- resolveEjbLocalRefs(unit, endpointMap, localRefs, unresolvedRefs);
+ resolveEjbLocalRefs(cdmd, unit, endpointMap, localRefs, resolver, unresolvedRefs);
EJBReferencesMetaData ejbRefs = env.getEjbReferences();
- resolveEjbRefs(unit, endpointMap, ejbRefs, unresolvedRefs);
+ resolveEjbRefs(cdmd, unit, endpointMap, ejbRefs, resolver, unresolvedRefs);
MessageDestinationReferencesMetaData msgRefs = env.getMessageDestinationReferences();
- resolveMsgRefs(unit, endpointMap, msgRefs, unresolvedRefs);
+ resolveMsgRefs(cdmd, unit, endpointMap, msgRefs, resolver, unresolvedRefs);
// TODO, other references
}
- protected List<String> resolve(DeploymentUnit unit, Map<String, String> endpointMap,
- JBossEnterpriseBeansMetaData beans)
+ protected List<String> resolve(DeploymentUnit unit, Map<String, ContainerDependencyMetaData> endpointMap,
+ JBossEnterpriseBeansMetaData beans,
+ DeploymentEndpointResolver resolver)
+ throws Exception
{
ArrayList<String> unresolvedRefs = new ArrayList<String>();
if(beans == null || beans.size() == 0)
return unresolvedRefs;
+ String vfsPath = unit.getRelativePath();
for(JBossEnterpriseBeanMetaData bean : beans)
{
- EJBLocalReferencesMetaData localRefs = bean.getEjbLocalReferences();
- resolveEjbLocalRefs(unit, endpointMap, localRefs, unresolvedRefs);
- EJBReferencesMetaData ejbRefs = bean.getEjbReferences();
- resolveEjbRefs(unit, endpointMap, ejbRefs, unresolvedRefs);
+ // Find the container dependency metadata
+ String ejbCompID = "ejb/" + vfsPath + "#" + bean.getEjbName();
+ ContainerDependencyMetaData cdmd = endpointMap.get(ejbCompID);
+ if(cdmd == null)
+ throw new IllegalStateException("Failed to find ContainerDependencyMetaData for: "+ejbCompID);
Environment env = bean.getJndiEnvironmentRefsGroup();
- resolve(unit, endpointMap, env, unresolvedRefs);
+ resolve(cdmd, unit, endpointMap, env, resolver, unresolvedRefs);
}
return unresolvedRefs;
}
+ protected void resolveEjbAnnotatedRefs(ContainerDependencyMetaData cdmd, DeploymentUnit unit,
+ Map<String, ContainerDependencyMetaData> endpointMap,
+ AnnotatedEJBReferencesMetaData annotatedRefs,
+ DeploymentEndpointResolver resolver,
+ List<String> unresolvedRefs)
+ {
+ if(annotatedRefs == null)
+ return;
+
+ String vfsContext = unit.getRelativePath();
+ for(AnnotatedEJBReferenceMetaData ref : annotatedRefs)
+ {
+ Class iface = ref.getBeanInterface();
+ String link = ref.getLink();
+ EndpointInfo info = null;
+ if(link != null)
+ info = resolver.getEndpointInfo(link, EndpointType.EJB, vfsContext);
+ if(info == null && iface != null)
+ info = resolver.getEndpointInfo(iface, EndpointType.EJB, vfsContext);
+
+ if(info != null)
+ {
+ ContainerDependencyMetaData target = endpointMap.get(info.getComponentKey());
+ if(target != null)
+ {
+ cdmd.addDependency(target);
+ String containerJndiName = target.getContainerName();
+ if(containerJndiName != null)
+ ref.setResolvedJndiName(containerJndiName);
+ }
+ else
+ {
+ unresolvedRefs.add(cdmd.getComponentID()+":"+ref);
+ }
+ }
+ else
+ {
+ unresolvedRefs.add(cdmd.getComponentID()+":"+ref);
+ }
+ }
+ }
+
/**
*
* @param unit
* @param localRefs
* @param unresolvedRefs
*/
- protected void resolveEjbLocalRefs(DeploymentUnit unit, Map<String, String> endpointMap,
- EJBLocalReferencesMetaData localRefs, List<String> unresolvedRefs)
+ protected void resolveEjbLocalRefs(ContainerDependencyMetaData cdmd, DeploymentUnit unit,
+ Map<String, ContainerDependencyMetaData> endpointMap,
+ EJBLocalReferencesMetaData localRefs,
+ DeploymentEndpointResolver resolver,
+ List<String> unresolvedRefs)
+ throws Exception
{
if(localRefs == null)
return;
- String vfsPath = unit.getRelativePath();
- String prefix = "ejb/" + vfsPath;
- ArrayList<String> searched = new ArrayList<String>();
+
+ String vfsContext = unit.getRelativePath();
+ ClassLoader loader = unit.getClassLoader();
for(EJBLocalReferenceMetaData ref : localRefs)
{
+ if (ref.getIgnoreDependency() != null)
+ {
+ log.debug("IGNORING <ejb-ref> DEPENDENCY: " + ref);
+ return;
+ }
+
String link = ref.getLink();
- //String target = findLocalEjbLink(unit, link, searched);
- // First look
- String ejbPath = prefix + "/" + ref.getEjbRefName();
- String target = endpointMap.get(ejbPath);
- if(target == null)
- unresolvedRefs.add(ref.getEjbRefName()+"/ejb-local-ref/"+link+" available: " + searched);
+ String mappedName = ref.getMappedName();
+ // Use mapped name first
+ if(mappedName == null || mappedName.length() == 0)
+ {
+ ContainerDependencyMetaData target = null;
+ if(link != null)
+ {
+ EndpointInfo info = resolver.getEndpointInfo(link, EndpointType.EJB, vfsContext);
+ if(info != null)
+ {
+ target = endpointMap.get(info.getComponentKey());
+ }
+ }
+ if(target == null && ref.getLocal() != null)
+ {
+ // Try the local interface type
+ target = resolveEjbInterface(ref.getLocal(), unit,
+ endpointMap, resolver);
+ }
+ if(target == null)
+ unresolvedRefs.add(cdmd.getComponentID()+":"+ref);
+ else
+ {
+ cdmd.addDependency(target);
+ String containerJndiName = target.getContainerName();
+ if(containerJndiName != null)
+ ref.setResolvedJndiName(containerJndiName);
+ }
+ }
else
{
- ref.setResolvedJndiName(target);
+ // Create a JNDI dependency
+ ref.setResolvedJndiName(mappedName);
+ JndiDependencyMetaData jdmd = new JndiDependencyMetaData(mappedName, loader);
+ cdmd.addJndiDependency(jdmd);
}
}
+
}
- protected void resolveEjbRefs(DeploymentUnit unit, Map<String, String> endpointMap,
- EJBReferencesMetaData ejbRefs, List<String> unresolvedRefs)
+
+ protected void resolveEjbRefs(ContainerDependencyMetaData cdmd, DeploymentUnit unit,
+ Map<String, ContainerDependencyMetaData> endpointMap,
+ EJBReferencesMetaData ejbRefs,
+ DeploymentEndpointResolver resolver,
+ List<String> unresolvedRefs)
+ throws Exception
{
if(ejbRefs == null)
return;
- ArrayList<String> searched = new ArrayList<String>();
+
+ String vfsContext = unit.getRelativePath();
+ ClassLoader loader = unit.getClassLoader();
for(EJBReferenceMetaData ref : ejbRefs)
{
+ if (ref.getIgnoreDependency() != null)
+ {
+ log.debug("IGNORING <ejb-ref> DEPENDENCY: " + ref);
+ return;
+ }
+
+ String link = ref.getLink();
String mappedName = ref.getMappedName();
+ // Use mapped name first
if(mappedName == null || mappedName.length() == 0)
{
- String link = ref.getLink();
- String target = null;
+ ContainerDependencyMetaData target = null;
if(link != null)
- target = findEjbLink(unit, link, searched);
+ {
+ EndpointInfo info = resolver.getEndpointInfo(link, EndpointType.EJB, vfsContext);
+ if(info != null)
+ {
+ target = endpointMap.get(info.getComponentKey());
+ }
+ }
+ if(target == null && ref.getRemote() != null)
+ {
+ // Try the local interface type
+ target = resolveEjbInterface(ref.getRemote(), unit,
+ endpointMap, resolver);
+ }
if(target == null)
- unresolvedRefs.add(ref.getEjbRefName()+"/ejb-ref/"+link+ " available: " + searched);
+ unresolvedRefs.add(cdmd.getComponentID()+":"+ref);
else
- mappedName = target;
+ {
+ cdmd.addDependency(target);
+ String containerJndiName = target.getContainerName();
+ if(containerJndiName != null)
+ ref.setResolvedJndiName(containerJndiName);
+ }
}
- ref.setResolvedJndiName(mappedName);
+ else
+ {
+ // Create a JNDI dependency
+ ref.setResolvedJndiName(mappedName);
+ JndiDependencyMetaData jdmd = new JndiDependencyMetaData(mappedName, loader);
+ cdmd.addJndiDependency(jdmd);
+ }
}
}
- protected void resolveMsgRefs(DeploymentUnit unit, Map<String, String> endpointMap,
- MessageDestinationReferencesMetaData msgRefs, List<String> unresolvedRefs)
+ protected void resolveMsgRefs(ContainerDependencyMetaData cdmd, DeploymentUnit unit,
+ Map<String, ContainerDependencyMetaData> endpointMap,
+ MessageDestinationReferencesMetaData msgRefs,
+ DeploymentEndpointResolver resolver,
+ List<String> unresolvedRefs)
{
if(msgRefs == null)
return;
- ArrayList<MessageDestinationMetaData> searched = new ArrayList<MessageDestinationMetaData>();
+
+ ClassLoader loader = unit.getClassLoader();
+ String vfsContext = unit.getRelativePath();
for(MessageDestinationReferenceMetaData ref : msgRefs)
{
String mappedName = ref.getMappedName();
if(mappedName == null || mappedName.length() == 0)
{
String link = ref.getLink();
- MessageDestinationMetaData target = null;
+ ContainerDependencyMetaData target = null;
if(link != null)
- target = findMessageDestination(unit, link, searched);
+ {
+ EndpointInfo info = resolver.getEndpointInfo(link, EndpointType.MessageDestination, vfsContext);
+ if(info != null)
+ {
+ target = endpointMap.get(info.getComponentKey());
+ }
+ }
if(target == null)
- unresolvedRefs.add(ref.getMessageDestinationRefName()+"/message-destination-ref/"+link + " available: " + searched);
+ unresolvedRefs.add(cdmd.getComponentID()+":"+ref);
else
- mappedName = target.getMappedName();
+ {
+ cdmd.addDependency(target);
+ String containerJndiName = target.getContainerName();
+ if(containerJndiName != null)
+ ref.setResolvedJndiName(containerJndiName);
+ }
}
- ref.setResolvedJndiName(mappedName);
+ else
+ {
+ // Create a JNDI dependency
+ ref.setResolvedJndiName(mappedName);
+ JndiDependencyMetaData jdmd = new JndiDependencyMetaData(mappedName, loader);
+ cdmd.addJndiDependency(jdmd);
+ }
}
}
- /**
- * Resolves an <ejb-link> target for an <ejb-ref> entry and
- * returns the name of the target in the JNDI tree.
- *
- * @param unit DeploymentUnit
- * @param link Content of the <ejb-link> entry.
- * @param searched the list of ejbs searched
- *
- * @return The JNDI Entry of the target bean; <code>null</code> if
- * no appropriate target could be found.
- */
- public static String findEjbLink(DeploymentUnit unit, String link, ArrayList<String> searched)
+ protected ContainerDependencyMetaData resolveEjbInterface(String iface,
+ DeploymentUnit unit, Map<String, ContainerDependencyMetaData> endpointMap,
+ DeploymentEndpointResolver resolver)
+ throws Exception
{
- return resolveLink(unit, link, searched, false);
+ ClassLoader loader = unit.getClassLoader();
+ Class ifaceClass = loader.loadClass(iface);
+ String vfsContext = unit.getRelativePath();
+ EndpointInfo info = resolver.getEndpointInfo(ifaceClass, EndpointType.EJB, vfsContext);
+ ContainerDependencyMetaData cdmd = endpointMap.get(info.getComponentKey());
+ return null;
}
/**
- * Resolves an <ejb-link> target for an <ejb-local-ref> entry
- * and returns the name of the target in the JNDI tree.
- *
- * @param unit DeploymentUnit
- * @param link Content of the <ejb-link> entry.
- * @param searched the searched ejbs
- *
- * @return The JNDI Entry of the target bean; <code>null</code> if
- * no appropriate target could be found.
- */
- public static String findLocalEjbLink(DeploymentUnit unit, String link, ArrayList<String> searched)
- {
- return resolveLink(unit, link, searched, true);
- }
-
- /**
* Resolves a <message-destination> target for a <message-destination-link>
* entry and returns the name of the target in the JNDI tree.
*
@@ -438,137 +689,7 @@
return resolveMessageDestination(di, link, searched);
}
- private static String resolveLink(DeploymentUnit di, String link, ArrayList<String> searched, boolean isLocal)
- {
- if (link == null)
- {
- return null;
- }
- if (log.isTraceEnabled())
- {
- log.trace("resolveLink( {" + di + "}, {" + link + "}, {" + isLocal + "}");
- }
-
- if (di == null)
- {
- // We should throw an IllegalArgumentException here probably?
- return null;
- }
-
- if (link.indexOf('#') != -1)
- {
- // <ejb-link> is specified in the form path/file.jar#Bean
- return resolveRelativeLink(di, link, searched, isLocal);
- }
- else
- {
- // <ejb-link> contains a Bean Name, scan the DeploymentUnit tree
- DeploymentUnit top = di.getTopLevel();
- return resolveAbsoluteLink(top, link, searched, isLocal);
- }
- }
-
- private static String resolveRelativeLink(DeploymentUnit unit, String link, ArrayList<String> searched, boolean isLocal)
- {
- DeploymentUnit top = unit.getTopLevel();
- String path = link.substring(0, link.indexOf('#'));
- String ejbName = link.substring(link.indexOf('#') + 1);
-
-
- if (log.isTraceEnabled())
- {
- log.trace("Resolving relative link: " + link);
- }
- DeploymentUnit targetUnit = findLinkPath(top, path);
- if (targetUnit == null)
- {
- log.warn("Can't locate DeploymentUnit for target: " + path);
- return null;
- }
-
- String linkTarget = null;
- if (targetUnit.getAttachment(JBossMetaData.class) != null)
- {
- JBossMetaData appMD = targetUnit.getAttachment(JBossMetaData.class);
- JBossEnterpriseBeanMetaData beanMD = appMD.getEnterpriseBean(ejbName);
-
- if (beanMD != null)
- {
- linkTarget = getJndiName(beanMD, isLocal);
- if (linkTarget == null)
- {
- if (isLocal)
- log.warn("Unable to determine local jndi name for "+ beanMD.getEjbName());
- else
- log.warn("Unable to determine jndi name for " +beanMD.getEjbName());
- searched.add(beanMD.getEjbName());
- }
- }
- else
- {
- log.warn("No Bean named '" + ejbName + "' found in '" + path + "'!");
- for (JBossEnterpriseBeanMetaData md : appMD.getEnterpriseBeans())
- searched.add(md.getEjbName());
- }
- }
- else
- {
- log.warn("DeploymentUnit " + targetUnit + " is not an EJB.jar " + "file!");
- searched.add(targetUnit.getName());
- }
-
- return linkTarget;
- }
-
- private static String resolveAbsoluteLink(DeploymentUnit unit, String link, ArrayList<String> searched, boolean isLocal)
- {
- if (log.isTraceEnabled())
- {
- log.trace("Resolving absolute link, di: " + unit);
- }
-
- String ejbName = null;
-
- // Search all ejb DeploymentUnits
- List<JBossMetaData> ejbMetaData = getAllAttachments(unit, JBossMetaData.class);
- for(JBossMetaData ejbMD : ejbMetaData)
- {
- JBossEnterpriseBeanMetaData beanMD = ejbMD.getEnterpriseBean(link);
- if (beanMD != null)
- {
- ejbName = getJndiName(beanMD, isLocal);
- if (ejbName == null)
- {
- if (isLocal)
- log.warn("Unable to determine local jndi name for "+ beanMD.getEjbName());
- else
- log.warn("Unable to determine jndi name for " + beanMD.getEjbName());
- searched.add(beanMD.getEjbName());
- }
- if (log.isTraceEnabled())
- {
- log.trace("Found Bean: " + beanMD + ", resolves to: " + ejbName);
- }
-
- return ejbName;
- }
- else if (log.isTraceEnabled())
- {
- // Dump the ejb module ejbNames
- log.trace("No match for ejb-link: " + link + ", module names:");
- for(JBossEnterpriseBeanMetaData md : ejbMD.getEnterpriseBeans())
- {
- String beanEjbName = getJndiName(md, isLocal);
- searched.add(md.getEjbName());
- log.trace("... ejbName: " + beanEjbName);
- }
- }
- }
-
- return ejbName;
- }
-
private static <T> List<T> getAllAttachments(DeploymentUnit unit, Class<T> type)
{
ArrayList<T> attachments = new ArrayList<T>();
@@ -611,9 +732,7 @@
else if( beanMD.isSession())
{
JBossSessionBeanMetaData md = (JBossSessionBeanMetaData) beanMD;
- jndiName = md.getHomeJndiName();
- if(jndiName == null)
- jndiName = md.determineJndiName();
+ jndiName = md.determineJndiName();
}
}
return jndiName;
@@ -823,4 +942,15 @@
dump(child, tmp, depth+1);
}
}
+ private void displayEndpoints(String unitName, Map<String, ContainerDependencyMetaData> endpointMap)
+ {
+ StringBuilder tmp = new StringBuilder(unitName+" endpoint mappings:\n");
+ for(Map.Entry<String, ContainerDependencyMetaData> entry : endpointMap.entrySet())
+ {
+ tmp.append(" + "+entry.getKey()+" -> "+entry.getValue());
+ tmp.append('\n');
+ }
+ log.info(tmp.toString());
+ }
+
}
More information about the jboss-cvs-commits
mailing list