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 2006/12/07 12:50:06 UTC

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

Author: dblevins
Date: Thu Dec  7 03:49:58 2006
New Revision: 483427

URL: http://svn.apache.org/viewvc?view=rev&rev=483427
Log:
OPENEJB-100: Dependency Injection: Setter,  OPENEJB-99: Dependency Injection: Public field
OPENEJB-232: javax.ejb.EJB,  OPENEJB-233: javax.ejb.EJBs

Added:
    incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/JndiReference.java
Modified:
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/DeploymentInfo.java
    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/assembler/classic/EnterpriseBeanBuilder.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/spring/EncBuilder.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/CoreDeploymentInfo.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulInstanceManager.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/resources/META-INF/org.apache.openejb/spring.xml
    incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/EjbJar.java
    incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/EnvEntry.java
    incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/Injectable.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/ResourceEnvRef.java
    incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/ResourceRef.java

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/DeploymentInfo.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/DeploymentInfo.java?view=diff&rev=483427&r1=483426&r2=483427
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/DeploymentInfo.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/DeploymentInfo.java Thu Dec  7 03:49:58 2006
@@ -19,6 +19,7 @@
 import java.lang.reflect.Method;
 import java.util.Collection;
 import java.util.Map;
+import java.util.List;
 
 public interface DeploymentInfo {
 
@@ -85,6 +86,8 @@
     Method getPreDestroy();
 
     Method getPrePassivate();
+
+    List<Injection> getInjections();
 
     void setContainer(Container container);
 

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=483427&r1=483426&r2=483427
==============================================================================
--- 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 Dec  7 03:49:58 2006
@@ -37,11 +37,15 @@
 import org.apache.openejb.jee.InjectionTarget;
 import org.apache.openejb.jee.JndiConsumer;
 import org.apache.openejb.jee.EjbLocalRef;
+import org.apache.openejb.jee.EnvEntry;
+import org.apache.openejb.jee.JndiReference;
 import org.apache.openejb.util.Logger;
 import org.apache.xbean.finder.ClassFinder;
 
 import javax.annotation.PostConstruct;
 import javax.annotation.PreDestroy;
+import javax.annotation.Resource;
+import javax.annotation.Resources;
 import javax.ejb.Local;
 import javax.ejb.LocalHome;
 import javax.ejb.PostActivate;
@@ -140,8 +144,11 @@
             for (Class beanClass : classes) {
                 Stateless stateless = (Stateless) beanClass.getAnnotation(Stateless.class);
                 String ejbName = stateless.name().length() == 0 ? beanClass.getSimpleName() : stateless.name();
-                if (ejbJar.getEnterpriseBean(ejbName) == null) {
+                EnterpriseBean enterpriseBean = ejbJar.getEnterpriseBean(ejbName);
+                if (enterpriseBean == null) {
                     ejbJar.addEnterpriseBean(new StatelessBean(ejbName, beanClass.getName()));
+                } else if (enterpriseBean.getEjbClass() == null){
+                    enterpriseBean.setEjbClass(beanClass.getName());
                 }
             }
 
@@ -149,8 +156,11 @@
             for (Class beanClass : classes) {
                 Stateful stateful = (Stateful) beanClass.getAnnotation(Stateful.class);
                 String ejbName = stateful.name().length() == 0 ? beanClass.getSimpleName() : stateful.name();
-                if (ejbJar.getEnterpriseBean(ejbName) == null) {
+                EnterpriseBean enterpriseBean = ejbJar.getEnterpriseBean(ejbName);
+                if (enterpriseBean == null) {
                     ejbJar.addEnterpriseBean(new StatefulBean(ejbName, beanClass.getName()));
+                } else if (enterpriseBean.getEjbClass() == null){
+                    enterpriseBean.setEjbClass(beanClass.getName());
                 }
             }
 
@@ -158,13 +168,16 @@
             for (Class beanClass : classes) {
                 MessageDriven mdb = (MessageDriven) beanClass.getAnnotation(MessageDriven.class);
                 String ejbName = mdb.name().length() == 0 ? beanClass.getSimpleName() : mdb.name();
-                if (ejbJar.getEnterpriseBean(ejbName) == null) {
+                EnterpriseBean enterpriseBean = ejbJar.getEnterpriseBean(ejbName);
+                if (enterpriseBean == null) {
                     MessageDrivenBean messageBean = new MessageDrivenBean(ejbName);
                     Class interfce = mdb.messageListenerInterface();
                     if (interfce != null){
                         messageBean.setMessagingType(interfce.getName());
                     }
                     ejbJar.addEnterpriseBean(messageBean);
+                } else if (enterpriseBean.getEjbClass() == null){
+                    enterpriseBean.setEjbClass(beanClass.getName());
                 }
             }
 
@@ -427,15 +440,17 @@
         }
 
         private void buildAnnotatedRefs(Class clazz, JndiConsumer consumer) {
-            List<EJB> list = new ArrayList<EJB>();
+            List<EJB> ejbList = new ArrayList<EJB>();
             EJBs ejbs = (EJBs) clazz.getAnnotation(EJBs.class);
             if(ejbs != null){
-                list.addAll(Arrays.asList(ejbs.value()));
+                ejbList.addAll(Arrays.asList(ejbs.value()));
+            }
+            EJB e = (EJB) clazz.getAnnotation(EJB.class);
+            if (e != null){
+                ejbList.add(e);
             }
-            list.add((EJB) clazz.getAnnotation(EJB.class));
 
-            for (EJB ejb : list) {
-                if (ejb == null) continue;
+            for (EJB ejb : ejbList) {
 
                 buildEjbRef(consumer, ejb, null);
             }
@@ -457,6 +472,78 @@
 
                 buildEjbRef(consumer, ejb, member);
             }
+
+
+            List<Resource> resourceList = new ArrayList<Resource>();
+            Resources resources = (Resources) clazz.getAnnotation(Resources.class);
+            if(resources != null){
+                resourceList.addAll(Arrays.asList(resources.value()));
+            }
+            Resource r = (Resource) clazz.getAnnotation(Resource.class);
+            if (r != null){
+                resourceList.add(r);
+            }
+
+            for (Resource resource : resourceList) {
+
+                buildResource(consumer, resource, null);
+            }
+
+            for (Field field : finder.findAnnotatedFields(Resource.class)) {
+                Resource resource = field.getAnnotation(Resource.class);
+
+                Member member = new FieldMember(field);
+
+                buildResource(consumer, resource, member);
+            }
+
+            for (Method method : finder.findAnnotatedMethods(Resource.class)) {
+                Resource resource = method.getAnnotation(Resource.class);
+
+                Member member = new MethodMember(method);
+
+                buildResource(consumer, resource, member);
+            }
+
+
+        }
+
+        private void buildResource(JndiConsumer consumer, Resource resource, Member member) {
+            // Get the ref-name
+            String refName = resource.name();
+            if (refName.equals("")){
+                refName = (member == null) ? null : member.getDeclaringClass().getName() + "/" + member.getName();
+            }
+
+            JndiReference reference = null;
+
+            List<EnvEntry> envEntries = consumer.getEnvEntry();
+            for (EnvEntry envEntry : envEntries) {
+                if (envEntry.getName().equals(refName)){
+                    reference = envEntry;
+                    break;
+                }
+            }
+
+            if (reference == null){
+                return;
+            }
+
+//            reference.setName(refName);
+
+            if (member != null){
+                // Set the member name where this will be injected
+                InjectionTarget target = new InjectionTarget();
+                target.setInjectionTargetClass(member.getDeclaringClass().getName());
+                target.setInjectionTargetName(member.getName());
+                reference.getInjectionTarget().add(target);
+            }
+
+            // Override the mapped name if not set
+            if (reference.getMappedName() == null && !resource.mappedName().equals("")){
+                reference.setMappedName(resource.mappedName());
+            }
+
         }
 
         private void buildEjbRef(JndiConsumer consumer, EJB ejb, Member member) {
@@ -598,7 +685,7 @@
             StringBuilder name = new StringBuilder(setter.getName());
 
             // remove 'set'
-            name.delete(0, 2);
+            name.delete(0, 3);
 
             // lowercase first char
             name.setCharAt(0, Character.toLowerCase(name.charAt(0)));

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanBuilder.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanBuilder.java?view=diff&rev=483427&r1=483426&r2=483427
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanBuilder.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanBuilder.java Thu Dec  7 03:49:58 2006
@@ -19,6 +19,7 @@
 import org.apache.openejb.OpenEJBException;
 import org.apache.openejb.SystemException;
 import org.apache.openejb.BeanType;
+import org.apache.openejb.Injection;
 import org.apache.openejb.core.DeploymentContext;
 import org.apache.openejb.core.CoreDeploymentInfo;
 import org.apache.openejb.core.interceptor.InterceptorData;
@@ -130,6 +131,46 @@
             MessageDrivenBeanInfo messageDrivenBeanInfo = (MessageDrivenBeanInfo) bean;
             Class mdbInterface = loadClass(messageDrivenBeanInfo.mdbInterface, "classNotFound.mdbInterface");
             deployment = new CoreDeploymentInfo(deploymentContext, ejbClass, mdbInterface, messageDrivenBeanInfo.activationProperties);
+        }
+
+        for (EnvEntryInfo info : bean.jndiEnc.envEntries) {
+            for (InjectionInfo target : info.targets) {
+                Class targetClass = loadClass(target.className, "classNotFound.injectionTarget");
+                Injection injection = new Injection(info.name, target.propertyName, targetClass);
+                deployment.getInjections().add(injection);
+            }
+        }
+
+        for (EjbReferenceInfo info : bean.jndiEnc.ejbReferences) {
+            for (InjectionInfo target : info.targets) {
+                Class targetClass = loadClass(target.className, "classNotFound.injectionTarget");
+                Injection injection = new Injection(info.referenceName, target.propertyName, targetClass);
+                deployment.getInjections().add(injection);
+            }
+        }
+
+        for (EjbLocalReferenceInfo info : bean.jndiEnc.ejbLocalReferences) {
+            for (InjectionInfo target : info.targets) {
+                Class targetClass = loadClass(target.className, "classNotFound.injectionTarget");
+                Injection injection = new Injection(info.referenceName, target.propertyName, targetClass);
+                deployment.getInjections().add(injection);
+            }
+        }
+
+        for (PersistenceUnitInfo info : bean.jndiEnc.persistenceUnitRefs) {
+            for (InjectionInfo target : info.targets) {
+                Class targetClass = loadClass(target.className, "classNotFound.injectionTarget");
+                Injection injection = new Injection(info.referenceName, target.propertyName, targetClass);
+                deployment.getInjections().add(injection);
+            }
+        }
+
+        for (ResourceReferenceInfo info : bean.jndiEnc.resourceRefs) {
+            for (InjectionInfo target : info.targets) {
+                Class targetClass = loadClass(target.className, "classNotFound.injectionTarget");
+                Injection injection = new Injection(info.referenceName, target.propertyName, targetClass);
+                deployment.getInjections().add(injection);
+            }
         }
 
         deployment.setPostConstruct(getCallback(ejbClass, bean.postConstruct));

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/spring/EncBuilder.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/spring/EncBuilder.java?view=diff&rev=483427&r1=483426&r2=483427
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/spring/EncBuilder.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/spring/EncBuilder.java Thu Dec  7 03:49:58 2006
@@ -135,6 +135,9 @@
                     obj = new Boolean(entry.getValue());
                 } else if (type == Byte.class) {
                     obj = new Byte(entry.getValue());
+                } else if (type == Character.class) {
+                    StringBuilder sb = new StringBuilder(entry.getValue() + " ");
+                    obj = new Character(sb.charAt(0));
                 } else {
                     throw new IllegalArgumentException("Invalid env-ref-type " + type);
                 }

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/CoreDeploymentInfo.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/CoreDeploymentInfo.java?view=diff&rev=483427&r1=483426&r2=483427
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/CoreDeploymentInfo.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/CoreDeploymentInfo.java Thu Dec  7 03:49:58 2006
@@ -25,6 +25,7 @@
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Set;
+import java.util.ArrayList;
 import javax.ejb.EJBHome;
 import javax.ejb.EJBLocalHome;
 import javax.ejb.EJBLocalObject;
@@ -106,6 +107,7 @@
     private final Map<String, List<String>> securityRoleReferenceMap = new HashMap<String, List<String>>();
     private String jarPath;
     private final Map<String, String> activationProperties = new HashMap<String, String>();
+    private final List<Injection> injections = new ArrayList<Injection>();
 
     public Class getInterface(InterfaceType interfaceType) {
         switch(interfaceType){
@@ -188,6 +190,10 @@
             }
         }
         createMethodMap();
+    }
+
+    public List<Injection> getInjections() {
+        return injections;
     }
 
     public Object getContainerData() {

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulInstanceManager.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulInstanceManager.java?view=diff&rev=483427&r1=483426&r2=483427
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulInstanceManager.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulInstanceManager.java Thu Dec  7 03:49:58 2006
@@ -20,6 +20,7 @@
 import org.apache.openejb.InvalidateReferenceException;
 import org.apache.openejb.OpenEJBException;
 import org.apache.openejb.SystemException;
+import org.apache.openejb.Injection;
 import org.apache.openejb.core.CoreDeploymentInfo;
 import org.apache.openejb.core.Operations;
 import org.apache.openejb.core.ThreadContext;
@@ -37,6 +38,8 @@
 import javax.transaction.Transaction;
 import javax.transaction.TransactionManager;
 import javax.transaction.TransactionRolledbackException;
+import javax.naming.Context;
+import javax.naming.NamingException;
 import java.rmi.RemoteException;
 import java.rmi.NoSuchObjectException;
 import java.util.Hashtable;
@@ -106,7 +109,20 @@
             objectRecipe.allow(Option.FIELD_INJECTION);
             objectRecipe.allow(Option.PRIVATE_PROPERTIES);
             objectRecipe.allow(Option.IGNORE_MISSING_PROPERTIES);
-            
+
+            ThreadContext callContext = ThreadContext.getThreadContext();
+            CoreDeploymentInfo deploymentInfo = callContext.getDeploymentInfo();
+            Context ctx = deploymentInfo.getJndiEnc();
+            for (Injection injection : deploymentInfo.getInjections()) {
+                try {
+                    String jndiName = injection.getJndiName();
+                    Object object = ctx.lookup("java:comp/env/" + jndiName);
+                    objectRecipe.setProperty(injection.getName(), new StaticRecipe(object));
+                } catch (NamingException e) {
+                    logger.warning("Injection data not found in enc: jndiName='"+injection.getJndiName()+"', target="+injection.getTarget()+"/"+injection.getName());
+                }
+            }
+
             objectRecipe.setProperty("sessionContext", new StaticRecipe(createSessionContext()));
 
             bean = objectRecipe.create(beanClass.getClassLoader());

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java?view=diff&rev=483427&r1=483426&r2=483427
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java Thu Dec  7 03:49:58 2006
@@ -22,6 +22,7 @@
 import org.apache.xbean.recipe.Option;
 import org.apache.openejb.OpenEJBException;
 import org.apache.openejb.SystemException;
+import org.apache.openejb.Injection;
 import org.apache.openejb.core.CoreDeploymentInfo;
 import org.apache.openejb.core.Operations;
 import org.apache.openejb.core.ThreadContext;
@@ -32,6 +33,8 @@
 
 import javax.ejb.SessionContext;
 import javax.transaction.TransactionManager;
+import javax.naming.Context;
+import javax.naming.NamingException;
 import java.lang.reflect.Method;
 import java.rmi.RemoteException;
 import java.util.HashMap;
@@ -84,20 +87,32 @@
 
         if (bean == null) {
 
-            Class beanClass = callContext.getDeploymentInfo().getBeanClass();
+            CoreDeploymentInfo deploymentInfo = callContext.getDeploymentInfo();
+            Class beanClass = deploymentInfo.getBeanClass();
             ObjectRecipe objectRecipe = new ObjectRecipe(beanClass);
             objectRecipe.allow(Option.FIELD_INJECTION);
             objectRecipe.allow(Option.PRIVATE_PROPERTIES);
             objectRecipe.allow(Option.IGNORE_MISSING_PROPERTIES);
+
             byte originalOperation = callContext.getCurrentOperation();
+
             try {
+                Context ctx = deploymentInfo.getJndiEnc();
+                for (Injection injection : deploymentInfo.getInjections()) {
+                    try {
+                        String jndiName = injection.getJndiName();
+                        Object object = ctx.lookup("java:comp/env/" + jndiName);
+                        objectRecipe.setProperty(injection.getName(), new StaticRecipe(object));
+                    } catch (NamingException e) {
+                        logger.warn("Injection data not found in enc: jndiName='"+injection.getJndiName()+"', target="+injection.getTarget()+"/"+injection.getName());
+                    }
+                }
 
                 callContext.setCurrentOperation(Operations.OP_SET_CONTEXT);
                 objectRecipe.setProperty("sessionContext", new StaticRecipe(createSessionContext()));
                 bean = objectRecipe.create(beanClass.getClassLoader());
                 callContext.setCurrentOperation(Operations.OP_CREATE);
 
-                CoreDeploymentInfo deploymentInfo = callContext.getDeploymentInfo();
                 Method postConstruct = deploymentInfo.getPostConstruct();
                 if (postConstruct != null){
                     postConstruct.invoke(bean);

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/resources/META-INF/org.apache.openejb/spring.xml
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/resources/META-INF/org.apache.openejb/spring.xml?view=diff&rev=483427&r1=483426&r2=483427
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/resources/META-INF/org.apache.openejb/spring.xml (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/resources/META-INF/org.apache.openejb/spring.xml Thu Dec  7 03:49:58 2006
@@ -243,6 +243,36 @@
             </o:jndiContext>
           </o:cmpDeployment>
         </entry>
+        <entry key="client/tests/entity/cmp/ContextLookupCmpBean">
+          <o:cmpDeployment id="client/tests/entity/cmp/ContextLookupCmpBean" homeInterface="org.apache.openejb.test.entity.cmp.EncCmpHome"
+              remoteInterface="org.apache.openejb.test.entity.cmp.EncCmpObject"
+              beanClass="org.apache.openejb.test.entity.cmp.ContextLookupCmpBean"
+              classLoader="#classLoader"
+              transactionManager="#transactionManager" assembly="#assembly" reentrant="false"
+              pkClass="java.lang.Integer" primKeyField="primaryKey">
+            <o:jndiContext>
+              <o:enc>
+                <o:envEntry jndiName="entity/cmp/references/Boolean" type="java.lang.Boolean" value="true"/>
+                <o:envEntry jndiName="entity/cmp/references/String" type="java.lang.String" value="1"/>
+                <o:envEntry jndiName="entity/cmp/references/Double" type="java.lang.Double" value="1"/>
+                <o:envEntry jndiName="entity/cmp/references/Long" type="java.lang.Long" value="1"/>
+                <o:envEntry jndiName="entity/cmp/references/Float" type="java.lang.Float" value="1"/>
+                <o:envEntry jndiName="entity/cmp/references/Integer" type="java.lang.Integer" value="1"/>
+                <o:envEntry jndiName="entity/cmp/references/Short" type="java.lang.Short" value="1"/>
+                <o:envEntry jndiName="entity/cmp/references/Byte" type="java.lang.Byte" value="1"/>
+                <o:envEntry jndiName="entity/cmp/references/Character" type="java.lang.Character" value="D"/>
+                <o:ejbRef jndiName="entity/cmp/beanReferences/cmp_entity" local="false"
+                    ejbId="client/tests/entity/cmp/BasicCmpHome"/>
+                <o:ejbRef jndiName="entity/cmp/beanReferences/stateful" local="false"
+                    ejbId="client/tests/stateful/BasicStatefulHome"/>
+                <o:ejbRef jndiName="entity/cmp/beanReferences/stateless" local="false"
+                    ejbId="client/tests/stateless/BasicStatelessHome"/>
+                <o:resourceRef jndiName="datasource" resourceId="Default JDBC Database"/>
+                <o:resourceRef jndiName="jdbc/basic/entityDatabase" resourceId="Default JDBC Database"/>
+              </o:enc>
+            </o:jndiContext>
+          </o:cmpDeployment>
+        </entry>
         <entry key="client/tests/entity/cmp/allowed_operations/EntityHome">
           <o:cmpDeployment id="client/tests/entity/cmp/allowed_operations/EntityHome"
               homeInterface="org.apache.openejb.test.entity.cmp.BasicCmpHome"
@@ -327,6 +357,36 @@
             </o:jndiContext>
           </o:bmpDeployment>
         </entry>
+        <entry key="client/tests/entity/bmp/ContextLookupBmpBean">
+          <o:bmpDeployment id="client/tests/entity/bmp/ContextLookupBmpBean" homeInterface="org.apache.openejb.test.entity.bmp.EncBmpHome"
+              remoteInterface="org.apache.openejb.test.entity.bmp.EncBmpObject"
+              beanClass="org.apache.openejb.test.entity.bmp.ContextLookupBmpBean"
+              classLoader="#classLoader"
+              transactionManager="#transactionManager" assembly="#assembly" reentrant="false"
+              pkClass="java.lang.Integer">
+            <o:jndiContext>
+              <o:enc>
+                <o:envEntry jndiName="entity/bmp/references/Boolean" type="java.lang.Boolean" value="true"/>
+                <o:envEntry jndiName="entity/bmp/references/String" type="java.lang.String" value="1"/>
+                <o:envEntry jndiName="entity/bmp/references/Double" type="java.lang.Double" value="1"/>
+                <o:envEntry jndiName="entity/bmp/references/Long" type="java.lang.Long" value="1"/>
+                <o:envEntry jndiName="entity/bmp/references/Float" type="java.lang.Float" value="1"/>
+                <o:envEntry jndiName="entity/bmp/references/Integer" type="java.lang.Integer" value="1"/>
+                <o:envEntry jndiName="entity/bmp/references/Short" type="java.lang.Short" value="1"/>
+                <o:envEntry jndiName="entity/bmp/references/Byte" type="java.lang.Byte" value="1"/>
+                <o:envEntry jndiName="entity/bmp/references/Character" type="java.lang.Character" value="D"/>
+                <o:ejbRef jndiName="entity/bmp/beanReferences/bmp_entity" local="false"
+                    ejbId="client/tests/entity/bmp/BasicBmpHome"/>
+                <o:ejbRef jndiName="entity/bmp/beanReferences/stateful" local="false"
+                    ejbId="client/tests/stateful/BasicStatefulHome"/>
+                <o:ejbRef jndiName="entity/bmp/beanReferences/stateless" local="false"
+                    ejbId="client/tests/stateless/BasicStatelessHome"/>
+                <o:resourceRef jndiName="datasource" resourceId="Default JDBC Database"/>
+                <o:resourceRef jndiName="jdbc/basic/entityDatabase" resourceId="Default JDBC Database"/>
+              </o:enc>
+            </o:jndiContext>
+          </o:bmpDeployment>
+        </entry>
         <entry key="client/tests/entity/bmp/allowed_operations/EntityHome">
           <o:bmpDeployment id="client/tests/entity/bmp/allowed_operations/EntityHome"
               homeInterface="org.apache.openejb.test.entity.bmp.BasicBmpHome"
@@ -411,6 +471,35 @@
             </o:jndiContext>
           </o:statefulDeployment>
         </entry>
+        <entry key="client/tests/stateful/ContextLookupStatefulBean">
+          <o:statefulDeployment id="client/tests/stateful/ContextLookupStatefulBean"
+              homeInterface="org.apache.openejb.test.stateful.EncStatefulHome"
+              remoteInterface="org.apache.openejb.test.stateful.EncStatefulObject"
+              beanClass="org.apache.openejb.test.stateful.ContextLookupStatefulBean"
+              classLoader="#classLoader"
+              transactionManager="#transactionManager" assembly="#assembly" beanManagedTransaction="true">
+            <o:jndiContext>
+              <o:enc>
+                <o:envEntry jndiName="stateful/references/Boolean" type="java.lang.Boolean" value="true"/>
+                <o:envEntry jndiName="stateful/references/String" type="java.lang.String" value="1"/>
+                <o:envEntry jndiName="stateful/references/Double" type="java.lang.Double" value="1"/>
+                <o:envEntry jndiName="stateful/references/Long" type="java.lang.Long" value="1"/>
+                <o:envEntry jndiName="stateful/references/Float" type="java.lang.Float" value="1"/>
+                <o:envEntry jndiName="stateful/references/Integer" type="java.lang.Integer" value="1"/>
+                <o:envEntry jndiName="stateful/references/Short" type="java.lang.Short" value="1"/>
+                <o:envEntry jndiName="stateful/references/Byte" type="java.lang.Byte" value="1"/>
+                <o:envEntry jndiName="stateful/references/Character" type="java.lang.Character" value="D"/>
+                <o:ejbRef jndiName="stateful/beanReferences/bmp_entity" local="false"
+                    ejbId="client/tests/entity/bmp/BasicBmpHome"/>
+                <o:ejbRef jndiName="stateful/beanReferences/stateful" local="false"
+                    ejbId="client/tests/stateful/BasicStatefulHome"/>
+                <o:ejbRef jndiName="stateful/beanReferences/stateless" local="false"
+                    ejbId="client/tests/stateless/BasicStatelessHome"/>
+                <o:resourceRef jndiName="datasource" resourceId="Default JDBC Database"/>
+              </o:enc>
+            </o:jndiContext>
+          </o:statefulDeployment>
+        </entry>
         <entry key="client/tests/stateful/BeanManagedTransactionTests/EJBHome">
           <o:statefulDeployment id="client/tests/stateful/BeanManagedTransactionTests/EJBHome"
               homeInterface="org.apache.openejb.test.stateful.BeanTxStatefulHome"
@@ -490,6 +579,39 @@
               homeInterface="org.apache.openejb.test.stateless.EncStatelessHome"
               remoteInterface="org.apache.openejb.test.stateless.EncStatelessObject"
               beanClass="org.apache.openejb.test.stateless.EncStatelessBean"
+              classLoader="#classLoader"
+              transactionManager="#transactionManager" assembly="#assembly" beanManagedTransaction="true">
+            <o:jndiContext>
+              <o:enc>
+                <o:envEntry jndiName="stateless/references/JNDI_access_to_java_comp_env" type="java.lang.String"
+                    value="Success"/>
+                <o:envEntry jndiName="stateless/references/Boolean" type="java.lang.Boolean" value="true"/>
+                <o:envEntry jndiName="stateless/references/String" type="java.lang.String" value="1"/>
+                <o:envEntry jndiName="stateless/references/Double" type="java.lang.Double" value="1"/>
+                <o:envEntry jndiName="stateless/references/Long" type="java.lang.Long" value="1"/>
+                <o:envEntry jndiName="stateless/references/Float" type="java.lang.Float" value="1"/>
+                <o:envEntry jndiName="stateless/references/Integer" type="java.lang.Integer" value="1"/>
+                <o:envEntry jndiName="stateless/references/Short" type="java.lang.Short" value="1"/>
+                <o:envEntry jndiName="stateless/references/Byte" type="java.lang.Byte" value="1"/>
+                <o:envEntry jndiName="stateless/references/Character" type="java.lang.Character" value="D"/>
+                <o:ejbRef jndiName="stateless/beanReferences/Enterprise_bean_access" local="false"
+                    ejbId="client/tests/stateful/BasicStatefulHome"/>
+                <o:ejbRef jndiName="stateless/beanReferences/bmp_entity" local="false"
+                    ejbId="client/tests/entity/bmp/BasicBmpHome"/>
+                <o:ejbRef jndiName="stateless/beanReferences/stateful" local="false"
+                    ejbId="client/tests/stateful/BasicStatefulHome"/>
+                <o:ejbRef jndiName="stateless/beanReferences/stateless" local="false"
+                    ejbId="client/tests/stateless/BasicStatelessHome"/>
+                <o:resourceRef jndiName="datasource" resourceId="Default JDBC Database"/>
+              </o:enc>
+            </o:jndiContext>
+          </o:statelessDeployment>
+        </entry>
+        <entry key="client/tests/stateless/ContextLookupStatelessBean">
+          <o:statelessDeployment id="client/tests/stateless/ContextLookupStatelessBean"
+              homeInterface="org.apache.openejb.test.stateless.EncStatelessHome"
+              remoteInterface="org.apache.openejb.test.stateless.EncStatelessObject"
+              beanClass="org.apache.openejb.test.stateless.ContextLookupStatelessBean"
               classLoader="#classLoader"
               transactionManager="#transactionManager" assembly="#assembly" beanManagedTransaction="true">
             <o:jndiContext>

Modified: incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/EjbJar.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/EjbJar.java?view=diff&rev=483427&r1=483426&r2=483427
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/EjbJar.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/EjbJar.java Thu Dec  7 03:49:58 2006
@@ -145,12 +145,12 @@
         for (EnterpriseBean e : v) enterpriseBeans.put(e.getEjbName(), e);
     }
 
-    public JndiConsumer addEnterpriseBean(EnterpriseBean bean){
+    public EnterpriseBean addEnterpriseBean(EnterpriseBean bean){
         enterpriseBeans.put(bean.getEjbName(), bean);
         return bean;
     }
 
-    public JndiConsumer getEnterpriseBean(String ejbName){
+    public EnterpriseBean getEnterpriseBean(String ejbName){
         return enterpriseBeans.get(ejbName);
     }
 

Modified: incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/EnvEntry.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/EnvEntry.java?view=diff&rev=483427&r1=483426&r2=483427
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/EnvEntry.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/EnvEntry.java Thu Dec  7 03:49:58 2006
@@ -24,6 +24,7 @@
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlID;
 import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.XmlTransient;
 import javax.xml.bind.annotation.adapters.CollapsedStringAdapter;
 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 import java.util.ArrayList;
@@ -60,7 +61,7 @@
         "mappedName",
         "injectionTarget"
         })
-public class EnvEntry implements Injectable {
+public class EnvEntry implements JndiReference {
 
     @XmlElement(required = true)
     protected List<Text> description;
@@ -78,6 +79,24 @@
     @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
     @XmlID
     protected String id;
+
+    @XmlTransient
+    public String getName() {
+        return getEnvEntryName();
+    }
+
+    @XmlTransient
+    public String getType() {
+        return getEnvEntryType();
+    }
+
+    public void setName(String name) {
+        setEnvEntryName(name);
+    }
+
+    public void setType(String type) {
+        setEnvEntryType(type);
+    }
 
     public List<Text> getDescription() {
         if (description == null) {

Modified: incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/Injectable.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/Injectable.java?view=diff&rev=483427&r1=483426&r2=483427
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/Injectable.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/Injectable.java Thu Dec  7 03:49:58 2006
@@ -23,4 +23,5 @@
  */
 public interface Injectable {
     public List<InjectionTarget> getInjectionTarget();
+
 }

Added: incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/JndiReference.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/JndiReference.java?view=auto&rev=483427
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/JndiReference.java (added)
+++ incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/JndiReference.java Thu Dec  7 03:49:58 2006
@@ -0,0 +1,31 @@
+/**
+ * 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.jee;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public interface JndiReference extends Injectable {
+    String getName();
+    void setName(String name);
+
+    String getType();
+    void setType(String type);
+
+    String getMappedName();
+    void setMappedName(String mappedName);
+}

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=483427&r1=483426&r2=483427
==============================================================================
--- 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 Dec  7 03:49:58 2006
@@ -24,6 +24,7 @@
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlID;
 import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.XmlTransient;
 import javax.xml.bind.annotation.adapters.CollapsedStringAdapter;
 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 import java.util.ArrayList;
@@ -95,6 +96,24 @@
     @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
     @XmlID
     protected String id;
+
+    @XmlTransient
+    public String getName() {
+        return getMessageDestinationRefName();
+    }
+
+    @XmlTransient
+    public String getType() {
+        return getMessageDestinationType();
+    }
+
+    public void setName(String name) {
+        setMessageDestinationRefName(name);
+    }
+
+    public void setType(String type) {
+        setMessageDestinationType(type);
+    }
 
     public List<Text> getDescription() {
         if (description == null) {

Modified: incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/ResourceEnvRef.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/ResourceEnvRef.java?view=diff&rev=483427&r1=483426&r2=483427
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/ResourceEnvRef.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/ResourceEnvRef.java Thu Dec  7 03:49:58 2006
@@ -24,6 +24,7 @@
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlID;
 import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.XmlTransient;
 import javax.xml.bind.annotation.adapters.CollapsedStringAdapter;
 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 import java.util.ArrayList;
@@ -66,7 +67,7 @@
         "mappedName",
         "injectionTarget"
         })
-public class ResourceEnvRef implements Injectable {
+public class ResourceEnvRef implements JndiReference {
 
     @XmlElement(required = true)
     protected List<Text> description;
@@ -82,6 +83,24 @@
     @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
     @XmlID
     protected String id;
+
+    @XmlTransient
+    public String getName() {
+        return getResourceEnvRefName();
+    }
+
+    @XmlTransient
+    public String getType() {
+        return getResourceEnvRefType();
+    }
+
+    public void setName(String name) {
+        setResourceEnvRefName(name);
+    }
+
+    public void setType(String type) {
+        setResourceEnvRefType(type);
+    }
 
     public List<Text> getDescription() {
         if (description == null) {

Modified: incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/ResourceRef.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/ResourceRef.java?view=diff&rev=483427&r1=483426&r2=483427
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/ResourceRef.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/ResourceRef.java Thu Dec  7 03:49:58 2006
@@ -70,7 +70,7 @@
         "mappedName",
         "injectionTarget"
         })
-public class ResourceRef implements Injectable {
+public class ResourceRef implements JndiReference {
 
     @XmlElement(required = true)
     protected List<Text> description;
@@ -93,6 +93,25 @@
 
     @XmlTransient
     protected String resLink;
+
+    @XmlTransient
+    public String getName() {
+        return getResRefName();
+    }
+
+    @XmlTransient
+    public String getType() {
+        return getResType();
+    }
+
+    public void setName(String name) {
+        setResRefName(name);
+    }
+
+    public void setType(String type) {
+        setResType(type);
+    }
+
 
     public List<Text> getDescription() {
         if (description == null) {