[jboss-cvs] JBossAS SVN: r76756 - in projects/metadata/trunk/src: main/java/org/jboss/metadata/annotation/creator/ws and 3 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu Aug 7 06:17:14 EDT 2008


Author: emuckenhuber
Date: 2008-08-07 06:17:14 -0400 (Thu, 07 Aug 2008)
New Revision: 76756

Added:
   projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/AbstractInjectionTargetProcessor.java
   projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/web/injection/
   projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/web/injection/RequestAttributeListener.java
   projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/web/injection/ServletFilter.java
   projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/web/injection/StatefulIF.java
   projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/web/injection/StatefulLocalIF.java
   projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/web/injection/TestServlet.java
   projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/web/injection/unit/
   projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/web/injection/unit/WebInjectionTargetUnitTestCase.java
Modified:
   projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/AbstractEJBProcessor.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/AbstractPersistenceContextProcessor.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/AbstractProcessor.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/AbstractResourceProcessor.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ws/AbstractWebServiceRefProcessor.java
Log:
[JBMETA-88] merge injection targets

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/AbstractEJBProcessor.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/AbstractEJBProcessor.java	2008-08-07 09:51:41 UTC (rev 76755)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/AbstractEJBProcessor.java	2008-08-07 10:17:14 UTC (rev 76756)
@@ -40,7 +40,7 @@
  * @version $Revision$
  */
 public abstract class AbstractEJBProcessor<E extends AnnotatedElement>
-   extends AbstractFinderUser
+   extends AbstractInjectionTargetProcessor<E>
 {
    /**
     * @param finder
@@ -62,7 +62,7 @@
    protected void process(AnnotatedEJBReferencesMetaData refs, E element, EJB annotation)
    {
       AnnotatedEJBReferenceMetaData ref = createEJB(annotation, element);
-      refs.add(ref);      
+      addReference(refs, ref);
    }
 
    /**

Added: projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/AbstractInjectionTargetProcessor.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/AbstractInjectionTargetProcessor.java	                        (rev 0)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/AbstractInjectionTargetProcessor.java	2008-08-07 10:17:14 UTC (rev 76756)
@@ -0,0 +1,80 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.metadata.annotation.creator;
+
+import java.lang.reflect.AnnotatedElement;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.jboss.metadata.annotation.finder.AnnotationFinder;
+import org.jboss.metadata.javaee.spec.ResourceInjectionMetaData;
+import org.jboss.metadata.javaee.spec.ResourceInjectionTargetMetaData;
+import org.jboss.metadata.javaee.support.AbstractMappedMetaData;
+
+/**
+ * The AbstractInjectionTargetProcessor.
+ * 
+ * @author <a href="mailto:emuckenh at redhat.com">Emanuel Muckenhuber</a>
+ * @version $Revision$
+ */
+public abstract class AbstractInjectionTargetProcessor<E extends AnnotatedElement> extends AbstractFinderUser
+{
+
+   protected AbstractInjectionTargetProcessor(AnnotationFinder<AnnotatedElement> finder)
+   {
+      super(finder);
+   }
+
+   /**
+    * Add a ResourceInjectionMetaData to a AbstractMappedMetaData, where the 
+    * InjectionTargets are merged if a reference already exists with the same name.
+    * 
+    * @param <T extends ResourceInjectionMetaData>
+    * @param refs the mapped meta data
+    * @param ref the reference
+    */
+   protected <T extends ResourceInjectionMetaData> void addReference(AbstractMappedMetaData<T> refs, T ref)
+   {
+      T existingRef = refs.get(ref.getKey());
+      if (existingRef == null)
+      {
+         refs.add(ref);
+      }
+      else
+      {
+         Set<ResourceInjectionTargetMetaData> injectionTargets = new HashSet<ResourceInjectionTargetMetaData>();
+         if (existingRef.getInjectionTargets() != null && existingRef.getInjectionTargets().size() > 0)
+         {
+            for (ResourceInjectionTargetMetaData target : existingRef.getInjectionTargets())
+               injectionTargets.add(target);
+         }
+         if (ref.getInjectionTargets() != null && ref.getInjectionTargets().size() > 0)
+         {
+            for (ResourceInjectionTargetMetaData target : ref.getInjectionTargets())
+               injectionTargets.add(target);
+         }
+         if (injectionTargets.size() > 0)
+            existingRef.setInjectionTargets(Collections.unmodifiableSet(injectionTargets));
+      }
+   }
+}

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/AbstractPersistenceContextProcessor.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/AbstractPersistenceContextProcessor.java	2008-08-07 09:51:41 UTC (rev 76755)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/AbstractPersistenceContextProcessor.java	2008-08-07 10:17:14 UTC (rev 76756)
@@ -44,7 +44,7 @@
  * @version $Revision$
  */
 public abstract class AbstractPersistenceContextProcessor<E extends AnnotatedElement>
-   extends AbstractFinderUser
+   extends AbstractInjectionTargetProcessor<E>
 {
    /**
     * @param finder
@@ -66,7 +66,7 @@
    protected void process(PersistenceContextReferencesMetaData refs, E element, PersistenceContext annotation)
    {
       PersistenceContextReferenceMetaData ref = createPC(element, annotation);
-      refs.add(ref);      
+      addReference(refs, ref);
    }
 
    protected PersistenceContextReferenceMetaData createPC(E element, PersistenceContext annotation)

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/AbstractProcessor.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/AbstractProcessor.java	2008-08-07 09:51:41 UTC (rev 76755)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/AbstractProcessor.java	2008-08-07 10:17:14 UTC (rev 76756)
@@ -42,6 +42,7 @@
 /**
  * A abstract base processor.
  * 
+ * @author Scott.Stark at jboss.org
  * @author <a href="mailto:emuckenh at redhat.com">Emanuel Muckenhuber</a>
  * @version $Revision$
  */

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/AbstractResourceProcessor.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/AbstractResourceProcessor.java	2008-08-07 09:51:41 UTC (rev 76755)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/AbstractResourceProcessor.java	2008-08-07 10:17:14 UTC (rev 76756)
@@ -87,7 +87,7 @@
  * @version $Revision$
  */
 public abstract class AbstractResourceProcessor<E extends AnnotatedElement>
-   extends AbstractFinderUser
+   extends AbstractInjectionTargetProcessor<E>
 {
    private static Logger log = Logger.getLogger(AbstractResourceProcessor.class);
    private static final Set<String> envEntryTypes = new HashSet<String>();
@@ -176,7 +176,7 @@
             refs.setEnvironmentEntries(env);
          }
          EnvironmentEntryMetaData entry = createEntry(annotation, element);
-         env.add(entry);
+         addReference(env, entry);
          if(trace)
             log.trace("created env-entry: "+entry);
       }
@@ -189,7 +189,7 @@
             refs.setServiceReferences(srefs);
          }
          ServiceReferenceMetaData ref = createServiceRef(annotation, element);
