You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by db...@apache.org on 2007/01/18 09:38:35 UTC

svn commit: r497349 - in /incubator/openejb/trunk/openejb3/container: openejb-core/src/main/java/org/apache/openejb/alt/config/ openejb-core/src/main/java/org/apache/openejb/assembler/classic/ openejb-core/src/main/java/org/apache/openejb/core/ivm/nami...

Author: dblevins
Date: Thu Jan 18 00:38:33 2007
New Revision: 497349

URL: http://svn.apache.org/viewvc?view=rev&rev=497349
Log:
removed old ResourceReferenceLocationInfo code and replaced it with something more functional that works for all reference types

Added:
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/MessageDestinationReferenceInfo.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ReferenceLocationInfo.java   (contents, props changed)
      - copied, changed from r497307, incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ResourceReferenceLocationInfo.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ServiceReferenceInfo.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/JndiUrlReference.java
Removed:
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbReferenceLocationInfo.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ResourceEnvReferenceLocationInfo.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ResourceReferenceLocationInfo.java
Modified:
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/AnnotationDeployer.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/AutoConfigAndDeploy.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/AutoDeployer.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/ConfigurationPrinter.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/JndiEncInfoBuilder.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbLocalReferenceInfo.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbReferenceInfo.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnvEntryInfo.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncInfo.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/PersistenceContextInfo.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/PersistenceUnitInfo.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ResourceEnvReferenceInfo.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ResourceReferenceInfo.java
    incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/EjbLocalRef.java
    incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/EjbRef.java
    incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/MessageDestinationRef.java
    incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/PersistenceContextRef.java
    incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/PersistenceUnitRef.java
    incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/ServiceRef.java

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/AnnotationDeployer.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/AnnotationDeployer.java?view=diff&rev=497349&r1=497348&r2=497349
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/AnnotationDeployer.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/AnnotationDeployer.java Thu Jan 18 00:38:33 2007
@@ -657,7 +657,7 @@
             // whether to use an EjbLocalRef or EjbRef (remote).
             // We flag it uknown and let the linking code take care of
             // figuring out what to do with it.
-            ejbRef.setType(EjbRef.Type.UNKNOWN);
+            ejbRef.setRefType(EjbRef.Type.UNKNOWN);
 
             if (member != null) {
                 // Set the member name where this will be injected
@@ -682,7 +682,7 @@
                             break;
                         }
                     }
-                    ejbRef.setType(EjbRef.Type.REMOTE);
+                    ejbRef.setRefType(EjbRef.Type.REMOTE);
                 } else if (EJBLocalHome.class.isAssignableFrom(interfce)) {
                     ejbRef.setHome(interfce.getName());
                     Method[] methods = interfce.getMethods();
@@ -692,13 +692,13 @@
                             break;
                         }
                     }
-                    ejbRef.setType(EjbRef.Type.LOCAL);
+                    ejbRef.setRefType(EjbRef.Type.LOCAL);
                 } else {
                     ejbRef.setRemote(interfce.getName());
                     if (interfce.getAnnotation(Local.class) != null) {
-                        ejbRef.setType(EjbRef.Type.LOCAL);
+                        ejbRef.setRefType(EjbRef.Type.LOCAL);
                     } else if (interfce.getAnnotation(Remote.class) != null) {
-                        ejbRef.setType(EjbRef.Type.REMOTE);
+                        ejbRef.setRefType(EjbRef.Type.REMOTE);
                     }
                 }
             }
@@ -724,7 +724,7 @@
             }
             ejbRef.setMappedName(mappedName);
 