-         srefs.add(ref);
+         addReference(srefs, ref);
          if(trace)
             log.trace("created service-ref: "+ref);
       }
@@ -202,7 +202,7 @@
             refs.setResourceReferences(resRefs);
          }
          ResourceReferenceMetaData ref = createResourceRef(annotation, element);
-         resRefs.add(ref);
+         addReference(resRefs, ref);
          if(trace)
             log.trace("created resource-ref: "+ref);
       }
@@ -215,7 +215,7 @@
             refs.setMessageDestinationReferences(mrefs);
          }
          MessageDestinationReferenceMetaData ref = createMessageRef(annotation, element);
-         mrefs.add(ref);
+         addReference(mrefs, ref);
          if(trace)
             log.trace("created message-destination-ref: "+ref);
       }
@@ -228,12 +228,12 @@
             refs.setResourceEnvironmentReferences(resRefs);
          }
          ResourceEnvironmentReferenceMetaData ref = createResourceEnvRef(annotation, element);
-         resRefs.add(ref);         
+         addReference(resRefs, ref);
          if(trace)
             log.trace("created resource-env-ref: "+ref);
       }
    }
-
+   
    /**
     * Get the resource name based on the AnnotatedElement
     * @param element

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ws/AbstractWebServiceRefProcessor.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ws/AbstractWebServiceRefProcessor.java	2008-08-07 09:51:41 UTC (rev 76755)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/ws/AbstractWebServiceRefProcessor.java	2008-08-07 10:17:14 UTC (rev 76756)
@@ -29,7 +29,7 @@
 import javax.xml.ws.WebServiceRef;
 
 import org.jboss.logging.Logger;
-import org.jboss.metadata.annotation.creator.AbstractFinderUser;
+import org.jboss.metadata.annotation.creator.AbstractInjectionTargetProcessor;
 import org.jboss.metadata.annotation.creator.ProcessorUtils;
 import org.jboss.metadata.annotation.finder.AnnotationFinder;
 import org.jboss.metadata.javaee.spec.ResourceInjectionTargetMetaData;
@@ -44,7 +44,7 @@
  * @version $Revision: 67548 $
  */
 public abstract class AbstractWebServiceRefProcessor<E extends AnnotatedElement>