-            switch (ejbRef.getType()) {
+            switch (ejbRef.getRefType()) {
                 case UNKNOWN:
                 case REMOTE:
                     consumer.getEjbRef().add(ejbRef);

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/AutoConfigAndDeploy.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/AutoConfigAndDeploy.java?view=diff&rev=497349&r1=497348&r2=497349
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/AutoConfigAndDeploy.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/AutoConfigAndDeploy.java Thu Jan 18 00:38:33 2007
@@ -114,9 +114,11 @@
             }
 
             // check the resource refs
-            ResourceRef[] refs = bean.getResourceRef();
-            for (int j = 0; j < refs.length; j++) {
-                ResourceRef ref = refs[j];
+            for (ResourceRef ref : bean.getResourceRef()) {
+                if ((ref.getMappedName() + "").startsWith("jndi:")){
+                    continue;
+                }
+                
                 ResourceLink link = ejbDeployment.getResourceLink(ref.getResRefName());
                 if (link == null) {
                     link = new ResourceLink();

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/AutoDeployer.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/AutoDeployer.java?view=diff&rev=497349&r1=497348&r2=497349
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/AutoDeployer.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/AutoDeployer.java Thu Jan 18 00:38:33 2007
@@ -16,18 +16,18 @@
  */
 package org.apache.openejb.alt.config;
 
-import java.lang.reflect.Method;
-import java.util.List;
-
-import org.apache.openejb.jee.ResourceRef;
-import org.apache.openejb.jee.ApplicationClient;
 import org.apache.openejb.OpenEJBException;
-import org.apache.openejb.assembler.classic.ContainerInfo;
 import org.apache.openejb.alt.config.ejb.EjbDeployment;
 import org.apache.openejb.alt.config.ejb.OpenejbJar;
 import org.apache.openejb.alt.config.ejb.ResourceLink;
+import org.apache.openejb.assembler.classic.ContainerInfo;
+import org.apache.openejb.jee.ApplicationClient;
+import org.apache.openejb.jee.ResourceRef;
 import org.apache.openejb.util.SafeToolkit;
 
+import java.lang.reflect.Method;
+import java.util.List;
+
 public class AutoDeployer implements DynamicDeployer {
     private final ConfigurationFactory config;
 
@@ -59,7 +59,7 @@
     }
 
     public EjbModule deploy(EjbModule ejbModule) throws OpenEJBException {
-        if (ejbModule.getOpenejbJar() != null){
+        if (ejbModule.getOpenejbJar() != null) {
             return ejbModule;
         }
 
@@ -90,11 +90,14 @@
             throw new OpenEJBException("Beans with more that one resource-ref cannot be autodeployed;  there is no accurate way to determine how the references should be mapped.");
         }
 
-        for (int i = 0; i < refs.length; i++) {
-            deployment.getResourceLink().add(autoAssingResourceRef(refs[i]));
+        for (ResourceRef ref : refs) {
+            if ((ref.getMappedName() + "").startsWith("jndi:")) {
+                continue;
+            }
+            deployment.getResourceLink().add(autoAssingResourceRef(ref));
         }
 
-        if (bean.getType().equals("CMP_ENTITY") && ((EntityBean)bean).getCmpVersion() == 1 ) {
+        if (bean.getType().equals("CMP_ENTITY") && ((EntityBean) bean).getCmpVersion() == 1) {
             if (bean.getHome() != null) {
                 Class tempBean = loadClass(ejbModule, bean.getHome());
                 if (hasFinderMethods(tempBean)) {
@@ -149,13 +152,14 @@
 
     private String getUsableContainer(Class<? extends ContainerInfo> containerInfoType) {
         for (ContainerInfo containerInfo : config.getContainerInfos()) {
-            if (containerInfo.getClass().equals(containerInfoType)){
+            if (containerInfo.getClass().equals(containerInfoType)) {
                 return containerInfo.id;
             }
         }
 
         return null;
     }
+
     private ResourceLink autoAssingResourceRef(ResourceRef ref) throws OpenEJBException {
 
         List<String> resources = config.getConnectorIds();

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/ConfigurationPrinter.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/ConfigurationPrinter.java?view=diff&rev=497349&r1=497348&r2=497349
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/ConfigurationPrinter.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/ConfigurationPrinter.java Thu Jan 18 00:38:33 2007
@@ -87,11 +87,12 @@
                         out(3, "--[" + iterator.previousIndex() + "]----------------------");
                         out(3, "homeType        ", ejbReference.homeType);
                         out(3, "referenceName   ", ejbReference.referenceName);
-                        out(3, "location        ", ejbReference.location);
-                        out(3, "ejbDeploymentId ", ejbReference.location.ejbDeploymentId);
-                        out(3, "jndiContextId   ", ejbReference.location.jndiContextId);
-                        out(3, "remote          ", ejbReference.location.remote);
-                        out(3, "remoteRefName   ", ejbReference.location.remoteRefName);
+                        out(3, "ejbDeploymentId ", ejbReference.ejbDeploymentId);
+                        if (ejbReference.location != null){
+                            out(3, "location        ", ejbReference.location);
+                            out(3, "jndiContextId   ", ejbReference.location.jndiProviderId);
+                            out(3, "remoteRefName   ", ejbReference.location.jndiName);
+                        }
                     }
                     out(2, "resourceRefs   ", jndiEnc.resourceRefs.size());
                     for (ListIterator<ResourceReferenceInfo> iterator = jndiEnc.resourceRefs.listIterator(); iterator.hasNext();) {
@@ -102,9 +103,8 @@
                         out(3, "referenceType   ", resourceRef.referenceType);
                         if (resourceRef.location != null) {
                             out(3, "location        ", resourceRef.location);
-                            out(3, "jndiContextId   ", resourceRef.location.jndiContextId);
-                            out(3, "remote          ", resourceRef.location.remote);
-                            out(3, "remoteRefName   ", resourceRef.location.remoteRefName);
+                            out(3, "jndiContextId   ", resourceRef.location.jndiName);
+                            out(3, "remoteRefName   ", resourceRef.location.jndiProviderId);
                         }
                     }
                 }

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/JndiEncInfoBuilder.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/JndiEncInfoBuilder.java?view=diff&rev=497349&r1=497348&r2=497349
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/JndiEncInfoBuilder.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/alt/config/JndiEncInfoBuilder.java Thu Jan 18 00:38:33 2007
@@ -17,39 +17,44 @@
 package org.apache.openejb.alt.config;
 
 import org.apache.openejb.OpenEJBException;
+import org.apache.openejb.assembler.classic.EjbJarInfo;
 import org.apache.openejb.assembler.classic.EjbLocalReferenceInfo;
 import org.apache.openejb.assembler.classic.EjbReferenceInfo;
-import org.apache.openejb.assembler.classic.EjbReferenceLocationInfo;
 import org.apache.openejb.assembler.classic.EnterpriseBeanInfo;
 import org.apache.openejb.assembler.classic.EnvEntryInfo;
+import org.apache.openejb.assembler.classic.InjectionInfo;
 import org.apache.openejb.assembler.classic.JndiEncInfo;
+import org.apache.openejb.assembler.classic.PersistenceContextInfo;
+import org.apache.openejb.assembler.classic.PersistenceUnitInfo;
+import org.apache.openejb.assembler.classic.ReferenceLocationInfo;
 import org.apache.openejb.assembler.classic.ResourceEnvReferenceInfo;
 import org.apache.openejb.assembler.classic.ResourceReferenceInfo;
-import org.apache.openejb.assembler.classic.EjbJarInfo;
-import org.apache.openejb.assembler.classic.PersistenceUnitInfo;
-import org.apache.openejb.assembler.classic.InjectionInfo;
-import org.apache.openejb.assembler.classic.PersistenceContextInfo;
+import org.apache.openejb.assembler.classic.MessageDestinationReferenceInfo;
+import org.apache.openejb.assembler.classic.ServiceReferenceInfo;
 import org.apache.openejb.jee.EjbLocalRef;
 import org.apache.openejb.jee.EjbRef;
 import org.apache.openejb.jee.EnvEntry;
-import org.apache.openejb.jee.JndiConsumer;
-import org.apache.openejb.jee.PersistenceUnitRef;
-import org.apache.openejb.jee.ResourceEnvRef;
-import org.apache.openejb.jee.ResourceRef;
 import org.apache.openejb.jee.Injectable;
 import org.apache.openejb.jee.InjectionTarget;
+import org.apache.openejb.jee.JndiConsumer;
+import org.apache.openejb.jee.JndiReference;
 import org.apache.openejb.jee.PersistenceContextRef;
 import org.apache.openejb.jee.PersistenceContextType;
+import org.apache.openejb.jee.PersistenceUnitRef;
 import org.apache.openejb.jee.Property;
+import org.apache.openejb.jee.ResourceEnvRef;
+import org.apache.openejb.jee.ResourceRef;
+import org.apache.openejb.jee.ServiceRef;
+import org.apache.openejb.jee.MessageDestinationRef;
 import org.apache.openejb.util.Logger;
 import org.apache.openejb.util.Messages;
 
+import java.io.File;
 import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.HashMap;
-import java.util.Collection;
-import java.io.File;
 
 /**
  * @version $Rev$ $Date$
@@ -77,20 +82,20 @@
     }
 
     private void index(EnterpriseBeanInfo bean) {
-        byInterfaces.put("r="+bean.remote+":"+bean.home, bean);
-        byInterfaces.put("r="+bean.businessRemote+":"+null, bean);
-        byInterfaces.put("l="+bean.local+":"+bean.localHome, bean);
-        byInterfaces.put("l="+bean.businessLocal+":"+null, bean);
+        byInterfaces.put("r=" + bean.remote + ":" + bean.home, bean);
+        byInterfaces.put("r=" + bean.businessRemote + ":" + null, bean);
+        byInterfaces.put("l=" + bean.local + ":" + bean.localHome, bean);
+        byInterfaces.put("l=" + bean.businessLocal + ":" + null, bean);
 
         byEjbName.put(bean.ejbName, bean);
         // TODO: DMB: this path part should actually *only* be relative to the app archive,
         // this way will work to find them :)
         File file = new File(bean.codebase);
-        String path = file.getName()+"#"+bean.ejbName;
+        String path = file.getName() + "#" + bean.ejbName;
         byEjbName.put(path, bean);
         file = file.getParentFile();
-        while (file != null){
-            path = file.getName() +"/"+ path;
+        while (file != null) {
+            path = file.getName() + "/" + path;
             byEjbName.put(path, bean);
             file = file.getParentFile();
         }
@@ -118,15 +123,45 @@
         jndi.persistenceUnitRefs.addAll(buildPersistenceUnitRefInfos(jndiConsumer));
 
         jndi.persistenceContextRefs.addAll(buildPersistenceContextRefInfos(jndiConsumer));
+
+        jndi.messageDestinationRefs.addAll(buildMessageDestinationRefInfos(jndiConsumer));
+
+        jndi.serviceRefs.addAll(buildServiceRefInfos(jndiConsumer));
+
         return jndi;
     }
 
+    private List<ServiceReferenceInfo> buildServiceRefInfos(JndiConsumer jndiConsumer) {
+        ArrayList<ServiceReferenceInfo> infos = new ArrayList<ServiceReferenceInfo>();
+        for (ServiceRef ref : jndiConsumer.getServiceRef()) {
+            ServiceReferenceInfo info = new ServiceReferenceInfo();
+            info.referenceName = ref.getName();
+            info.location = buildLocationInfo(ref);
+            info.targets.addAll(buildInjectionInfos(ref));
+            infos.add(info);
+        }
+        return infos;
+    }
+
+    private List<MessageDestinationReferenceInfo> buildMessageDestinationRefInfos(JndiConsumer jndiConsumer) {
+        ArrayList<MessageDestinationReferenceInfo> infos = new ArrayList<MessageDestinationReferenceInfo>();
+        for (MessageDestinationRef ref : jndiConsumer.getMessageDestinationRef()) {
+            MessageDestinationReferenceInfo info = new MessageDestinationReferenceInfo();
+            info.referenceName = ref.getName();
+            info.location = buildLocationInfo(ref);
+            info.targets.addAll(buildInjectionInfos(ref));
+            infos.add(info);
+        }
+        return infos;
+    }
+
     private List<PersistenceUnitInfo> buildPersistenceUnitRefInfos(JndiConsumer jndiConsumer) {
         ArrayList<PersistenceUnitInfo> infos = new ArrayList<PersistenceUnitInfo>();
         for (PersistenceUnitRef puRef : jndiConsumer.getPersistenceUnitRef()) {
             PersistenceUnitInfo info = new PersistenceUnitInfo();
             info.referenceName = puRef.getPersistenceUnitRefName();
             info.persistenceUnitName = puRef.getPersistenceUnitName();
+            info.location = buildLocationInfo(puRef);
             info.targets.addAll(buildInjectionInfos(puRef));
             infos.add(info);
         }
@@ -140,6 +175,7 @@
             PersistenceContextInfo info = new PersistenceContextInfo();
             info.referenceName = contextRef.getPersistenceContextRefName();
             info.persistenceUnitName = contextRef.getPersistenceUnitName();
+            info.location = buildLocationInfo(contextRef);
             info.extended = (contextRef.getPersistenceContextType() == PersistenceContextType.EXTENDED);
             List<Property> persistenceProperty = contextRef.getPersistenceProperty();
             for (Property property : persistenceProperty) {
@@ -155,7 +191,7 @@
     private void buildAmbiguousEjbRefInfos(JndiEncInfo sjndi, JndiConsumer jndiConsumer, String referringComponent) throws OpenEJBException {
         ArrayList<EjbRef> ejbRefs = new ArrayList<EjbRef>(jndiConsumer.getEjbRef());
         for (EjbRef ejb : ejbRefs) {
-            if (ejb.getType() != EjbRef.Type.UNKNOWN) continue;
+            if (ejb.getRefType() != EjbRef.Type.UNKNOWN) continue;
 
             String interfce = ejb.getRemote();
 
@@ -166,19 +202,19 @@
                 otherBean = byEjbName.get(ejbLink);
             }
 
-            if (otherBean != null){
-                if (interfce.equals(otherBean.businessRemote)){
-                    ejb.setType(EjbRef.Type.REMOTE);
-                }  else {
-                    ejb.setType(EjbRef.Type.LOCAL);
+            if (otherBean != null) {
+                if (interfce.equals(otherBean.businessRemote)) {
+                    ejb.setRefType(EjbRef.Type.REMOTE);
+                } else {
+                    ejb.setRefType(EjbRef.Type.LOCAL);
                     jndiConsumer.getEjbRef().remove(ejb);
                     jndiConsumer.getEjbLocalRef().add(new EjbLocalRef(ejb));
                 }
             } else {
-                if (byInterfaces.get("r="+ejb.getRemote()+":"+ejb.getHome()) != null){
-                    ejb.setType(EjbRef.Type.REMOTE);
+                if (byInterfaces.get("r=" + ejb.getRemote() + ":" + ejb.getHome()) != null) {
+                    ejb.setRefType(EjbRef.Type.REMOTE);
                 } else {
-                    ejb.setType(EjbRef.Type.LOCAL);
+                    ejb.setRefType(EjbRef.Type.LOCAL);
                     jndiConsumer.getEjbRef().remove(ejb);
                     jndiConsumer.getEjbLocalRef().add(new EjbLocalRef(ejb));
                 }
@@ -193,31 +229,32 @@
 
             info.homeType = ejb.getLocalHome();
             info.referenceName = ejb.getEjbRefName();
-            info.location = new EjbReferenceLocationInfo();
-
 
-            EnterpriseBeanInfo otherBean = null;
+            info.location = buildLocationInfo(ejb);
 
-            if (ejb.getEjbLink() != null) {
-                String ejbLink = ejb.getEjbLink();
-                otherBean = byEjbName.get(ejbLink);
-            } else {
-                otherBean = byInterfaces.get("l="+ejb.getLocal()+":"+ejb.getLocalHome());
-            }
+            if (info.location == null) {
+                EnterpriseBeanInfo otherBean = null;
 
-            if (otherBean == null) {
-                String msg;
-                if (ejb.getEjbLink() == null) {
-                    msg = messages.format("config.noBeanFound", ejb.getEjbRefName(), referringComponent);
+                if (ejb.getEjbLink() != null) {
+                    String ejbLink = ejb.getEjbLink();
+                    otherBean = byEjbName.get(ejbLink);
                 } else {
-                    msg = messages.format("config.noBeanFoundEjbLink", ejb.getEjbRefName(), referringComponent, ejb.getEjbLink());
+                    otherBean = byInterfaces.get("l=" + ejb.getLocal() + ":" + ejb.getLocalHome());
                 }
 
-                logger.fatal(msg);
-                throw new OpenEJBException(msg);
-            }
-            info.location.ejbDeploymentId = otherBean.ejbDeploymentId;
+                if (otherBean == null) {
+                    String msg;
+                    if (ejb.getEjbLink() == null) {
+                        msg = messages.format("config.noBeanFound", ejb.getEjbRefName(), referringComponent);
+                    } else {
+                        msg = messages.format("config.noBeanFoundEjbLink", ejb.getEjbRefName(), referringComponent, ejb.getEjbLink());
+                    }
 
+                    logger.fatal(msg);
+                    throw new OpenEJBException(msg);
+                }
+                info.ejbDeploymentId = otherBean.ejbDeploymentId;
+            }
             info.targets.addAll(buildInjectionInfos(ejb));
             infos.add(info);
         }
@@ -232,29 +269,32 @@
             info.homeType = ejb.getHome();
             info.remoteType = ejb.getRemote();
             info.referenceName = ejb.getEjbRefName();
-            info.location = new EjbReferenceLocationInfo();
 
-            EnterpriseBeanInfo otherBean = null;
+            info.location = buildLocationInfo(ejb);
 
-            if (ejb.getEjbLink() != null) {
-                String ejbLink = ejb.getEjbLink();
-                otherBean = byEjbName.get(ejbLink);
-            } else {
-                otherBean = byInterfaces.get("r="+ejb.getRemote()+":"+ejb.getHome());
-            }
+            if (info.location == null) {
+                EnterpriseBeanInfo otherBean = null;
 
-            if (otherBean == null) {
-                String msg;
-                if (ejb.getEjbLink() == null) {
-                    msg = messages.format("config.noBeanFound", ejb.getEjbRefName(), referringComponent);
+                if (ejb.getEjbLink() != null) {
+                    String ejbLink = ejb.getEjbLink();
+                    otherBean = byEjbName.get(ejbLink);
                 } else {
-                    msg = messages.format("config.noBeanFoundEjbLink", ejb.getEjbRefName(), referringComponent, ejb.getEjbLink());
+                    otherBean = byInterfaces.get("r=" + ejb.getRemote() + ":" + ejb.getHome());
                 }
 
-                logger.fatal(msg);
-                throw new OpenEJBException(msg);
+                if (otherBean == null) {
+                    String msg;
+                    if (ejb.getEjbLink() == null) {
+                        msg = messages.format("config.noBeanFound", ejb.getEjbRefName(), referringComponent);
+                    } else {
+                        msg = messages.format("config.noBeanFoundEjbLink", ejb.getEjbRefName(), referringComponent, ejb.getEjbLink());
+                    }
+
+                    logger.fatal(msg);
+                    throw new OpenEJBException(msg);
+                }
+                info.ejbDeploymentId = otherBean.ejbDeploymentId;
             }
-            info.location.ejbDeploymentId = otherBean.ejbDeploymentId;
 
             info.targets.addAll(buildInjectionInfos(ejb));
             infos.add(info);
@@ -271,6 +311,7 @@
             info.referenceName = res.getResRefName();
             info.referenceType = res.getResType();
             info.resourceID = res.getResLink();
+            info.location = buildLocationInfo(res);
             info.targets.addAll(buildInjectionInfos(res));
             infos.add(info);
         }
@@ -283,7 +324,7 @@
             ResourceEnvReferenceInfo info = new ResourceEnvReferenceInfo();
             info.resourceEnvRefName = res.getResourceEnvRefName();
             info.resourceEnvRefType = res.getResourceEnvRefType();
-            info.mappedName = res.getMappedName();
+            info.location = buildLocationInfo(res);
             info.targets.addAll(buildInjectionInfos(res));
             infos.add(info);
         }
@@ -298,10 +339,21 @@
             info.name = env.getEnvEntryName();
             info.type = env.getEnvEntryType();
             info.value = env.getEnvEntryValue();
+            info.location = buildLocationInfo(env);
             info.targets.addAll(buildInjectionInfos(env));
             infos.add(info);
         }
         return infos;
+    }
+
+    private ReferenceLocationInfo buildLocationInfo(JndiReference reference) {
+        String mappedName = reference.getMappedName();
+        if (mappedName == null || !mappedName.startsWith("jndi:")) {
+            return null;
+        }
+        ReferenceLocationInfo location = new ReferenceLocationInfo();
+        location.jndiName = mappedName.replaceFirst("^jndi:", "");
+        return location;
     }
 
     private Collection<? extends InjectionInfo> buildInjectionInfos(Injectable injectable) {

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbLocalReferenceInfo.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbLocalReferenceInfo.java?view=diff&rev=497349&r1=497348&r2=497349
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbLocalReferenceInfo.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbLocalReferenceInfo.java Thu Jan 18 00:38:33 2007
@@ -20,5 +20,7 @@
 
     public String referenceName;
     public String homeType;
-    public EjbReferenceLocationInfo location;
+    public String ejbDeploymentId;
+
+    public ReferenceLocationInfo location;
 }

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbReferenceInfo.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbReferenceInfo.java?view=diff&rev=497349&r1=497348&r2=497349
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbReferenceInfo.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbReferenceInfo.java Thu Jan 18 00:38:33 2007
@@ -21,5 +21,7 @@
     public String referenceName;
     public String homeType;
     public String remoteType;
-    public EjbReferenceLocationInfo location;
+    public String ejbDeploymentId;
+
+    public ReferenceLocationInfo location;
 }

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnvEntryInfo.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnvEntryInfo.java?view=diff&rev=497349&r1=497348&r2=497349
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnvEntryInfo.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnvEntryInfo.java Thu Jan 18 00:38:33 2007
@@ -22,4 +22,5 @@
     public String type;
     public String value;
 
+    public ReferenceLocationInfo location;
 }

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java?view=diff&rev=497349&r1=497348&r2=497349
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java Thu Jan 18 00:38:33 2007
@@ -29,6 +29,7 @@
 import org.apache.openejb.core.ivm.naming.PersistenceUnitReference;
 import org.apache.openejb.core.ivm.naming.Reference;
 import org.apache.openejb.core.ivm.naming.PersistenceContextReference;
+import org.apache.openejb.core.ivm.naming.JndiUrlReference;
 
 import javax.ejb.EJBContext;
 import javax.naming.Context;
@@ -40,8 +41,8 @@
 import javax.transaction.TransactionSynchronizationRegistry;
 import java.io.File;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.Map;
+import java.util.List;
 
 /**
  * TODO: This class is essentially an over glorified sym-linker.  The names
@@ -54,17 +55,11 @@
 
     private final ReferenceWrapper referenceWrapper;
     private final boolean beanManagedTransactions;
-    private final EjbReferenceInfo[] ejbReferences;
-    private final EjbLocalReferenceInfo[] ejbLocalReferences;
-    private final EnvEntryInfo[] envEntries;
-    private final ResourceReferenceInfo[] resourceRefs;
-    private final ResourceEnvReferenceInfo[] resourceEnvRefs;
-    private final PersistenceUnitInfo[] persistenceUnitRefs;
-    private final PersistenceContextInfo[] persistenceContextRefs;
     private final Map<String, EntityManagerFactory> entityManagerFactories;
     private final Map<String, Map<String, EntityManagerFactory>> allFactories;
     private final String jarPath;
-    
+    private final JndiEncInfo jndiEnc;
+
 
     public JndiEncBuilder(JndiEncInfo jndiEnc) throws OpenEJBException {
         this(jndiEnc, null, null, null,null);
@@ -87,60 +82,20 @@
 
         beanManagedTransactions = transactionType != null && transactionType.equalsIgnoreCase("Bean");
 
-        if ((jndiEnc != null && jndiEnc.ejbReferences != null)) {
-            ejbReferences = jndiEnc.ejbReferences.toArray(new EjbReferenceInfo[0]);
-        } else {
-            ejbReferences = new EjbReferenceInfo[]{};
-        }
-
-        if ((jndiEnc != null && jndiEnc.ejbLocalReferences != null)) {
-            ejbLocalReferences = jndiEnc.ejbLocalReferences.toArray(new EjbLocalReferenceInfo[0]);
-        } else {
-            ejbLocalReferences = new EjbLocalReferenceInfo[]{};
-        }
-
-        if ((jndiEnc != null && jndiEnc.envEntries != null)) {
-            envEntries = jndiEnc.envEntries.toArray(new EnvEntryInfo[0]);
-        } else {
-            envEntries = new EnvEntryInfo[]{};
-        }
+        this.jndiEnc = jndiEnc;
 
-        if ((jndiEnc != null && jndiEnc.resourceRefs != null)) {
-            resourceRefs = jndiEnc.resourceRefs.toArray(new ResourceReferenceInfo[0]);
+        if(allFactories != null){
+            this.allFactories = allFactories;
         } else {
-            resourceRefs = new ResourceReferenceInfo[]{};
+            this.allFactories = new HashMap<String, Map<String, EntityManagerFactory>>();
         }
 
-        if ((jndiEnc != null && jndiEnc.resourceEnvRefs != null)) {
-            resourceEnvRefs = jndiEnc.resourceEnvRefs.toArray(new ResourceEnvReferenceInfo[0]);
-        } else {
-            resourceEnvRefs = new ResourceEnvReferenceInfo[]{};
-        }
-        
-        if ((jndiEnc != null && jndiEnc.persistenceUnitRefs != null)) {
-        	persistenceUnitRefs = jndiEnc.persistenceUnitRefs.toArray(new PersistenceUnitInfo[0]);
-        } else {
-        	persistenceUnitRefs = new PersistenceUnitInfo[]{};
-        }      
-        
-        if ((jndiEnc != null && jndiEnc.persistenceContextRefs != null)) {
-        	persistenceContextRefs = jndiEnc.persistenceContextRefs.toArray(new PersistenceContextInfo[0]);
-        } else {
-        	persistenceContextRefs = new PersistenceContextInfo[]{};
-        }
+        this.jarPath = path;
 
-        if(allFactories != null){
-        	this.allFactories = allFactories;
-        } else {
-        	this.allFactories = new HashMap<String, Map<String, EntityManagerFactory>>();
-        }    
-        
-        this.jarPath = path;    
-        
         if(this.allFactories.get(jarPath) != null){
-        	entityManagerFactories = this.allFactories.get(jarPath);
+            entityManagerFactories = this.allFactories.get(jarPath);
         } else {
-        	entityManagerFactories = new HashMap<String, EntityManagerFactory>();
+            entityManagerFactories = new HashMap<String, EntityManagerFactory>();
         }
     }
 
@@ -164,50 +119,51 @@
             bindings.put("java:comp/UserTransaction", userTransaction);
         }
 
-        for (int i = 0; i < ejbReferences.length; i++) {
-            EjbReferenceInfo referenceInfo = ejbReferences[i];
-            EjbReferenceLocationInfo location = referenceInfo.location;
+        for (EjbReferenceInfo referenceInfo : jndiEnc.ejbReferences) {
 
             Reference reference = null;
 
-            if (!location.remote) {
+            if (referenceInfo.location != null) {
+                reference = buildReferenceLocation(referenceInfo.location);
+            } else {
                 // TODO: Before JndiNameStrategy can be used, this assumption has to be updated
                 if (referenceInfo.homeType == null){
-                    String jndiName = "java:openejb/ejb/" + location.ejbDeploymentId + "BusinessRemote";
+                    String jndiName = "java:openejb/ejb/" + referenceInfo.ejbDeploymentId + "BusinessRemote";
                     reference = new IntraVmJndiReference(jndiName);
                 } else {
                     // TODO: Before JndiNameStrategy can be used, this assumption has to be updated
-                    String jndiName = "java:openejb/ejb/" + location.ejbDeploymentId;
+                    String jndiName = "java:openejb/ejb/" + referenceInfo.ejbDeploymentId;
                     reference = new IntraVmJndiReference(jndiName);
                 }
-            } else {
-                String openEjbSubContextName = "java:openejb/remote_jndi_contexts/" + location.jndiContextId;
-                reference = new JndiReference(openEjbSubContextName, location.remoteRefName);
             }
             bindings.put(normalize(referenceInfo.referenceName), wrapReference(reference));
         }
 
-        for (int i = 0; i < ejbLocalReferences.length; i++) {
-            EjbLocalReferenceInfo referenceInfo = ejbLocalReferences[i];
-            EjbReferenceLocationInfo location = referenceInfo.location;
+        for (EjbLocalReferenceInfo referenceInfo : jndiEnc.ejbLocalReferences) {
 
             Reference reference = null;
 
-            if (location != null && !location.remote) {
-                if (referenceInfo.homeType == null){
-                    // TODO: Before JndiNameStrategy can be used, this assumption has to be updated
-                    String jndiName = "java:openejb/ejb/" + location.ejbDeploymentId + "BusinessLocal";
-                    reference = new IntraVmJndiReference(jndiName);
-                } else {
-                    String jndiName = "java:openejb/ejb/" + location.ejbDeploymentId + "Local";
-                    reference = new IntraVmJndiReference(jndiName);
-                }
-                bindings.put(normalize(referenceInfo.referenceName), wrapReference(reference));
+            if (referenceInfo.location != null) {
+                reference = buildReferenceLocation(referenceInfo.location);
+            } else if (referenceInfo.homeType == null){
+                // TODO: Before JndiNameStrategy can be used, this assumption has to be updated
+                String jndiName = "java:openejb/ejb/" + referenceInfo.ejbDeploymentId + "BusinessLocal";
+                reference = new IntraVmJndiReference(jndiName);
+            } else {
+                String jndiName = "java:openejb/ejb/" + referenceInfo.ejbDeploymentId + "Local";
+                reference = new IntraVmJndiReference(jndiName);
             }
+            bindings.put(normalize(referenceInfo.referenceName), wrapReference(reference));
         }
 
-        for (int i = 0; i < envEntries.length; i++) {
-            EnvEntryInfo entry = envEntries[i];
+        for (EnvEntryInfo entry : jndiEnc.envEntries) {
+
+            if (entry.location != null) {
+                Reference reference = buildReferenceLocation(entry.location);
+                bindings.put(normalize(entry.name), reference);
+                continue;
+            }
+
             try {
                 Class type = Class.forName(entry.type.trim());
                 Object obj = null;
@@ -242,51 +198,62 @@
             }
         }
 
-        for (int i = 0; i < resourceRefs.length; i++) {
-            ResourceReferenceInfo referenceInfo = resourceRefs[i];
+        for (ResourceReferenceInfo referenceInfo : jndiEnc.resourceRefs) {
             Reference reference = null;
 
-            if (referenceInfo.resourceID != null) {
+            if (referenceInfo.location != null) {
+                reference = buildReferenceLocation(referenceInfo.location);
+            } else if (referenceInfo.resourceID != null) {
                 String jndiName = "java:openejb/Connector/" + referenceInfo.resourceID;
                 reference = new IntraVmJndiReference(jndiName);
-            } else if (referenceInfo.location != null) {
-                String openEjbSubContextName1 = "java:openejb/remote_jndi_contexts/" + referenceInfo.location.jndiContextId;
-                String jndiName2 = referenceInfo.location.remoteRefName;
-                reference = new JndiReference(openEjbSubContextName1, jndiName2);
             } else {
                 String jndiName = "java:openejb/Connector/" + referenceInfo.referenceName;
                 reference = new IntraVmJndiReference(jndiName);
             }
             bindings.put(normalize(referenceInfo.referenceName), wrapReference(reference));
         }
-                
-        for (int i = 0; i < resourceEnvRefs.length; i++) {
-            ResourceEnvReferenceInfo referenceInfo = resourceEnvRefs[i];
-            Reference reference = null;
+
+        for (ResourceEnvReferenceInfo referenceInfo : jndiEnc.resourceEnvRefs) {
             LinkRef linkRef = null;
             try {
                 if (EJBContext.class.isAssignableFrom(Class.forName(referenceInfo.resourceEnvRefType))) {
                     String jndiName = "java:comp/EJBContext";
-                    linkRef = new LinkRef(jndiName);               
+                    linkRef = new LinkRef(jndiName);
                     bindings.put(normalize(referenceInfo.resourceEnvRefName), linkRef);
                     continue;
-                }                 
-            } catch (ClassNotFoundException e) {                
+                }
+            } catch (ClassNotFoundException e) {
                 throw new OpenEJBException(e);
-            }     
-        //TODO code for handling other resource-env-refs need to be added here. 
+            }
+
+            if (referenceInfo.location != null){
+                Reference reference = buildReferenceLocation(referenceInfo.location);
+                bindings.put(normalize(referenceInfo.resourceEnvRefName), wrapReference(reference));
+            }
+
+            //TODO code for handling other resource-env-refs need to be added here.
         }
-                                
-        for (int i = 0; i < persistenceUnitRefs.length; i++){
-        	PersistenceUnitInfo puRefInfo = persistenceUnitRefs[i];
-            EntityManagerFactory factory = findEntityManagerFactory(puRefInfo.persistenceUnitName);
+
+        for (PersistenceUnitInfo referenceInfo : jndiEnc.persistenceUnitRefs) {
+            if (referenceInfo.location != null){
+                Reference reference = buildReferenceLocation(referenceInfo.location);
+                bindings.put(normalize(referenceInfo.referenceName), wrapReference(reference));
+                continue;
+            }
+
+            EntityManagerFactory factory = findEntityManagerFactory(referenceInfo.persistenceUnitName);
 
             Reference reference = new PersistenceUnitReference(factory);
-            bindings.put(normalize(puRefInfo.referenceName), wrapReference(reference));
+            bindings.put(normalize(referenceInfo.referenceName), wrapReference(reference));
         }
 
-        for (int i = 0; i < persistenceContextRefs.length; i++) {
-            PersistenceContextInfo contextInfo = persistenceContextRefs[i];
+        for (PersistenceContextInfo contextInfo : jndiEnc.persistenceContextRefs) {
+            if (contextInfo.location != null){
+                Reference reference = buildReferenceLocation(contextInfo.location);
+                bindings.put(normalize(contextInfo.referenceName), wrapReference(reference));
+                continue;
+            }
+
             EntityManagerFactory factory = findEntityManagerFactory(contextInfo.persistenceUnitName);
 
             JtaEntityManager jtaEntityManager = new JtaEntityManager(jtaEntityManagerRegistry, factory, contextInfo.properties, contextInfo.extended);
@@ -294,6 +261,20 @@
             bindings.put(normalize(contextInfo.referenceName), wrapReference(reference));
         }
 
+        for (MessageDestinationReferenceInfo referenceInfo : jndiEnc.messageDestinationRefs) {
+            if (referenceInfo.location != null){
+                Reference reference = buildReferenceLocation(referenceInfo.location);
+                bindings.put(normalize(referenceInfo.referenceName), wrapReference(reference));
+            }
+        }
+
+        for (ServiceReferenceInfo referenceInfo : jndiEnc.serviceRefs) {
+            if (referenceInfo.location != null){
+                Reference reference = buildReferenceLocation(referenceInfo.location);
+                bindings.put(normalize(referenceInfo.referenceName), wrapReference(reference));
+            }
+        }
+
         IvmContext enc = new IvmContext(new NameNode(null, new ParsedName("comp"), null));
         try {
             enc.createSubcontext("comp/env");
@@ -302,8 +283,7 @@
             throw new IllegalStateException("Unable to create subcontext 'java:comp/env'.  Exception:"+e.getMessage(),e);
         }
 
-        for (Iterator iterator = bindings.entrySet().iterator(); iterator.hasNext();) {
-            Map.Entry entry = (Map.Entry) iterator.next();
+        for (Map.Entry<String, Object> entry : bindings.entrySet()) {
             String name = (String) entry.getKey();
             Object value = entry.getValue();
             try {
@@ -315,6 +295,15 @@
         return enc;
     }
 
+    private Reference buildReferenceLocation(ReferenceLocationInfo location) {
+        if (location.jndiProviderId != null){
+            String subContextName = "java:openejb/remote_jndi_contexts/" + location.jndiProviderId;
+            return new JndiReference(subContextName, location.jndiName);
+        } else {
+            return new JndiUrlReference(location.jndiName);
+        }
+    }
+
     private String normalize(String name) {
         if (name.charAt(0) == '/')
             name = name.substring(1);
@@ -376,7 +365,7 @@
             return new org.apache.openejb.core.mdb.MdbEncUserTransaction((CoreUserTransaction) userTransaction);
         }
     }
-    
+
 
     private static class DefaultReferenceWrapper extends ReferenceWrapper {
         Object wrap(Reference reference) {
@@ -387,7 +376,7 @@
             return reference;
         }
     }
-    
+
     public EntityManagerFactory findEntityManagerFactory(String persistenceName) throws OpenEJBException {
         EntityManagerFactory factory;
         if (persistenceName != null) {
@@ -410,29 +399,29 @@
      * path.The paths are calculated relative to the referencing component jar. See 16.10.2 in ejb core spec.
      */
     private EntityManagerFactory findEntityManagerFactory(Map<String, Map<String, EntityManagerFactory>> allFactories, String path, String puName) throws OpenEJBException{
-    	int index = puName.indexOf("#");
-    	String relativePath = puName.substring(0,index);
-    	String unitName = puName.substring(index+1,puName.length());
-    	if(new File(path).isFile()){
-    		path=path.substring(0,path.lastIndexOf(File.separator));
-    	}    	
-    	while(relativePath.startsWith("../")){
-    		relativePath = relativePath.substring(3,relativePath.length());
-    		path = path.substring(0,path.lastIndexOf(File.separator));
-    	}
-    	
-    	while(relativePath.startsWith("./")){
-    		relativePath = relativePath.substring(2,relativePath.length());    		
-    	}
-    	path = path + File.separator + relativePath;    	
-		path = new File(path).getPath();		
-    	Map factories = allFactories.get(path);
-    	if (factories != null){
-    		EntityManagerFactory factory = (EntityManagerFactory)factories.get(unitName);
-    		if(factory != null){
-    			return factory;     		 
-    		}
-    	}
-    	throw new OpenEJBException("The persistence unit referred by the persistence-unit-name tag "+puName+" could not be found");   	
+        int index = puName.indexOf("#");
+        String relativePath = puName.substring(0,index);
+        String unitName = puName.substring(index+1,puName.length());
+        if(new File(path).isFile()){
+            path=path.substring(0,path.lastIndexOf(File.separator));
+        }
+        while(relativePath.startsWith("../")){
+            relativePath = relativePath.substring(3,relativePath.length());
+            path = path.substring(0,path.lastIndexOf(File.separator));
+        }
+
+        while(relativePath.startsWith("./")){
+            relativePath = relativePath.substring(2,relativePath.length());
+        }
+        path = path + File.separator + relativePath;
+        path = new File(path).getPath();
+        Map factories = allFactories.get(path);
+        if (factories != null){
+            EntityManagerFactory factory = (EntityManagerFactory)factories.get(unitName);
+            if(factory != null){
+                return factory;
+            }
+        }
+        throw new OpenEJBException("The persistence unit referred by the persistence-unit-name tag "+puName+" could not be found");
     }
 }

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncInfo.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncInfo.java?view=diff&rev=497349&r1=497348&r2=497349
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncInfo.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncInfo.java Thu Jan 18 00:38:33 2007
@@ -28,5 +28,7 @@
     public final List<ResourceReferenceInfo> resourceRefs = new ArrayList<ResourceReferenceInfo>();
     public final List<PersistenceUnitInfo> persistenceUnitRefs = new ArrayList<PersistenceUnitInfo>();
     public final List<PersistenceContextInfo> persistenceContextRefs = new ArrayList<PersistenceContextInfo>();
-    public final List <ResourceEnvReferenceInfo> resourceEnvRefs = new ArrayList<ResourceEnvReferenceInfo>();
+    public final List<ResourceEnvReferenceInfo> resourceEnvRefs = new ArrayList<ResourceEnvReferenceInfo>();
+    public final List<MessageDestinationReferenceInfo> messageDestinationRefs = new ArrayList<MessageDestinationReferenceInfo>();
+    public final List<ServiceReferenceInfo> serviceRefs = new ArrayList<ServiceReferenceInfo>();
 }

Added: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/MessageDestinationReferenceInfo.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/MessageDestinationReferenceInfo.java?view=auto&rev=497349
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/MessageDestinationReferenceInfo.java (added)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/MessageDestinationReferenceInfo.java Thu Jan 18 00:38:33 2007
@@ -0,0 +1,27 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.openejb.assembler.classic;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class MessageDestinationReferenceInfo extends InjectableInfo {
+
+    public String referenceName;
+    
+    public ReferenceLocationInfo location;
+}

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/PersistenceContextInfo.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/PersistenceContextInfo.java?view=diff&rev=497349&r1=497348&r2=497349
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/PersistenceContextInfo.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/PersistenceContextInfo.java Thu Jan 18 00:38:33 2007
@@ -26,5 +26,7 @@
     public String referenceName;
     public String persistenceUnitName;
     public boolean extended;
-    public final Properties properties = new Properties(); 
+    public final Properties properties = new Properties();
+
+    public ReferenceLocationInfo location;
 }

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/PersistenceUnitInfo.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/PersistenceUnitInfo.java?view=diff&rev=497349&r1=497348&r2=497349
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/PersistenceUnitInfo.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/PersistenceUnitInfo.java Thu Jan 18 00:38:33 2007
@@ -22,4 +22,6 @@
 public class PersistenceUnitInfo extends InjectableInfo {
     public String referenceName;
     public String persistenceUnitName;
+
+    public ReferenceLocationInfo location;
 }

Copied: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ReferenceLocationInfo.java (from r497307, incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ResourceReferenceLocationInfo.java)
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ReferenceLocationInfo.java?view=diff&rev=497349&p1=incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ResourceReferenceLocationInfo.java&r1=497307&p2=incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ReferenceLocationInfo.java&r2=497349
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ResourceReferenceLocationInfo.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ReferenceLocationInfo.java Thu Jan 18 00:38:33 2007
@@ -16,10 +16,9 @@
  */
 package org.apache.openejb.assembler.classic;
 
-public class ResourceReferenceLocationInfo extends InfoObject {
+public class ReferenceLocationInfo extends InfoObject {
 
-    public boolean remote;
-    public String remoteRefName;
-    public String jndiContextId;
+    public String jndiProviderId;
+    public String jndiName;
 
 }

Propchange: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ReferenceLocationInfo.java
------------------------------------------------------------------------------
    svn:keywords = Date Rev Author Id Revision HeadURL

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ResourceEnvReferenceInfo.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ResourceEnvReferenceInfo.java?view=diff&rev=497349&r1=497348&r2=497349
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ResourceEnvReferenceInfo.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ResourceEnvReferenceInfo.java Thu Jan 18 00:38:33 2007
@@ -21,5 +21,6 @@
     public String resourceEnvRefType;
     public String mappedName;
     public String resourceID;
-    public ResourceEnvReferenceLocationInfo location;
+
+    public ReferenceLocationInfo location;
 }

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ResourceReferenceInfo.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ResourceReferenceInfo.java?view=diff&rev=497349&r1=497348&r2=497349
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ResourceReferenceInfo.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ResourceReferenceInfo.java Thu Jan 18 00:38:33 2007
@@ -23,5 +23,6 @@
     public String referenceAuth;
     public String resourceID;
     public java.util.Properties properties;
-    public ResourceReferenceLocationInfo location;
+
+    public ReferenceLocationInfo location;
 }

Added: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ServiceReferenceInfo.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ServiceReferenceInfo.java?view=auto&rev=497349
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ServiceReferenceInfo.java (added)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ServiceReferenceInfo.java Thu Jan 18 00:38:33 2007
@@ -0,0 +1,27 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.openejb.assembler.classic;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class ServiceReferenceInfo extends InjectableInfo {
+
+    public String referenceName;
+
+    public ReferenceLocationInfo location;
+}

Added: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/JndiUrlReference.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/JndiUrlReference.java?view=auto&rev=497349
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/JndiUrlReference.java (added)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/JndiUrlReference.java Thu Jan 18 00:38:33 2007
@@ -0,0 +1,37 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.openejb.core.ivm.naming;
+
+import org.apache.openejb.spi.ContainerSystem;
+import org.apache.openejb.loader.SystemInstance;
+
+import javax.naming.*;
+import javax.naming.NamingException;
+import java.util.Hashtable;
+
+public class JndiUrlReference implements Reference {
+    private String jndiName;
+
+    public JndiUrlReference(String jndiName) {
+        this.jndiName = jndiName;
+    }
+
+    public Object getObject() throws javax.naming.NamingException {
+        return new InitialContext().lookup(jndiName);
+    }
+
+}

Modified: incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/EjbLocalRef.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/EjbLocalRef.java?view=diff&rev=497349&r1=497348&r2=497349
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/EjbLocalRef.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/EjbLocalRef.java Thu Jan 18 00:38:33 2007
@@ -62,7 +62,7 @@
         "mappedName",
         "injectionTarget"
         })
-public class EjbLocalRef implements Injectable {
+public class EjbLocalRef implements JndiReference {
 
     @XmlElement(required = true)
     protected List<Text> description;
@@ -98,6 +98,20 @@
         this.localHome = ref.getHome();
     }
 
+    public String getName() {
+        return getEjbRefName();
+    }
+
+    public String getType() {
+        return getEjbRefType().name();
+    }
+
+    public void setName(String name) {
+        setEjbRefName(name);
+    }
+
+    public void setType(String type) {
+    }
 
 
     public List<Text> getDescription() {

Modified: incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/EjbRef.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/EjbRef.java?view=diff&rev=497349&r1=497348&r2=497349
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/EjbRef.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/EjbRef.java Thu Jan 18 00:38:33 2007
@@ -64,7 +64,7 @@
         "mappedName",
         "injectionTarget"
         })
-public class EjbRef implements Injectable {
+public class EjbRef implements JndiReference {
 
     @XmlElement(required = true)
     protected List<Text> description;
@@ -90,14 +90,14 @@
     }
 
     @XmlTransient
-    protected Type type = Type.REMOTE;
+    protected Type refType = Type.REMOTE;
 
-    public Type getType() {
-        return type;
+    public Type getRefType() {
+        return refType;
     }
 
-    public void setType(Type type) {
-        this.type = type;
+    public void setRefType(Type refType) {
+        this.refType = refType;
     }
 
     public List<Text> getDescription() {
@@ -109,6 +109,21 @@
 
     public String getEjbRefName() {
         return ejbRefName;
+    }
+
+    public String getName() {
+        return getEjbRefName();
+    }
+
+    public String getType() {
+        return getEjbRefType().name();
+    }
+
+    public void setName(String name) {
+        setEjbRefName(name);
+    }
+
+    public void setType(String type) {
     }
 
     /**

Modified: incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/MessageDestinationRef.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/MessageDestinationRef.java?view=diff&rev=497349&r1=497348&r2=497349
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/MessageDestinationRef.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/MessageDestinationRef.java Thu Jan 18 00:38:33 2007
@@ -76,7 +76,7 @@
         "mappedName",
         "injectionTarget"
         })
-public class MessageDestinationRef implements Injectable {
+public class MessageDestinationRef implements JndiReference {
 
     @XmlElement(required = true)
     protected List<Text> description;

Modified: incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/PersistenceContextRef.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/PersistenceContextRef.java?view=diff&rev=497349&r1=497348&r2=497349
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/PersistenceContextRef.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/PersistenceContextRef.java Thu Jan 18 00:38:33 2007
@@ -71,7 +71,7 @@
         "mappedName",
         "injectionTarget"
         })
-public class PersistenceContextRef implements Injectable {
+public class PersistenceContextRef implements JndiReference {
 
     @XmlElement(required = true)
     protected List<Text> description;
@@ -91,6 +91,21 @@
     @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
     @XmlID
     protected String id;
+
+    public String getName() {
+        return getPersistenceContextRefName();
+    }
+
+    public String getType() {
+        return getPersistenceContextType().name();
+    }
+
+    public void setName(String name) {
+        setPersistenceContextRefName(name);
+    }
+
+    public void setType(String type) {
+    }
 
     public List<Text> getDescription() {
         if (description == null) {

Modified: incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/PersistenceUnitRef.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/PersistenceUnitRef.java?view=diff&rev=497349&r1=497348&r2=497349
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/PersistenceUnitRef.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/PersistenceUnitRef.java Thu Jan 18 00:38:33 2007
@@ -64,7 +64,7 @@
         "mappedName",
         "injectionTarget"
         })
-public class PersistenceUnitRef implements Injectable {
+public class PersistenceUnitRef implements JndiReference {
 
     @XmlElement(required = true)
     protected List<Text> description;
@@ -80,6 +80,21 @@
     @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
     @XmlID
     protected String id;
+
+    public String getName() {
+        return getPersistenceUnitRefName();
+    }
+
+    public String getType() {
+        return getPersistenceUnitName();
+    }
+
+    public void setName(String name) {
+        setPersistenceUnitRefName(name);
+    }
+
+    public void setType(String type) {
+    }
 
     public List<Text> getDescription() {
         if (description == null) {

Modified: incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/ServiceRef.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/ServiceRef.java?view=diff&rev=497349&r1=497348&r2=497349
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/ServiceRef.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/ServiceRef.java Thu Jan 18 00:38:33 2007
@@ -56,7 +56,7 @@
         "mappedName",
         "injectionTarget"
         })
-public class ServiceRef implements Injectable {
+public class ServiceRef implements JndiReference {
 
     @XmlElement(required = true)
     protected List<Text> description;
@@ -90,6 +90,21 @@
     @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
     @XmlID
     protected String id;
+
+    public String getName() {
+        return getServiceRefName();
+    }
+
+    public String getType() {
+        return getServiceRefType();
+    }
+
+    public void setName(String name) {
+        setServiceRefName(name);
+    }
+
+    public void setType(String type) {
+    }
 
     public List<Text> getDescription() {
         if (description == null) {