-   extends AbstractFinderUser
+   extends AbstractInjectionTargetProcessor<E>
 {
    /** The logger. */
    private static Logger log = Logger.getLogger(AbstractWebServiceRefProcessor.class);
@@ -77,7 +77,7 @@
          log.trace("process: "+annotation+", type="+type);
       
       ServiceReferenceMetaData ref = createServiceRef(annotation, element);
-      refs.add(ref);
+      addReference(refs, ref);
       
       if(trace)
          log.trace("created service-ref: "+ref);

Added: projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/web/injection/RequestAttributeListener.java
===================================================================
--- projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/web/injection/RequestAttributeListener.java	                        (rev 0)
+++ projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/web/injection/RequestAttributeListener.java	2008-08-07 10:17:14 UTC (rev 76756)
@@ -0,0 +1,66 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.test.metadata.annotation.web.injection;
+
+import javax.annotation.Resource;
+import javax.ejb.EJB;
+import javax.jms.ConnectionFactory;
+import javax.jms.Queue;
+import javax.persistence.PersistenceContext;
+import javax.xml.ws.Service;
+import javax.xml.ws.WebServiceRef;
+
+/**
+ * 
+ * @author <a href="mailto:emuckenh at redhat.com">Emanuel Muckenhuber</a>
+ * @version $Revision$
+ */
+public class RequestAttributeListener
+{
+   @EJB(beanName="StatefulTestBean", beanInterface=StatefulIF.class)
+   private StatefulIF statefulTestBean;
+
+   @EJB(beanName="StatefulTestBean", beanInterface=StatefulLocalIF.class)
+   private StatefulLocalIF statefulTestLocalBean;
+
+   @WebServiceRef
+   private StatefulIF webServiceRef;
+   
+   @Resource
+   private String string;
+   
+   @Resource
+   private Service webService;
+   
+   @Resource
+   private ConnectionFactory connectionFactory;
+   
+   @Resource
+   private Queue queue;
+   
+   @Resource
+   private StatefulIF somethingElse;
+   
+   @PersistenceContext
+   private StatefulIF persistenceContext;
+}
+

Added: projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/web/injection/ServletFilter.java
===================================================================
--- projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/web/injection/ServletFilter.java	                        (rev 0)
+++ projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/web/injection/ServletFilter.java	2008-08-07 10:17:14 UTC (rev 76756)
@@ -0,0 +1,67 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.test.metadata.annotation.web.injection;
+
+import javax.annotation.Resource;
+import javax.ejb.EJB;
+import javax.jms.ConnectionFactory;
+import javax.jms.Queue;
+import javax.persistence.PersistenceContext;
+import javax.xml.ws.Service;
+import javax.xml.ws.WebServiceRef;
+
+/**
+ * @author <a href="mailto:emuckenh at redhat.com">Emanuel Muckenhuber</a>
+ * @version $Revision$
+ */
+public class ServletFilter
+{
+
+   @EJB(beanName="StatefulTestBean", beanInterface=StatefulIF.class)
+   private StatefulIF statefulTestBean;
+
+   @EJB(beanName="StatefulTestBean", beanInterface=StatefulLocalIF.class)
+   private StatefulLocalIF statefulTestLocalBean;
+
+   @WebServiceRef
+   private StatefulIF webServiceRef;
+   
+   @Resource
+   private String string;
+   
+   @Resource
+   private Service webService;
+   
+   @Resource
+   private ConnectionFactory connectionFactory;
+   
+   @Resource
+   private Queue queue;
+   
+   @Resource
+   private StatefulIF somethingElse;
+   
+   @PersistenceContext
+   private StatefulIF persistenceContext;
+   
+}
+

Added: projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/web/injection/StatefulIF.java
===================================================================
--- projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/web/injection/StatefulIF.java	                        (rev 0)
+++ projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/web/injection/StatefulIF.java	2008-08-07 10:17:14 UTC (rev 76756)
@@ -0,0 +1,32 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.test.metadata.annotation.web.injection;
+
+/**
+ * @author <a href="mailto:emuckenh at redhat.com">Emanuel Muckenhuber</a>
+ * @version $Revision$
+ */
+public interface StatefulIF
+{
+
+}
+

Added: projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/web/injection/StatefulLocalIF.java
===================================================================
--- projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/web/injection/StatefulLocalIF.java	                        (rev 0)
+++ projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/web/injection/StatefulLocalIF.java	2008-08-07 10:17:14 UTC (rev 76756)
@@ -0,0 +1,32 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.test.metadata.annotation.web.injection;
+
+/**
+ * @author <a href="mailto:emuckenh at redhat.com">Emanuel Muckenhuber</a>
+ * @version $Revision$
+ */
+public interface StatefulLocalIF
+{
+
+}
+

Added: projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/web/injection/TestServlet.java
===================================================================
--- projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/web/injection/TestServlet.java	                        (rev 0)
+++ projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/web/injection/TestServlet.java	2008-08-07 10:17:14 UTC (rev 76756)
@@ -0,0 +1,65 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.test.metadata.annotation.web.injection;
+
+import javax.annotation.Resource;
+import javax.ejb.EJB;
+import javax.jms.ConnectionFactory;
+import javax.jms.Queue;
+import javax.persistence.PersistenceContext;
+import javax.xml.ws.Service;
+import javax.xml.ws.WebServiceRef;
+
+/**
+ * @author <a href="mailto:emuckenh at redhat.com">Emanuel Muckenhuber</a>
+ * @version $Revision$
+ */
+public class TestServlet
+{
+   @EJB(beanName="StatefulTestBean", beanInterface=StatefulIF.class)
+   private StatefulIF statefulTestBean;
+
+   @EJB(beanName="StatefulTestBean", beanInterface=StatefulLocalIF.class)
+   private StatefulLocalIF statefulTestLocalBean;
+
+   @WebServiceRef
+   private StatefulIF webServiceRef;
+   
+   @Resource
+   private String string;
+   
+   @Resource
+   private Service webService;
+   
+   @Resource
+   private ConnectionFactory connectionFactory;
+   
+   @Resource
+   private Queue queue;
+   
+   @Resource
+   private StatefulIF somethingElse;
+   
+   @PersistenceContext
+   private StatefulIF persistenceContext;
+}
+

Added: projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/web/injection/unit/WebInjectionTargetUnitTestCase.java
===================================================================
--- projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/web/injection/unit/WebInjectionTargetUnitTestCase.java	                        (rev 0)
+++ projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/web/injection/unit/WebInjectionTargetUnitTestCase.java	2008-08-07 10:17:14 UTC (rev 76756)
@@ -0,0 +1,145 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.test.metadata.annotation.web.injection.unit;
+
+import java.lang.reflect.AnnotatedElement;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.jboss.metadata.annotation.creator.web.Web25MetaDataCreator;
+import org.jboss.metadata.annotation.finder.AnnotationFinder;
+import org.jboss.metadata.annotation.finder.DefaultAnnotationFinder;
+import org.jboss.metadata.javaee.spec.AnnotatedEJBReferencesMetaData;
+import org.jboss.metadata.javaee.spec.EnvironmentEntriesMetaData;
+import org.jboss.metadata.javaee.spec.MessageDestinationReferencesMetaData;
+import org.jboss.metadata.javaee.spec.PersistenceContextReferencesMetaData;
+import org.jboss.metadata.javaee.spec.ResourceEnvironmentReferencesMetaData;
+import org.jboss.metadata.javaee.spec.ResourceInjectionMetaData;
+import org.jboss.metadata.javaee.spec.ResourceInjectionTargetMetaData;
+import org.jboss.metadata.javaee.spec.ResourceReferencesMetaData;
+import org.jboss.metadata.javaee.spec.ServiceReferencesMetaData;
+import org.jboss.metadata.javaee.support.AbstractMappedMetaData;
+import org.jboss.metadata.web.spec.WebMetaData;
+import org.jboss.test.metadata.annotation.web.injection.RequestAttributeListener;
+import org.jboss.test.metadata.annotation.web.injection.ServletFilter;
+import org.jboss.test.metadata.annotation.web.injection.TestServlet;
+import org.jboss.test.metadata.common.PackageScanner;
+import org.jboss.test.metadata.common.ScanPackage;
+
+/**
+ * Test injection targets for web components.
+ * If multiple classes have the same reference, the injection target must not be merged.
+ * 
+ * @author <a href="mailto:emuckenh at redhat.com">Emanuel Muckenhuber</a>
+ * @version $Revision$
+ */
+public class WebInjectionTargetUnitTestCase extends TestCase
+{
+   
+   @ScanPackage("org.jboss.test.metadata.annotation.web.injection")
+   public void testInjectionTargets()
+   {
+      AnnotationFinder<AnnotatedElement> finder = new DefaultAnnotationFinder<AnnotatedElement>();
+      Web25MetaDataCreator creator = new Web25MetaDataCreator(finder);
+      Collection<Class<?>> classes = PackageScanner.loadClasses();
+      
+      WebMetaData metaData = creator.create(classes);
+      
+      assertNotNull(metaData);
+      // @Ejb
+      AnnotatedEJBReferencesMetaData annotatedRefs = metaData.getAnnotatedEjbReferences();
+      assertNotNull(annotatedRefs);
+      assertEquals(2, annotatedRefs.size());
+      assertResourceInjectionMetaData(annotatedRefs);
+      
+      // @Resource, @WebServiceRef
+      ServiceReferencesMetaData serviceRefs = metaData.getServiceReferences();
+      assertNotNull(serviceRefs);
+      // 3x WebServiceRef (using a different naming convetion)
+      assertEquals(4, serviceRefs.size());
+      // Only test the webService
+      assertInjectionTargets(serviceRefs.get("webService"), "webService");
+      
+      // @Resource
+      EnvironmentEntriesMetaData envEntries = metaData.getEnvironmentEntries();
+      assertNotNull(envEntries);
+      assertResourceInjectionMetaData(envEntries);
+      assertEquals(1, envEntries.size());
+      
+      // @Resource
+      ResourceReferencesMetaData resourceRefs = metaData.getResourceReferences();
+      assertNotNull(resourceRefs);
+      assertEquals(1, resourceRefs.size());
+      assertResourceInjectionMetaData(resourceRefs);
+      
+      // @Resource
+      MessageDestinationReferencesMetaData messageRefs = metaData.getMessageDestinationReferences();
+      assertNotNull(messageRefs);
+      assertEquals(1, messageRefs.size());
+      assertResourceInjectionMetaData(messageRefs);
+      
+      // @Resource
+      ResourceEnvironmentReferencesMetaData resourceEnvRefs = metaData.getResourceEnvironmentReferences();
+      assertNotNull(resourceEnvRefs);
+      assertEquals(1, resourceEnvRefs.size());
+      assertResourceInjectionMetaData(resourceEnvRefs);
+      
+      // @PersistenceContext
+      PersistenceContextReferencesMetaData persistenceRefs = metaData.getPersistenceContextRefs();
+      assertNotNull(persistenceRefs);
+      assertEquals(1, persistenceRefs.size());
+      assertResourceInjectionMetaData(persistenceRefs);
+      
+      
+   }
+   
+   private void assertResourceInjectionMetaData(AbstractMappedMetaData<? extends ResourceInjectionMetaData> md)
+   {
+      for(ResourceInjectionMetaData injectionMD : md)
+         assertInjectionTargets(injectionMD, injectionMD.getName());
+   }
+   
+
+   private void assertInjectionTargets(ResourceInjectionMetaData md, String name)
+   {
+      assertNotNull(md.getInjectionTargets());
+      assertEquals(3, md.getInjectionTargets().size());
+      
+      List<String> actual = new ArrayList<String>();
+      List<String> expected = new ArrayList<String>();
+      expected.add(RequestAttributeListener.class.getName());
+      expected.add(ServletFilter.class.getName());
+      expected.add(TestServlet.class.getName());
+      
+      for(ResourceInjectionTargetMetaData target : md.getInjectionTargets())
+      {
+         actual.add(target.getInjectionTargetClass());
+         assertEquals(name, target.getInjectionTargetName());
+      }
+      assertEquals(actual.size(), expected.size());
+      assertTrue(actual.containsAll(expected));
+   }  
+}
+




More information about the jboss-cvs-commits mailing list